eclipse-platform / eclipse.platform.resources

Eclipse Public License 2.0
3 stars 18 forks source link

CharsetManager might early access the ResourcesPlugin.getWorkspace #124

Closed laeubi closed 2 years ago

laeubi commented 2 years ago

This is now revealed, there is an explicit test for this, this might be related to eclipse-platform/eclipse.platform#92 and is another cycle to ProjectPreferences where CharsetManager.isDerivedEncodingStoredSeparately converts the project to a string just for ProjectPreferences.nodeExists to lookup the project by name ...

Caused by: java.lang.IllegalStateException: Workspace is already closed or not ready yet. Consider tracking the org.eclipse.core.resources.IWorkspace service (using your favorite technique, e.g. Declarative Services, ServiceTracker, Blueprint, ...) instead of calling the static method here to prevent such issues!
    at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:423)
    at org.eclipse.core.internal.resources.ProjectPreferences.nodeExists(ProjectPreferences.java:624)
    at org.eclipse.core.internal.resources.CharsetManager.isDerivedEncodingStoredSeparately(CharsetManager.java:371)
    at org.eclipse.core.internal.resources.CharsetManager.getPreferences(CharsetManager.java:303)
    at org.eclipse.core.internal.resources.CharsetManager.getCharsetFor(CharsetManager.java:287)
    at org.eclipse.core.internal.resources.Project.getDefaultCharset(Project.java:388)
    at org.eclipse.core.internal.resources.Container.getDefaultCharset(Container.java:294)
    at org.eclipse.core.tests.resources.refresh.Bug316182RefreshProvider.installMonitor(Bug316182RefreshProvider.java:31)
    at org.eclipse.core.resources.refresh.RefreshProvider.installMonitor(RefreshProvider.java:92)
    at org.eclipse.core.internal.refresh.MonitorManager.safeInstallMonitor(MonitorManager.java:261)
    at org.eclipse.core.internal.refresh.MonitorManager.monitor(MonitorManager.java:154)
    at org.eclipse.core.internal.refresh.MonitorManager.start(MonitorManager.java:279)
    at org.eclipse.core.internal.refresh.RefreshManager.manageAutoRefresh(RefreshManager.java:60)
    at org.eclipse.core.internal.refresh.RefreshManager.startup(RefreshManager.java:131)
    at org.eclipse.core.internal.resources.Workspace.startup(Workspace.java:2547)
    at org.eclipse.core.internal.resources.Workspace.open(Workspace.java:2241)
    at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:488)
    at org.eclipse.core.resources.ResourcesPlugin$WorkspaceInitCustomizer.addingService(ResourcesPlugin.java:1)
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
    at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
    at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
    at org.osgi.util.tracker.AbstractTracked.trackInitial(AbstractTracked.java:183)
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:321)
    at org.osgi.util.tracker.ServiceTracker.open(ServiceTracker.java:264)
    at org.eclipse.core.resources.ResourcesPlugin.start(ResourcesPlugin.java:466)
laeubi commented 2 years ago

@iloveeclipse I think this is the same issue we had before because of the initializePreferenceLookupOrder() do you think we can move this down unless startup() is performed? I'll try to prepare a PR to see if anything goes wrong with such a change ...