Community
Participate
Working Groups
This problem was reported by Brian Svihovec <svihovec@us.ibm.com> If a java project has invalid classpath container entries and you expand it in the Project Explorer view, cpu goes to 100% and stays like that forever. Steps 1. Open Eclipse in java perspective. Here is attached a zip file, extract it somewhere on your filesystem. 2. And use File-Import-Existing Projects into workspace, choose this project, javaProject1 and import it. 3. Now activate Project Explorer view, expand the javaProject1, see that CPU goes to 100% and stays there. The project is a simplification of real projects in a product based on WTP with many plugins, and this is a problem seen in all their projects so its really high severity problem. Its classpath looks like this <?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6 JRE"/> <classpathentry kind="con" path="blahblah1"/> <classpathentry kind="con" path="blahblah2"/> <classpathentry kind="output" path="bin"/> </classpath> When we suspended the threads, it looked like this "Worker-7" prio=6 tid=0x040416f0 nid=0x1634 in Object.wait() [0x0496f000..0x049 fa68] at java.lang.Object.wait(Native Method) - waiting on <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:2 5) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51) "Worker-6" prio=6 tid=0x04041018 nid=0x7fc in Object.wait() [0x0492f000..0x0492 ae8] at java.lang.Object.wait(Native Method) - waiting on <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:2 5) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51) "Worker-4" prio=6 tid=0x032b4f78 nid=0x214 waiting on condition [0x04b9f000..0x 4b9f9e8] at java.lang.Thread.sleep(Native Method) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(Decorat onScheduler.java:279) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58) "Worker-3" prio=6 tid=0x00ac4260 nid=0x1694 in Object.wait() [0x04adf000..0x04a fa68] at java.lang.Object.wait(Native Method) - waiting on <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173) - locked <0x1563aec0> (a org.eclipse.core.internal.jobs.WorkerPool) at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:2 5) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51) "Java indexing" daemon prio=4 tid=0x03199ed0 nid=0x354 in Object.wait() [0x049a 000..0x049afbe8] at java.lang.Object.wait(Native Method) - waiting on <0x1598dbb8> (a org.eclipse.jdt.internal.core.search.index ng.IndexManager) at java.lang.Object.wait(Object.java:474) at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobMa ager.java:349) - locked <0x1598dbb8> (a org.eclipse.jdt.internal.core.search.indexing. ndexManager) at java.lang.Thread.run(Thread.java:595) "Start Level Event Dispatcher" daemon prio=6 tid=0x0303a7a8 nid=0xb48 in Object wait() [0x0341f000..0x0341fce8] at java.lang.Object.wait(Native Method) - waiting on <0x155ebfd8> (a org.eclipse.osgi.framework.eventmgr.EventM nager$EventThread) at java.lang.Object.wait(Object.java:474) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNext vent(EventManager.java:349) - locked <0x155ebfd8> (a org.eclipse.osgi.framework.eventmgr.EventManag r$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(Eve tManager.java:287) "Framework Event Dispatcher" daemon prio=6 tid=0x00ace020 nid=0x1394 in Object. ait() [0x033df000..0x033dfd68] at java.lang.Object.wait(Native Method) - waiting on <0x155ec040> (a org.eclipse.osgi.framework.eventmgr.EventM nager$EventThread) at java.lang.Object.wait(Object.java:474) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNext vent(EventManager.java:349) - locked <0x155ec040> (a org.eclipse.osgi.framework.eventmgr.EventManag r$EventThread) at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(Eve tManager.java:287) "State Data Manager" daemon prio=6 tid=0x02f9dc68 nid=0x1330 waiting on conditi n [0x0339f000..0x0339f9e8] at java.lang.Thread.sleep(Native Method) at org.eclipse.osgi.internal.baseadaptor.StateManager.run(StateManager. ava:297) at java.lang.Thread.run(Thread.java:595) "Low Memory Detector" daemon prio=6 tid=0x00a70908 nid=0x12f8 runnable [0x00000 00..0x00000000] "CompilerThread0" daemon prio=10 tid=0x00a6f3b0 nid=0xe4 waiting on condition [ x00000000..0x02cdf948] "Signal Dispatcher" daemon prio=10 tid=0x00a6e698 nid=0x924 waiting on conditio [0x00000000..0x00000000] "Finalizer" daemon prio=8 tid=0x00a69748 nid=0x12b8 in Object.wait() [0x02c5f00 ..0x02c5fbe8] at java.lang.Object.wait(Native Method) - waiting on <0x15592698> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116) - locked <0x15592698> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x00a682d0 nid=0x14f0 in Object.wait() [ x02c1f000..0x02c1fce8] at java.lang.Object.wait(Native Method) - waiting on <0x15592718> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:474) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116) - locked <0x15592718> (a java.lang.ref.Reference$Lock) "main" prio=6 tid=0x00035538 nid=0x474 runnable [0x0007e000..0x0007fc3c] at java.io.FileOutputStream.close0(Native Method) at java.io.FileOutputStream.close(FileOutputStream.java:279) at java.io.FilterOutputStream.close(FilterOutputStream.java:143) at java.io.FilterOutputStream.close(FilterOutputStream.java:143) at org.eclipse.core.internal.localstore.Bucket.save(Bucket.java:345) at org.eclipse.core.internal.properties.PropertyBucket.save(PropertyBuc et.java:285) at org.eclipse.core.internal.properties.PropertyManager2.setProperty(Pr pertyManager2.java:165) - locked <0x15675680> (a org.eclipse.core.internal.properties.PropertyM nager2) at org.eclipse.core.internal.resources.Resource.setPersistentProperty(R source.java:1514) at org.eclipse.jdt.internal.core.PackageFragmentRoot.setSourceAttachmen Property(PackageFragmentRoot.java:667) at org.eclipse.jdt.internal.core.SetClasspathOperation.generateClasspat ChangeDeltas(SetClasspathOperation.java:485) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateClasspath( etClasspathOperation.java:657) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation SetClasspathOperation.java:267) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperat on.java:720) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:173 ) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaMo elOperation.java:784) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProjec .java:3016) at org.eclipse.jdt.core.JavaCore$5.run(JavaCore.java:4214) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchO eration.java:39) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperat on.java:720) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:173 ) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:4023) at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:41 7) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initializ (JREContainerInitializer.java:57) at org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(J vaModelManager.java:1900) at org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer JavaModelManager.java:1267) at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:14 0) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaP oject.java:2169) at org.eclipse.jdt.internal.core.JavaProject.findPackageFragmentRoots(J vaProject.java:1158) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvid r.rootsAndContainers(PackageExplorerContentProvider.java:182) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvid r.getChildren(PackageExplorerContentProvider.java:163) at org.eclipse.jdt.internal.ui.navigator.JavaNavigatorContentProvider.g tPipelinedChildren(JavaNavigatorContentProvider.java:123) at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProv der.pipelineChildren(NavigatorContentServiceContentProvider.java:310) at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProv der.internalGetChildren(NavigatorContentServiceContentProvider.java:252) at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProv der.getChildren(NavigatorContentServiceContentProvider.java:635) at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(Abstract reeViewer.java:1151) at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java: 68) at org.eclipse.jface.viewers.AbstractTreeViewer.getFilteredChildren(Abs ractTreeViewer.java:565) at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(Abstr ctTreeViewer.java:534) at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(Abstract reeViewer.java:2324) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(A stractTreeViewer.java:1640) at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewe .java:955) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(Abstrac TreeViewer.java:1616) at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(Abstrac TreeViewer.java:1571) at org.eclipse.ui.navigator.CommonViewer.internalRefresh(CommonViewer.j va:410) at org.eclipse.jface.viewers.StructuredViewer$8.run(StructuredViewer.ja a:1415) at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(Struc uredViewer.java:1323) at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer. ava:1413) at org.eclipse.ui.navigator.CommonViewer.update(CommonViewer.java:381) at org.eclipse.jface.viewers.StructuredViewer.update(StructuredViewer.j va:1840) at org.eclipse.jface.viewers.StructuredViewer.handleLabelProviderChange (StructuredViewer.java:1108) at org.eclipse.ui.navigator.CommonViewer.handleLabelProviderChanged(Com onViewer.java:143) at org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(Conte tViewer.java:74) at org.eclipse.ui.internal.navigator.NavigatorContentServiceLabelProvid r$1.run(NavigatorContentServiceLabelProvider.java:292) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.ui.internal.navigator.NavigatorContentServiceLabelProvid r.fireLabelProviderChanged(NavigatorContentServiceLabelProvider.java:290) at org.eclipse.ui.internal.navigator.NavigatorContentServiceLabelProvid r.labelProviderChanged(NavigatorContentServiceLabelProvider.java:350) at org.eclipse.jdt.ui.ProblemsLabelDecorator.fireProblemsChanged(Proble sLabelDecorator.java:380) at org.eclipse.jdt.ui.ProblemsLabelDecorator.access$0(ProblemsLabelDeco ator.java:375) at org.eclipse.jdt.ui.ProblemsLabelDecorator$1.problemsChanged(Problems abelDecorator.java:355) at org.eclipse.jdt.internal.ui.viewsupport.ProblemMarkerManager$1.run(P oblemMarkerManager.java:177) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.j va:123) - locked <0x15c44f98> (a org.eclipse.swt.widgets.RunnableLock) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3325) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2971) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.ja a:419) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:9 ) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAc ivator.java:78) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runAppl cation(EclipseAppLauncher.java:92) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(E lipseAppLauncher.java:68) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j va:400) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j va:177) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce sorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336) at org.eclipse.core.launcher.Main.basicRun(Main.java:280) at org.eclipse.core.launcher.Main.run(Main.java:977) at org.eclipse.core.launcher.Main.main(Main.java:952) It looks like the problems view decorator tries to set the java classpath of the project, and because the classpath container is invalid its somehow causing this problem.
Created attachment 52463 [details] zipped up java project
I was looking into the problem further and I have an inkling to what happened, It looks like the problem happens when the classpath entry <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/WebSphere v6 JRE"/> is attempted to be resolved in this code. Thread [main] (Suspended (breakpoint at line 58 in JREContainerInitializer)) JREContainerInitializer.initialize(IPath, IJavaProject) line: 57 JavaModelManager.initializeContainer(IJavaProject, IPath) line: 1900 JavaModelManager.getClasspathContainer(IPath, IJavaProject) line: 1267 JavaCore.getClasspathContainer(IPath, IJavaProject) line: 1470 JavaProject.getResolvedClasspath(IClasspathEntry[], IPath, boolean, boolean, Map) line: 2169 JavaProject.findPackageFragmentRoots(IClasspathEntry) line: 1158 ClassPathContainer.getPackageFragmentRoots() line: 118 JavaElementSorter.getPackageFragmentRoot(Object) line: 294 JavaElementSorter.compare(Viewer, Object, Object) line: 203 CommonViewerSorter.compare(Viewer, TreePath, Object, Object) line: 97 TreePathViewerSorter$1.compare(Object, Object) line: 105 ..... If you look at the method JREContainerInitializer.initialize(IPath, IJavaProject) which is in the plug-in org.eclipse.jdt.launching public void initialize(IPath containerPath, IJavaProject project) throws CoreException { int size = containerPath.segmentCount(); if (size > 0) { if (containerPath.segment(0).equals(JavaRuntime.JRE_CONTAINER)) { IVMInstall vm = resolveVM(containerPath); JREContainer container = null; if (vm != null) { container = new JREContainer(vm, containerPath); } JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null); } } } I found that line 52 ---> IVMInstall vm = resolveVM(containerPath); returned null for the containerPath and lines 53-58 were like JREContainer container = null; if (vm != null) { container = new JREContainer(vm, containerPath); } JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null); SO in line 58, we were still calling JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null); for a NULL container. When I put a condition like if(container != null) JavaCore.setClasspathContainer(containerPath, new IJavaProject[] {project}, new IClasspathContainer[] {container}, null); The problem went away (cpu did not stay at 100% when i expand project in project explorer). However, I do not know if this is the right fix in the given context. So, please investigate. Also it does not matter what the vmid was I changed my classpath entry to <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/blahblahJRE"/> and was able to reproduce the problem.
Moving to JDT/Core for comments and to decide whether the fix for bug 160005 should be backported to 3.2.2. In N20061026-0010, I get the exception below, which indicates an error in the current fix for bug 160005. java.lang.IllegalArgumentException: Invalid classpath container implementation: getClasspathEntries() returns null. blahblah2 at org.eclipse.jdt.internal.ui.packageview.ClassPathContainer.getRequiredProjects(ClassPathContainer.java:141) at org.eclipse.jdt.internal.ui.packageview.ClassPathContainer.getChildren(ClassPathContainer.java:132) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.getContainerPackageFragmentRoots(PackageExplorerContentProvider.java:257) at org.eclipse.jdt.internal.ui.packageview.PackageExplorerContentProvider.getChildren(PackageExplorerContentProvider.java:203) at org.eclipse.jdt.ui.StandardJavaElementContentProvider.hasChildren(StandardJavaElementContentProvider.java:232) at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:107) at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:292) at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:654) at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:1974) at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2572) at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:993) at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:798) at org.eclipse.ui.navigator.CommonViewer.createTreeItem(CommonViewer.java:150) at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:775) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67) at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:749) at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:794) at org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:1301) at org.eclipse.jface.viewers.TreeViewer.handleTreeExpand(TreeViewer.java:1050) at org.eclipse.jface.viewers.AbstractTreeViewer$4.treeExpanded(AbstractTreeViewer.java:1312) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:181) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:925) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:949) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:934) at org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:6442) at org.eclipse.swt.widgets.Control.wmNotify(Control.java:4221) at org.eclipse.swt.widgets.Composite.wmNotify(Composite.java:1480) at org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:3874) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3382) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4132) at org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native Method) at org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:1903) at org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:1323) at org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:5321) at org.eclipse.swt.widgets.Control.windowProc(Control.java:3363) at org.eclipse.swt.widgets.Tree.windowProc(Tree.java:4900) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4145) at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method) at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1989) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3075) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1924) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1888) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:104) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:348) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:165) 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:341) at org.eclipse.core.launcher.Main.basicRun(Main.java:285) at org.eclipse.core.launcher.Main.run(Main.java:987) at org.eclipse.core.launcher.Main.main(Main.java:962)
Markus, can you please expand on how you're getting the exception from comment #3 ?
> Markus, can you please expand on how you're getting the exception from comment > #3 ? I imported the project from attachment 52463 [details] into a clean runtime workspace and then expanded "javaProject1" in the Project Explorer (same effect as in Package Explorer). This is with I20061024-1200 or later.
Re: backporting fix for bug 160005, Isn't it adding a new API ? If so, this is problematic, as no API addition may occur in a service release. We should rather provide an empty container for free in case clients forgets to initialize... unoptimal, but will address this very issue. Assumption is that this problem cannot occur on 3.3 after fix for bug 160005. Is this true ? Raj - would 3.2.2 be the right target for your needs ?
Yes, I think it should be backported to Eclipse 322, Not sure what Brian's time frame is.
Changed ClasspathContainerInitializer#getFailureContainer(...) to return a container that returns an empty classpath instead of null. This takes care of the problem reported in comment 3. Added regresion test ClasspathInitializerTests#testContainerInitializer15(). Still need to backport to 3.2.2.
Note this was released for 3.3M4.
Backport for 3.2.2 consists in changing JavaModelManager#getClasspathContainer(IPath, IJavaProject) in R3_2_maintenance stream to always return a default container (with an empty classpath) if the initializer failed to initialize the container. As a consequence, ClasspathInitiazerTests#testContainerInitializer05() has to be changed to not assume that the initializer would be called again in this case. Also testContainerInitializer14() and testContainerInitializer15() where backported to the R3_2_maintenance stream. Released for 3.2.2.
Verified for 3.2.2 using build I20070112-1200.