1 11 package org.eclipse.jdt.internal.core; 12 13 import org.eclipse.core.runtime.preferences.IEclipsePreferences; 14 import org.eclipse.core.runtime.preferences.InstanceScope; 15 import org.eclipse.core.runtime.preferences.PreferenceModifyListener; 16 import org.eclipse.jdt.core.*; 17 import org.osgi.service.prefs.BackingStoreException; 18 import org.osgi.service.prefs.Preferences; 19 20 public class JavaCorePreferenceModifyListener extends PreferenceModifyListener { 21 22 static int PREFIX_LENGTH = JavaModelManager.CP_CONTAINER_PREFERENCES_PREFIX.length(); 23 JavaModel javaModel = JavaModelManager.getJavaModelManager().getJavaModel(); 24 25 28 public IEclipsePreferences preApply(IEclipsePreferences node) { 29 Preferences instance = node.node(InstanceScope.SCOPE); 30 cleanJavaCore(instance.node(JavaCore.PLUGIN_ID)); 31 return super.preApply(node); 32 } 33 34 39 void cleanJavaCore(Preferences preferences) { 40 try { 41 String [] keys = preferences.keys(); 42 for (int k = 0, kl= keys.length; k<kl; k++) { 43 String key = keys[k]; 44 if (key.startsWith(JavaModelManager.CP_CONTAINER_PREFERENCES_PREFIX) && !isJavaProjectAccessible(key)) { 45 preferences.remove(key); 46 } 47 } 48 } catch (BackingStoreException e) { 49 } 51 } 52 53 61 boolean isJavaProjectAccessible(String propertyName) { 62 int index = propertyName.indexOf('|', PREFIX_LENGTH); 63 if (index > 0) { 64 final String projectName = propertyName.substring(PREFIX_LENGTH, index).trim(); 65 JavaProject project = (JavaProject) javaModel.getJavaProject(projectName); 66 if (project.getProject().isAccessible()) { 67 return true; 68 } 69 } 70 return false; 71 } 72 73 } 74 | Popular Tags |