Skip to content

Commit 91fadb6

Browse files
authored
Merge pull request #44 from scijava/fix-tools-commands
Fix source code and javadoc lookup functions
2 parents 5d5eacb + a05d7da commit 91fadb6

File tree

4 files changed

+92
-30
lines changed

4 files changed

+92
-30
lines changed

pom.xml

+1-8
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>org.scijava</groupId>
77
<artifactId>pom-scijava</artifactId>
8-
<version>28.0.0</version>
8+
<version>29.2.0</version>
99
<relativePath />
1010
</parent>
1111

@@ -146,13 +146,6 @@
146146

147147
<!-- NB: Deploy releases to the SciJava Maven repository. -->
148148
<releaseProfiles>deploy-to-scijava</releaseProfiles>
149-
150-
<miglayout-swing.version>5.2</miglayout-swing.version>
151-
<scijava-search.version>0.7.0</scijava-search.version>
152-
<scijava-ui-awt.version>0.1.7</scijava-ui-awt.version>
153-
<scijava-ui-swing.version>0.13.1</scijava-ui-swing.version>
154-
<scijava-common.version>2.83.1</scijava-common.version>
155-
<parsington.version>2.0.0</parsington.version>
156149
</properties>
157150

158151
<repositories>

src/main/java/org/scijava/ui/swing/script/EditorPane.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,7 @@ protected void setLanguage(final ScriptLanguage language,
500500
}
501501
catch (final NullPointerException exc) {
502502
// NB: Avoid possible NPEs in RSyntaxTextArea code.
503-
// See: http://fiji.sc/bugzilla/show_bug.cgi?id=1181
503+
// See: https://fiji.sc/bug/1181.html
504504
log.debug(exc);
505505
}
506506

src/main/java/org/scijava/ui/swing/script/FileFunctions.java

+25-3
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
import java.util.Iterator;
4848
import java.util.List;
4949
import java.util.Map;
50+
import java.util.Objects;
5051
import java.util.jar.JarEntry;
5152
import java.util.jar.JarFile;
5253
import java.util.regex.Matcher;
@@ -65,7 +66,10 @@
6566
import org.scijava.util.AppUtils;
6667
import org.scijava.util.FileUtils;
6768
import org.scijava.util.LineOutputStream;
69+
import org.scijava.util.Manifest;
70+
import org.scijava.util.POM;
6871
import org.scijava.util.ProcessUtils;
72+
import org.scijava.util.Types;
6973

7074
/**
7175
* TODO
@@ -152,17 +156,35 @@ public boolean isBinaryFile(final String path) {
152156
}
153157

154158
/**
155-
* Make a sensible effort to get the path of the source for a class.
159+
* @deprecated Use {@link #getSourceURL(String)} instead.
160+
* @throws ClassNotFoundException
156161
*/
157-
public String getSourcePath(final String className)
162+
@Deprecated
163+
public String getSourcePath(
164+
@SuppressWarnings("unused") final String className)
158165
throws ClassNotFoundException
159166
{
160167
// move updater's stuff into ij-core and re-use here
161168
throw new RuntimeException("TODO");
162169
}
163170

164171
public String getSourceURL(final String className) {
165-
return "http://fiji.sc/" + className.replace('.', '/') + ".java";
172+
final Class<?> c = Types.load(className, false);
173+
final POM pom = POM.getPOM(c);
174+
final String scmPath = pom.getSCMURL();
175+
if (scmPath == null || scmPath.isEmpty()) return null;
176+
final String branch;
177+
final String scmTag = pom.getSCMTag();
178+
if (scmTag == null || scmTag.isEmpty() || Objects.equals(scmTag, "HEAD")) {
179+
final Manifest m = Manifest.getManifest(c);
180+
final String commit = m == null ? null : m.getImplementationBuild();
181+
branch = commit == null || commit.isEmpty() ? "master" : commit;
182+
}
183+
else branch = scmTag;
184+
185+
final String prefix = scmPath.endsWith("/") ? scmPath : scmPath + "/";
186+
return prefix + "blob/" + branch + "/src/main/java/" + //
187+
className.replace('.', '/') + ".java";
166188
}
167189

168190
protected static Map<String, List<String>> class2source;

src/main/java/org/scijava/ui/swing/script/TextEditor.java

+65-18
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,8 @@
162162
import org.scijava.ui.swing.script.commands.KillScript;
163163
import org.scijava.util.FileUtils;
164164
import org.scijava.util.MiscUtils;
165+
import org.scijava.util.POM;
166+
import org.scijava.util.Types;
165167
import org.scijava.widget.FileWidget;
166168

