Bug 93941 - Classpath initialization on shutdown
Summary: Classpath initialization on shutdown
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 RC1   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 93286 95723 (view as bug list)
Depends on:
Blocks:
 
Reported: 2005-05-06 11:57 EDT by Rafael Chaves CLA
Modified: 2005-05-27 07:11 EDT (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rafael Chaves CLA 2005-05-06 11:57:33 EDT
Build: N20050506

If you startup a self-hosting workspace and then immediately shutdown, we found
that JDT core is doing classpath container initialization from within its save
participant.  It is not illegal for the save participant to be doing this during
shutdown, but presumably this case could be optimized to avoid container
initialization.

org.eclipse.core.internal.resources.Resource.touch(Resource.java:1401)
	at org.eclipse.core.internal.resources.Project.touch(Project.java:997)
	at
org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation(SetClasspathOperation.java:287)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:718)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1717)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:782)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:2836)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:3845)
	at
org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:39)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:718)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1717)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3654)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3828)
	at
org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:54)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1421)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:1381)
	at
org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:974)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1308)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2062)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1970)
	at
org.eclipse.jdt.internal.core.DeltaProcessingState.initializeRoots(DeltaProcessingState.java:269)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:715)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1717)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3654)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3828)
	at
org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize(JREContainerInitializer.java:54)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1421)
	at
org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:976)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1308)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2062)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1970)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3819)
	at
org.eclipse.pde.internal.core.SearchablePluginsManager.updateClasspathContainer(SearchablePluginsManager.java:175)
	at
org.eclipse.pde.internal.core.ExternalJavaSearchInitializer.initialize(ExternalJavaSearchInitializer.java:35)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1421)
	at
org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:976)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1308)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:2062)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1970)
	at
org.eclipse.jdt.internal.core.search.JavaSearchScope.add(JavaSearchScope.java:108)
	at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.initialize(JavaWorkspaceScope.java:96)
	at
org.eclipse.jdt.internal.core.search.JavaSearchScope.<init>(JavaSearchScope.java:62)
	at
org.eclipse.jdt.internal.core.search.JavaSearchScope.<init>(JavaSearchScope.java:58)
	at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.<init>(JavaWorkspaceScope.java:42)
	at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.createScope(JavaWorkspaceScope.java:37)
	at
org.eclipse.jdt.internal.core.search.BasicSearchEngine.createWorkspaceScope(BasicSearchEngine.java:157)
	at
org.eclipse.jdt.internal.core.search.indexing.IndexManager.cleanUpIndexes(IndexManager.java:100)
	at
org.eclipse.jdt.internal.core.JavaModelManager.saving(JavaModelManager.java:2013)
	at
org.eclipse.core.internal.resources.SaveManager.executeLifecycle(SaveManager.java:314)
	at org.eclipse.core.internal.resources.SaveManager$1.run(SaveManager.java:146)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:1031)
	at org.eclipse.core.runtime.Platform.run(Platform.java:757)
	at
org.eclipse.core.internal.resources.SaveManager.broadcastLifecycle(SaveManager.java:149)
	at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:942)
	at org.eclipse.core.internal.resources.Workspace.save(Workspace.java:1752)
	at
org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor$2.run(IDEWorkbenchAdvisor.java:291)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 1 Jerome Lanneluc CLA 2005-05-06 12:25:38 EDT
Is there any way that Platform can tell us it is a save during shutdown (and not
a save in the middle of the session) ?
Comment 2 John Arthorne CLA 2005-05-06 12:36:31 EDT
That's a good question.  IWorkspace#save is API, so anybody can call it any time
they want to.  In practice, the IDE Workbench only ever calls save once,
immediately before exiting the application.  In this case the UI knows it is
closing (IWorkbench.isClosing() returns true), but core doesn't know this. Is it
difficult to always avoid classpath initialization during a full save callback
(whenever JavaModelManager.saving is called)?
Comment 3 Jerome Lanneluc CLA 2005-05-12 07:02:23 EDT
*** Bug 93286 has been marked as a duplicate of this bug. ***
Comment 4 Jerome Lanneluc CLA 2005-05-18 06:31:55 EDT
*** Bug 95723 has been marked as a duplicate of this bug. ***
Comment 5 Jerome Lanneluc CLA 2005-05-19 08:46:01 EDT
Changed JavaModelManager#saving(...) to not cleanupIndexes if the workspace
scope has not been initialized. If the workspace scope is initialized, then all
containers will be initialized.

Added regression test ClasspathInitializerTests#testContainerInitializer11().
Comment 6 David Audel CLA 2005-05-27 07:11:50 EDT
Verified in i20050527-0010