public void selectDecisionInGrammar(PreviewState previewState, int decision) {
final ANTLRv4PluginController controller = ANTLRv4PluginController.getInstance(previewState.project);
if ( controller==null ) return;
final Editor grammarEditor = controller.getEditor(previewState.grammarFile);
if ( grammarEditor==null ) return;
DecisionState decisionState = previewState.g.atn.getDecisionState(decision);
Interval region = previewState.g.getStateToGrammarRegion(decisionState.stateNumber);
if ( region==null ) {
System.err.println("decision "+decision+" has state "+decisionState.stateNumber+" but no region");
return;
}
InputPanel.removeHighlighters(grammarEditor, ProfilerPanel.DECISION_INFO_KEY);
org.antlr.runtime.TokenStream tokens = previewState.g.tokenStream;
if ( region.a>=tokens.size() || region.b>=tokens.size() ) {
// System.out.println("out of range: " + region + " tokens.size()=" + tokens.size());
return;
}
CommonToken startToken = (CommonToken) tokens.get(region.a);
CommonToken stopToken = (CommonToken) tokens.get(region.b);
JBColor effectColor = JBColor.darkGray;
DecisionInfo decisionInfo = previewState.parsingResult.parser.getParseInfo().getDecisionInfo()[decision];
if ( decisionInfo.predicateEvals.size()>0 ) {
effectColor = new JBColor(PREDEVAL_COLOR, AMBIGUITY_COLOR);
}
if ( decisionInfo.contextSensitivities.size()>0 ) {
effectColor = new JBColor(FULLCTX_COLOR, AMBIGUITY_COLOR);
}
if ( decisionInfo.ambiguities.size()>0 ) {
effectColor = new JBColor(AMBIGUITY_COLOR, AMBIGUITY_COLOR);
}
TextAttributes attr =
new TextAttributes(JBColor.BLACK, JBColor.WHITE, effectColor,
EffectType.ROUNDED_BOX, Font.PLAIN);
MarkupModel markupModel = grammarEditor.getMarkupModel();
final RangeHighlighter rangeHighlighter = markupModel.addRangeHighlighter(
startToken.getStartIndex(),
stopToken.getStopIndex()+1,
HighlighterLayer.SELECTION, // layer
attr,
HighlighterTargetArea.EXACT_RANGE
);
rangeHighlighter.putUserData(DECISION_INFO_KEY, decisionInfo);
// System.out.println("dec " + decision + " from " + startToken + " to " + stopToken);
ScrollingModel scrollingModel = grammarEditor.getScrollingModel();
CaretModel caretModel = grammarEditor.getCaretModel();
caretModel.moveToOffset(startToken.getStartIndex());
scrollingModel.scrollToCaret(ScrollType.MAKE_VISIBLE);
}
ProfilerPanel.java 文件源码
java
阅读 25
收藏 0
点赞 0
评论 0
项目:intellij-plugin-v4
作者:
评论列表
文章目录