antlr / intellij-plugin-v4

An IntelliJ plugin for ANTLR v4
https://plugins.jetbrains.com/plugin/7358-antlr-v4
BSD 3-Clause "New" or "Revised" License
462 stars 103 forks source link

Exception displaying HierarchyViewer #565

Closed parrt closed 2 years ago

parrt commented 2 years ago

It is using Trees.getNodeText(node, ruleNames) for HierarchyViewer but I was setting rules to empty before the tree itself, which would cause a race: view updates before model does. Order is now:

hierarchyViewer.setTree(null);
hierarchyViewer.setRuleNames(Collections.emptyList());
java.lang.IndexOutOfBoundsException: Index: 1
    at java.base/java.util.Collections$EmptyList.get(Collections.java:4483)
    at org.antlr.v4.runtime.tree.Trees.getNodeText(Trees.java:74)
    at org.antlr.v4.gui.TreeViewer$DefaultTreeTextProvider.getText(TreeViewer.java:65)
    at org.antlr.intellij.plugin.preview.HierarchyViewer$1.toString(HierarchyViewer.java:81)
    at java.desktop/javax.swing.JTree.convertValueToText(JTree.java:1617)
    at java.desktop/javax.swing.tree.DefaultTreeCellRenderer.getTreeCellRendererComponent(DefaultTreeCellRenderer.java:495)
    at com.intellij.ui.tree.ui.DefaultTreeUI.getRenderer(DefaultTreeUI.java:177)
    at com.intellij.ui.tree.ui.DefaultTreeUI$2.getNodeDimensions(DefaultTreeUI.java:479)
    at java.desktop/javax.swing.tree.AbstractLayoutCache.getNodeDimensions(AbstractLayoutCache.java:493)
    at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(VariableHeightLayoutCache.java:1344)
    at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.getXOrigin(VariableHeightLayoutCache.java:1127)
    at java.desktop/javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.getNodeBounds(VariableHeightLayoutCache.java:1114)
    at java.desktop/javax.swing.tree.VariableHeightLayoutCache.getBounds(VariableHeightLayoutCache.java:219)
    at java.desktop/javax.swing.plaf.basic.BasicTreeUI.getPathBounds(BasicTreeUI.java:652)
    at java.desktop/javax.swing.plaf.basic.BasicTreeUI.getPathBounds(BasicTreeUI.java:645)
    at com.intellij.ui.tree.ui.DefaultTreeUI.getPathBounds(DefaultTreeUI.java:598)
    at com.intellij.ui.tree.ui.DefaultTreeUI.repaintPath(DefaultTreeUI.java:204)
    at com.intellij.ui.tree.ui.DefaultTreeUI$5.propertyChange(DefaultTreeUI.java:583)
    at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:341)
    at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
    at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:266)
    at java.desktop/java.awt.Component.firePropertyChange(Component.java:8756)
    at java.desktop/javax.swing.JTree.setLeadSelectionPath(JTree.java:1688)
    at java.desktop/javax.swing.plaf.basic.BasicTreeUI.setLeadSelectionPath(BasicTreeUI.java:2785)
    at java.desktop/javax.swing.plaf.basic.BasicTreeUI.setLeadSelectionPath(BasicTreeUI.java:2776)
    at java.desktop/javax.swing.plaf.basic.BasicTreeUI$Handler.valueChanged(BasicTreeUI.java:4168)
    at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:641)
    at com.intellij.ui.treeStructure.Tree$MySelectionModel.fireValueChanged(Tree.java:619)
    at java.desktop/javax.swing.tree.DefaultTreeSelectionModel.clearSelection(DefaultTreeSelectionModel.java:580)
    at java.desktop/javax.swing.JTree.clearSelection(JTree.java:2701)
    at java.desktop/javax.swing.JTree.setModel(JTree.java:861)
    at org.antlr.intellij.plugin.preview.HierarchyViewer.setTree(HierarchyViewer.java:63)
    at org.antlr.intellij.plugin.preview.PreviewPanel.lambda$clearTabs$1(PreviewPanel.java:390)
    at com.intellij.openapi.application.TransactionGuardImpl.runWithWritingAllowed(TransactionGuardImpl.java:214)
    at com.intellij.openapi.application.TransactionGuardImpl.access$200(TransactionGuardImpl.java:21)
    at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:196)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
    at com.intellij.openapi.application.impl.ApplicationImpl.lambda$invokeLater$4(ApplicationImpl.java:348)
    at com.intellij.openapi.application.impl.FlushQueue.doRun(FlushQueue.java:82)
    at com.intellij.openapi.application.impl.FlushQueue.runNextEvent(FlushQueue.java:131)
    at com.intellij.openapi.application.impl.FlushQueue.flushNow(FlushQueue.java:47)
    at com.intellij.openapi.application.impl.FlushQueue$FlushNow.run(FlushQueue.java:187)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:776)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:727)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:746)
    at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:891)
    at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:760)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$6(IdeEventQueue.java:447)
    at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:818)
    at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$7(IdeEventQueue.java:446)
    at com.intellij.openapi.application.impl.ApplicationImpl.runIntendedWriteActionOnCurrentThread(ApplicationImpl.java:805)
    at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:492)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)