diff --git a/java.lexer/apichanges.xml b/java.lexer/apichanges.xml new file mode 100644 --- /dev/null +++ b/java.lexer/apichanges.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + Java Lexer API + + + + + + + + + Double colon and arrow token ids added + + + + + + Added JavaTokenId.COLONCOLON and JavaTokenId.ARROW. + + + + + + + + + + + + Change History for the Java Lexer API + + + + + + +

Introduction

+ +

This document lists changes made to the Java Lexer API.

+ + +
+ + +

@FOOTER@

+ + +
+ +
diff --git a/java.lexer/manifest.mf b/java.lexer/manifest.mf --- a/java.lexer/manifest.mf +++ b/java.lexer/manifest.mf @@ -1,5 +1,5 @@ OpenIDE-Module: org.netbeans.modules.java.lexer/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/lib/java/lexer/Bundle.properties -OpenIDE-Module-Specification-Version: 1.22 +OpenIDE-Module-Specification-Version: 1.23 OpenIDE-Module-Layer: org/netbeans/lib/java/lexer/layer.xml diff --git a/java.lexer/nbproject/project.properties b/java.lexer/nbproject/project.properties --- a/java.lexer/nbproject/project.properties +++ b/java.lexer/nbproject/project.properties @@ -44,6 +44,7 @@ javac.compilerargs=-Xlint:unchecked javac.source=1.6 javadoc.title=Java Lexer API +javadoc.apichanges=${basedir}/apichanges.xml test.config.stableBTD.includes=**/*Test.class test.config.stableBTD.excludes=\ diff --git a/java.lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java b/java.lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java --- a/java.lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java +++ b/java.lexer/src/org/netbeans/api/java/lexer/JavaTokenId.java @@ -142,6 +142,10 @@ SEMICOLON(";", "separator"), COMMA(",", "separator"), DOT(".", "separator"), + /**@since 1.23*/ + COLONCOLON("::", "separator"), + /**@since 1.23*/ + ARROW("->", "separator"), EQ("=", "operator"), GT(">", "operator"), diff --git a/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java b/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java --- a/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java +++ b/java.lexer/src/org/netbeans/lib/java/lexer/JavaLexer.java @@ -83,7 +83,7 @@ assert (info.state() == null); // never set to non-null value in state() Integer ver = (Integer)info.getAttributeValue("version"); - this.version = (ver != null) ? ver.intValue() : 7; // TODO: Java 1.7 used by default + this.version = (ver != null) ? ver.intValue() : 8; // TODO: Java 1.8 used by default } public Object state() { @@ -97,10 +97,7 @@ switch (c) { case '#': //Support for exotic identifiers has been removed 6999438 - if (true || this.version < 7 || input.read() != '"') { - return token(JavaTokenId.ERROR); - } - lookupId = JavaTokenId.IDENTIFIER; + return token(JavaTokenId.ERROR); case '"': // string literal if (lookupId == null) lookupId = JavaTokenId.STRING_LITERAL; while (true) @@ -240,6 +237,8 @@ return token(JavaTokenId.MINUSMINUS); case '=': return token(JavaTokenId.MINUSEQ); + case '>': + return token(JavaTokenId.ARROW); } input.backup(1); return token(JavaTokenId.MINUS); @@ -311,6 +310,9 @@ case ';': return token(JavaTokenId.SEMICOLON); case ':': + if (input.read() == ':') + return token(JavaTokenId.COLONCOLON); + input.backup(1); return token(JavaTokenId.COLON); case '?': return token(JavaTokenId.QUESTION); 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 --- 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 @@ -449,6 +449,28 @@ LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.STRING_LITERAL, "\" \""); } + public void testInterferenceBraceIdent() { + String text = "() -> {A::a();}"; + InputAttributes attr = new InputAttributes(); + attr.setValue(JavaTokenId.language(), "version", Integer.valueOf(7), true); + TokenHierarchy hi = TokenHierarchy.create(text, false, JavaTokenId.language(), EnumSet.of(JavaTokenId.WHITESPACE), attr); + TokenSequence ts = hi.tokenSequence(); + + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.LPAREN, "("); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.RPAREN, ")"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.ARROW, "->"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.LBRACE, "{"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.IDENTIFIER, "A"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.COLONCOLON, "::"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.IDENTIFIER, "a"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.LPAREN, "("); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.RPAREN, ")"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.SEMICOLON, ";"); + LexerTestUtilities.assertNextTokenEquals(ts, JavaTokenId.RBRACE, "}"); + + assertFalse(ts.moveNext()); + } + public void testBinaryLiterals() { String text = "0b101 0B101 0b101l 0b101L"; InputAttributes attr = new InputAttributes();