Community
Participate
Working Groups
M5 Steps to reproduce: - create a project with a 5.0 JDK - create a CU - enter a method void foo() { c<code assist> } observe code assist pops up and hangs in the UI thread for some amount of time. The stack trace is as follows: "main" prio=7 tid=0x00037350 nid=0x64c runnable [0x0007e000..0x0007fc40] at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) - locked <0x106ac2b8> (a java.net.PlainSocketImpl) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.Socket.connect(Socket.java:507) at java.net.Socket.connect(Socket.java:457) at sun.net.NetworkClient.doConnect(NetworkClient.java:157) at sun.net.www.http.HttpClient.openServer(HttpClient.java:365) at sun.net.www.http.HttpClient.openServer(HttpClient.java:477) - locked <0x106ac218> (a sun.net.www.http.HttpClient) at sun.net.www.http.HttpClient.<init>(HttpClient.java:214) at sun.net.www.http.HttpClient.New(HttpClient.java:287) at sun.net.www.http.HttpClient.New(HttpClient.java:299) at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:792) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:744) at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:669) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:913) - locked <0x106ab848> (a sun.net.www.protocol.http.HttpURLConnection) at org.eclipse.jdt.internal.core.JavaElement.getURLContents(JavaElement.java:717) at org.eclipse.jdt.internal.core.BinaryType.getJavadocContents(BinaryType.java:1063) at org.eclipse.jdt.internal.core.BinaryType.getAttachedJavadoc(BinaryType.java:990) at org.eclipse.jdt.ui.JavadocContentAccess.getHTMLContentReader(JavadocContentAccess.java:121) at org.eclipse.jdt.internal.ui.text.java.MemberProposalInfo.extractJavadoc(MemberProposalInfo.java:102) at org.eclipse.jdt.internal.ui.text.java.MemberProposalInfo.computeInfo(MemberProposalInfo.java:81) at org.eclipse.jdt.internal.ui.text.java.MemberProposalInfo.getInfo(MemberProposalInfo.java:68) at org.eclipse.jdt.internal.ui.text.java.LazyJavaCompletionProposal.getAdditionalProposalInfo(LazyJavaCompletionProposal .java:180) at org.eclipse.jface.text.contentassist.AdditionalInfoController.computeInformation(AdditionalInfoController.java:221) at org.eclipse.jface.text.AbstractInformationControlManager.doShowInformation(AbstractInformationControlManager.java:820 ) at org.eclipse.jface.text.AbstractInformationControlManager.showInformation(AbstractInformationControlManager.java:810) at org.eclipse.jface.text.contentassist.AdditionalInfoController$1.run(AdditionalInfoController.java:173) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123) - locked <0x106bca28> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3262) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2908) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1762) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1726) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:397) 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:109) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:379) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177) 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)
The UI hangs sometime between 1 - 2 secs. Its definitelly longer than the timeout specified in the preferences. Tom requested to file the bug first against JDT/Text ;-).
Really 2 bugs here 1) we compute the additional info in the UI thread (bad) 2) the JAR contains a Javadoc URL even though there is no Javadoc for that JAR ==> filed bug 129175. Note that the timeout does not apply here: it is solely for getting the parameter names and not for getting the Javadoc.
We have to be careful when fixing this - ICompletionProposal::getAdditionalProposalInfo does not spec that it may be called from a non-UI thread and never was so far. If pushing the computation into a another thread is not possible, we may have to add a new API that specs the concurrent access...
Fixed > 20060413 by pushing computation into the background for ICompletionProposalExtension5 implementations. See bub 136648 for the added API.
*** Bug 137192 has been marked as a duplicate of this bug. ***
*** Bug 138569 has been marked as a duplicate of this bug. ***
verified in 20060426
*** Bug 133348 has been marked as a duplicate of this bug. ***