This is an automated email from the ASF dual-hosted git repository.

neilcsmith 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 4f05b9a  [NETBEANS-2914]: Elements.getPackageElement works 
better/safer when a ModuleSymbol is given.
     new 779a798  Merge pull request #1529 from jlahoda/NETBEANS-2914
4f05b9a is described below

commit 4f05b9a12d90b018f8f7e40d786dcebc85be8da0
Author: Jan Lahoda <[email protected]>
AuthorDate: Tue Sep 24 08:06:45 2019 +0200

    [NETBEANS-2914]: Elements.getPackageElement works better/safer when a 
ModuleSymbol is given.
---
 .../java/editor/imports/ComputeImports.java        |   5 +-
 .../java/editor/imports/ComputeImportsTest.java    | 197 +++++++++++++++++----
 2 files changed, 170 insertions(+), 32 deletions(-)

diff --git 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
index d0ec54a..03891c3 100644
--- 
a/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
+++ 
b/java/java.editor/src/org/netbeans/modules/java/editor/imports/ComputeImports.java
@@ -630,7 +630,10 @@ public final class ComputeImports {
                     if (type != null && type.getKind() == TypeKind.PACKAGE) {
                         //does the package really exists?
                         String s = ((PackageElement) 
el).getQualifiedName().toString();
-                        if (info.getElements().getPackageElement(s) == null) {
+                        Element thisPack = info.getTrees().getElement(new 
TreePath(info.getCompilationUnit()));
+                        ModuleElement module = thisPack != null ? 
info.getElements().getModuleOf(thisPack) : null;
+                        PackageElement pack = module != null ? 
info.getElements().getPackageElement(module, s) : 
info.getElements().getPackageElement(s);
+                        if (pack == null) {
                             //probably situation like:
                             //Map.Entry e;
                             //where Map is not imported
diff --git 
a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/imports/ComputeImportsTest.java
 
b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/imports/ComputeImportsTest.java
index b68de31..423a066 100644
--- 
a/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/imports/ComputeImportsTest.java
+++ 
b/java/java.editor/test/unit/src/org/netbeans/modules/java/editor/imports/ComputeImportsTest.java
@@ -18,9 +18,20 @@
  */
 package org.netbeans.modules.java.editor.imports;
 
+import java.io.BufferedInputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
 import java.io.PrintStream;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -30,6 +41,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.regex.Pattern;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ExecutableElement;
@@ -82,6 +94,11 @@ public class ComputeImportsTest extends NbTestCase {
         "com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections"
     }));
     
+    private static final List<Pattern> IGNORE_PATTERNS = 
Collections.unmodifiableList(Arrays.asList(
+        Pattern.compile("jdk\\..*\\.internal\\..*"),
+        Pattern.compile("org\\.graalvm\\..*")
+    ));
+
     private FileObject testSource;
     private JavaSource js;
     private CompilationInfo info;
@@ -217,7 +234,61 @@ public class ComputeImportsTest extends NbTestCase {
         doTest("TestNotImportFieldAsClass");
     }
 
-    private void prepareTest(String capitalizedName, String sourceLevel) 
throws Exception {
+    public void testJIRA2914a() throws Exception {
+        doTest("test/Test",
+               "11",
+               Arrays.asList(
+                   new FileData("test/Test.java",
+                                "package test;\n" +
+                                "import io.test.IO;\n" +
+                                "public class Test {\n" +
+                                "    IO i1;\n" +
+                                "    io.test.IO i2;\n" +
+                                "}\n"),
+                   new FileData("io/test/IO.java",
+                                "package io.test;\n" +
+                                "public class IO {\n" +
+                                "    public static IO io() { return null; }\n" 
+
+                                "}\n")
+               ),
+               "",
+               "");
+    }
+
+    public void testJIRA2914b() throws Exception {
+        doTest("test/Test",
+               "11",
+               Arrays.asList(
+                   new FileData("test/Test.java",
+                                "package test;\n" +
+                                "import io.test.IO;\n"),
+                   new FileData("io/test/IO.java",
+                                "package io.test;\n" +
+                                "public class IO {\n" +
+                                "    public static IO io() { return null; }\n" 
+
+                                "}\n")
+               ),
+               "",
+               "");
+    }
+
+    public void testJIRA2914c() throws Exception {
+        doTest("test/Test",
+               "11",
+               Arrays.asList(
+                   new FileData("test/Test.java",
+                                "import io.test.IO;\n"),
+                   new FileData("io/test/IO.java",
+                                "package io.test;\n" +
+                                "public class IO {\n" +
+                                "    public static IO io() { return null; }\n" 
+
+                                "}\n")
+               ),
+               "",
+               "");
+    }
+
+    private void prepareTest(String capitalizedName, String sourceLevel, 
Iterable<FileData> files) throws Exception {
         FileObject workFO = FileUtil.toFileObject(getWorkDir());
         
         assertNotNull(workFO);
@@ -225,35 +296,22 @@ public class ComputeImportsTest extends NbTestCase {
         FileObject sourceRoot = workFO.createFolder("src");
         FileObject buildRoot  = workFO.createFolder("build");
 //        FileObject cache = workFO.createFolder("cache");
-        FileObject packageRoot = FileUtil.createFolder(sourceRoot, 
"org/netbeans/modules/java/editor/imports/data");
         
         SourceUtilsTestUtil.prepareTest(sourceRoot, buildRoot, cacheFO);
         
-        String testPackagePath = 
"org/netbeans/modules/java/editor/imports/data/";
-        File   testPackageFile = new File(getDataDir(), testPackagePath);
-        
-        String[] names = testPackageFile.list(new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                if (name.endsWith(".java"))
-                    return true;
-                
-                return false;
+        for (FileData fd : files) {
+            FileObject target = FileUtil.createData(sourceRoot, fd.fileName);
+            try (OutputStream out = target.getOutputStream();
+                 Writer w = new OutputStreamWriter(out, 
StandardCharsets.UTF_8)) {
+                w.write(fd.content);
             }
-        });
-        
-        String[] files = new String[names.length];
-        
-        for (int cntr = 0; cntr < files.length; cntr++) {
-            files[cntr] = testPackagePath + names[cntr];
         }
         
-        TestUtil.copyFiles(getDataDir(), FileUtil.toFile(sourceRoot), files);
-        
-        packageRoot.refresh();
+        FileUtil.refreshAll();
         
         SourceUtilsTestUtil.compileRecursively(sourceRoot);
         
-        testSource = packageRoot.getFileObject(capitalizedName + ".java");
+        testSource = sourceRoot.getFileObject(capitalizedName + ".java");
         
         assertNotNull(testSource);
         
@@ -268,7 +326,8 @@ public class ComputeImportsTest extends NbTestCase {
         assertNotNull(info);
     }
     
-    private void dump(PrintStream out, Map<String, List<Element>> set, 
Set<String> masks) {
+    private String dump(Map<String, List<Element>> set) {
+        StringWriter out = new StringWriter();
         List<String> keys = new LinkedList<String>(set.keySet());
         
         Collections.sort(keys);
@@ -304,14 +363,17 @@ public class ComputeImportsTest extends NbTestCase {
                     fqn = fqnSB.toString();
                 }
                 
-                if (!masks.contains(fqn))
+                if (!IGNORE_CLASSES.contains(fqn) && 
IGNORE_PATTERNS.stream().noneMatch(p -> p.matcher(fqn).matches())) {
                     fqns.add(fqn);
+                }
             }
             
             Collections.sort(fqns);
             
-            out.println(key + ":" + fqns.toString());
+            out.write(key + ":" + fqns.toString() + "\n");
         }
+
+        return out.toString();
     }
     
     private void doTest(String name) throws Exception {
@@ -319,8 +381,48 @@ public class ComputeImportsTest extends NbTestCase {
     }
     
     private void doTest(String name, String sourceLevel) throws Exception {
-        prepareTest(name, sourceLevel);
+        String testPackagePath = 
"org/netbeans/modules/java/editor/imports/data/";
+        File   testPackageFile = new File(getDataDir(), testPackagePath);
+        List<FileData> files = new ArrayList<>();
         
+        String[] names = testPackageFile.list(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                if (name.endsWith(".java"))
+                    return true;
+
+                return false;
+            }
+        });
+
+        for (int cntr = 0; cntr < names.length; cntr++) {
+            files.add(new FileData(testPackagePath + names[cntr],
+                                   readContent(new File(testPackageFile, 
names[cntr]))));
+        }
+
+
+        doTest(testPackagePath + name,
+               sourceLevel,
+               files,
+               readContent(getGoldenFile(getName() + "-unfiltered.pass")),
+               readContent(getGoldenFile(getName() + "-filtered.pass")));
+    }
+
+    private String readContent(File file) throws IOException {
+        try (InputStream in = new BufferedInputStream(new 
FileInputStream(file));
+             Reader r = new InputStreamReader(in, StandardCharsets.UTF_8)) {
+            StringWriter sw = new StringWriter();
+            int read;
+
+            while ((read = r.read()) != (-1)) {
+                sw.write(read);
+            }
+            return sw.toString();
+        }
+    }
+
+    private void doTest(String name, String sourceLevel, Iterable<FileData> 
files, String unfilteredPass, String filteredPass) throws Exception {
+        prepareTest(name, sourceLevel, files);
+
         DataObject testDO = DataObject.find(testSource);
         EditorCookie ec = testDO.getCookie(EditorCookie.class);
         
@@ -330,12 +432,45 @@ public class ComputeImportsTest extends NbTestCase {
         
         Pair<Map<String, List<Element>>, Map<String, List<Element>>> 
candidates = new ComputeImports(info).computeCandidates();
         
-        dump(getLog(getName() + "-unfiltered.ref"), candidates.b, 
IGNORE_CLASSES);
-        dump(getLog(getName() + "-filtered.ref"), candidates.a, 
IGNORE_CLASSES);
+        assertEquals(unfilteredPass, dump(candidates.b));
+        assertEquals(filteredPass, dump(candidates.a));
+    }
+    
+    private static final class FileData {
+        public final String fileName;
+        public final String content;
 
-        String version = System.getProperty("java.specification.version") + 
"/";
-        
-        compareReferenceFiles(getName() + "-unfiltered.ref", version + 
getName() + "-unfiltered.pass", getName() + "-unfiltered.diff");
-        compareReferenceFiles(getName() + "-filtered.ref", version + getName() 
+ "-filtered.pass", getName() + "-filtered.diff");
+        public FileData(String fileName, String content) {
+            this.fileName = fileName;
+            this.content = content;
+        }
+
+    }
+
+    //from CompletionTestBaseBase:
+    private   final String goldenFilePath = 
"org/netbeans/modules/java/editor/imports/ComputeImportsTest";
+    public File getGoldenFile(String goldenFileName) {
+        File goldenFile = null;
+        String version = System.getProperty("java.specification.version");
+        for (String variant : computeVersionVariantsFor(version)) {
+            goldenFile = new File(getDataDir(), "/goldenfiles/" + 
goldenFilePath + "/" + variant + "/" + goldenFileName);
+            if (goldenFile.exists())
+                break;
+        }
+        assertNotNull(goldenFile);
+        return goldenFile;
+    }
+
+    private List<String> computeVersionVariantsFor(String version) {
+        int dot = version.indexOf('.');
+        version = version.substring(dot + 1);
+        int versionNum = Integer.parseInt(version);
+        List<String> versions = new ArrayList<>();
+
+        for (int v = versionNum; v >= 8; v--) {
+            versions.add(v != 8 ? "" + v : "1." + v);
+        }
+
+        return versions;
     }
 }


---------------------------------------------------------------------
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