public void closeGrammar(VirtualFile grammarFile) {
    String grammarFileName = grammarFile.getPath();
    LOG.info("closeGrammar " + grammarFileName + " " + project.getName());

    inputPanel.resetStartRuleLabel();
    inputPanel.clearErrorConsole();
    clearParseTree(); // wipe tree

    ANTLRv4PluginController controller = ANTLRv4PluginController.getInstance(project);
    PreviewState previewState = controller.getPreviewState(grammarFile);
    inputPanel.releaseEditor(previewState);
  }
  public void createGUI() {
    this.setLayout(new BorderLayout());

    // Had to set min size / preferred size in InputPanel.form to get slider to allow left shift of
    // divider
    Splitter splitPane = new Splitter();
    inputPanel = getEditorPanel();
    splitPane.setFirstComponent(inputPanel.getComponent());
    splitPane.setSecondComponent(createParseTreeAndProfileTabbedPanel());

    this.add(splitPane, BorderLayout.CENTER);
  }
 public void ensureStartRuleExists(VirtualFile grammarFile) {
   PreviewState previewState =
       ANTLRv4PluginController.getInstance(project).getPreviewState(grammarFile);
   // if start rule no longer exists, reset display/state.
   if (previewState.g != ParsingUtils.BAD_PARSER_GRAMMAR && previewState.startRuleName != null) {
     Rule rule = previewState.g.getRule(previewState.startRuleName);
     if (rule == null) {
       previewState.startRuleName = null;
       inputPanel.resetStartRuleLabel();
     }
   }
 }
  /** Notify the preview tool window contents that the grammar file has changed */
  public void grammarFileSaved(VirtualFile grammarFile) {
    String grammarFileName = grammarFile.getPath();
    LOG.info("grammarFileSaved " + grammarFileName + " " + project.getName());
    ANTLRv4PluginController controller = ANTLRv4PluginController.getInstance(project);
    PreviewState previewState = controller.getPreviewState(grammarFile);

    ensureStartRuleExists(grammarFile);
    inputPanel.grammarFileSaved(grammarFile);

    // if the saved grammar is not a pure lexer and there is a start rule, reparse
    // means that switching grammars must refresh preview
    if (previewState.g != null && previewState.startRuleName != null) {
      updateParseTreeFromDoc(previewState.grammarFile);
    } else {
      setParseTree(Collections.<String>emptyList(), null); // blank tree
    }

    profilerPanel.grammarFileSaved(previewState, grammarFile);
  }
  /** Load grammars and set editor component. */
  public void switchToGrammar(VirtualFile oldFile, VirtualFile grammarFile) {
    String grammarFileName = grammarFile.getPath();
    LOG.info("switchToGrammar " + grammarFileName + " " + project.getName());
    ANTLRv4PluginController controller = ANTLRv4PluginController.getInstance(project);
    PreviewState previewState = controller.getPreviewState(grammarFile);

    inputPanel.switchToGrammar(grammarFile);

    if (previewState.startRuleName != null) {
      updateParseTreeFromDoc(grammarFile);
    } else {
      setParseTree(Collections.<String>emptyList(), null); // blank tree
    }

    profilerPanel.switchToGrammar(previewState, grammarFile);

    if (previewState.g == null && previewState.lg != null) {
      setEnabled(false);
    } else {
      setEnabled(true);
    }
  }