Skip to content

Commit 1a5350a

Browse files
committed
Ignore IllegalStateException on closing deleted Java project
If project (and preferences) is deleted, closing Java project should not throw errors while disconnecting preferences listeners. Fixes eclipse-jdt#4783
1 parent e6ca7ef commit 1a5350a

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -526,13 +526,19 @@ public void close() throws JavaModelException {
526526
// Get cached preferences if exist
527527
JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfo(this.project, false);
528528
if (perProjectInfo != null && perProjectInfo.preferences != null) {
529-
IEclipsePreferences eclipseParentPreferences = (IEclipsePreferences) perProjectInfo.preferences.parent();
530-
if (this.preferencesNodeListener != null) {
531-
eclipseParentPreferences.removeNodeChangeListener(this.preferencesNodeListener);
529+
try {
530+
IEclipsePreferences eclipseParentPreferences = (IEclipsePreferences) perProjectInfo.preferences.parent();
531+
if (this.preferencesNodeListener != null) {
532+
eclipseParentPreferences.removeNodeChangeListener(this.preferencesNodeListener);
533+
this.preferencesNodeListener = null;
534+
}
535+
if (this.preferencesChangeListener != null) {
536+
perProjectInfo.preferences.removePreferenceChangeListener(this.preferencesChangeListener);
537+
this.preferencesChangeListener = null;
538+
}
539+
} catch (IllegalStateException e) {
540+
// Ignore, the preferences have already been removed
532541
this.preferencesNodeListener = null;
533-
}
534-
if (this.preferencesChangeListener != null) {
535-
perProjectInfo.preferences.removePreferenceChangeListener(this.preferencesChangeListener);
536542
this.preferencesChangeListener = null;
537543
}
538544
}

0 commit comments

Comments
 (0)