-
Notifications
You must be signed in to change notification settings - Fork 886
JShell Integration: Improve handling of "var" support #8327
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
matthiasblaesing
wants to merge
2
commits into
apache:master
Choose a base branch
from
matthiasblaesing:jshell_lexer
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Entering: var x = "Test"<Enter> into a java platform shell yields exceptions. Checking the java lexer showed, that the java lexer at that point does backtracking and this indicates a problem in the lexer infrastructure. The special case here is, that for the JShell console, it is not "text/java", that is being lexed, but "text/x-repl/text/x-java". I.e. java embedded in the shell input/output. Indeed the JoinLexerInputOperation uses a position tracking, that works independently from the position tracking of the extended LexerInputOperation. While there is code in place, to update the position for the "normal" read case, the "backup" code path is not covered and can not be trivially be covered as the method is final. So this PR replaces the custom position tracking by using the position of the base class and applying the position shift of the embedded token sequences. INFO [org.netbeans.editor.GuardedDocument]: Runtime exception thrown in GuardedDocument.runAtomicAsUser() leading to breakAtomicLock(): java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.netbeans.lib.lexer.JoinLexerInputOperation.createJoinToken(JoinLexerInputOperation.java:267) at org.netbeans.lib.lexer.JoinLexerInputOperation.createDefaultTokenInstance(JoinLexerInputOperation.java:212) at org.netbeans.lib.lexer.LexerInputOperation.createToken(LexerInputOperation.java:294) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:81) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:65) at org.netbeans.lib.java.lexer.JavaLexer.finishIdentifier(JavaLexer.java:1357) at org.netbeans.lib.java.lexer.JavaLexer.nextToken(JavaLexer.java:1163) at org.netbeans.lib.lexer.LexerInputOperation.nextToken(LexerInputOperation.java:191) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:666) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.EmbeddingOperation.embeddedTokenList(EmbeddingOperation.java:174) at org.netbeans.api.lexer.TokenSequence.embeddedImpl(TokenSequence.java:343) at org.netbeans.api.lexer.TokenSequence.embedded(TokenSequence.java:290) at org.netbeans.modules.textmate.lexer.SyntaxHighlighting$HSImpl.moveTheSequence(SyntaxHighlighting.java:453) at org.netbeans.modules.textmate.lexer.SyntaxHighlighting$HSImpl.moveNext(SyntaxHighlighting.java:431) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$Wrapper.fetchNextHighlight(DirectMergeContainer.java:600) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$Wrapper.init(DirectMergeContainer.java:509) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$HlSequence.<init>(DirectMergeContainer.java:211) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer.getHighlights(DirectMergeContainer.java:96) at org.netbeans.modules.editor.lib2.highlighting.HighlightsReader.<init>(HighlightsReader.java:42) at org.netbeans.modules.editor.lib2.view.HighlightsViewFactory.restart(HighlightsViewFactory.java:167) at org.netbeans.modules.editor.lib2.view.ViewBuilder$FactoryState.init(ViewBuilder.java:1299) at org.netbeans.modules.editor.lib2.view.ViewBuilder.createViews(ViewBuilder.java:699) at org.netbeans.modules.editor.lib2.view.ViewBuilder.createReplaceRepaintViews(ViewBuilder.java:660) at org.netbeans.modules.editor.lib2.view.ViewUpdates.updateViewsByModification(ViewUpdates.java:299) at org.netbeans.modules.editor.lib2.view.ViewUpdates.insertUpdate(ViewUpdates.java:235) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:461) at jdk.proxy1/jdk.proxy1.$Proxy31.insertUpdate(Unknown Source) at org.netbeans.lib.editor.util.swing.PriorityDocumentListenerList.insertUpdate(PriorityDocumentListenerList.java:60) at java.desktop/javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:227) at org.netbeans.editor.BaseDocument.fireInsertUpdate(BaseDocument.java:1653) at org.netbeans.editor.BaseDocument.handleInsertString(BaseDocument.java:826) at org.netbeans.editor.BaseDocument$FilterBypassImpl.insertString(BaseDocument.java:2629) at java.desktop/javax.swing.text.DocumentFilter.insertString(DocumentFilter.java:105) at org.netbeans.modules.jshell.model.ConsoleModel$DocFilter.insertString(ConsoleModel.java:888) at org.netbeans.editor.BaseDocument.insertString(BaseDocument.java:745) at org.netbeans.editor.BaseKit$InsertBreakAction.performLineBreakInsertion(BaseKit.java:1610) at org.netbeans.editor.BaseKit$InsertBreakAction.access$400(BaseKit.java:1439) at org.netbeans.editor.BaseKit$InsertBreakAction$2.run(BaseKit.java:1529) [catch] at org.netbeans.editor.GuardedDocument.runAtomicAsUser(GuardedDocument.java:333) at org.netbeans.editor.BaseKit$InsertBreakAction.actionPerformed(BaseKit.java:1520) at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:324) at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810) at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2962) at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3010) at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2924) at java.desktop/java.awt.Component.processEvent(Component.java:6398) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1942) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883) at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1146) at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4877) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) 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) SEVERE [global] java.lang.IndexOutOfBoundsException: View index=8 >= 8 at org.netbeans.modules.editor.lib2.view.DocumentView.getParagraphView(DocumentView.java:318) at org.netbeans.modules.editor.lib2.view.ViewBuilder.initModUpdate(ViewBuilder.java:446) at org.netbeans.modules.editor.lib2.view.ViewUpdates.updateViewsByModification(ViewUpdates.java:298) at org.netbeans.modules.editor.lib2.view.ViewUpdates.removeUpdate(ViewUpdates.java:265) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:461) at jdk.proxy1/jdk.proxy1.$Proxy31.removeUpdate(Unknown Source) at org.netbeans.lib.editor.util.swing.PriorityDocumentListenerList.removeUpdate(PriorityDocumentListenerList.java:91) at java.desktop/javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:285) at org.netbeans.editor.BaseDocument.fireRemoveUpdate(BaseDocument.java:1656) at org.netbeans.editor.BaseDocumentEvent.undo(BaseDocumentEvent.java:266) at org.netbeans.editor.GuardedDocumentEvent.undo(GuardedDocumentEvent.java:47) at org.netbeans.modules.editor.lib2.document.StableCompoundEdit.undo(StableCompoundEdit.java:70) at org.netbeans.editor.BaseDocument$AtomicCompoundEdit.undo(BaseDocument.java:2296) at org.netbeans.editor.BaseDocument.undoAtomicEdits(BaseDocument.java:2202) at org.netbeans.editor.BaseDocument.breakAtomicLock(BaseDocument.java:1831) at org.netbeans.editor.GuardedDocument.runAtomicAsUser(GuardedDocument.java:339) at org.netbeans.editor.BaseKit$InsertBreakAction.actionPerformed(BaseKit.java:1520) at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:324) at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810) at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2962) at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3010) at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2924) at java.desktop/java.awt.Component.processEvent(Component.java:6398) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1942) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883) at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1146) at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4877) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) [catch] 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) SEVERE [global] java.lang.IndexOutOfBoundsException: index=1 >= size()=1 at org.netbeans.lib.lexer.JoinTokenList.tokenList(JoinTokenList.java:170) at org.netbeans.lib.lexer.JoinLexerInputOperation.tokenList(JoinLexerInputOperation.java:190) at org.netbeans.lib.lexer.JoinLexerInputOperation.fetchActiveTokenList(JoinLexerInputOperation.java:183) at org.netbeans.lib.lexer.JoinLexerInputOperation.createJoinToken(JoinLexerInputOperation.java:247) at org.netbeans.lib.lexer.JoinLexerInputOperation.createDefaultTokenInstance(JoinLexerInputOperation.java:212) at org.netbeans.lib.lexer.LexerInputOperation.createToken(LexerInputOperation.java:294) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:81) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:65) at org.netbeans.lib.java.lexer.JavaLexer.finishIdentifier(JavaLexer.java:1357) at org.netbeans.lib.java.lexer.JavaLexer.nextToken(JavaLexer.java:1163) at org.netbeans.lib.lexer.LexerInputOperation.nextToken(LexerInputOperation.java:191) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:666) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.EmbeddingOperation.embeddedTokenList(EmbeddingOperation.java:174) at org.netbeans.api.lexer.TokenSequence.embeddedImpl(TokenSequence.java:343) at org.netbeans.api.lexer.TokenSequence.embedded(TokenSequence.java:290) at org.netbeans.lib.lexer.TokenHierarchyOperation.embeddedTokenSequences(TokenHierarchyOperation.java:454) at org.netbeans.api.lexer.TokenHierarchy.embeddedTokenSequences(TokenHierarchy.java:240) at org.netbeans.modules.editor.completion.CompletionImpl$7.run(CompletionImpl.java:616) at org.netbeans.editor.BaseDocument.render(BaseDocument.java:1406) at org.netbeans.modules.editor.completion.CompletionImpl.getMimePath(CompletionImpl.java:613) at org.netbeans.modules.editor.completion.CompletionImpl.ensureActiveProviders(CompletionImpl.java:538) at org.netbeans.modules.editor.completion.CompletionImpl.caretUpdate(CompletionImpl.java:366) at java.desktop/javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:408) at java.desktop/javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4484) at java.desktop/javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4506) at org.netbeans.api.editor.caret.EditorCaret$6.run(EditorCaret.java:1733) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) [catch] 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) SEVERE [org.openide.util.Exceptions] java.lang.AssertionError: Non-null joinInfo in tokenList ETL@500a3238j<230,249> TC=0(0) JI:<0(R0),0>, tli=0(R0), lps=0 JTLL for "text/x-repl/text/x-java" [0]: ETL@500a3238j<230,249> TC=0(0) JI:<0(R0),0>, tli=0(R0), lps=0 at org.netbeans.lib.lexer.JoinTokenList.initTokenList(JoinTokenList.java:743) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:665) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:97) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.TokenSequenceList.<init>(TokenSequenceList.java:84) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenSequenceList(TokenHierarchyOperation.java:430) at org.netbeans.api.lexer.TokenHierarchy.tokenSequenceList(TokenHierarchy.java:204) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.getMIMETypesOnLine(EditorContextDispatcher.java:327) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.getMIMETypesOnCurrentLine(EditorContextDispatcher.java:286) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) Caused: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) [catch] at org.netbeans.spi.debugger.ActionsProvider$ContextAware.isCurrentMIMETypeIn(ActionsProvider.java:382) at org.netbeans.spi.debugger.ActionsProvider$ContextAware.isEnabled(ActionsProvider.java:253) at org.netbeans.api.debugger.ActionsManager.isEnabled(ActionsManager.java:327) at org.netbeans.api.debugger.ActionsManager.fireActionStateChanged(ActionsManager.java:471) at org.netbeans.api.debugger.ActionsManager.lambda$new$0(ActionsManager.java:118) at org.netbeans.spi.debugger.ActionsProviderSupport.fireActionStateChanged(ActionsProviderSupport.java:86) at org.netbeans.spi.debugger.ActionsProviderSupport.setEnabled(ActionsProviderSupport.java:73) at org.netbeans.modules.debugger.jpda.truffle.actions.ToggleBreakpointsInLanguagesActionProvider.propertyChange(ToggleBreakpointsInLanguagesActionProvider.java:131) at org.openide.util.WeakListenerImpl$PropertyChange.propertyChange(WeakListenerImpl.java:189) at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:343) at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:335) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.firePropertyChange(EditorContextDispatcher.java:521) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.access$2000(EditorContextDispatcher.java:101) at org.netbeans.spi.debugger.ui.EditorContextDispatcher$EventFirer.run(EditorContextDispatcher.java:990) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018) INFO [org.netbeans.editor.GuardedDocument]: Runtime exception thrown in GuardedDocument.runAtomicAsUser() leading to breakAtomicLock(): java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.netbeans.lib.lexer.JoinLexerInputOperation.createJoinToken(JoinLexerInputOperation.java:267) at org.netbeans.lib.lexer.JoinLexerInputOperation.createDefaultTokenInstance(JoinLexerInputOperation.java:212) at org.netbeans.lib.lexer.LexerInputOperation.createToken(LexerInputOperation.java:294) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:81) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:65) at org.netbeans.lib.java.lexer.JavaLexer.finishIdentifier(JavaLexer.java:1357) at org.netbeans.lib.java.lexer.JavaLexer.nextToken(JavaLexer.java:1163) at org.netbeans.lib.lexer.LexerInputOperation.nextToken(LexerInputOperation.java:191) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:666) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.EmbeddingOperation.embeddedTokenList(EmbeddingOperation.java:174) at org.netbeans.api.lexer.TokenSequence.embeddedImpl(TokenSequence.java:343) at org.netbeans.api.lexer.TokenSequence.embedded(TokenSequence.java:290) at org.netbeans.modules.textmate.lexer.SyntaxHighlighting$HSImpl.moveTheSequence(SyntaxHighlighting.java:453) at org.netbeans.modules.textmate.lexer.SyntaxHighlighting$HSImpl.moveNext(SyntaxHighlighting.java:431) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$Wrapper.fetchNextHighlight(DirectMergeContainer.java:600) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$Wrapper.init(DirectMergeContainer.java:509) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer$HlSequence.<init>(DirectMergeContainer.java:211) at org.netbeans.modules.editor.lib2.highlighting.DirectMergeContainer.getHighlights(DirectMergeContainer.java:96) at org.netbeans.modules.editor.lib2.highlighting.HighlightsReader.<init>(HighlightsReader.java:42) at org.netbeans.modules.editor.lib2.view.HighlightsViewFactory.restart(HighlightsViewFactory.java:167) at org.netbeans.modules.editor.lib2.view.ViewBuilder$FactoryState.init(ViewBuilder.java:1299) at org.netbeans.modules.editor.lib2.view.ViewBuilder.createViews(ViewBuilder.java:699) at org.netbeans.modules.editor.lib2.view.ViewBuilder.createReplaceRepaintViews(ViewBuilder.java:660) at org.netbeans.modules.editor.lib2.view.ViewUpdates.updateViewsByModification(ViewUpdates.java:299) at org.netbeans.modules.editor.lib2.view.ViewUpdates.insertUpdate(ViewUpdates.java:235) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:461) at jdk.proxy1/jdk.proxy1.$Proxy31.insertUpdate(Unknown Source) at org.netbeans.lib.editor.util.swing.PriorityDocumentListenerList.insertUpdate(PriorityDocumentListenerList.java:60) at java.desktop/javax.swing.text.AbstractDocument.fireInsertUpdate(AbstractDocument.java:227) at org.netbeans.editor.BaseDocument.fireInsertUpdate(BaseDocument.java:1653) at org.netbeans.editor.BaseDocument.handleInsertString(BaseDocument.java:826) at org.netbeans.editor.BaseDocument$FilterBypassImpl.insertString(BaseDocument.java:2629) at java.desktop/javax.swing.text.DocumentFilter.insertString(DocumentFilter.java:105) at org.netbeans.modules.jshell.model.ConsoleModel$DocFilter.insertString(ConsoleModel.java:888) at org.netbeans.editor.BaseDocument.insertString(BaseDocument.java:745) at org.netbeans.editor.BaseKit$InsertBreakAction.performLineBreakInsertion(BaseKit.java:1610) at org.netbeans.editor.BaseKit$InsertBreakAction.access$400(BaseKit.java:1439) at org.netbeans.editor.BaseKit$InsertBreakAction$2.run(BaseKit.java:1529) [catch] at org.netbeans.editor.GuardedDocument.runAtomicAsUser(GuardedDocument.java:333) at org.netbeans.editor.BaseKit$InsertBreakAction.actionPerformed(BaseKit.java:1520) at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:324) at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810) at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2962) at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3010) at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2924) at java.desktop/java.awt.Component.processEvent(Component.java:6398) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1942) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883) at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1146) at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4877) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) 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) SEVERE [global] java.lang.IndexOutOfBoundsException: View index=8 >= 8 at org.netbeans.modules.editor.lib2.view.DocumentView.getParagraphView(DocumentView.java:318) at org.netbeans.modules.editor.lib2.view.ViewBuilder.initModUpdate(ViewBuilder.java:446) at org.netbeans.modules.editor.lib2.view.ViewUpdates.updateViewsByModification(ViewUpdates.java:298) at org.netbeans.modules.editor.lib2.view.ViewUpdates.removeUpdate(ViewUpdates.java:265) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:461) at jdk.proxy1/jdk.proxy1.$Proxy31.removeUpdate(Unknown Source) at org.netbeans.lib.editor.util.swing.PriorityDocumentListenerList.removeUpdate(PriorityDocumentListenerList.java:91) at java.desktop/javax.swing.text.AbstractDocument.fireRemoveUpdate(AbstractDocument.java:285) at org.netbeans.editor.BaseDocument.fireRemoveUpdate(BaseDocument.java:1656) at org.netbeans.editor.BaseDocumentEvent.undo(BaseDocumentEvent.java:266) at org.netbeans.editor.GuardedDocumentEvent.undo(GuardedDocumentEvent.java:47) at org.netbeans.modules.editor.lib2.document.StableCompoundEdit.undo(StableCompoundEdit.java:70) at org.netbeans.editor.BaseDocument$AtomicCompoundEdit.undo(BaseDocument.java:2296) at org.netbeans.editor.BaseDocument.undoAtomicEdits(BaseDocument.java:2202) at org.netbeans.editor.BaseDocument.breakAtomicLock(BaseDocument.java:1831) at org.netbeans.editor.GuardedDocument.runAtomicAsUser(GuardedDocument.java:339) at org.netbeans.editor.BaseKit$InsertBreakAction.actionPerformed(BaseKit.java:1520) at org.netbeans.editor.BaseAction.actionPerformed(BaseAction.java:324) at java.desktop/javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1810) at java.desktop/javax.swing.JComponent.processKeyBinding(JComponent.java:2962) at java.desktop/javax.swing.JComponent.processKeyBindings(JComponent.java:3010) at java.desktop/javax.swing.JComponent.processKeyEvent(JComponent.java:2924) at java.desktop/java.awt.Component.processEvent(Component.java:6398) at java.desktop/java.awt.Container.processEvent(Container.java:2266) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4996) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1942) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:883) at java.desktop/java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1146) at java.desktop/java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:1020) at java.desktop/java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:848) at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4877) at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324) at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780) at java.desktop/java.awt.Component.dispatchEvent(Component.java:4828) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:98) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747) at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) [catch] 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) SEVERE [global] java.lang.IndexOutOfBoundsException: index=1 >= size()=1 at org.netbeans.lib.lexer.JoinTokenList.tokenList(JoinTokenList.java:170) at org.netbeans.lib.lexer.JoinLexerInputOperation.tokenList(JoinLexerInputOperation.java:190) at org.netbeans.lib.lexer.JoinLexerInputOperation.fetchActiveTokenList(JoinLexerInputOperation.java:183) at org.netbeans.lib.lexer.JoinLexerInputOperation.createJoinToken(JoinLexerInputOperation.java:247) at org.netbeans.lib.lexer.JoinLexerInputOperation.createDefaultTokenInstance(JoinLexerInputOperation.java:212) at org.netbeans.lib.lexer.LexerInputOperation.createToken(LexerInputOperation.java:294) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:81) at org.netbeans.spi.lexer.TokenFactory.createToken(TokenFactory.java:65) at org.netbeans.lib.java.lexer.JavaLexer.finishIdentifier(JavaLexer.java:1357) at org.netbeans.lib.java.lexer.JavaLexer.nextToken(JavaLexer.java:1163) at org.netbeans.lib.lexer.LexerInputOperation.nextToken(LexerInputOperation.java:191) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:666) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.EmbeddingOperation.embeddedTokenList(EmbeddingOperation.java:174) at org.netbeans.api.lexer.TokenSequence.embeddedImpl(TokenSequence.java:343) at org.netbeans.api.lexer.TokenSequence.embedded(TokenSequence.java:290) at org.netbeans.lib.lexer.TokenHierarchyOperation.embeddedTokenSequences(TokenHierarchyOperation.java:454) at org.netbeans.api.lexer.TokenHierarchy.embeddedTokenSequences(TokenHierarchy.java:240) at org.netbeans.modules.editor.completion.CompletionImpl$7.run(CompletionImpl.java:616) at org.netbeans.editor.BaseDocument.render(BaseDocument.java:1406) at org.netbeans.modules.editor.completion.CompletionImpl.getMimePath(CompletionImpl.java:613) at org.netbeans.modules.editor.completion.CompletionImpl.ensureActiveProviders(CompletionImpl.java:538) at org.netbeans.modules.editor.completion.CompletionImpl.caretUpdate(CompletionImpl.java:366) at java.desktop/javax.swing.text.JTextComponent.fireCaretUpdate(JTextComponent.java:408) at java.desktop/javax.swing.text.JTextComponent$MutableCaretEvent.fire(JTextComponent.java:4484) at java.desktop/javax.swing.text.JTextComponent$MutableCaretEvent.stateChanged(JTextComponent.java:4506) at org.netbeans.api.editor.caret.EditorCaret$6.run(EditorCaret.java:1733) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) [catch] 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) SEVERE [org.openide.util.Exceptions] java.lang.AssertionError: Non-null joinInfo in tokenList ETL@500a3238j<230,249> TC=0(0) JI:<0(R0),0>, tli=0(R0), lps=0 JTLL for "text/x-repl/text/x-java" [0]: ETL@500a3238j<230,249> TC=0(0) JI:<0(R0),0>, tli=0(R0), lps=0 at org.netbeans.lib.lexer.JoinTokenList.initTokenList(JoinTokenList.java:743) at org.netbeans.lib.lexer.JoinTokenList.init(JoinTokenList.java:665) at org.netbeans.lib.lexer.JoinTokenList.create(JoinTokenList.java:74) at org.netbeans.lib.lexer.TokenListList.checkCreateJoinTokenList(TokenListList.java:147) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:106) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.TokenListList.<init>(TokenListList.java:97) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenListList(TokenHierarchyOperation.java:478) at org.netbeans.lib.lexer.TokenSequenceList.<init>(TokenSequenceList.java:84) at org.netbeans.lib.lexer.TokenHierarchyOperation.tokenSequenceList(TokenHierarchyOperation.java:430) at org.netbeans.api.lexer.TokenHierarchy.tokenSequenceList(TokenHierarchy.java:204) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.getMIMETypesOnLine(EditorContextDispatcher.java:327) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.getMIMETypesOnCurrentLine(EditorContextDispatcher.java:286) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) Caused: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) [catch] at org.netbeans.spi.debugger.ActionsProvider$ContextAware.isCurrentMIMETypeIn(ActionsProvider.java:382) at org.netbeans.spi.debugger.ActionsProvider$ContextAware.isEnabled(ActionsProvider.java:253) at org.netbeans.api.debugger.ActionsManager.isEnabled(ActionsManager.java:327) at org.netbeans.api.debugger.ActionsManager.fireActionStateChanged(ActionsManager.java:471) at org.netbeans.api.debugger.ActionsManager.lambda$new$0(ActionsManager.java:118) at org.netbeans.spi.debugger.ActionsProviderSupport.fireActionStateChanged(ActionsProviderSupport.java:86) at org.netbeans.spi.debugger.ActionsProviderSupport.setEnabled(ActionsProviderSupport.java:73) at org.netbeans.modules.debugger.jpda.truffle.actions.ToggleBreakpointsInLanguagesActionProvider.propertyChange(ToggleBreakpointsInLanguagesActionProvider.java:131) at org.openide.util.WeakListenerImpl$PropertyChange.propertyChange(WeakListenerImpl.java:189) at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:343) at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:335) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.firePropertyChange(EditorContextDispatcher.java:521) at org.netbeans.spi.debugger.ui.EditorContextDispatcher.access$2000(EditorContextDispatcher.java:101) at org.netbeans.spi.debugger.ui.EditorContextDispatcher$EventFirer.run(EditorContextDispatcher.java:990) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403) at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45) at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018)
- parser falsely reports that var is not supported - parser reports missing semikolon The first condition needs to be newly caught, the second condition was partially caug in SemicolonMissingRule, but failed because there is an potential off-by-one issue.
I intent to merge this early in the NB27 cycle. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
ci:dev-build
[ci] produce a dev-build zip artifact (7 days expiration, see link on workflow summary page)
Java
[ci] enable extra Java tests (java.completion, java.source.base, java.hints, refactoring.java, form)
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Part 1: Lexer: Improve handling of grammars using a lexer with backtracking
Entering:
into a java platform shell yields exceptions. Checking the java lexer
showed, that the java lexer at that point does backtracking and this
indicates a problem in the lexer infrastructure. The problem seems
to be caused by the generic lexer infrastructure, which has special
handling for languages embedded into other languages. In the case of
the jshell lexer, this is java code inside the shells code. In combination
with a backtracking lexer this seems to break lexing.
Part 2: Improve handling of
var
StatementThe first condition needs to be newly caught, the second condition was
partially caught in
SemicolonMissingRule
, but failed because there is anpotential off-by-one issue.