Bug 114091 - [assist][javadoc] eternal loop
Summary: [assist][javadoc] eternal loop
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC All
: P3 critical (vote)
Target Milestone: 3.2 M3   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-28 08:29 EDT by Tom Hofmann CLA
Modified: 2005-10-31 06:30 EST (History)
0 users

See Also:


Attachments
vm_dump.txt (11.03 KB, text/plain)
2005-10-28 08:30 EDT, Tom Hofmann CLA
no flags Details
TreeLineTracker.java (26.97 KB, text/x-java)
2005-10-28 08:54 EDT, Tom Hofmann CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Tom Hofmann CLA 2005-10-28 08:29:01 EDT
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)
Comment 1 Tom Hofmann CLA 2005-10-28 08:30:39 EDT
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.
Comment 2 Tom Hofmann CLA 2005-10-28 08:54:33 EDT
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
Comment 3 Frederic Fusier CLA 2005-10-28 14:00:08 EDT
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
Comment 4 David Audel CLA 2005-10-31 06:30:14 EST
Verified for 3.2 M3 using build I20051031-0010