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 <[email protected]> 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: [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
