Summary: | [LinkedResources] Random errors when changing project settings | ||||||
---|---|---|---|---|---|---|---|
Product: | [Eclipse Project] JDT | Reporter: | Sebastian Kopsan <Sebastian> | ||||
Component: | Core | Assignee: | Jerome Lanneluc <jerome_lanneluc> | ||||
Status: | VERIFIED FIXED | QA Contact: | |||||
Severity: | normal | ||||||
Priority: | P3 | CC: | david_audel, Lars.Heinemann, Olivier_Thomann, quabbin100, Szymon.Brandys | ||||
Version: | 3.4 | ||||||
Target Milestone: | 3.5 M3 | ||||||
Hardware: | PC | ||||||
OS: | Windows XP | ||||||
Whiteboard: | |||||||
Attachments: |
|
Description
Sebastian Kopsan
2008-07-18 10:10:14 EDT
hi sebastian, the problem usually occurs when you change the project settings and there is a new build or just changing without rebuilding? on mtj we track the project resources to know when to rebuild and generate a temporary jad/jar file. we already notice some problems (also hard to reproduce problems) associated to classpaths in the build process. :) gep Hi and thanks for your quick response. Unfortunately I had JavaScript disabled when entering this bug report, so BugZilla had automatically assinged it to MTJ, but it is a JDT related problem. Was already wondering why a Motorola mail domain was informed :) Will try to reassign it to JDT, but I think you have to change the assignee then? Sorry, my fault. For the new assignee: After some more digging in the error logs i was able to find some stack traces. org.eclipse.core.internal.resources.ResourceException: Cannot create linked resource '/.org.eclipse.jdt.core.external.folders/.link0'. The parent resource is not accessible. at org.eclipse.core.internal.resources.Resource.assertLinkRequirements(Resource.java:160) at org.eclipse.core.internal.resources.Resource.createLink(Resource.java:592) at org.eclipse.core.internal.resources.Resource.createLink(Resource.java:574) at org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:111) at org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47) at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956) at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148) at org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:297) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:136) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) org.eclipse.core.internal.resources.ResourceException: The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing. This file contains important information about the project. The project will not function properly until this file is restored. at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:669) at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:797) at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:702) at org.eclipse.core.internal.resources.Project.open(Project.java:872) at org.eclipse.core.internal.resources.Project.open(Project.java:911) at org.eclipse.jdt.internal.core.ExternalFoldersManager.createExternalFoldersProject(ExternalFoldersManager.java:176) at org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:108) at org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47) at org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956) at org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148) at org.eclipse.core.internal.resources.Workspace.broadcastBuildEvent(Workspace.java:297) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:136) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:238) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) And a mysterious message that occurs every second: Problem occurred in auto-refresh native code: 5. Additionally this message occured: Problems occurred when invoking code from plug-in: "org.eclipse.core.resources": java.util.ConcurrentModificationException at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) at java.util.HashMap$KeyIterator.next(HashMap.java:828) at java.util.AbstractCollection.toArray(AbstractCollection.java:124) at com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.visit(CcRefreshProviderService.java:185) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:68) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:79) at org.eclipse.core.internal.events.ResourceDelta.accept(ResourceDelta.java:48) at com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.resourceChanged(CcRefreshProviderService.java:132) at org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.NotificationManager.notify(NotificationManager.java:282) at org.eclipse.core.internal.events.NotificationManager.broadcastChanges(NotificationManager.java:148) at org.eclipse.core.internal.resources.Workspace.broadcastPostChange(Workspace.java:313) at org.eclipse.core.internal.resources.Workspace.endOperation(Workspace.java:1022) at org.eclipse.core.internal.resources.Resource.delete(Resource.java:731) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:114) at org.eclipse.jdt.internal.core.builder.JavaBuilder.clean(JavaBuilder.java:291) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:635) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:170) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:253) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:256) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:309) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:341) at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:330) at org.eclipse.ui.internal.ide.dialogs.CleanDialog.doClean(CleanDialog.java:299) at org.eclipse.ui.internal.ide.dialogs.CleanDialog$1.runInWorkspace(CleanDialog.java:147) at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:38) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55) This seems to be a ClearCase plugin related problem, but may be a cause? (Remember, the error occurs also without the CC plugin installed) assignment was wrong :) gustavo Move to Platform/Resources (In reply to comment #2) > Will try to reassign it to JDT... > > org.eclipse.core.internal.resources.ResourceException: Cannot create linked > resource '/.org.eclipse.jdt.core.external.folders/.link0'. The parent resource > is not accessible. > at > org.eclipse.core.internal.resources.Resource.assertLinkRequirements(Resource.java:160) > at > org.eclipse.core.internal.resources.Resource.createLink(Resource.java:592) > at > org.eclipse.core.internal.resources.Resource.createLink(Resource.java:574) > at > org.eclipse.jdt.internal.core.ExternalFoldersManager.createLinkFolder(ExternalFoldersManager.java:111) > at > org.eclipse.jdt.internal.core.ExternalFolderChange.updateExternalFoldersIfNecessary(ExternalFolderChange.java:47) > at > org.eclipse.jdt.internal.core.DeltaProcessor.resourceChanged(DeltaProcessor.java:1956) > at > org.eclipse.jdt.internal.core.DeltaProcessingState.resourceChanged(DeltaProcessingState.java:410) > at > org.eclipse.core.internal.events.NotificationManager$2.run(NotificationManager.java:288) > at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37) > at Right, core.resources entries are at the end of the stacktrace, however this seems to be jdt.core issue related to external class folders introduced in 3.4. Probably Jerome should comment on it. > And a mysterious message that occurs every second: Problem occurred in > auto-refresh native code: 5. > > Additionally this message occured: Problems occurred when invoking code from > plug-in: "org.eclipse.core.resources": > > java.util.ConcurrentModificationException > at java.util.HashMap$HashIterator.nextEntry(HashMap.java:793) > at java.util.HashMap$KeyIterator.next(HashMap.java:828) > at java.util.AbstractCollection.toArray(AbstractCollection.java:124) > at com.ibm.rational.clearcase.ccrefresh.CcRefreshProviderService.visit(CcRefreshProviderService.java:185) The second exception is a problem in the clearcase plug-in. The .metadata was tampered with. In particular the .project file for the external project was deleted. The crash happens in the crash recovery code where the .project file was just recreated on the line above. There is nothing more we can do. Won't fix. *** Bug 237767 has been marked as a duplicate of this bug. *** Actually, I was able to reproduce following those steps: 1. Start a new workspace on "d:\temp\test" 2. Create a Java project "Test" 3. Add an external class folder to the build path of "Test" (e.g. "d:\temp\lib") 4. Shutdown 5. Rename "d:\temp\test" to "d:\temp\test2" 6. Start Eclipse on this new workspace Observe: You get the stack traces reported in comment 2 in the .log Reopening to fix for 3.5M3 Created attachment 113364 [details]
Proposed fix
Note that there is no regression test as one cannot move the workspace in tests.
Fix released for 3.5M3 On the restart (step 6), I got: The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing. This file contains important information about the project. The project will not function properly until this file is restored. org.eclipse.core.internal.resources.ResourceException: The project description file (.project) for '.org.eclipse.jdt.core.external.folders' is missing. This file contains important information about the project. The project will not function properly until this file is restored. at org.eclipse.core.internal.localstore.FileSystemResourceManager.read(FileSystemResourceManager.java:687) at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:797) at org.eclipse.core.internal.resources.SaveManager.restoreMetaInfo(SaveManager.java:777) at org.eclipse.core.internal.resources.SaveManager.restore(SaveManager.java:663) at org.eclipse.core.internal.resources.SaveManager.startup(SaveManager.java:1326) at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:1953) at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:1716) at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:376) at org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:804) at java.security.AccessController.doPrivileged(Native Method) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:798) at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:779) at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:346) at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:272) at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:400) at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:111) at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:427) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:192) at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:372) at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:33) at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:445) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:401) at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:389) at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:86) at java.lang.ClassLoader.loadClass(ClassLoader.java:252) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:114) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:370) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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:597) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504) at org.eclipse.equinox.launcher.Main.run(Main.java:1236) at org.eclipse.equinox.launcher.Main.main(Main.java:1212) (In reply to comment #11) This is a different stack trace than the one from comment 2. JDT/Core was involved in the stack trace from comment 2. The stack trace from comment 11 doesn't involve JDT/Core. Please open a separate bug agains Platform/Resources. (In reply to comment #8) > Actually, I was able to reproduce following those steps: > 1. Start a new workspace on "d:\temp\test" > 2. Create a Java project "Test" > 3. Add an external class folder to the build path of "Test" (e.g. > "d:\temp\lib") > 4. Shutdown > 5. Rename "d:\temp\test" to "d:\temp\test2" > 6. Start Eclipse on this new workspace > Observe: You get the stack traces reported in comment 2 in the .log Actually, one step was missing to reproduce: 7. Add another external class folder to the build path of "Test" (e.g. "d:\temp\lib2") Observe: You get an error dialog saying "Cannot create linked resource" Verified for 3.5M3 using I20081028-2000 build. The bug is fixed because the error dialog does not appear but the behavior is still not perfect (see bug 252571) Is there any workaround, like cleaning some files/folders in .metadata? You might try to delete ".metadata\.plugins\org.eclipse.jdt.core\.org.eclipse.jdt.core.external.folders" before restarting your workspace. Please report whether this works for you. Unfortunately this does not help. I also tried to delete the folder ".metadata\.plugins\org.eclipse.jdt.core" completely with no luck. (In reply to comment #17) > Unfortunately this does not help. I also tried to delete the folder > ".metadata\.plugins\org.eclipse.jdt.core" completely with no luck. So sorry, but I don't see any other workaround. In 3.4, it is not possible to move workspaces that contain projects with external folders. |