ProfilerPanel.java 文件源码

java
阅读 25 收藏 0 点赞 0 评论 0

项目:intellij-plugin-v4 作者:
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);
    }
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号