You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ge...@apache.org on 2018/03/20 12:22:52 UTC
[incubator-netbeans] branch master updated: [NETBEANS 470] Var
shows as keyword in jdk8, 9 (#457)
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/incubator-netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 5f54ed3 [NETBEANS 470] Var shows as keyword in jdk8, 9 (#457)
5f54ed3 is described below
commit 5f54ed374961d028c8e4ebb1a09d8e8dce936c99
Author: Reema Taneja <32...@users.noreply.github.com>
AuthorDate: Tue Mar 20 17:52:50 2018 +0530
[NETBEANS 470] Var shows as keyword in jdk8, 9 (#457)
* pass version as inputattribute
* removed redundant indexof check
---
.../org/netbeans/modules/editor/java/JavaKit.java | 3 ++
java.lexer/nbproject/project.properties | 2 +-
.../src/org/netbeans/lib/java/lexer/JavaLexer.java | 33 ++++++++++++++++--
.../lib/java/lexer/JavaLexerBatchTest.java | 39 ++++++++++++++++++++++
.../source/parsing/AbstractSourceFileObject.java | 6 ++++
5 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java b/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
index 0edbc11..69a69c4 100644
--- a/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
+++ b/java.editor/src/org/netbeans/modules/editor/java/JavaKit.java
@@ -146,6 +146,9 @@ public class JavaKit extends NbEditorKit {
FileObject fo = NbEditorUtilities.getFileObject(doc);
return fo != null ? fo.getNameExt() : null;
}, true);
+ attrs.setValue(JavaTokenId.language(), "version", (Supplier<String>) () -> { //NOI18N
+ return getSourceLevel(doc);
+ }, true);
doc.putProperty(InputAttributes.class, attrs);
}
diff --git a/java.lexer/nbproject/project.properties b/java.lexer/nbproject/project.properties
index a079972..674c6bf 100644
--- a/java.lexer/nbproject/project.properties
+++ b/java.lexer/nbproject/project.properties
@@ -17,7 +17,7 @@
is.autoload=true
javac.compilerargs=-Xlint:unchecked
-javac.source=1.7
+javac.source=1.8
javadoc.title=Java Lexer API
javadoc.apichanges=${basedir}/apichanges.xml
diff --git a/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java b/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java
index 0739cde..7aa0a6d 100644
--- a/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java
+++ b/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java
@@ -56,7 +56,7 @@ public class JavaLexer implements Lexer<JavaTokenId> {
private final int version;
private Integer state = null;
-
+
public JavaLexer(LexerRestartInfo<JavaTokenId> info) {
this.input = info.input();
this.tokenFactory = info.tokenFactory();
@@ -68,7 +68,16 @@ public class JavaLexer implements Lexer<JavaTokenId> {
}
}
- Integer ver = (Integer)info.getAttributeValue("version"); //NOI18N
+ Integer ver = null;
+ Object verAttribute = info.getAttributeValue("version"); //NOI18N
+ if (verAttribute instanceof Supplier) {
+ Object val = ((Supplier) verAttribute).get();
+ if (val instanceof String) {
+ ver = getVersionAsInt(((Supplier<String>) (verAttribute)).get());
+ }
+ } else if (verAttribute instanceof Integer) {
+ ver = (Integer) verAttribute;
+ }
this.version = (ver != null) ? ver.intValue() : 10; // TODO: Java 1.8 used by default
}
@@ -1297,6 +1306,26 @@ public class JavaLexer implements Lexer<JavaTokenId> {
JavaTokenId.LINE_COMMENT, JavaTokenId.WHITESPACE
);
+ // Get version as Integer x for version String 1.x
+ private Integer getVersionAsInt(String version) {
+ Integer ver = null;
+ if (version != null) {
+ try {
+ // expect format 1.x or x
+ if (version.startsWith("1.")) { //NOI18N
+ ver = Integer.parseInt(version.substring(2));
+ } else {
+ ver = Integer.parseInt(version);
+ }
+ } catch (NumberFormatException e) {
+ // should not happen if version is
+ // set using SourceLevelQuery,
+ // ignore other strings
+ }
+ }
+ return ver;
+ }
+
public void release() {
}
diff --git a/java.lexer/test/unit/src/org/netbeans/lib/java/lexer/JavaLexerBatchTest.java b/java.lexer/test/unit/src/org/netbeans/lib/java/lexer/JavaLexerBatchTest.java
index 6028695..927d2eb 100644
--- a/java.lexer/test/unit/src/org/netbeans/lib/java/lexer/JavaLexerBatchTest.java
+++ b/java.lexer/test/unit/src/org/netbeans/lib/java/lexer/JavaLexerBatchTest.java
@@ -20,6 +20,7 @@
package org.netbeans.lib.java.lexer;
import java.util.EnumSet;
+import java.util.function.Supplier;
import junit.framework.TestCase;
import org.netbeans.api.java.lexer.JavaStringTokenId;
import org.netbeans.api.java.lexer.JavaTokenId;
@@ -595,4 +596,42 @@ public class JavaLexerBatchTest extends TestCase {
LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.RPAREN, ")");
LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.SEMICOLON, ";");
}
+
+ public void testVarKeywordWithStringVersion() {
+ String text = "var /*comment*/ /**comment*/ var = 0;";
+ InputAttributes attr = new InputAttributes();
+ attr.setValue(JavaTokenId.language(), "version", (Supplier<String>) () -> {return "10";}, true);
+ TokenHierarchy<?> hi = TokenHierarchy.create(text, false, JavaTokenId.language(), EnumSet.noneOf(JavaTokenId.class), attr);
+ TokenSequence<?> ts = hi.tokenSequence();
+
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.VAR, "var");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.BLOCK_COMMENT, "/*comment*/");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.JAVADOC_COMMENT, "/**comment*/");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.IDENTIFIER, "var");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.EQ, "=");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.INT_LITERAL, "0");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.SEMICOLON, ";");
+ }
+
+ public void testVarIdentWithStringVersion() {
+ String text = "var var = 0;";
+ InputAttributes attr = new InputAttributes();
+ attr.setValue(JavaTokenId.language(), "version", (Supplier<String>) () -> {return "1.8";}, true);
+ TokenHierarchy<?> hi = TokenHierarchy.create(text, false, JavaTokenId.language(), EnumSet.noneOf(JavaTokenId.class), attr);
+ TokenSequence<?> ts = hi.tokenSequence();
+
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.IDENTIFIER, "var");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.IDENTIFIER, "var");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.EQ, "=");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.WHITESPACE, " ");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.INT_LITERAL, "0");
+ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.SEMICOLON, ";");
+ }
}
diff --git a/java.source.base/src/org/netbeans/modules/java/source/parsing/AbstractSourceFileObject.java b/java.source.base/src/org/netbeans/modules/java/source/parsing/AbstractSourceFileObject.java
index f1227be..9e31f2b 100644
--- a/java.source.base/src/org/netbeans/modules/java/source/parsing/AbstractSourceFileObject.java
+++ b/java.source.base/src/org/netbeans/modules/java/source/parsing/AbstractSourceFileObject.java
@@ -41,6 +41,7 @@ import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.api.java.lexer.JavaTokenId;
+import org.netbeans.api.java.queries.SourceLevelQuery;
import org.netbeans.api.lexer.InputAttributes;
import org.netbeans.api.lexer.TokenHierarchy;
import org.netbeans.api.queries.FileEncodingQuery;
@@ -303,6 +304,11 @@ public abstract class AbstractSourceFileObject implements PrefetchableJavaFileOb
final CharBuffer charBuffer = getCharContent(true);
InputAttributes attrs = new InputAttributes();
attrs.setValue(JavaTokenId.language(), "fileName", (Supplier<String>) () -> getName(), true); //NOI18N
+ attrs.setValue(JavaTokenId.language(), "version", (Supplier<String>) () -> { //NOI18N
+ FileObject fo = handle.resolveFileObject(false);
+ return (fo != null) ? SourceLevelQuery.getSourceLevel(fo) : null;
+ }, true);
+
this.tokens = TokenHierarchy.create(charBuffer, false, JavaTokenId.language(), null, attrs); //TODO: .createSnapshot();
}
return this.tokens;
--
To stop receiving notification emails like this one, please contact
geertjan@apache.org.
---------------------------------------------------------------------
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