167169
/**
@@ -1402,22 +1404,14 @@ else if (source == openMacroFunctions) try {
14021404
else if (source == extractSourceJar) extractSourceJar();
14031405
else if (source == openSourceForClass) {
14041406
final String className = getSelectedClassNameOrAsk();
1405-
if (className != null) try {
1406-
final String path = new FileFunctions(this).getSourcePath(className);
1407-
if (path != null) open(new File(path));
1408-
else {
1407+
if (className != null) {
1408+
try {
14091409
final String url = new FileFunctions(this).getSourceURL(className);
1410-
try {
1411-
platformService.open(new URL(url));
1412-
}
1413-
catch (final Throwable e) {
1414-
handleException(e);
1415-
}
1410+
platformService.open(new URL(url));
1411+
}
1412+
catch (final Throwable e) {
1413+
handleException(e);
14161414
}
1417-
}
1418-
catch (final ClassNotFoundException e) {
1419-
log.debug(e);
1420-
error("Could not open source for class " + className);
14211415
}
14221416
}
14231417
/* TODO
@@ -2606,10 +2600,63 @@ public void openHelp(final String className) {
26062600
* @param className
26072601
* @param withFrames
26082602
*/
2609-
public void openHelp(final String className, final boolean withFrames) {
2610-
if (className == null) {
2611-
// FIXME: This cannot be right.
2612-
getSelectedClassNameOrAsk();
2603+
public void openHelp(String className, final boolean withFrames) {
2604+
if (className == null) className = getSelectedClassNameOrAsk();
2605+
if (className == null) return;
2606+
final Class<?> c = Types.load(className, false);
2607+
2608+
final String path = (withFrames ? "index.html?" : "") + //
2609+
className.replace('.', '/') + ".html";
2610+
2611+
final String url;
2612+
2613+
if (className.startsWith("java.") || className.startsWith("javax.")) {
2614+
// Core Java class -- use javadoc.scijava.org/Java<#> link.
2615+
final String javaVersion = System.getProperty("java.version");
2616+
final String majorVersion;
2617+
if (javaVersion.startsWith("1.")) {
2618+
majorVersion = javaVersion.substring(2, javaVersion.indexOf('.', 2));
2619+
}
2620+
else majorVersion = javaVersion.substring(0, javaVersion.indexOf('.'));
2621+
url = "https://javadoc.scijava.org/Java" + majorVersion + "/" + path;
2622+
}
2623+
else {
2624+
// Third party library -- look for a Maven POM identifying it.
2625+
final POM pom = POM.getPOM(c);
2626+
if (pom == null) {
2627+
throw new IllegalArgumentException(//
2628+
"Unknown origin for class " + className);
2629+
}
2630+
final String releaseProfiles = pom.cdata("//properties/releaseProfiles");
2631+
final boolean scijavaRepo = "deploy-to-scijava".equals(releaseProfiles);
2632+
if (scijavaRepo) {
2633+
// Use javadoc.scijava.org -- try to figure out which project.
2634+
// Maybe some day, we can bake this information into the POM.
2635+
final String project;
2636+
final String g = pom.getGroupId();
2637+
if ("net.imagej".equals(g)) {
2638+
project = "ij".equals(pom.getArtifactId()) ? "ImageJ1" : "ImageJ";
2639+
}
2640+
else if ("io.scif".equals(g)) project = "SCIFIO";
2641+
else if ("net.imglib2".equals(g)) project = "ImgLib2";
2642+
else if ("org.bonej".equals(g)) project = "BoneJ";
2643+
else if ("org.scijava".equals(g)) project = "SciJava";
2644+
else if ("sc.fiji".equals(g)) project = "Fiji";
2645+
else project = "Java";
2646+
url = "https://javadoc.scijava.org/" + project + "/" + path;
2647+
}
2648+
else {
2649+
// Assume Maven Central -- use javadoc.io.
2650+
url = "https://javadoc.io/static/" + pom.getGroupId() + "/" + //
2651+
pom.getArtifactId() + "/" + pom.getVersion() + "/" + path;
2652+
}
2653+
}
2654+
2655+
try {
2656+
platformService.open(new URL(url));
2657+
}
2658+
catch (final Throwable e) {
2659+
handleException(e);
26132660
}
26142661
}
26152662

0 commit comments

Comments
 (0)