Community
Participate
Working Groups
I20051025-0800-gtk I used code assist in javadoc, then suddenly CPU went to 100% and the main thread never returned from code completion. Thread dumps all looked similar to the one below. I will attach the file I was working on as well as the full vm dump. "main" prio=1 tid=0x082e8d30 nid=0x3f67 runnable [0xbfd6f000..0xbfd704a8] at java.lang.Character.isJavaIdentifierStart(Character.java:3652) at org.eclipse.jdt.internal.codeassist.complete.CompletionScanner.getNextToken(CompletionScanner.java:150) at org.eclipse.jdt.internal.compiler.parser.AbstractCommentParser.readToken(AbstractCommentParser.java:1278) at org.eclipse.jdt.internal.compiler.parser.AbstractCommentParser.readTokenAndConsume(AbstractCommentParser.java:1292) at org.eclipse.jdt.internal.compiler.parser.JavadocParser.parseTag(JavadocParser.java:447) at org.eclipse.jdt.internal.codeassist.complete.CompletionJavadocParser.parseTag(CompletionJavadocParser.java:542) at org.eclipse.jdt.internal.compiler.parser.AbstractCommentParser.commentParse(AbstractCommentParser.java:207) at org.eclipse.jdt.internal.codeassist.complete.CompletionJavadocParser.commentParse(CompletionJavadocParser.java:89) at org.eclipse.jdt.internal.compiler.parser.JavadocParser.checkDeprecation(JavadocParser.java:75) at org.eclipse.jdt.internal.codeassist.complete.CompletionJavadocParser.checkDeprecation(CompletionJavadocParser.java:77) at org.eclipse.jdt.internal.compiler.parser.Parser.checkComment(Parser.java:890) at org.eclipse.jdt.internal.compiler.parser.Parser.consumeModifiers(Parser.java:4140) at org.eclipse.jdt.internal.codeassist.complete.CompletionParser.consumeModifiers(CompletionParser.java:2302) at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:5570) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8493) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8663) at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:8628) at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:7421) at org.eclipse.jdt.internal.codeassist.complete.CompletionParser.dietParse(CompletionParser.java:3146) at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:1541) at org.eclipse.jdt.internal.core.Openable.codeComplete(Openable.java:127) at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:290) at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:283) at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.internalComputeCompletionProposals(JavaCompletionProposalComputer.java:211) at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.computeCompletionProposals(JavaCompletionProposalComputer.java:191) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeCompletionProposals(CompletionProposalComputerDescriptor.java:278) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeCompletionProposals(CompletionProposalCategory.java:248) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectProposals(ContentAssistProcessor.java:158) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeCompletionProposals(ContentAssistProcessor.java:143) at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:1566) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:447) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$15(CompletionProposalPopup.java:444) at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:379) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:373) at org.eclipse.jface.text.contentassist.ContentAssistant$2.run(ContentAssistant.java:335) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123) - locked <0x8f2a0060> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3037) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2745) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1763) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1727) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:371) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:106) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:375) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:164) 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:585) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:338) at org.eclipse.core.launcher.Main.basicRun(Main.java:282) at org.eclipse.core.launcher.Main.run(Main.java:977) at org.eclipse.core.launcher.Main.main(Main.java:952)
Created attachment 28915 [details] vm_dump.txt A vm dump at the time that code assist was gone in a neverending loop. Slightly different main thread stack than the stack in comment 0, but similar.
Created attachment 28916 [details] TreeLineTracker.java File that shows the behavior. Steps to reproduce: - enable auto-activation, set '@' as autoactivation character for Javadoc assist - open the cu in the Java editor (preferably within the org.eclipse.text project) - go to the javadoc comment of the field 'offset_hint'. I reads: /** * The line offset of the line last queried with <code>node_by_offset</code>. */ - delete the reference to node_by_offset, including the surrounding <code> tag - at the same location, we want to insert a @link reference to the node_by_offset method: - type { - type @ > boom - the completion engine never returns
Problem comes from a potential issue in CompletionScanner (see bug 114115). However, it's a little bit dangerous to change this behavior few days before 3.2 M3 delivery... So, I'll fix it temporarily in CompletionJavadocParser by overriding readTokenAndConsume() method to avoid this kind of issue but will remove it as soon as bug 114115 will be fixed... Test cases added in JavadocCompletionParserTest
Verified for 3.2 M3 using build I20051031-0010