private void addIgnoredChars(ParserRuleContext ctx, NodeBuilder nodeBuilder) { Token start = ctx.getStart(); int tokenStartIndex = start.getTokenIndex(); List<Token> leftChannel = tokens.getHiddenTokensToLeft(tokenStartIndex, CHANNEL_IGNORED_CHARS); List<IgnoredChar> ignoredCharsLeft = mapTokenToIgnoredChar(leftChannel); Token stop = ctx.getStop(); int tokenStopIndex = stop.getTokenIndex(); List<Token> rightChannel = tokens.getHiddenTokensToRight(tokenStopIndex, CHANNEL_IGNORED_CHARS); List<IgnoredChar> ignoredCharsRight = mapTokenToIgnoredChar(rightChannel); nodeBuilder.ignoredChars(new IgnoredChars(ignoredCharsLeft, ignoredCharsRight)); }
@SuppressWarnings("unused") private String buildFunctionBody(ExpressionBodyContext expressionBodyContext){ StringBuffer sb=new StringBuffer(); for(ParseTree node:expressionBodyContext.children){ Interval interval=node.getSourceInterval(); int index=interval.a; List<Token> leftTokens=tokenStream.getHiddenTokensToLeft(index); if(leftTokens!=null){ Token token=leftTokens.get(0); String text=token.getText(); sb.append(text); } sb.append(node.getText()); List<Token> rightTokens=tokenStream.getHiddenTokensToRight(index); if(rightTokens!=null){ Token token=rightTokens.get(0); String text=token.getText(); sb.append(text); } } return sb.toString(); }
@Override public String visitTerminal(TerminalNode node){ int index = node.getSymbol().getTokenIndex(); String lws = tokens.getHiddenTokensToLeft(index) != null ? tokens.getHiddenTokensToLeft(index).stream().map(Token::getText).collect(joining()) : ""; String rws = tokens.getHiddenTokensToRight(index) != null ? tokens.getHiddenTokensToRight(index).stream().map(Token::getText).collect(joining()) : ""; return lws + node.getText() + rws; }
private String rwhitespace(int tokenIndex){ List<Token> hidden = tokens.getHiddenTokensToRight(tokenIndex); if(hidden == null){ return ""; } Integer newline = newlineOrEOF(hidden); return newline != null ? wsFrom(0, newline, hidden) : ""; }
@SuppressWarnings("unused") private String buildFunctionBody(ExpressionBodyContext expressionBodyContext){ StringBuffer sb=new StringBuffer(); for(ParseTree node:expressionBodyContext.children){ Interval interval=node.getSourceInterval(); int index=interval.a; List<Token> leftTokens=tokenStream.getHiddenTokensToLeft(index); if(leftTokens!=null){ Token token=leftTokens.get(0); String text=token.getText(); sb.append(text); } sb.append(node.getText()); List<Token> rightTokens=tokenStream.getHiddenTokensToRight(index); if(rightTokens!=null){ Token token=rightTokens.get(0); String text=token.getText(); sb.append(text); } } return sb.toString(); }
private void addIgnoredChars(ParserRuleContext ctx, NodeBuilder nodeBuilder) { Token start = ctx.getStart(); int tokenStartIndex = start.getTokenIndex(); List<Token> leftChannel = tokens.getHiddenTokensToLeft(tokenStartIndex, CHANNEL_IGNORED_CHARS); List<IgnoredChar> ignoredCharsLeft = mapTokenToIgnoredChar(leftChannel); Token stop = ctx.getStop(); int tokenStopIndex = stop.getTokenIndex(); List<Token> rightChannel = tokens.getHiddenTokensToRight(tokenStopIndex, CHANNEL_IGNORED_CHARS); List<IgnoredChar> ignoredCharsRight = mapTokenToIgnoredChar(rightChannel); nodeBuilder.ignoredChars(new IgnoredChars(ignoredCharsLeft, ignoredCharsRight)); }
/** Get start/stop of an entire rule including semi and then clean up * WS at end. */ public static String getRuleText(CommonTokenStream tokens, ParserRuleContext ruleDefNode) { Token stop = ruleDefNode.getStop(); Token semi = stop; TerminalNode colonNode = ruleDefNode.getToken(ANTLRv4Parser.COLON, 0); Token colon = colonNode.getSymbol(); Token beforeSemi = tokens.get(stop.getTokenIndex()-1); Token afterColon = tokens.get(colon.getTokenIndex()+1); // trim whitespace/comments before / after rule text List<Token> ignoreBefore = tokens.getHiddenTokensToRight(colon.getTokenIndex()); List<Token> ignoreAfter = tokens.getHiddenTokensToLeft(semi.getTokenIndex()); Token textStart = afterColon; Token textStop = beforeSemi; if ( ignoreBefore!=null ) { Token lastWSAfterColon = ignoreBefore.get(ignoreBefore.size()-1); textStart = tokens.get(lastWSAfterColon.getTokenIndex()+1); } if ( ignoreAfter!=null ) { int firstWSAtEndOfRule = ignoreAfter.get(0).getTokenIndex()-1; textStop = tokens.get(firstWSAtEndOfRule); // stop before 1st ignore token at end } return tokens.getText(textStart, textStop); }
List<Token> hiddenTokensToRight = tokens.getHiddenTokensToRight(stop.getTokenIndex()); if ( hiddenTokensToRight!=null && hiddenTokensToRight.size()>0 ) {
List<Token> hiddenTokensToRight = tokens.getHiddenTokensToRight(stop.getTokenIndex()); if ( hiddenTokensToRight!=null && hiddenTokensToRight.size()>0 ) {