package com.sap.furcas.runtime.parser.incremental; import java.util.Collections; import java.util.List; import org.antlr.runtime.Lexer; import com.sap.furcas.metamodel.FURCAS.textblocks.AbstractToken; import com.sap.ide.cts.parser.incremental.IncrementalLexer; import com.sap.ide.cts.parser.incremental.antlr.ANTLRIncrementalLexerAdapter; import com.sap.ide.cts.parser.incremental.antlr.ANTLRLexerAdapter; public class MockLexerAdapterWithLookaheadLLStar extends ANTLRLexerAdapter { public MockLexerAdapterWithLookaheadLLStar(Lexer antlrLexer) { super(antlrLexer, null); } protected List<AbstractToken> nextTokens; protected ANTLRIncrementalLexerAdapter callbackLexer; protected int nextTokenIndex = 0; @Override public List<AbstractToken> moreTokens() { // simulate a lookahead of 1 within a LL(*) parser int mark = callbackLexer.mark(); callbackLexer.LA(1); callbackLexer.consume(); callbackLexer.rewind(mark); // simulate token consumption on callbacked lexer callbackLexer.consume(); return Collections.singletonList(nextTokens.get(nextTokenIndex++)); } @Override public void setIncrementalLexer(IncrementalLexer incrementalLexer) { this.callbackLexer = (ANTLRIncrementalLexerAdapter) incrementalLexer; } public void setNextTokens(List<AbstractToken> nextTokens) { this.nextTokens = nextTokens; } }