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

Reply via email to