Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 129577 Details for
Bug 269336
[prefs] JavaProject preferences listeners are not removed
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Proposed patch
v00.txt (text/plain), 8.72 KB, created by
Frederic Fusier
on 2009-03-23 06:12:19 EDT
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Frederic Fusier
Created:
2009-03-23 06:12:19 EDT
Size:
8.72 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/internal/core/JavaProject.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaProject.java,v >retrieving revision 1.422 >diff -u -r1.422 JavaProject.java >--- model/org/eclipse/jdt/internal/core/JavaProject.java 7 Mar 2009 00:58:56 -0000 1.422 >+++ model/org/eclipse/jdt/internal/core/JavaProject.java 23 Mar 2009 10:10:35 -0000 >@@ -161,6 +161,12 @@ > protected IProject project; > > /** >+ * Preferences listeners >+ */ >+ private IEclipsePreferences.INodeChangeListener preferencesNodeListener; >+ private IEclipsePreferences.IPreferenceChangeListener preferencesChangeListener; >+ >+ /** > * Constructor needed for <code>IProject.getNature()</code> and <code>IProject.addNature()</code>. > * > * @see #setProject(IProject) >@@ -423,6 +429,28 @@ > return true; > } > >+ /* (non-Javadoc) >+ * @see org.eclipse.jdt.internal.core.JavaElement#close() >+ */ >+ public void close() throws JavaModelException { >+ if (JavaProject.hasJavaNature(this.project)) { >+ // Get cached preferences if exist >+ JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfo(this.project, false); >+ if (perProjectInfo != null && perProjectInfo.preferences != null) { >+ IEclipsePreferences eclipseParentPreferences = (IEclipsePreferences) perProjectInfo.preferences.parent(); >+ if (this.preferencesNodeListener != null) { >+ eclipseParentPreferences.removeNodeChangeListener(this.preferencesNodeListener); >+ this.preferencesNodeListener = null; >+ } >+ if (this.preferencesChangeListener != null) { >+ perProjectInfo.preferences.removePreferenceChangeListener(this.preferencesChangeListener); >+ this.preferencesChangeListener = null; >+ } >+ } >+ } >+ super.close(); >+ } >+ > /** > * Internal computation of an expanded classpath. It will eliminate duplicates, and produce copies > * of exported or restricted classpath entries to avoid possible side-effects ever after. >@@ -1361,63 +1389,72 @@ > return null; > } > >- /** >- * Returns the project custom preference pool. >- * Project preferences may include custom encoding. >- * @return IEclipsePreferences or <code>null</code> if the project >- * does not have a java nature. >- */ >- public IEclipsePreferences getEclipsePreferences(){ >- if (!JavaProject.hasJavaNature(this.project)) return null; >- // Get cached preferences if exist >- JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfo(this.project, true); >- if (perProjectInfo.preferences != null) return perProjectInfo.preferences; >- // Init project preferences >- IScopeContext context = new ProjectScope(getProject()); >- final IEclipsePreferences eclipsePreferences = context.getNode(JavaCore.PLUGIN_ID); >- updatePreferences(eclipsePreferences); >- perProjectInfo.preferences = eclipsePreferences; >- >- // Listen to node removal from parent in order to reset cache (see bug 68993) >- IEclipsePreferences.INodeChangeListener nodeListener = new IEclipsePreferences.INodeChangeListener() { >- public void added(IEclipsePreferences.NodeChangeEvent event) { >- // do nothing >- } >- public void removed(IEclipsePreferences.NodeChangeEvent event) { >- if (event.getChild() == eclipsePreferences) { >- JavaModelManager.getJavaModelManager().resetProjectPreferences(JavaProject.this); >- } >- } >- }; >- ((IEclipsePreferences) eclipsePreferences.parent()).addNodeChangeListener(nodeListener); >- >- // Listen to preference changes >- IEclipsePreferences.IPreferenceChangeListener preferenceListener = new IEclipsePreferences.IPreferenceChangeListener() { >- public void preferenceChange(IEclipsePreferences.PreferenceChangeEvent event) { >- String propertyName = event.getKey(); >- JavaModelManager manager = JavaModelManager.getJavaModelManager(); >- if (propertyName.startsWith(JavaCore.PLUGIN_ID)) { >- if (propertyName.equals(JavaCore.CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER) || >- propertyName.equals(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER) || >- propertyName.equals(JavaCore.CORE_JAVA_BUILD_DUPLICATE_RESOURCE) || >- propertyName.equals(JavaCore.CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER) || >- propertyName.equals(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH) || >- propertyName.equals(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS) || >- propertyName.equals(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS) || >- propertyName.equals(JavaCore.CORE_INCOMPLETE_CLASSPATH) || >- propertyName.equals(JavaCore.CORE_CIRCULAR_CLASSPATH) || >- propertyName.equals(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL)) >- { >- manager.deltaState.addClasspathValidation(JavaProject.this); >- } >- manager.resetProjectOptions(JavaProject.this); >- JavaProject.this.resetCaches(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=233568 >- } >- } >- }; >- eclipsePreferences.addPreferenceChangeListener(preferenceListener); >- return eclipsePreferences; >- } >+ /** >+ * Returns the project custom preference pool. >+ * Project preferences may include custom encoding. >+ * @return IEclipsePreferences or <code>null</code> if the project >+ * does not have a java nature. >+ */ >+ public IEclipsePreferences getEclipsePreferences() { >+ if (!JavaProject.hasJavaNature(this.project)) return null; >+ // Get cached preferences if exist >+ JavaModelManager.PerProjectInfo perProjectInfo = JavaModelManager.getJavaModelManager().getPerProjectInfo(this.project, true); >+ if (perProjectInfo.preferences != null) return perProjectInfo.preferences; >+ // Init project preferences >+ IScopeContext context = new ProjectScope(getProject()); >+ final IEclipsePreferences eclipsePreferences = context.getNode(JavaCore.PLUGIN_ID); >+ updatePreferences(eclipsePreferences); >+ perProjectInfo.preferences = eclipsePreferences; >+ >+ // Listen to new preferences node >+ final IEclipsePreferences eclipseParentPreferences = (IEclipsePreferences) eclipsePreferences.parent(); >+ if (eclipseParentPreferences != null) { >+ if (this.preferencesNodeListener != null) { >+ eclipseParentPreferences.removeNodeChangeListener(this.preferencesNodeListener); >+ } >+ this.preferencesNodeListener = new IEclipsePreferences.INodeChangeListener() { >+ public void added(IEclipsePreferences.NodeChangeEvent event) { >+ // do nothing >+ } >+ public void removed(IEclipsePreferences.NodeChangeEvent event) { >+ if (event.getChild() == eclipsePreferences) { >+ JavaModelManager.getJavaModelManager().resetProjectPreferences(JavaProject.this); >+ } >+ } >+ }; >+ eclipseParentPreferences.addNodeChangeListener(this.preferencesNodeListener); >+ } >+ >+ // Listen to preferences changes >+ if (this.preferencesChangeListener != null) { >+ eclipsePreferences.removePreferenceChangeListener(this.preferencesChangeListener); >+ } >+ this.preferencesChangeListener = new IEclipsePreferences.IPreferenceChangeListener() { >+ public void preferenceChange(IEclipsePreferences.PreferenceChangeEvent event) { >+ String propertyName = event.getKey(); >+ JavaModelManager manager = JavaModelManager.getJavaModelManager(); >+ if (propertyName.startsWith(JavaCore.PLUGIN_ID)) { >+ if (propertyName.equals(JavaCore.CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER) || >+ propertyName.equals(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER) || >+ propertyName.equals(JavaCore.CORE_JAVA_BUILD_DUPLICATE_RESOURCE) || >+ propertyName.equals(JavaCore.CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER) || >+ propertyName.equals(JavaCore.CORE_JAVA_BUILD_INVALID_CLASSPATH) || >+ propertyName.equals(JavaCore.CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS) || >+ propertyName.equals(JavaCore.CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS) || >+ propertyName.equals(JavaCore.CORE_INCOMPLETE_CLASSPATH) || >+ propertyName.equals(JavaCore.CORE_CIRCULAR_CLASSPATH) || >+ propertyName.equals(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL)) >+ { >+ manager.deltaState.addClasspathValidation(JavaProject.this); >+ } >+ manager.resetProjectOptions(JavaProject.this); >+ JavaProject.this.resetCaches(); // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=233568 >+ } >+ } >+ }; >+ eclipsePreferences.addPreferenceChangeListener(this.preferencesChangeListener); >+ return eclipsePreferences; >+ } > > public String getElementName() { > return this.project.getName();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 269336
: 129577