Bug 161846 - Expanding a java project with invalid classpath container entries in Project Explorer causes CPU to stay at 100%
Summary: Expanding a java project with invalid classpath container entries in Project ...
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2.1   Edit
Hardware: PC Windows XP
: P3 major (vote)
Target Milestone: 3.2.2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-10-21 13:45 EDT by Raj Mandayam CLA
Modified: 2007-01-15 08:40 EST (History)
4 users (show)

See Also:


Attachments
zipped up java project (883 bytes, application/zip)
2006-10-21 13:46 EDT, Raj Mandayam CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Raj Mandayam CLA 2006-10-21 13:45:21 EDT
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.
Comment 1 Raj Mandayam CLA 2006-10-21 13:46:40 EDT
Created attachment 52463 [details]
zipped up java project
Comment 2 Raj Mandayam CLA 2006-10-21 17:19:43 EDT
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.

Comment 3 Markus Keller CLA 2006-10-26 06:29:25 EDT
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)
Comment 4 Jerome Lanneluc CLA 2006-10-26 07:10:01 EDT
Markus, can you please expand on how you're getting the exception from comment #3 ?
Comment 5 Markus Keller CLA 2006-10-26 08:11:21 EDT
> 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.
Comment 6 Philipe Mulet CLA 2006-10-26 09:19:16 EDT
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 ?
Comment 7 Raj Mandayam CLA 2006-10-26 10:39:18 EDT
Yes, I think it should be backported to Eclipse 322, Not sure what Brian's time frame is.
Comment 8 Jerome Lanneluc CLA 2006-10-27 12:23:23 EDT
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.
Comment 9 Jerome Lanneluc CLA 2007-01-09 07:18:31 EST
Note this was released for 3.3M4.
Comment 10 Jerome Lanneluc CLA 2007-01-09 08:00:26 EST
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.
Comment 11 Frederic Fusier CLA 2007-01-15 08:40:15 EST
Verified for 3.2.2 using build I20070112-1200.