Infinite loop on code with syntax errors
Migrated from http://lampsvn.epfl.ch/trac/scala/ticket/567
Reporter dragos
After some digging, I could come up with some stack traces. The most recent 3-4 frames change at each stack dump, so it must be looping in there:
It is pretty easy to reproduce. Just type a partial function and remove the closing brace (I actually didn't have to do that, it was simply not inserted automatically). When you have the following text, press ctrl-space to invoke code completion at the point where the cursor is:
Reporter dragos
After some digging, I could come up with some stack traces. The most recent 3-4 frames change at each stack dump, so it must be looping in there:
It is pretty easy to reproduce. Just type a partial function and remove the closing brace (I actually didn't have to do that, it was simply not inserted automatically). When you have the following text, press ctrl-space to invoke code completion at the point where the cursor is:
case class Foo1(v: Int) {
val xs = List(1, 2, 3)
({
case x :: x| // here press ctrl-space
)
}
The parenthesis are needed."main" prio=10 tid=0x080b1800 nid=0x672e runnable [0xffff9000..0xffffd318]
java.lang.Thread.State: RUNNABLE
at scala.tools.editor.Parsers$FileImpl$ParseNodeImpl$Parser.in(Parsers.scala:328)
at scala.tools.nsc.ast.parser.Parsers$Parser.scala$tools$nsc$ast$parser$Parsers$Parser$$inToken(Parsers.scala:117)
at scala.tools.nsc.ast.parser.Parsers$Parser.isStatSep(Parsers.scala:363)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$blockStatSeq$1.apply(Parsers.scala:2465)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$blockStatSeq$1.apply(Parsers.scala:2450)
at scala.tools.nsc.ast.parser.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:170)
at scala.tools.nsc.ast.parser.Parsers$Parser.blockStatSeq(Parsers.scala:2450)
at scala.tools.nsc.ast.parser.Parsers$Parser.block(Parsers.scala:1241)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseBlock(Parsers.scala:1262)
at scala.tools.editor.Parsers$Parser.caseBlock(Parsers.scala:56)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseClause(Parsers.scala:1258)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseClauses(Parsers.scala:1247)
at scala.tools.nsc.ast.parser.Parsers$Parser.blockExpr(Parsers.scala:1231)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExpr(Parsers.scala:1174)
at scala.tools.nsc.ast.parser.Parsers$Parser.prefixExpr(Parsers.scala:1136)
at scala.tools.nsc.ast.parser.Parsers$Parser.postfixExpr(Parsers.scala:1088)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:1025)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:942)
at scala.tools.nsc.ast.parser.Parsers$Parser.exprs(Parsers.scala:906)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$12.apply(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$12.apply(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser.surround(Parsers.scala:295)
at scala.tools.nsc.ast.parser.Parsers$Parser.argumentExprs(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExprRest(Parsers.scala:1206)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExprRest(Parsers.scala:1206)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExpr(Parsers.scala:1186)
at scala.tools.nsc.ast.parser.Parsers$Parser.prefixExpr(Parsers.scala:1136)
at scala.tools.nsc.ast.parser.Parsers$Parser.postfixExpr(Parsers.scala:1088)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:1025)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:942)
at scala.tools.nsc.ast.parser.Parsers$Parser.exprs(Parsers.scala:906)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExpr(Parsers.scala:1170)
at scala.tools.nsc.ast.parser.Parsers$Parser.prefixExpr(Parsers.scala:1136)
at scala.tools.nsc.ast.parser.Parsers$Parser.postfixExpr(Parsers.scala:1088)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:1025)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:942)
at scala.tools.nsc.ast.parser.Parsers$Parser.patDefOrDcl(Parsers.scala:1968)
at scala.tools.nsc.ast.parser.Parsers$Parser.defOrDcl(Parsers.scala:1927)
at scala.tools.nsc.ast.parser.Parsers$Parser.nonLocalDefOrDcl(Parsers.scala:1943)
at scala.tools.editor.Parsers$Parser.nonLocalDefOrDcl0(Parsers.scala:80)
at scala.tools.editor.Parsers$NonLocalDefOrDcl$.apply(Parsers.scala:174)
at scala.tools.editor.Parsers$NonLocalDefOrDcl$.apply(Parsers.scala:173)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$$anonfun$completions$1.apply(TypersPresentations.scala:462)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$$anonfun$completions$1.apply(TypersPresentations.scala:462)
at lampion.compiler.Typers$ParseNodeImpl$class.doMagic0(Typers.scala:97)
at scala.tools.editor.Driver$ProjectImpl$FileImpl$ParseNode.doMagic0(Driver.scala:19)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$class.completions(TypersPresentations.scala:462)
at scala.tools.editor.Driver$ProjectImpl$FileImpl$Token.completions(Driver.scala:25)
at lampion.presentation.Presentations$ProjectImpl$FileImpl$class.doComplete(Presentations.scala:107)
at scala.tools.eclipse.Driver$Project$File.doComplete(Driver.scala:13)
at lampion.eclipse.Editor$contentAssistProcessor$.computeCompletionProposals(Editor.scala:339)
at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:1759)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:478)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$16(CompletionProposalPopup.java:475)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:410)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:404)
at org.eclipse.jface.text.contentassist.ContentAssistant.showPossibleCompletions(ContentAssistant.java:1588)
at org.eclipse.jface.text.source.SourceViewer.doOperation(SourceViewer.java:773)
at org.eclipse.jface.text.source.projection.ProjectionViewer.doOperation(ProjectionViewer.java:1429)
at org.eclipse.ui.texteditor.ContentAssistAction$1.run(ContentAssistAction.java:82)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.texteditor.ContentAssistAction.run(ContentAssistAction.java:80)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:185)
at org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:109)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:475)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:429)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:165)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:470)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:821)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:879)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:568)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:510)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:126)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1423)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1100)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1125)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1110)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1137)
at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:663)
at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:2533)
at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:679)
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1486)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4234)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3973)
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:5593)
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1192)
at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1487)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2969)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
or, for instance:"main" prio=10 tid=0x080b1800 nid=0x6ed5 runnable [0xffff9000..0xffffd318]
java.lang.Thread.State: RUNNABLE
at lampion.compiler.Parsers$FileImpl$ParseNodeImpl$ParserImpl$class.node(Parsers.scala:142)
at scala.tools.editor.Parsers$FileImpl$ParseNodeImpl$Parser.node(Parsers.scala:257)
at scala.tools.editor.Parsers$Parser.skip(Parsers.scala:24)
at scala.tools.nsc.ast.parser.Parsers$Parser.syntaxError(Parsers.scala:243)
at scala.tools.nsc.ast.parser.Parsers$Parser.syntaxErrorOrIncomplete(Parsers.scala:253)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$blockStatSeq$1.apply(Parsers.scala:2468)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$blockStatSeq$1.apply(Parsers.scala:2450)
at scala.tools.nsc.ast.parser.Parsers$Parser.checkNoEscapingPlaceholders(Parsers.scala:170)
at scala.tools.nsc.ast.parser.Parsers$Parser.blockStatSeq(Parsers.scala:2450)
at scala.tools.nsc.ast.parser.Parsers$Parser.block(Parsers.scala:1241)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseBlock(Parsers.scala:1262)
at scala.tools.editor.Parsers$Parser.caseBlock(Parsers.scala:56)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseClause(Parsers.scala:1258)
at scala.tools.nsc.ast.parser.Parsers$Parser.caseClauses(Parsers.scala:1247)
at scala.tools.nsc.ast.parser.Parsers$Parser.blockExpr(Parsers.scala:1231)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExpr(Parsers.scala:1174)
at scala.tools.nsc.ast.parser.Parsers$Parser.prefixExpr(Parsers.scala:1136)
at scala.tools.nsc.ast.parser.Parsers$Parser.postfixExpr(Parsers.scala:1088)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:1025)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:942)
at scala.tools.nsc.ast.parser.Parsers$Parser.exprs(Parsers.scala:906)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$12.apply(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser$$anonfun$12.apply(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser.surround(Parsers.scala:295)
at scala.tools.nsc.ast.parser.Parsers$Parser.argumentExprs(Parsers.scala:1221)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExprRest(Parsers.scala:1206)
at scala.tools.nsc.ast.parser.Parsers$Parser.simpleExpr(Parsers.scala:1186)
at scala.tools.nsc.ast.parser.Parsers$Parser.prefixExpr(Parsers.scala:1136)
at scala.tools.nsc.ast.parser.Parsers$Parser.postfixExpr(Parsers.scala:1088)
at scala.tools.nsc.ast.parser.Parsers$Parser.expr(Parsers.scala:1025)
at scala.tools.nsc.ast.parser.Parsers$Parser.statement(Parsers.scala:946)
at scala.tools.editor.Parsers$Parser.statement0(Parsers.scala:122)
at scala.tools.editor.Parsers$Statement.apply(Parsers.scala:169)
at scala.tools.editor.Parsers$Statement.apply(Parsers.scala:168)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$$anonfun$completions$1.apply(TypersPresentations.scala:462)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$$anonfun$completions$1.apply(TypersPresentations.scala:462)
at lampion.compiler.Typers$ParseNodeImpl$class.doMagic0(Typers.scala:97)
at scala.tools.editor.Driver$ProjectImpl$FileImpl$ParseNode.doMagic0(Driver.scala:19)
at scala.tools.editor.TypersPresentations$ProjectImpl$FileImpl$TokenImpl$class.completions(TypersPresentations.scala:462)
at scala.tools.editor.Driver$ProjectImpl$FileImpl$Token.completions(Driver.scala:25)
at lampion.presentation.Presentations$ProjectImpl$FileImpl$class.doComplete(Presentations.scala:107)
at scala.tools.eclipse.Driver$Project$File.doComplete(Driver.scala:13)
at lampion.eclipse.Editor$contentAssistProcessor$.computeCompletionProposals(Editor.scala:339)
at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:1759)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:478)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$16(CompletionProposalPopup.java:475)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:410)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:404)
at org.eclipse.jface.text.contentassist.ContentAssistant.showPossibleCompletions(ContentAssistant.java:1588)
at org.eclipse.jface.text.source.SourceViewer.doOperation(SourceViewer.java:773)
at org.eclipse.jface.text.source.projection.ProjectionViewer.doOperation(ProjectionViewer.java:1429)
at org.eclipse.ui.texteditor.ContentAssistAction$1.run(ContentAssistAction.java:82)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.texteditor.ContentAssistAction.run(ContentAssistAction.java:80)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:185)
at org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:109)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:475)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:429)
at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:165)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:470)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:821)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:879)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:568)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:510)
at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:126)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1423)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1100)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1125)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1110)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1137)
at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:663)
at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:2533)
at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:679)
at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1486)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4234)
at org.eclipse.swt.widgets.Display.windowProc(Display.java:3973)
at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:5593)
at org.eclipse.swt.widgets.Display.eventProc(Display.java:1192)
at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1487)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2969)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
Leave a comment
Trac author: dragos
I bumped the priority to high, it happens much to often and I will stop using content assist. Oh, did I mention that when this happens I lose all unsaved work?
I bumped the priority to high, it happens much to often and I will stop using content assist. Oh, did I mention that when this happens I lose all unsaved work?
on 2008-02-28 06:50 *
By tracImporter
Trac author: mcdirmid
Why do you edit with braces unbalanced all the time? I'll try to fix this by disabling content assist when braces are unbalanced, in which case the parser will run unreliably.
Why do you edit with braces unbalanced all the time? I'll try to fix this by disabling content assist when braces are unbalanced, in which case the parser will run unreliably.
on 2008-02-28 14:53 *
By tracImporter
Trac author: dragos
I didn't realize it was because of that. At least in some cases I was pretty sure parenthesis were right.. I guess the most annoying thing is that it hangs and I need to kill Eclipse. I could live with Content Assist disabled in such cases, of course.
I didn't realize it was because of that. At least in some cases I was pretty sure parenthesis were right.. I guess the most annoying thing is that it hangs and I need to kill Eclipse. I could live with Content Assist disabled in such cases, of course.
Trac author: mcdirmid
I disabled content assist if the parens are unbalanced. The parser can't run very well if parens are unbalanced because of the way I've changed error recovery in the parser to deal with editing situations.
I disabled content assist if the parens are unbalanced. The parser can't run very well if parens are unbalanced because of the way I've changed error recovery in the parser to deal with editing situations.
on 2009-01-14 18:24 *
By tracImporter
Closed As: fixed