This is an automated email from the ASF dual-hosted git repository. lkishalmi 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 6f472b51ca Move ANTLR Lexers to lexer.antlr4 6f472b51ca is described below commit 6f472b51caa5ae24ddcb63c4ca5965c3404253dd Author: Laszlo Kishalmi <laszlo.kisha...@gmail.com> AuthorDate: Sun Jan 8 19:26:52 2023 -0800 Move ANTLR Lexers to lexer.antlr4 --- java/languages.antlr/nbproject/project.xml | 22 +-- .../languages/antlr/AbstractAntlrLexer.java | 82 ---------- .../languages/antlr/AntlrTokenSequence.java | 172 --------------------- .../languages/antlr/LexerInputCharStream.java | 134 ---------------- .../modules/languages/antlr/v3/Antlr3Lexer.java | 40 ++--- .../antlr/v4/Antlr4CompletionProvider.java | 3 +- .../modules/languages/antlr/v4/Antlr4Lexer.java | 40 ++--- .../languages/antlr/v4/Antlr4ParserResult.java | 3 + .../languages/antlr/AntlrTokenSequenceTest.java | 162 ------------------- 9 files changed, 35 insertions(+), 623 deletions(-) diff --git a/java/languages.antlr/nbproject/project.xml b/java/languages.antlr/nbproject/project.xml index 73729c3315..05c1ef1db2 100644 --- a/java/languages.antlr/nbproject/project.xml +++ b/java/languages.antlr/nbproject/project.xml @@ -141,6 +141,14 @@ <specification-version>1.80</specification-version> </run-dependency> </dependency> + <dependency> + <code-name-base>org.netbeans.modules.lexer.antlr4</code-name-base> + <build-prerequisite/> + <compile-dependency/> + <run-dependency> + <specification-version>1.0</specification-version> + </run-dependency> + </dependency> <dependency> <code-name-base>org.netbeans.modules.parsing.api</code-name-base> <build-prerequisite/> @@ -231,20 +239,6 @@ </run-dependency> </dependency> </module-dependencies> - <test-dependencies> - <test-type> - <name>unit</name> - <test-dependency> - <code-name-base>org.netbeans.libs.junit4</code-name-base> - <compile-dependency/> - </test-dependency> - <test-dependency> - <code-name-base>org.netbeans.modules.nbjunit</code-name-base> - <recursive/> - <compile-dependency/> - </test-dependency> - </test-type> - </test-dependencies> <public-packages/> </data> </configuration> diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java deleted file mode 100644 index 9f76582b2e..0000000000 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AbstractAntlrLexer.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.netbeans.modules.languages.antlr; - -import org.antlr.v4.runtime.misc.IntegerList; -import org.netbeans.api.lexer.Token; -import org.netbeans.spi.lexer.Lexer; -import org.netbeans.spi.lexer.LexerRestartInfo; -import org.netbeans.spi.lexer.TokenFactory; - - -/** - * - * @author lkishalmi - */ -public abstract class AbstractAntlrLexer<T extends org.antlr.v4.runtime.Lexer> implements Lexer<AntlrTokenId> { - - private final TokenFactory<AntlrTokenId> tokenFactory; - protected final T lexer; - private final LexerInputCharStream input; - - public AbstractAntlrLexer(LexerRestartInfo<AntlrTokenId> info, T lexer) { - this.tokenFactory = info.tokenFactory(); - this.lexer = lexer; - this.input = (LexerInputCharStream) lexer.getInputStream(); - if (info.state() != null) { - ((LexerState) info.state()).restore(lexer); - } - input.markToken(); - } - - - @Override - public void release() { - } - - protected final Token<AntlrTokenId> token(AntlrTokenId id) { - input.markToken(); - return tokenFactory.createToken(id); - } - - public static class LexerState<T extends org.antlr.v4.runtime.Lexer> { - final int state; - final int mode; - final IntegerList modes; - - public LexerState(T lexer) { - this.state= lexer.getState(); - - this.mode = lexer._mode; - this.modes = new IntegerList(lexer._modeStack); - } - - public void restore(T lexer) { - lexer.setState(state); - lexer._modeStack.addAll(modes); - lexer._mode = mode; - } - - @Override - public String toString() { - return String.valueOf(state); - } - - } -} diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java deleted file mode 100644 index 60db9b31f3..0000000000 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/AntlrTokenSequence.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.netbeans.modules.languages.antlr; - -import java.util.ArrayList; -import java.util.ListIterator; -import java.util.Optional; -import java.util.function.Predicate; -import org.antlr.v4.runtime.Lexer; -import static org.antlr.v4.runtime.Recognizer.EOF; -import org.antlr.v4.runtime.Token; -import org.antlr.v4.runtime.TokenSource; - -/** - * - * @author lkishalmi - */ -public final class AntlrTokenSequence { - - private final TokenSource tokens; - private boolean eofRead = false; - private int readIndex; - private int cursorOffset; - private ListIterator<Token> cursor; - - private final ArrayList<Token> tokenList = new ArrayList<>(200); - - public static final Predicate<Token> DEFAULT_CHANNEL = new ChannelFilter(Lexer.DEFAULT_TOKEN_CHANNEL); - - public static final class ChannelFilter implements Predicate<Token> { - private final int channel; - - public ChannelFilter(int channel) { - this.channel = channel; - } - - @Override - public boolean test(Token t) { - return channel == t.getChannel(); - } - } - - public AntlrTokenSequence(TokenSource tokens) { - this.tokens = tokens; - this.cursor = tokenList.listIterator(); - } - - public void seekTo(int offset) { - if (offset > readIndex) { - if (cursor.hasNext()) { - //replace the cursor if it is not at the end of the list. - cursor = tokenList.listIterator(tokenList.size()); - } - Token t = read(); - while ((t != null) && (t.getStopIndex() + 1 < offset)) { - t = read(); - } - if (t != null && (offset < t.getStopIndex() + 1)) { - cursor.previous(); - cursorOffset = t.getStartIndex(); - } else { - cursorOffset = readIndex; - } - } else { - if (offset > getOffset()) { - next((t) -> t.getStopIndex() > offset); - if (cursor.hasPrevious()) { - cursor.previous(); - } - - } else { - previous((t) -> t.getStartIndex() < offset); - } - } - - } - - public boolean isEmpty() { - return tokenList.isEmpty() && !hasNext(); - } - - public boolean hasNext() { - if (!eofRead && (cursorOffset == readIndex) && !cursor.hasNext()) { - Token t = read(); - if (t != null) { - cursor.previous(); - } - } - return !(eofRead && !cursor.hasNext()); - } - - public boolean hasPrevious() { - return cursor.hasPrevious(); - } - - public int getOffset() { - return cursorOffset; - } - - public Optional<Token> previous() { - Optional<Token> ret = cursor.hasPrevious() ? Optional.of(cursor.previous()) : Optional.empty(); - cursorOffset = cursor.hasPrevious() ? ret.get().getStartIndex() : 0; - return ret; - - } - - public Optional<Token> previous(Predicate<Token> filter) { - Optional<Token> ot = previous(); - while (ot.isPresent() && !filter.test(ot.get())) { - ot = previous(); - } - return ot; - } - - public Optional<Token> previous(int tokenType){ - return previous((Token t) -> t.getType() == tokenType); - } - - public Optional<Token> next() { - if (hasNext()) { - Token t = cursor.next(); - cursorOffset = t.getStopIndex() + 1; - return Optional.of(t); - } else { - return Optional.empty(); - } - } - - public Optional<Token> next(Predicate<Token> filter) { - Optional<Token> ot = next(); - while (ot.isPresent() && !filter.test(ot.get())) { - ot = next(); - } - return ot; - } - - public Optional<Token> next(int tokenType){ - return next((Token t) -> t.getType() == tokenType); - } - - private Token read() { - if (eofRead) { - return null; - } - Token t = tokens.nextToken(); - if (t.getType() != EOF) { - cursor.add(t); - readIndex = t.getStopIndex() + 1; - return t; - } else { - eofRead = true; - return null; - } - } - -} diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java deleted file mode 100644 index e2892462e6..0000000000 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/LexerInputCharStream.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.netbeans.modules.languages.antlr; - -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.misc.Interval; -import org.netbeans.spi.lexer.*; - -/** - * - * @author lkishalmi - */ -public class LexerInputCharStream implements CharStream { - private final LexerInput input; - - private int tokenMark = Integer.MAX_VALUE; - private int index = 0; - - public LexerInputCharStream(LexerInput input) { - this.input = input; - } - - @Override - public String getText(Interval intrvl) { - if (intrvl.a < tokenMark) { - throw new UnsupportedOperationException("Can't read before the last token end: " + tokenMark); - } - int start = intrvl.a - tokenMark; - int end = intrvl.b - tokenMark + 1; - int toread = end - start - input.readLength(); - for (int i = 0; i < toread; i++) { - input.read(); - } - String ret = String.valueOf(input.readText(start, end)); - if (toread > 0) { - input.backup(toread); - } - return ret; - } - - @Override - public void consume() { - read(); - } - - @Override - public int LA(int count) { - if (count == 0) { - return 0; //the behaviour is not defined - } - - int c = 0; - if (count > 0) { - for (int i = 0; i < count; i++) { - c = read(); - } - backup(count); - } else { - backup(count); - c = read(); - } - return c; - } - - //Marks are for buffering in ANTLR4, we do not really need them - @Override - public int mark() { - return -1; - } - - public void markToken() { - tokenMark = index; - } - - @Override - public void release(int marker) { - } - - @Override - public int index() { - return index; - } - - @Override - public void seek(int i) { - if (i < index()) { - backup(index() - i); - } else { - while (index() < i) { - if (read() == LexerInput.EOF) { - break; - } - } - } - } - - - private int read() { - int ret = input.read(); - index += 1; - return ret; - } - - private void backup(int count) { - index -= count; - input.backup(count); - } - - @Override - public int size() { - throw new UnsupportedOperationException("Stream size is unknown."); - } - - @Override - public String getSourceName() { - return UNKNOWN_SOURCE_NAME; - } -} diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java index 34f43875db..5238858e17 100644 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java +++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v3/Antlr3Lexer.java @@ -23,38 +23,30 @@ import org.netbeans.api.lexer.Token; import org.netbeans.spi.lexer.LexerRestartInfo; import static org.antlr.parser.antlr3.ANTLRv3Lexer.*; -import org.netbeans.modules.languages.antlr.AbstractAntlrLexer; import org.netbeans.modules.languages.antlr.AntlrTokenId; import static org.netbeans.modules.languages.antlr.AntlrTokenId.*; -import org.netbeans.modules.languages.antlr.LexerInputCharStream; +import org.netbeans.spi.lexer.antlr4.AbstractAntlrLexerBridge; +import org.netbeans.spi.lexer.antlr4.LexerInputCharStream; /** * * @author lkishalmi */ -public final class Antlr3Lexer extends AbstractAntlrLexer<ANTLRv3Lexer> { +public final class Antlr3Lexer extends AbstractAntlrLexerBridge<ANTLRv3Lexer, AntlrTokenId> { public Antlr3Lexer(LexerRestartInfo<AntlrTokenId> info) { super(info, new ANTLRv3Lexer(new LexerInputCharStream(info.input()))); } - private org.antlr.v4.runtime.Token preFetchedToken = null; + @Override + public Object state() { + return new State(lexer); + } @Override - public Token<AntlrTokenId> nextToken() { - org.antlr.v4.runtime.Token nextToken; - if (preFetchedToken != null) { - nextToken = preFetchedToken; - lexer.getInputStream().seek(preFetchedToken.getStopIndex() + 1); - preFetchedToken = null; - } else { - nextToken = lexer.nextToken(); - } - if (nextToken.getType() == EOF) { - return null; - } - switch (nextToken.getType()) { + protected Token<AntlrTokenId> mapToken(int antlrTokenType) { + switch (antlrTokenType) { case TOKEN_REF: return token(AntlrTokenId.TOKEN); case RULE_REF: @@ -130,24 +122,14 @@ public final class Antlr3Lexer extends AbstractAntlrLexer<ANTLRv3Lexer> { return token(WHITESPACE); case ACTION_CONTENT: - preFetchedToken = lexer.nextToken(); - while (preFetchedToken.getType() == ACTION_CONTENT) { - preFetchedToken = lexer.nextToken(); - } - lexer.getInputStream().seek(preFetchedToken.getStartIndex()); - return token(ACTION); + return groupToken(ACTION, ACTION_CONTENT); default: return token(ERROR); } } - @Override - public Object state() { - return new State(lexer); - } - - public static class State extends AbstractAntlrLexer.LexerState<ANTLRv3Lexer> { + private static class State extends AbstractAntlrLexerBridge.LexerState<ANTLRv3Lexer> { final int currentRuleType; public State(ANTLRv3Lexer lexer) { diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java index 85fecab22e..ac82c13e84 100644 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java +++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4CompletionProvider.java @@ -50,7 +50,8 @@ import org.netbeans.api.annotations.common.StaticResource; import static org.antlr.parser.antlr4.ANTLRv4Lexer.*; import org.netbeans.modules.languages.antlr.AntlrParserResult.ReferenceType; -import static org.netbeans.modules.languages.antlr.AntlrTokenSequence.DEFAULT_CHANNEL; +import org.netbeans.spi.lexer.antlr4.AntlrTokenSequence; +import static org.netbeans.spi.lexer.antlr4.AntlrTokenSequence.DEFAULT_CHANNEL; import org.openide.util.NbBundle; /** diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java index 79efbc5cf5..e366210d4a 100644 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java +++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4Lexer.java @@ -23,38 +23,30 @@ import org.netbeans.api.lexer.Token; import org.netbeans.spi.lexer.LexerRestartInfo; import static org.antlr.parser.antlr4.ANTLRv4Lexer.*; -import org.netbeans.modules.languages.antlr.AbstractAntlrLexer; import org.netbeans.modules.languages.antlr.AntlrTokenId; import static org.netbeans.modules.languages.antlr.AntlrTokenId.*; -import org.netbeans.modules.languages.antlr.LexerInputCharStream; +import org.netbeans.spi.lexer.antlr4.AbstractAntlrLexerBridge; +import org.netbeans.spi.lexer.antlr4.LexerInputCharStream; /** * * @author lkishalmi */ -public final class Antlr4Lexer extends AbstractAntlrLexer<ANTLRv4Lexer> { +public final class Antlr4Lexer extends AbstractAntlrLexerBridge<ANTLRv4Lexer, AntlrTokenId> { public Antlr4Lexer(LexerRestartInfo<AntlrTokenId> info) { super(info, new ANTLRv4Lexer(new LexerInputCharStream(info.input()))); } - private org.antlr.v4.runtime.Token preFetchedToken = null; + @Override + public Object state() { + return new State(lexer); + } @Override - public Token<AntlrTokenId> nextToken() { - org.antlr.v4.runtime.Token nextToken; - if (preFetchedToken != null) { - nextToken = preFetchedToken; - lexer.getInputStream().seek(preFetchedToken.getStopIndex() + 1); - preFetchedToken = null; - } else { - nextToken = lexer.nextToken(); - } - if (nextToken.getType() == EOF) { - return null; - } - switch (nextToken.getType()) { + protected Token<AntlrTokenId> mapToken(int antlrTokenType) { + switch (antlrTokenType) { case TOKEN_REF: return token(TOKEN); case RULE_REF: @@ -125,24 +117,14 @@ public final class Antlr4Lexer extends AbstractAntlrLexer<ANTLRv4Lexer> { return token(WHITESPACE); case ACTION_CONTENT: - preFetchedToken = lexer.nextToken(); - while (preFetchedToken.getType() == ACTION_CONTENT) { - preFetchedToken = lexer.nextToken(); - } - lexer.getInputStream().seek(preFetchedToken.getStartIndex()); - return token(ACTION); + return groupToken(ACTION, ACTION_CONTENT); default: return token(ERROR); } } - @Override - public Object state() { - return new State(lexer); - } - - public static class State extends AbstractAntlrLexer.LexerState<ANTLRv4Lexer> { + private static class State extends AbstractAntlrLexerBridge.LexerState<ANTLRv4Lexer> { final int currentRuleType; public State(ANTLRv4Lexer lexer) { diff --git a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java index ace5b430e8..7c9683b9e4 100644 --- a/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java +++ b/java/languages.antlr/src/org/netbeans/modules/languages/antlr/v4/Antlr4ParserResult.java @@ -58,11 +58,14 @@ public final class Antlr4ParserResult extends AntlrParserResult<ANTLRv4Parser> { private static final Logger LOG = Logger.getLogger(Antlr4ParserResult.class.getName()); public static final Reference HIDDEN = new Reference(ReferenceType.CHANNEL, "HIDDEN", OffsetRange.NONE); + public static final Reference DEFAULT_MODE = new Reference(ReferenceType.MODE, "DEFAULT_MODE", OffsetRange.NONE); + final Set<String> unknownReferences = new HashSet<>(); public Antlr4ParserResult(Snapshot snapshot) { super(snapshot); references.put(HIDDEN.name, HIDDEN); + references.put(DEFAULT_MODE.name, DEFAULT_MODE); } @Override diff --git a/java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java b/java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java deleted file mode 100644 index 216a918201..0000000000 --- a/java/languages.antlr/test/unit/src/org/netbeans/modules/languages/antlr/AntlrTokenSequenceTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.netbeans.modules.languages.antlr; - -import org.antlr.parser.antlr4.ANTLRv4Lexer; -import org.antlr.v4.runtime.CharStreams; -import org.junit.Test; - -import static org.junit.Assert.*; -import static org.netbeans.modules.languages.antlr.AntlrTokenSequence.DEFAULT_CHANNEL; -/** - * - * @author lkishalmi - */ -public class AntlrTokenSequenceTest { - - public AntlrTokenSequenceTest() { - } - - /** - * Test of seekTo method, of class AntlrTokenSequence. - */ - @Test - public void testSeekTo1() { - int offset = 0; - AntlrTokenSequence instance = sequence(""); - instance.seekTo(offset); - assertTrue(instance.isEmpty()); - } - - @Test - public void testSeekTo2() { - int offset = 0; - AntlrTokenSequence instance = sequence("/**/"); - instance.seekTo(offset); - assertFalse(instance.isEmpty()); - assertTrue(instance.next().isPresent()); - } - - @Test - public void testSeekTo3() { - int offset = 4; - AntlrTokenSequence instance = sequence("/**/"); - instance.seekTo(offset); - assertFalse(instance.isEmpty()); - assertFalse(instance.next().isPresent()); - assertTrue(instance.hasPrevious()); - } - - @Test - public void testSeekTo4() { - int offset = 5; - AntlrTokenSequence instance = sequence("/* */lexer"); - instance.seekTo(offset); - assertFalse(instance.isEmpty()); - assertTrue(instance.next().isPresent()); - assertTrue(instance.hasPrevious()); - } - - @Test - public void testSeekTo5() { - AntlrTokenSequence instance = sequence("/* */lexer"); - instance.seekTo(10); - assertFalse(instance.next().isPresent()); - instance.seekTo(5); - assertFalse(instance.isEmpty()); - assertTrue(instance.next().isPresent()); - assertTrue(instance.previous().isPresent()); - assertFalse(instance.hasPrevious()); - } - - /** - * Test of isEmpty method, of class AntlrTokenSequence. - */ - @Test - public void testIsEmpty() { - AntlrTokenSequence instance = sequence(""); - assertTrue(instance.isEmpty()); - } - - @Test - public void testHasNext1() { - AntlrTokenSequence instance = sequence("lexer"); - assertTrue(instance.hasNext()); - } - - @Test - public void testHasNext2() { - AntlrTokenSequence instance = sequence(""); - assertFalse(instance.hasNext()); - } - - @Test - public void testHasNext3() { - AntlrTokenSequence instance = sequence("lexer"); - assertTrue(instance.hasNext()); - instance.next(); - assertFalse(instance.hasNext()); - } - - @Test - public void testHasPrevious1() { - AntlrTokenSequence instance = sequence("lexer"); - instance.next(); - assertTrue(instance.hasPrevious()); - } - - @Test - public void testHasPrevious2() { - AntlrTokenSequence instance = sequence(""); - assertFalse(instance.hasPrevious()); - } - - @Test - public void testGetOffset1() { - AntlrTokenSequence instance = sequence("/* */lexer"); - instance.seekTo(7); - assertTrue(instance.hasNext()); - assertEquals(5, instance.getOffset()); - instance.previous(); - assertEquals(0, instance.getOffset()); - } - - @Test - public void testNextPredicate1() { - AntlrTokenSequence instance = sequence("/* */lexer grammar"); - assertTrue(instance.hasNext()); - instance.next(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("lexer", t.getText())); - instance.next(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("grammar", t.getText())); - assertFalse(instance.hasNext()); - } - - @Test - public void testPreviousPredicate1() { - AntlrTokenSequence instance = sequence("/* */lexer grammar"); - instance.seekTo(18); - assertFalse(instance.hasNext()); - instance.previous(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("grammar", t.getText())); - instance.previous(DEFAULT_CHANNEL).ifPresent((t) -> assertEquals("lexer", t.getText())); - assertTrue(instance.hasPrevious()); - } - - private AntlrTokenSequence sequence(String s) { - return new AntlrTokenSequence(new ANTLRv4Lexer(CharStreams.fromString(s))); - } -} --------------------------------------------------------------------- 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