This is an automated email from the ASF dual-hosted git repository.
jlahoda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 4f168de For multi-release modular jars, use the newest module-info
available when detecting module name.
4f168de is described below
commit 4f168de17f3936ae5c5b2eab694b60b984037066
Author: Jan Lahoda <[email protected]>
AuthorDate: Thu Oct 4 07:31:39 2018 +0200
For multi-release modular jars, use the newest module-info available when
detecting module name.
---
.../netbeans/modules/java/source/ModuleNames.java | 23 ++++++++++++-
.../modules/java/source/ModuleNamesTest.java | 39 ++++++++++++++++++++++
2 files changed, 61 insertions(+), 1 deletion(-)
diff --git
a/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
b/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
index 8073c10..b4b7562 100644
---
a/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
+++
b/java/java.source.base/src/org/netbeans/modules/java/source/ModuleNames.java
@@ -129,7 +129,28 @@ public final class ModuleNames {
final FileObject root = URLMapper.findFileObject(rootUrl);
if (root != null) {
final FileObject file = FileUtil.getArchiveFile(root);
- final FileObject moduleInfo =
root.getFileObject(FileObjects.MODULE_INFO, FileObjects.CLASS);
+ FileObject moduleInfo = null;
+ //try versioned module-infos, as the source/target level is
not available here,
+ //use the most up-to-date version:
+ FileObject versions = root.getFileObject("META-INF/versions");
+ if (versions != null) {
+ int version = -1;
+ for (FileObject c : versions.getChildren()) {
+ try {
+ int currentVersion =
Integer.parseInt(c.getNameExt());
+ FileObject currentMI =
c.getFileObject(FileObjects.MODULE_INFO, FileObjects.CLASS);
+ if (currentVersion > version && currentMI != null)
{
+ moduleInfo = currentMI;
+ version = currentVersion;
+ }
+ } catch (NumberFormatException ex) {
+ //ok, ignore
+ }
+ }
+ }
+ if (moduleInfo == null) {
+ moduleInfo = root.getFileObject(FileObjects.MODULE_INFO,
FileObjects.CLASS);
+ }
if (moduleInfo != null) {
try {
final String modName = readModuleName(moduleInfo);
diff --git
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/ModuleNamesTest.java
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/ModuleNamesTest.java
index 1fd092e..d177add 100644
---
a/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/ModuleNamesTest.java
+++
b/java/java.source.base/test/unit/src/org/netbeans/modules/java/source/ModuleNamesTest.java
@@ -432,6 +432,45 @@ public class ModuleNamesTest extends NbTestCase {
}
}
+ public void testVersionedModuleInfo() throws IOException {
+ final TraceHandler th = TraceHandler.register();
+ try {
+ FileObject mod = FileUtil.getArchiveRoot(jar(
+ wd,
+ "dist.jar", //NOI18N
+ () -> Collections.singleton(Pair.of(
+ "META-INF/versions/9/module-info.class",
//NOI18N
+ moduleInfoClz(moduleInfoJava("org.me.app",
Collections.emptyList())).get())) //NOI18N
+ ).get());
+ String moduleName = names.getModuleName(mod.toURL(), false);
+ assertEquals("org.me.app", moduleName); //NOI18N
+ assertTrue(th.isCalculated());
+ th.reset();
+ mod = FileUtil.getArchiveRoot(jar(
+ wd,
+ "dist2.jar", //NOI18N
+ () -> Arrays.asList(Pair.of(
+ "META-INF/versions/9/module-info.class",
//NOI18N
+ moduleInfoClz(moduleInfoJava("org.me.app",
Collections.emptyList())).get()), //NOI18N
+ Pair.of(
+ "META-INF/versions/12/module-info.class",
//NOI18N
+ moduleInfoClz(moduleInfoJava("org.me.app2",
Collections.emptyList())).get()), //NOI18N
+ Pair.of(
+ "META-INF/versions/broken/module-info.class",
//NOI18N
+ moduleInfoClz(moduleInfoJava("broken",
Collections.emptyList())).get()), //NOI18N
+ Pair.of(
+ "module-info.class", //NOI18N
+ moduleInfoClz(moduleInfoJava("old",
Collections.emptyList())).get())) //NOI18N
+ ).get());
+ moduleName = names.getModuleName(mod.toURL(), false);
+ assertEquals("org.me.app2", moduleName); //NOI18N
+ assertTrue(th.isCalculated());
+ th.reset();
+ } finally {
+ th.unregister();
+ }
+ }
+
public void testPlatform() throws Exception {
final TraceHandler th = TraceHandler.register();
final URL JAVA_BASE = new
URL("nbjrt:file:/Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home/!/modules/java.base/");
//NOI18N
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists