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

geertjan 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 546bd6a  Fixing source level detection for OpenJDK projects in 'open' 
directory.
     new fddc5d0  Merge pull request #2875 from 
jlahoda/fix-open-openjdk-source-level
546bd6a is described below

commit 546bd6a7463e2138bc9e5ded9e705e635918bbf1
Author: Jan Lahoda <jlah...@netbeans.org>
AuthorDate: Sat Apr 10 17:43:42 2021 +0200

    Fixing source level detection for OpenJDK projects in 'open' directory.
---
 .../java/openjdk/project/SourceLevelQueryImpl.java | 26 +++++++++++++---------
 .../openjdk/project/SourceLevelQueryImplTest.java  | 15 +++++++++++++
 2 files changed, 30 insertions(+), 11 deletions(-)

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 b988da4..560280c 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
@@ -19,12 +19,10 @@
 package org.netbeans.modules.java.openjdk.project;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
+import java.util.Arrays;
+import java.util.Optional;
 import java.util.logging.Level;
 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;
@@ -41,21 +39,27 @@ public class SourceLevelQueryImpl implements 
SourceLevelQueryImplementation  {
 
     private static final Logger LOG = 
Logger.getLogger(SourceLevelQueryImpl.class.getName());
     private static final int DEFAULT_SOURCE_LEVEL = 11;
-    private static final Pattern JDK_PATTERN = Pattern.compile("jdk([0-9]+)");
+    private static final String[] SOURCE_VERSION_LOCATIONS = new String[] {
+        "src/java.compiler/share/classes/javax/lang/model/SourceVersion.java",
+        
"open/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java",
+        
"langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java"
+    };
 
     private final String sourceLevel;
 
     public SourceLevelQueryImpl(FileObject jdkRoot) {
-        FileObject sourceVersion = BuildUtils.getFileObject(jdkRoot, 
"src/java.compiler/share/classes/javax/lang/model/SourceVersion.java");
+        Optional<FileObject> sourceVersionCandidate =
+                Arrays.stream(SOURCE_VERSION_LOCATIONS)
+                      .map(location -> BuildUtils.getFileObject(jdkRoot, 
location))
+                      .filter(file -> file != null)
+                      .findFirst();
+
         int sl = DEFAULT_SOURCE_LEVEL;
 
-        if (sourceVersion == null) {
-            sourceVersion = BuildUtils.getFileObject(jdkRoot, 
"langtools/src/java.compiler/share/classes/javax/lang/model/SourceVersion.java");
-        }
-        if (sourceVersion != null) {
+        if (sourceVersionCandidate.isPresent()) {
             try {
                 TokenHierarchy<String> th =
-                        TokenHierarchy.create(sourceVersion.asText(), 
JavaTokenId.language());
+                        
TokenHierarchy.create(sourceVersionCandidate.get().asText(), 
JavaTokenId.language());
                 TokenSequence<?> seq = th.tokenSequence();
 
                 while (seq.moveNext()) {
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 f94619a..d2f529e 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
@@ -124,6 +124,21 @@ public class SourceLevelQueryImplTest extends NbTestCase {
         assertEquals("11", SourceLevelQuery.getSourceLevel(jlObject));
     }
 
+    public void testModuleInfoNewLayoutWithOpen() throws IOException {
+        FileObject javaBase = FileUtil.createFolder(root, 
"open/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, 
"open/src/java.compiler/share/classes/module-info.java"), "module java.compiler 
{}");
+        copyString2File(FileUtil.createData(root, 
"open/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));
+    }
+
     private void copyString2File(FileObject file, String content) throws 
IOException {
         try (OutputStream out = file.getOutputStream()) {
             out.write(content.getBytes("UTF-8"));

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

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

Reply via email to