Bug 117071 MembersOrderPreferenceCache leaking a propertyChangeListener
20051109 org.eclipse.jdt.ui.PreferenceConstants#initializeDefaultValues adds a listener to JDT UI preference store but this is not deleted before shutdown.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/MembersOrderPreferenceCache.java
fCategoryOffsets= null;
		fSortByVisibility= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.APPEARANCE_ENABLE_VISIBILITY_SORT_ORDER);
		fVisibilityOffsets= null;
	}
	
	public static boolean isMemberOrderProperty(String property) {
		return PreferenceConstants.APPEARANCE_MEMBER_SORT_ORDER.equals(property)
			|| PreferenceConstants.APPEARANCE_VISIBILITY_SORT_ORDER.equals(property)
			|| PreferenceConstants.APPEARANCE_ENABLE_VISIBILITY_SORT_ORDER.equals(property);
	}
	public void propertyChange(PropertyChangeEvent event) {
		String property= event.getProperty();
		
		if (PreferenceConstants.APPEARANCE_MEMBER_SORT_ORDER.equals(property)) {
			fCategoryOffsets= null;
		} else if (PreferenceConstants.APPEARANCE_VISIBILITY_SORT_ORDER.equals(property)) {
			fVisibilityOffsets= null;
		} else if (PreferenceConstants.APPEARANCE_ENABLE_VISIBILITY_SORT_ORDER.equals(property)) {
			fSortByVisibility= PreferenceConstants.getPreferenceStore().getBoolean(PreferenceConstants.APPEARANCE_ENABLE_VISIBILITY_SORT_ORDER);
		}
	}
	public int getCategoryIndex(int kind) {
		if (fCategoryOffsets == null) {
			fCategoryOffsets= getCategoryOffsets();
		}
		return fCategoryOffsets[kind];
	}
	
	private int[] getCategoryOffsets() {
		int[] offsets= new int[N_CATEGORIES];