You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@netbeans.apache.org by GitBox <gi...@apache.org> on 2018/09/24 19:04:19 UTC

[GitHub] jlahoda closed pull request #897: Various improvements to make the OpenJDK project work better.

jlahoda closed pull request #897: Various improvements to make the OpenJDK project work better.
URL: https://github.com/apache/incubator-netbeans/pull/897
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/java/java.openjdk.project/build.xml b/java/java.openjdk.project/build.xml
index 54339acb4e..4d00b4bbbf 100644
--- a/java/java.openjdk.project/build.xml
+++ b/java/java.openjdk.project/build.xml
@@ -22,11 +22,13 @@
     <import file="../../nbbuild/templates/projectized.xml"/>
     <target name="compile" depends="projectized-common.compile">
         <mkdir dir="${build.dir}/fakeJdkClasses/java/lang" />
+        <mkdir dir="${build.dir}/fakeJdkClasses/java/lang/invoke" />
         <mkdir dir="${build.dir}/fakeJdkClasses/java/util/stream" />
         <mkdir dir="${build.dir}/fakeJdkClasses/java/util/zip" />
         <touch file="${build.dir}/fakeJdkClasses/java/lang/AssertionError.class" />
         <touch file="${build.dir}/fakeJdkClasses/java/lang/StringBuilder.class" />
         <touch file="${build.dir}/fakeJdkClasses/java/lang/AutoCloseable.class" />
+        <touch file="${build.dir}/fakeJdkClasses/java/lang/invoke/LambdaMetafactory.class" />
         <touch file="${build.dir}/fakeJdkClasses/java/util/stream/Streams.class" />
         <touch file="${build.dir}/fakeJdkClasses/java/util/zip/CRC32C.class" />
 
diff --git a/java/java.openjdk.project/nbproject/project.xml b/java/java.openjdk.project/nbproject/project.xml
index 8e17a2ff6e..fc83334b2c 100644
--- a/java/java.openjdk.project/nbproject/project.xml
+++ b/java/java.openjdk.project/nbproject/project.xml
@@ -77,6 +77,14 @@
                         <specification-version>1.56</specification-version>
                     </run-dependency>
                 </dependency>
+                <dependency>
+                    <code-name-base>org.netbeans.libs.javacapi</code-name-base>
+                    <build-prerequisite/>
+                    <compile-dependency/>
+                    <run-dependency>
+                        <specification-version>8.24</specification-version>
+                    </run-dependency>
+                </dependency>
                 <dependency>
                     <code-name-base>org.netbeans.modules.java.lexer</code-name-base>
                     <build-prerequisite/>
diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
index 8dd78e189e..413eadd593 100644
--- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
+++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/jtreg/ActionProviderImpl.java
@@ -774,10 +774,11 @@ public CopyReaderWriter(Reader in, Writer out) {
         @Override
         public void run() {
             try {
+                char[] buf = new char[1024];
                 int read;
-                
-                while ((read = in.read()) != (-1)) {
-                    out.write(read);
+
+                while ((read = in.read(buf)) != (-1)) {
+                    out.write(buf, 0, read);
                 }
             } catch (IOException ex) {
                 Exceptions.printStackTrace(ex);
diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
index 3e3a1cff7a..5319740266 100644
--- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
+++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ClassPathProviderImpl.java
@@ -39,6 +39,7 @@
 
 import org.netbeans.api.java.classpath.ClassPath;
 import org.netbeans.api.java.classpath.GlobalPathRegistry;
+import org.netbeans.api.java.classpath.JavaClassPathConstants;
 import org.netbeans.api.project.libraries.Library;
 import org.netbeans.api.project.libraries.LibraryManager;
 import org.netbeans.modules.java.openjdk.project.JDKProject.Root;
@@ -69,6 +70,7 @@
     };
     
     private final ClassPath bootCP;
+    private final ClassPath moduleBootCP;
     private final ClassPath compileCP;
     private final ClassPath moduleCompileCP;
     private final ClassPath sourceCP;
@@ -77,6 +79,7 @@
 
     public ClassPathProviderImpl(JDKProject project) {
         bootCP = ClassPath.EMPTY;
+        moduleBootCP = ClassPath.EMPTY;
         
         File fakeJdk = InstalledFileLocator.getDefault().locate("modules/ext/fakeJdkClasses.zip", "org.netbeans.modules.java.openjdk.project", false);
         URL fakeJdkURL = null;
@@ -187,22 +190,18 @@ private static URL projectDir2FakeTarget(FileObject projectDir) throws Malformed
         return FileUtil.getArchiveRoot(projectDir.toURI().resolve("fake-target.jar").toURL());
     }
 
-    /**
-     * Copied from JavaClassPathConstants, to avoid depending on a new version of it.
-     */
-    private static final String MODULE_COMPILE_PATH = "modules/compile";
-    private static final String MODULE_CLASS_PATH = "modules/classpath";
-
     @Override
     public ClassPath findClassPath(FileObject file, String type) {
         if (sourceCP.findOwnerRoot(file) != null) {
             if (ClassPath.BOOT.equals(type)) {
                 return bootCP;
+            } else if (JavaClassPathConstants.MODULE_BOOT_PATH.equals(type)) {
+                return bootCP;
             } else if (ClassPath.COMPILE.equals(type)) {
                 return compileCP;
             } else if (ClassPath.SOURCE.equals(type)) {
                 return sourceCP;
-            } else if (MODULE_COMPILE_PATH.equals(type)) {
+            } else if (JavaClassPathConstants.MODULE_COMPILE_PATH.equals(type)) {
                 return moduleCompileCP;
             }
         } else {
@@ -211,8 +210,8 @@ public ClassPath findClassPath(FileObject file, String type) {
             if (ClassPath.BOOT.equals(type)) {
                 return ClassPath.EMPTY;
             } else if (ClassPath.COMPILE.equals(type) ||
-                       MODULE_COMPILE_PATH.equals(type) ||
-                       MODULE_CLASS_PATH.equals(type)) {
+                       JavaClassPathConstants.MODULE_COMPILE_PATH.equals(type) ||
+                       JavaClassPathConstants.MODULE_CLASS_PATH.equals(type)) {
                 return testsCompileCP;
             }
 
diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
index 2cb9b2c20d..c4b80117e0 100644
--- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
+++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/ModuleDescription.java
@@ -128,9 +128,11 @@ public static synchronized ModuleRepository getModuleRepository(URI forURI) {
         if (projectDirectory.getFileObject("../../src/java.base/share/classes/module-info.java") != null &&
             projectDirectory.getFileObject("../../src/java.compiler/share/classes/module-info.java") != null)
             return Pair.of(projectDirectory.getFileObject("../.."), Pair.of(true, false));
-        if (projectDirectory.getFileObject("../../../modules.xml") != null || projectDirectory.getFileObject("../../../jdk/src/java.base/share/classes/module-info.java") != null)
+        if (projectDirectory.getFileObject("../../../modules.xml") != null ||
+            (projectDirectory.getFileObject("../../../jdk/src/java.base/share/classes/module-info.java") != null && projectDirectory.getFileObject("../../../langtools/src/java.compiler/share/classes/module-info.java") != null))
             return Pair.of(projectDirectory.getFileObject("../../.."), Pair.of(false, false));
-        if (projectDirectory.getFileObject("../../../../modules.xml") != null || projectDirectory.getFileObject("../../../../jdk/src/java.base/share/classes/module-info.java") != null)
+        if (projectDirectory.getFileObject("../../../../modules.xml") != null ||
+            (projectDirectory.getFileObject("../../../../jdk/src/java.base/share/classes/module-info.java") != null && projectDirectory.getFileObject("../../../langtools/src/java.compiler/share/classes/module-info.java") != null))
             return Pair.of(projectDirectory.getFileObject("../../../.."), Pair.of(false, false));
 
         return null;
@@ -235,6 +237,10 @@ private static ModuleDescription parseModule(Element moduleEl) {
                 continue; //do not look inside test folders
             }
 
+            if (current.getParent().getNameExt().equals("test") && current.getFileObject("TEST.ROOT") != null) {
+                continue; //do not look inside test folders
+            }
+
             todo.addAll(Arrays.asList(current.getChildren()));
         }
 
diff --git a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImpl.java b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImpl.java
index 42f7f77b3d..b5f0592afd 100644
--- a/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImpl.java
+++ b/java/java.openjdk.project/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImpl.java
@@ -25,6 +25,9 @@
 import java.util.logging.Logger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.netbeans.api.java.lexer.JavaTokenId;
+import org.netbeans.api.lexer.TokenHierarchy;
+import org.netbeans.api.lexer.TokenSequence;
 
 import org.netbeans.spi.java.queries.SourceLevelQueryImplementation;
 import org.openide.filesystems.FileObject;
@@ -36,32 +39,43 @@
 public class SourceLevelQueryImpl implements SourceLevelQueryImplementation  {
 
     private static final Logger LOG = Logger.getLogger(SourceLevelQueryImpl.class.getName());
-    private static final String DEFAULT_SOURCE_LEVEL = "1.9";
+    private static final int DEFAULT_SOURCE_LEVEL = 11;
     private static final Pattern JDK_PATTERN = Pattern.compile("jdk([0-9]+)");
 
     private final String sourceLevel;
 
     public SourceLevelQueryImpl(FileObject jdkRoot) {
-        FileObject jcheckConf = jdkRoot.getFileObject(".jcheck/conf");
-        String sl = DEFAULT_SOURCE_LEVEL;
+        FileObject sourceVersion = jdkRoot.getFileObject("src/java.compiler/share/classes/javax/lang/model/SourceVersion.java");
+        int sl = DEFAULT_SOURCE_LEVEL;
 
-        if (jcheckConf != null) {
-            Properties props = new Properties();
+        if (sourceVersion == null) {
+            sourceVersion = jdkRoot.getFileObject("langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java");
+        }
+        if (sourceVersion != null) {
+            try {
+                TokenHierarchy<String> th =
+                        TokenHierarchy.create(sourceVersion.asText(), JavaTokenId.language());
+                TokenSequence<?> seq = th.tokenSequence();
 
-            try (InputStream in = jcheckConf.getInputStream()) {
-                props.load(in);
-                String project = props.getProperty("project", "jdk9");
-                Matcher m = JDK_PATTERN.matcher(project);
+                while (seq.moveNext()) {
+                    if (seq.token().id() == JavaTokenId.IDENTIFIER) {
+                        String ident = seq.token().text().toString();
 
-                if (m.find()) {
-                    sl = m.group(1);
+                        if (ident.startsWith("RELEASE_")) {
+                            try {
+                                sl = Math.max(sl, Integer.parseInt(ident.substring("RELEASE_".length())));
+                            } catch (NumberFormatException ex) {
+                                //ignore
+                            }
+                        }
+                    }
                 }
             } catch (IOException ex) {
                 LOG.log(Level.FINE, null, ex);
             }
         }
 
-        this.sourceLevel = sl;
+        this.sourceLevel = "" + sl;
     }
 
 
diff --git a/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImplTest.java b/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImplTest.java
index c8f3b40229..40e5eadca5 100644
--- a/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImplTest.java
+++ b/java/java.openjdk.project/test/unit/src/org/netbeans/modules/java/openjdk/project/SourceLevelQueryImplTest.java
@@ -64,31 +64,63 @@ public void DISABLEDtestLegacyProject() throws IOException {
         assertEquals("1.8", SourceLevelQuery.getSourceLevel(jlObject));
     }
     
-    public void testModuleInfoProject() throws IOException {
+    public void testModuleInfoOldLayout() throws IOException {
         FileObject javaBase = FileUtil.createFolder(root, "jdk/src/java.base");
         FileObject jlObject = FileUtil.createData(javaBase, "share/classes/java/lang/Object.java");
         copyString2File(jlObject, "");
         copyString2File(FileUtil.createData(javaBase, "share/classes/module-info.java"), "module java.base {}");
-        copyString2File(FileUtil.createData(root, ".jcheck/conf"), "project=jdk3\n");
+        copyString2File(FileUtil.createData(root, "langtools/src/java.compiler/share/classes/module-info.java"), "module java.compiler {}");
+        copyString2File(FileUtil.createData(root, "langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java"), "RELEASE_3 RELEASE_12");
 
         Project javaBaseProject = FileOwnerQuery.getOwner(javaBase);
 
         assertNotNull(javaBaseProject);
 
-        assertEquals("1.3", SourceLevelQuery.getSourceLevel(jlObject));
+        assertEquals("12", SourceLevelQuery.getSourceLevel(jlObject));
     }
 
-    public void testNoJCheck() throws IOException {
-        FileObject javaBase = FileUtil.createFolder(root, "jdk/src/java.base");
+    public void testModuleInfoNewLayout() throws IOException {
+        FileObject javaBase = FileUtil.createFolder(root, "src/java.base");
+        FileObject jlObject = FileUtil.createData(javaBase, "share/classes/java/lang/Object.java");
+        copyString2File(jlObject, "");
+        copyString2File(FileUtil.createData(javaBase, "share/classes/module-info.java"), "module java.base {}");
+        copyString2File(FileUtil.createData(root, "src/java.compiler/share/classes/module-info.java"), "module java.compiler {}");
+        copyString2File(FileUtil.createData(root, "src/java.compiler/share/classes/javax/lang/model/SourceVersion.java"), "RELEASE_3 RELEASE_12");
+
+        Project javaBaseProject = FileOwnerQuery.getOwner(javaBase);
+
+        assertNotNull(javaBaseProject);
+
+        assertEquals("12", SourceLevelQuery.getSourceLevel(jlObject));
+    }
+
+    public void testNoSourceVersion() throws IOException {
+        FileObject javaBase = FileUtil.createFolder(root, "src/java.base");
+        FileObject jlObject = FileUtil.createData(javaBase, "share/classes/java/lang/Object.java");
+        copyString2File(jlObject, "");
+        copyString2File(FileUtil.createData(javaBase, "share/classes/module-info.java"), "module java.base {}");
+        copyString2File(FileUtil.createData(root, "src/java.compiler/share/classes/module-info.java"), "module java.compiler {}");
+
+        Project javaBaseProject = FileOwnerQuery.getOwner(javaBase);
+
+        assertNotNull(javaBaseProject);
+
+        assertEquals("11", SourceLevelQuery.getSourceLevel(jlObject));
+    }
+
+    public void testOldSourceVersion() throws IOException {
+        FileObject javaBase = FileUtil.createFolder(root, "src/java.base");
         FileObject jlObject = FileUtil.createData(javaBase, "share/classes/java/lang/Object.java");
         copyString2File(jlObject, "");
         copyString2File(FileUtil.createData(javaBase, "share/classes/module-info.java"), "module java.base {}");
+        copyString2File(FileUtil.createData(root, "src/java.compiler/share/classes/module-info.java"), "module java.compiler {}");
+        copyString2File(FileUtil.createData(root, "src/java.compiler/share/classes/javax/lang/model/SourceVersion.java"), "RELEASE_3");
 
         Project javaBaseProject = FileOwnerQuery.getOwner(javaBase);
 
         assertNotNull(javaBaseProject);
 
-        assertEquals("9", SourceLevelQuery.getSourceLevel(jlObject));
+        assertEquals("11", SourceLevelQuery.getSourceLevel(jlObject));
     }
 
     private void copyString2File(FileObject file, String content) throws IOException {
diff --git a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
index f693de8eaa..07d94a4a31 100644
--- a/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
+++ b/java/lib.nbjavac/src/org/netbeans/lib/nbjavac/services/NBAttr.java
@@ -73,22 +73,6 @@ public void visitBlock(JCBlock tree) {
         super.visitBlock(tree);
     }
 
-    @Override
-    public void visitNewClass(JCNewClass tree) {
-        super.visitNewClass(tree);
-        if (tree.def != null && tree.def.sym == null) {
-            try {
-                Field envField = Attr.class.getDeclaredField("env");
-                envField.setAccessible(true);
-                Env<AttrContext> env = (Env<AttrContext>) envField.get(this);
-                env = env.dup(tree);
-                attribStat(tree.def, env);
-            } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
-                Logger.getLogger(NBAttr.class.getName()).log(Level.FINE, null, ex);
-            }
-        }
-    }
-
     private boolean fullyAttribute;
     private Env<AttrContext> fullyAttributeResult;
 


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@netbeans.apache.org
For additional commands, e-mail: notifications-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists