This is an automated email from the ASF dual-hosted git repository.
lkishalmi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new c4e6ca8 Improve @modules hints - transfer open, handle hidden usages.
c4e6ca8 is described below
commit c4e6ca81b747b6ed570afa7f83fa3f4fe239f0a6
Author: Jan Lahoda <[email protected]>
AuthorDate: Sun Sep 6 08:05:50 2020 +0200
Improve @modules hints - transfer open, handle hidden usages.
---
java/java.openjdk.project/nbproject/project.xml | 3 +
.../modules/java/openjdk/jtreg/ModulesHint.java | 46 ++++++-
.../java/openjdk/jtreg/ModulesHintTest.java | 151 +++++++++++++++------
3 files changed, 157 insertions(+), 43 deletions(-)
diff --git a/java/java.openjdk.project/nbproject/project.xml
b/java/java.openjdk.project/nbproject/project.xml
index a10d8c2..b8690b2 100644
--- a/java/java.openjdk.project/nbproject/project.xml
+++ b/java/java.openjdk.project/nbproject/project.xml
@@ -379,6 +379,9 @@
<code-name-base>org.netbeans.modules.projectapi.nb</code-name-base>
<compile-dependency/>
</test-dependency>
+ <test-dependency>
+
<code-name-base>org.netbeans.modules.projectui</code-name-base>
+ </test-dependency>
</test-type>
</test-dependencies>
<public-packages/>
diff --git
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHint.java
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHint.java
index a8fa39b..1d637f1 100644
---
a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHint.java
+++
b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHint.java
@@ -29,6 +29,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Objects;
import java.util.Set;
import java.util.TreeMap;
@@ -38,6 +39,7 @@ import java.util.regex.Pattern;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.TypeMirror;
import com.sun.source.tree.CompilationUnitTree;
import com.sun.source.tree.Tree;
@@ -92,7 +94,9 @@ public class ModulesHint {
Pair<Map<String, Set<String>>, Set<Project>>
computeModulesAndPackagesAndProjects = computeModulesAndPackages(info, tags);
Map<String, Set<String>> projectDependencies =
projectDependencies(computeModulesAndPackagesAndProjects.second());
Map<String, Set<String>> expected =
normalize(computeModulesAndPackagesAndProjects.first(), projectDependencies);
- Map<String,Set<String>> actual =
normalize(readModulesAndPackages(tags).first(), projectDependencies);
+ Map<String, Set<String>> actual =
normalize(readModulesAndPackages(tags).first(), projectDependencies);
+
+ expected = transferOpen(actual, expected);
if (Objects.equals(expected, actual))
return null;
@@ -178,6 +182,29 @@ public class ModulesHint {
return modulesAndPackages;
}
+ private static Map<String, Set<String>> transferOpen(Map<String,
Set<String>> from, Map<String, Set<String>> to) {
+ for (Entry<String, Set<String>> e : from.entrySet()) {
+ for (String packAndFlags : e.getValue()) {
+ int colon = packAndFlags.indexOf(':');
+ if (colon == (-1))
+ continue;
+ String pack = packAndFlags.substring(0, colon);
+ String flags = packAndFlags.substring(colon + 1);
+ if ("open".equals(flags) || "+open".equals(flags)) {
+ Set<String> targetPackages =
to.computeIfAbsent(e.getKey(), d -> new HashSet<>());
+ if (targetPackages.contains(pack)) {
+ targetPackages.remove(pack);
+ targetPackages.add(pack + ":+open");
+ } else {
+ targetPackages.add(pack + ":open");
+ }
+ }
+ }
+ }
+
+ return to;
+ }
+
static Pair<Map<String, Set<String>>, Set<Project>>
computeModulesAndPackages(final CompilationInfo info, Result tags) {
Map<String, Set<String>> module2UsedUnexportedPackages = new
HashMap<>();
Set<TypeElement> seenClasses = new HashSet<>();
@@ -228,8 +255,21 @@ public class ModulesHint {
if (tree == null)
return null;
- Element el = info.getTrees().getElement(new
TreePath(getCurrentPath(), tree));
+ TreePath path = new TreePath(getCurrentPath(), tree);
+ Element el = info.getTrees().getElement(path);
+ handleElement(el);
+
+ TypeMirror type = info.getTrees().getTypeMirror(path);
+
+ if (type != null) {
+ handleElement(info.getTypes().asElement(type));
+ }
+
+ return super.scan(tree, p);
+ }
+
+ private void handleElement(Element el) {
if (el != null && el.getKind() != ElementKind.PACKAGE &&
el.getKind() != ElementKind.OTHER) {
TypeElement outermost =
info.getElementUtilities().outermostTypeElement(el);
if (outermost != null) {
@@ -238,8 +278,6 @@ public class ModulesHint {
}
} else ;//XXX: array .length!
}
-
- return super.scan(tree, p);
}
}.scan(cut, null);
diff --git
a/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHintTest.java
b/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHintTest.java
index 64019b5..814d9ea 100644
---
a/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHintTest.java
+++
b/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/jtreg/ModulesHintTest.java
@@ -65,14 +65,14 @@ public class ModulesHintTest extends NbTestCase {
public void testSimpleModules() throws Exception {
doTest("/**@test\n" +
- " * |@modules| java.compiler/com.sun.tools.javac.file\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.file\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
@@ -81,16 +81,16 @@ public class ModulesHintTest extends NbTestCase {
public void testMultiplePackages() throws Exception {
doTest("/**@test\n" +
- " * |@modules| java.compiler/com.sun.tools.javac.file\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.file\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
" com.sun.tools.javac.util.List l;\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
@@ -101,15 +101,15 @@ public class ModulesHintTest extends NbTestCase {
public void testLibraries() throws Exception {
doTest("/**@test\n" +
" * @library /lib\n" +
- " * |@modules| java.compiler/com.sun.tools.javac.file\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.file\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" * @build ToolBox Test\n" +
" */\n" +
"public class Test {\n" +
"}\n",
"/**@test\n" +
" * @library /lib\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
" * @build ToolBox Test\n" +
" */\n" +
"public class Test {\n" +
@@ -123,7 +123,7 @@ public class ModulesHintTest extends NbTestCase {
" com.sun.tools.javac.main.Main m;\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
@@ -141,7 +141,7 @@ public class ModulesHintTest extends NbTestCase {
" }\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.main.Main m;\n" +
@@ -155,15 +155,15 @@ public class ModulesHintTest extends NbTestCase {
public void testImplicit() throws Exception {
doTest("/**@test\n" +
" * @library /lib\n" +
- " * |@modules| java.compiler/com.sun.tools.javac.file\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.file\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" */\n" +
"public class Test {\n" +
" ToolBox t;\n" +
"}\n",
"/**@test\n" +
" * @library /lib\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
" */\n" +
"public class Test {\n" +
" ToolBox t;\n" +
@@ -173,7 +173,7 @@ public class ModulesHintTest extends NbTestCase {
public void testInMoreThanOne() throws Exception {
doTest("/**@test\n" +
" * @library /lib\n" +
- " * |@modules| java.compiler/com.sun.tools.javac.file\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.file\n" +
" * @build ToolBox Test\n" +
" */\n" +
"public class Test {\n" +
@@ -181,8 +181,8 @@ public class ModulesHintTest extends NbTestCase {
"}\n",
"/**@test\n" +
" * @library /lib\n" +
- " * @modules java.compiler/com.sun.tools.javac.main\n" +
- " * java.compiler/com.sun.tools.javac.util\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
+ " * jdk.compiler/com.sun.tools.javac.util\n" +
" * @build ToolBox Test\n" +
" */\n" +
"public class Test {\n" +
@@ -197,7 +197,7 @@ public class ModulesHintTest extends NbTestCase {
" com.sun.tools.javac.Main m;\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler\n" +
+ " * @modules jdk.compiler\n" +
" */\n" +
"public class Test {\n" +
" com.sun.tools.javac.Main m;\n" +
@@ -242,7 +242,7 @@ public class ModulesHintTest extends NbTestCase {
" com.sun.tools.javac.Main m;\n" +
"}\n",
"/**@test\n" +
- " * @modules java.compiler\n" +
+ " * @modules jdk.compiler\n" +
" */\n" +
"public class Test {\n" +
" void run(Runnable r) {;\n" +
@@ -252,35 +252,113 @@ public class ModulesHintTest extends NbTestCase {
"}\n");
}
+ public void testHiddenUse() throws Exception {
+ doTest("/**|@test|\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " m.get().toString();\n" +
+ " }\n" +
+ " com.sun.tools.javac.main.Main m;\n" +
+ "}\n",
+ "/**@test\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main\n" +
+ " * jdk.compiler/com.sun.tools.javac.test\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " m.get().toString();\n" +
+ " }\n" +
+ " com.sun.tools.javac.main.Main m;\n" +
+ "}\n");
+ }
+
+ public void testTransferOpen() throws Exception {
+ doTest("/**@test\n" +
+ " * |@modules| jdk.compiler/com.sun.tools.javac.main:open\n" +
+ " * jdk.compiler/com.sun.tools.javac.test:+open\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " m.get().toString();\n" +
+ " }\n" +
+ " com.sun.tools.javac.main.Main m;\n" +
+ "}\n",
+ "/**@test\n" +
+ " * @modules jdk.compiler/com.sun.tools.javac.main:+open\n" +
+ " * jdk.compiler/com.sun.tools.javac.test:+open\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " m.get().toString();\n" +
+ " }\n" +
+ " com.sun.tools.javac.main.Main m;\n" +
+ "}\n");
+ }
+
+ public void testIgnoreUnnormalized() throws Exception {
+ doTest("/**@test\n" +
+ " * @modules java.compiler\n" +
+ " * jdk.compiler\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " }\n" +
+ " com.sun.tools.javac.Main m;\n" +
+ "}\n",
+ "/**@test\n" +
+ " * @modules java.compiler\n" +
+ " * jdk.compiler\n" +
+ " */\n" +
+ "public class Test {\n" +
+ " void run(Runnable r) {;\n" +
+ " }\n" +
+ " com.sun.tools.javac.Main m;\n" +
+ "}\n");
+ }
+
private void doTest(String originalTest, final String expected) throws
Exception {
createData("jdk/src/java.base/share/classes/module-info.java", "module
java.base { exports java.lang; }");
createData("jdk/src/java.base/share/classes/java/lang/Object.java",
"package java.lang; public class Object {}");
createData("jdk/src/java.instrument/share/classes/module-info.java",
"module java.instrument { exports java.lang.instrument; }");
createData("jdk/src/java.instrument/share/classes/java/lang/instrument/Instrumentation.java",
"package java.lang.instrument; public class Instrumentation {}");
createData("langtools/src/java.compiler/share/classes/module-info.java",
"module java.compiler { }");
-
createData("langtools/src/jdk.compiler/share/classes/module-info.java", "module
jdk.compiler { exports com.sun.tools.javac; exports com.sun.tools.javac.main to
jdk.compiler;}");
-
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java",
"package com.sun.tools.javac; public class Main {}");
-
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java",
"package com.sun.tools.javac.main; public class Main {}");
+
createData("langtools/src/jdk.compiler/share/classes/module-info.java", "module
jdk.compiler { requires java.compiler; exports com.sun.tools.javac; exports
com.sun.tools.javac.main to jdk.jshell;}");
+
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/Main.java",
"package com.sun.tools.javac; public class Main { }");
+
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java",
"package com.sun.tools.javac.main; public class Main { public
com.sun.tools.javac.test.Test get() { return null; } }");
+
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/test/Test.java",
"package com.sun.tools.javac.test; public class Test { public int get() {
return 0; } }");
createData("langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/util/List.java",
"package com.sun.tools.javac.util; public class List {}");
- createData("langtools/src/jdk.jshell/share/classes/module-info.java",
"module jdk.jshell { requires java.compiler; exports jdk.jshell; }");
+ createData("langtools/src/jdk.jshell/share/classes/module-info.java",
"module jdk.jshell { requires java.compiler; requires jdk.compiler; exports
jdk.jshell; }");
createData("langtools/src/jdk.jshell/share/classes/jdk/jshell/JShell.java",
"package jdk.jshell; public class JShell {}");
createData("langtools/test/lib/ToolBox.java", "public class ToolBox {
com.sun.tools.javac.main.Main m; }");
createData("langtools/test/TEST.ROOT", "");
String[] originalPart = originalTest.split("\\|");
- assertEquals(3, originalPart.length);
-
- final int warningStart = originalPart[0].length();
- final int warningEnd = originalPart[0].length() +
originalPart[1].length();
+ String realCode;
+ final int warningStart;
+ final int warningEnd;
+
+ if (originalPart.length == 3) {
+ realCode = originalPart[0] + originalPart[1] + originalPart[2];
+ warningStart = originalPart[0].length();
+ warningEnd = originalPart[0].length() + originalPart[1].length();
+ } else {
+ assertEquals(1, originalPart.length);
+ realCode = originalTest;
+ warningStart = -1;
+ warningEnd = -1;
+ }
- FileObject testTest = createData("langtools/test/feature/Test.java",
originalPart[0] + originalPart[1] + originalPart[2]);
+ FileObject testTest = createData("langtools/test/feature/Test.java",
realCode);
Project instrument = FileOwnerQuery.getOwner(FileUtil.toFileObject(new
File(getWorkDir(), "jdk/src/java.instrument")));
Project javaCompiler =
FileOwnerQuery.getOwner(FileUtil.toFileObject(new File(getWorkDir(),
"langtools/src/java.compiler")));
+ Project jdkCompiler =
FileOwnerQuery.getOwner(FileUtil.toFileObject(new File(getWorkDir(),
"langtools/src/jdk.compiler")));
Project jdkJShell = FileOwnerQuery.getOwner(FileUtil.toFileObject(new
File(getWorkDir(), "langtools/src/jdk.jshell")));
- OpenProjects.getDefault().open(new Project[] {instrument,
javaCompiler, jdkJShell}, true);
+ OpenProjects.getDefault().open(new Project[] {instrument,
javaCompiler, jdkCompiler, jdkJShell}, true);
+ OpenProjects.getDefault().openProjects().get();
org.netbeans.modules.parsing.impl.indexing.RepositoryUpdater.getDefault().start(true);
@@ -298,8 +376,11 @@ public class ModulesHintTest extends NbTestCase {
public void run(CompilationController cc) throws Exception {
cc.toPhase(JavaSource.Phase.UP_TO_DATE);
Pair<Fix, int[]> change = ModulesHint.computeChange(cc);
- if (change == null)
+ if (change == null) {
+ assertEquals(-1, warningStart);
+ assertEquals(-1, warningEnd);
return ;
+ }
fix[0] = change.first();
assertEquals(warningStart, change.second()[0]);
assertEquals(warningEnd, change.second()[1]);
@@ -363,12 +444,4 @@ public class ModulesHintTest extends NbTestCase {
}
- public static Test suite() {
- //XXX: the other modules don't pass currently, need to investigate!
- TestSuite ts = new TestSuite();
-
- ts.addTest(new ModulesHintTest("testNoModulesNeeded"));
-
- return ts;
- }
}
---------------------------------------------------------------------
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