|
47 | 47 | import java.util.Iterator;
|
48 | 48 | import java.util.List;
|
49 | 49 | import java.util.Map;
|
| 50 | +import java.util.Objects; |
50 | 51 | import java.util.jar.JarEntry;
|
51 | 52 | import java.util.jar.JarFile;
|
52 | 53 | import java.util.regex.Matcher;
|
|
65 | 66 | import org.scijava.util.AppUtils;
|
66 | 67 | import org.scijava.util.FileUtils;
|
67 | 68 | import org.scijava.util.LineOutputStream;
|
| 69 | +import org.scijava.util.Manifest; |
| 70 | +import org.scijava.util.POM; |
68 | 71 | import org.scijava.util.ProcessUtils;
|
| 72 | +import org.scijava.util.Types; |
69 | 73 |
|
70 | 74 | /**
|
71 | 75 | * TODO
|
@@ -165,7 +169,22 @@ public String getSourcePath(
|
165 | 169 | }
|
166 | 170 |
|
167 | 171 | public String getSourceURL(final String className) {
|
168 |
| - 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"; |
169 | 188 | }
|
170 | 189 |
|
171 | 190 | protected static Map<String, List<String>> class2source;
|
|
0 commit comments