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

[incubator-netbeans] 07/07: Determine source level as the highest RELEASE_ number in SourceVersion.

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

jlahoda pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-netbeans.git

commit cfdd1edcc924f499c97c725d880450861433b0fd
Author: Jan Lahoda <jl...@netbeans.org>
AuthorDate: Sun Sep 23 10:19:00 2018 +0200

    Determine source level as the highest RELEASE_ number in SourceVersion.
---
 .../java/openjdk/project/SourceLevelQueryImpl.java | 38 +++++++++++++------
 .../openjdk/project/SourceLevelQueryImplTest.java  | 44 +++++++++++++++++++---
 2 files changed, 64 insertions(+), 18 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 42f7f77..b5f0592 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.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;
 
 import org.netbeans.spi.java.queries.SourceLevelQueryImplementation;
 import org.openide.filesystems.FileObject;
@@ -36,32 +39,43 @@ import org.openide.filesystems.FileObject;
 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 c8f3b40..40e5ead 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 class SourceLevelQueryImplTest extends NbTestCase {
         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 {


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

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