protected List<Comment> getComments(ParserRuleContext ctx) { Token start = ctx.getStart(); if (start != null) { int tokPos = start.getTokenIndex(); List<Token> refChannel = tokens.getHiddenTokensToLeft(tokPos, CHANNEL_COMMENTS); if (refChannel != null) { return getCommentOnChannel(refChannel); } } return Collections.emptyList(); }
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(); }
public static List<Token> getPreviousWS(CommonTokenStream tokens, int i) { List<Token> hiddenTokensToLeft = tokens.getHiddenTokensToLeft(i); if ( hiddenTokensToLeft==null ) return null; return filter(hiddenTokensToLeft, t -> t.getText().matches("\\s+")); }
@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 lwhitespace(int tokenIndex) { List<Token> hidden = tokens.getHiddenTokensToLeft(tokenIndex); if(hidden == null){ return ""; } Integer newline = newlineOrEOF(hidden); newline = newline == null ? 0 : newline; return wsFrom(newline, hidden.size(), 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(); }
protected List<Comment> getComments(ParserRuleContext ctx) { Token start = ctx.getStart(); if (start != null) { int tokPos = start.getTokenIndex(); List<Token> refChannel = tokens.getHiddenTokensToLeft(tokPos, CHANNEL_COMMENTS); if (refChannel != null) { return getCommentOnChannel(refChannel); } } return Collections.emptyList(); }
/** 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); }
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)); }