X-Git-Url: http://secure.phpeclipse.com

diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java
index a18cd6a..e59ece1 100644
--- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java
+++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/PHPeclipsePlugin.java
@@ -19,11 +19,17 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import net.sourceforge.phpdt.core.IBuffer;
+import net.sourceforge.phpdt.core.IBufferFactory;
+import net.sourceforge.phpdt.core.ICompilationUnit;
+import net.sourceforge.phpdt.core.IJavaElement;
 import net.sourceforge.phpdt.core.JavaCore;
+import net.sourceforge.phpdt.core.WorkingCopyOwner;
 import net.sourceforge.phpdt.externaltools.internal.model.ColorManager;
 import net.sourceforge.phpdt.externaltools.internal.model.ExternalToolsPlugin;
 import net.sourceforge.phpdt.externaltools.internal.model.VariableContextManager;
-import net.sourceforge.phpdt.internal.core.JavaModelManager;
+import net.sourceforge.phpdt.internal.ui.JavaElementAdapterFactory;
+import net.sourceforge.phpdt.internal.ui.ResourceAdapterFactory;
 import net.sourceforge.phpdt.internal.ui.preferences.MembersOrderPreferenceCache;
 import net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage;
 import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor;
@@ -37,19 +43,17 @@ import net.sourceforge.phpeclipse.builder.ExternalEditorInput;
 import net.sourceforge.phpeclipse.builder.ExternalStorageDocumentProvider;
 import net.sourceforge.phpeclipse.builder.FileStorage;
 import net.sourceforge.phpeclipse.builder.IdentifierIndexManager;
+import net.sourceforge.phpeclipse.phpeditor.CustomBufferFactory;
+import net.sourceforge.phpeclipse.phpeditor.DocumentAdapter;
 import net.sourceforge.phpeclipse.phpeditor.PHPDocumentProvider;
 import net.sourceforge.phpeclipse.phpeditor.PHPSyntaxRdr;
 import net.sourceforge.phpeclipse.phpeditor.WorkingCopyManager;
 import net.sourceforge.phpeclipse.phpeditor.util.PHPColorProvider;
-import net.sourceforge.phpeclipse.resourcesview.PHPElement;
-import net.sourceforge.phpeclipse.resourcesview.PHPElementAdapterFactory;
-import net.sourceforge.phpeclipse.resourcesview.ResourceAdapterFactory;
 
 import org.eclipse.core.boot.BootLoader;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
 import org.eclipse.core.resources.IWorkspace;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
@@ -60,13 +64,19 @@ import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import net.sourceforge.phpdt.internal.ui.text.folding.JavaFoldingStructureProviderRegistry;
+
+import net.sourceforge.phpdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jface.action.GroupMarker;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.Separator;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.resource.JFaceResources;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorDescriptor;
@@ -77,11 +87,15 @@ import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.editors.text.EditorsUI;
 import org.eclipse.ui.ide.IDE;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants;
+import org.eclipse.ui.texteditor.ChainedPreferenceStore;
 import org.eclipse.ui.texteditor.IDocumentProvider;
 import org.eclipse.ui.texteditor.ITextEditor;
 import org.eclipse.ui.texteditor.MarkerAnnotationPreferences;
+import org.osgi.framework.BundleContext;
 /**
  * The main plugin class to be used in the desktop.
  */
@@ -136,12 +150,39 @@ public class PHPeclipsePlugin extends AbstractUIPlugin
   private ImageDescriptorRegistry fImageDescriptorRegistry;
   private HashMap fIndexManagerMap = new HashMap();
   private IWorkingCopyManager fWorkingCopyManager;
+	private IBufferFactory fBufferFactory;
   private PHPDocumentProvider fCompilationUnitDocumentProvider;
   private JavaTextTools fJavaTextTools;
   private ProblemMarkerManager fProblemMarkerManager;
   private MembersOrderPreferenceCache fMembersOrderPreferenceCache;
   private IFile fLastEditorFile = null;
   private JavaEditorTextHoverDescriptor[] fJavaEditorTextHoverDescriptors;
+  
+  private JavaElementAdapterFactory fJavaElementAdapterFactory;
+//	private MarkerAdapterFactory fMarkerAdapterFactory;
+//	private EditorInputAdapterFactory fEditorInputAdapterFactory;
+	private ResourceAdapterFactory fResourceAdapterFactory; 
+//	private LogicalPackageAdapterFactory fLogicalPackageAdapterFactory;
+	private IPropertyChangeListener fFontPropertyChangeListener;
+	/**
+	 * Property change listener on this plugin's preference store.
+	 * 
+	 * @since 3.0
+	 */
+	private IPropertyChangeListener fPropertyChangeListener;
+	
+	/**
+	 * The combined preference store.
+	 * @since 3.0
+	 */
+	private IPreferenceStore fCombinedPreferenceStore;
+	/**
+	 * The extension point registry for the <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code>
+	 * extension point.
+	 * 
+	 * @since 3.0
+	 */
+	private JavaFoldingStructureProviderRegistry fFoldingStructureProviderRegistry;
   /**
    * The constructor.
    */
@@ -344,6 +385,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin
       fCompilationUnitDocumentProvider = new PHPDocumentProvider();
     return fCompilationUnitDocumentProvider;
   }
+
   /**
    * Get the identifier index manager for the given project
    * 
@@ -379,6 +421,7 @@ public class PHPeclipsePlugin extends AbstractUIPlugin
       fProblemMarkerManager = new ProblemMarkerManager();
     return fProblemMarkerManager;
   }
+	
   public synchronized JavaTextTools getJavaTextTools() {
     if (fJavaTextTools == null)
       fJavaTextTools = new JavaTextTools(getPreferenceStore());
@@ -660,93 +703,319 @@ public class PHPeclipsePlugin extends AbstractUIPlugin
   public void setLastEditorFile(IFile textEditor) {
     this.fLastEditorFile = textEditor;
   }
+	/*
+	 * @see org.eclipse.core.runtime.Plugin#stop
+	 */
+	public void stop(BundleContext context) throws Exception {
+		try {
+			JavaCore.stop(this, context);
+			
+			ColorManager.getDefault().dispose();
+		    // save the information from the php index files if necessary
+		    Collection collection = fIndexManagerMap.values();
+		    Iterator iterator = collection.iterator();
+		    IdentifierIndexManager indexManager = null;
+		    while (iterator.hasNext()) {
+		      indexManager = (IdentifierIndexManager) iterator.next();
+		      indexManager.writeFile();
+		    }
+		    if (fImageDescriptorRegistry != null)
+		      fImageDescriptorRegistry.dispose();
+		    
+//			AllTypesCache.terminate();
+	
+			if (fImageDescriptorRegistry != null)
+				fImageDescriptorRegistry.dispose();
+			
+			unregisterAdapters();
+	
+//			if (fASTProvider != null) {
+//				fASTProvider.dispose();
+//				fASTProvider= null;
+//			}
+			
+			if (fWorkingCopyManager != null) {
+				fWorkingCopyManager.shutdown();
+				fWorkingCopyManager= null;
+			}
+			
+			if (fCompilationUnitDocumentProvider != null) {
+				fCompilationUnitDocumentProvider.shutdown();
+				fCompilationUnitDocumentProvider= null;
+			}
+					
+			if (fJavaTextTools != null) {
+				fJavaTextTools.dispose();
+				fJavaTextTools= null;
+			}
+//			JavaDocLocations.shutdownJavadocLocations();
+			
+			uninstallPreferenceStoreBackwardsCompatibility();
+			
+//			RefactoringCore.getUndoManager().shutdown();
+		} finally {	
+			super.stop(context);
+		}
+	}
   /**
    * @see org.eclipse.ui.plugin.AbstractUIPlugin#shutdown()
    */
-  public void shutdown() throws CoreException {
-    // moved down (see below):
-    //    super.shutdown();
-    //  externalTools.shutDown();
-    ColorManager.getDefault().dispose();
-    // save the information from the php index files if necessary
-    Collection collection = fIndexManagerMap.values();
-    Iterator iterator = collection.iterator();
-    IdentifierIndexManager indexManager = null;
-    while (iterator.hasNext()) {
-      indexManager = (IdentifierIndexManager) iterator.next();
-      indexManager.writeFile();
-    }
-    if (fImageDescriptorRegistry != null)
-      fImageDescriptorRegistry.dispose();
-    //				unregisterAdapters();
-    super.shutdown();
-    if (fWorkingCopyManager != null) {
-      fWorkingCopyManager.shutdown();
-      fWorkingCopyManager = null;
-    }
-    if (fCompilationUnitDocumentProvider != null) {
-      fCompilationUnitDocumentProvider.shutdown();
-      fCompilationUnitDocumentProvider = null;
-    }
-    if (fJavaTextTools != null) {
-      fJavaTextTools.dispose();
-      fJavaTextTools = null;
-    }
-    //				JavaDocLocations.shutdownJavadocLocations();
-    //		
-    //				JFaceResources.getFontRegistry().removeListener(fFontPropertyChangeListener);
-    // begin JavaCore#shutdown()
-    //savePluginPreferences();
-    savePluginPreferences();
-    IWorkspace workspace = ResourcesPlugin.getWorkspace();
-    workspace.removeResourceChangeListener(JavaModelManager
-        .getJavaModelManager().deltaProcessor);
-    workspace.removeSaveParticipant(PHPeclipsePlugin.getDefault());
-    ((JavaModelManager) JavaModelManager.getJavaModelManager()).shutdown();
-    //	 end JavaCore#shutdown()
-  }
-  public void startup() throws CoreException {
-    super.startup();
-    // begin JavaCore.startup();
-    JavaModelManager manager = JavaModelManager.getJavaModelManager();
-    try {
-      manager.configurePluginDebugOptions();
-      // request state folder creation (workaround 19885)
-      //		JavaCore.getPlugin().getStateLocation();
-      getStateLocation();
-      // retrieve variable values
-      //		JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
-      // JavaModelManager.PluginPreferencesListener());
-      getPluginPreferences().addPropertyChangeListener(
-          new JavaModelManager.PluginPreferencesListener());
-      //	TODO khartlage temp-del
-      //		manager.loadVariablesAndContainers();
-      IWorkspace workspace = ResourcesPlugin.getWorkspace();
-      workspace.addResourceChangeListener(manager.deltaProcessor,
-          IResourceChangeEvent.PRE_AUTO_BUILD
-              | IResourceChangeEvent.POST_AUTO_BUILD
-              | IResourceChangeEvent.POST_CHANGE
-              | IResourceChangeEvent.PRE_DELETE
-              | IResourceChangeEvent.PRE_CLOSE);
-      //		startIndexing();
-      workspace.addSaveParticipant(PHPeclipsePlugin.getDefault(), manager);
-    } catch (CoreException e) {
-    } catch (RuntimeException e) {
-      manager.shutdown();
-      throw e;
-    }
-    //	 end JavaCore.startup();
-    IAdapterManager platformManager = Platform.getAdapterManager();
-    platformManager.registerAdapters(new PHPElementAdapterFactory(),
-        PHPElement.class);
-    platformManager.registerAdapters(new ResourceAdapterFactory(),
-        IResource.class);
-    //  externalTools.startUp();
-    getStandardDisplay().asyncExec(new Runnable() {
-      public void run() {
-        //initialize the variable context manager
-        VariableContextManager.getDefault();
-      }
-    });
-  }
+//  public void shutdown() throws CoreException {
+//    // moved down (see below):
+//    //    super.shutdown();
+//    //  externalTools.shutDown();
+//    ColorManager.getDefault().dispose();
+//    // save the information from the php index files if necessary
+//    Collection collection = fIndexManagerMap.values();
+//    Iterator iterator = collection.iterator();
+//    IdentifierIndexManager indexManager = null;
+//    while (iterator.hasNext()) {
+//      indexManager = (IdentifierIndexManager) iterator.next();
+//      indexManager.writeFile();
+//    }
+//    if (fImageDescriptorRegistry != null)
+//      fImageDescriptorRegistry.dispose();
+//    //				unregisterAdapters();
+//    super.shutdown();
+//    if (fWorkingCopyManager != null) {
+//      fWorkingCopyManager.shutdown();
+//      fWorkingCopyManager = null;
+//    }
+//    if (fCompilationUnitDocumentProvider != null) {
+//      fCompilationUnitDocumentProvider.shutdown();
+//      fCompilationUnitDocumentProvider = null;
+//    }
+//    if (fJavaTextTools != null) {
+//      fJavaTextTools.dispose();
+//      fJavaTextTools = null;
+//    }
+//    //				JavaDocLocations.shutdownJavadocLocations();
+//    //		
+//    //				JFaceResources.getFontRegistry().removeListener(fFontPropertyChangeListener);
+//    // begin JavaCore#shutdown()
+//    //savePluginPreferences();
+//    savePluginPreferences();
+//    IWorkspace workspace = ResourcesPlugin.getWorkspace();
+//	workspace.removeResourceChangeListener(JavaModelManager.getJavaModelManager().deltaState);
+//	workspace.removeSaveParticipant(this);
+//	((JavaModelManager) JavaModelManager.getJavaModelManager()).shutdown();
+//    //	 end JavaCore#shutdown()
+//  }
+	/**
+	 * Installs backwards compatibility for the preference store.
+	 */
+	private void installPreferenceStoreBackwardsCompatibility() {
+
+		/*
+		 * Installs backwards compatibility: propagate the Java editor font from a
+		 * pre-2.1 plug-in to the Platform UI's preference store to preserve
+		 * the Java editor font from a pre-2.1 workspace. This is done only
+		 * once.
+		 */
+		String fontPropagatedKey= "fontPropagated"; //$NON-NLS-1$
+		if (getPreferenceStore().contains(JFaceResources.TEXT_FONT) && !getPreferenceStore().isDefault(JFaceResources.TEXT_FONT)) {
+			if (!getPreferenceStore().getBoolean(fontPropagatedKey))
+				PreferenceConverter.setValue(PlatformUI.getWorkbench().getPreferenceStore(), PreferenceConstants.EDITOR_TEXT_FONT, PreferenceConverter.getFontDataArray(getPreferenceStore(), JFaceResources.TEXT_FONT));
+		}
+		getPreferenceStore().setValue(fontPropagatedKey, true);
+
+		/*
+		 * Backwards compatibility: set the Java editor font in this plug-in's
+		 * preference store to let older versions access it. Since 2.1 the
+		 * Java editor font is managed by the workbench font preference page.
+		 */
+		PreferenceConverter.putValue(getPreferenceStore(), JFaceResources.TEXT_FONT, JFaceResources.getFontRegistry().getFontData(PreferenceConstants.EDITOR_TEXT_FONT));
+
+		fFontPropertyChangeListener= new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (PreferenceConstants.EDITOR_TEXT_FONT.equals(event.getProperty()))
+					PreferenceConverter.putValue(getPreferenceStore(), JFaceResources.TEXT_FONT, JFaceResources.getFontRegistry().getFontData(PreferenceConstants.EDITOR_TEXT_FONT));
+			}
+		};
+		JFaceResources.getFontRegistry().addListener(fFontPropertyChangeListener);
+		
+		/*
+		 * Backwards compatibility: propagate the Java editor tab width from a
+		 * pre-3.0 plug-in to the new preference key. This is done only once.
+		 */
+		final String oldTabWidthKey= PreferenceConstants.EDITOR_TAB_WIDTH;
+		final String newTabWidthKey= AbstractDecoratedTextEditorPreferenceConstants.EDITOR_TAB_WIDTH;
+		String tabWidthPropagatedKey= "tabWidthPropagated"; //$NON-NLS-1$
+		if (getPreferenceStore().contains(oldTabWidthKey) && !getPreferenceStore().isDefault(oldTabWidthKey)) {
+			if (!getPreferenceStore().getBoolean(tabWidthPropagatedKey))
+				getPreferenceStore().setValue(newTabWidthKey, getPreferenceStore().getInt(oldTabWidthKey));
+		}
+		getPreferenceStore().setValue(tabWidthPropagatedKey, true);
+
+		/*
+		 * Backwards compatibility: set the Java editor tab width in this plug-in's
+		 * preference store with the old key to let older versions access it.
+		 * Since 3.0 the tab width is managed by the extended texteditor and
+		 * uses a new key.
+		 */
+		getPreferenceStore().putValue(oldTabWidthKey, getPreferenceStore().getString(newTabWidthKey));
+
+		fPropertyChangeListener= new IPropertyChangeListener() {
+			public void propertyChange(PropertyChangeEvent event) {
+				if (newTabWidthKey.equals(event.getProperty()))
+					getPreferenceStore().putValue(oldTabWidthKey, getPreferenceStore().getString(newTabWidthKey));
+			}
+		};
+		getPreferenceStore().addPropertyChangeListener(fPropertyChangeListener);
+		
+		/*
+		 * Backward compatibility for the refactoring preference key. 
+		 */
+//		getPreferenceStore().setValue(
+//			PreferenceConstants.REFACTOR_ERROR_PAGE_SEVERITY_THRESHOLD, 
+//			RefactoringCore.getConditionCheckingFailedSeverity());
+	}
+	
+	/**
+	 * Uninstalls backwards compatibility for the preference store.
+	 */
+	private void uninstallPreferenceStoreBackwardsCompatibility() {
+		JFaceResources.getFontRegistry().removeListener(fFontPropertyChangeListener);
+		getPreferenceStore().removePropertyChangeListener(fPropertyChangeListener);
+	}
+  /* (non - Javadoc)
+	 * Method declared in Plugin
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		
+		JavaCore.start(this, context);
+		
+		registerAdapters();
+		
+		 //  externalTools.startUp();
+	    getStandardDisplay().asyncExec(new Runnable() {
+	      public void run() {
+	        //initialize the variable context manager
+	        VariableContextManager.getDefault();
+	      }
+	    });
+	    
+//		if (USE_WORKING_COPY_OWNERS) {
+			WorkingCopyOwner.setPrimaryBufferProvider(new WorkingCopyOwner() {
+				public IBuffer createBuffer(ICompilationUnit workingCopy) {
+					ICompilationUnit original= workingCopy.getPrimary();
+					IResource resource= original.getResource();
+					if (resource instanceof IFile)
+						return new DocumentAdapter(workingCopy, (IFile) resource);
+					return DocumentAdapter.NULL;
+				}
+			});
+//		}
+	
+		installPreferenceStoreBackwardsCompatibility();
+		
+//		AllTypesCache.initialize();
+		
+		// Initialize AST provider
+//		getASTProvider();
+	}
+//  public void startup() throws CoreException {
+//    super.startup();
+//    // begin JavaCore.startup();
+//    JavaModelManager manager = JavaModelManager.getJavaModelManager();
+//    try {
+//      manager.configurePluginDebugOptions();
+//      // request state folder creation (workaround 19885)
+//      //		JavaCore.getPlugin().getStateLocation();
+//      getStateLocation();
+//      // retrieve variable values
+//      //		JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
+//      // JavaModelManager.PluginPreferencesListener());
+//      getPluginPreferences().addPropertyChangeListener(
+//          new JavaModelManager.PluginPreferencesListener());
+//      //	TODO khartlage temp-del
+//      //		manager.loadVariablesAndContainers();
+//      final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+//		workspace.addResourceChangeListener(
+//			manager.deltaState,
+//			IResourceChangeEvent.PRE_BUILD
+//				| IResourceChangeEvent.POST_BUILD
+//				| IResourceChangeEvent.POST_CHANGE
+//				| IResourceChangeEvent.PRE_DELETE
+//				| IResourceChangeEvent.PRE_CLOSE);
+//      //		startIndexing();
+//      workspace.addSaveParticipant(PHPeclipsePlugin.getDefault(), manager);
+//    } catch (CoreException e) {
+//    } catch (RuntimeException e) {
+//      manager.shutdown();
+//      throw e;
+//    }
+//    //	 end JavaCore.startup();
+//    IAdapterManager platformManager = Platform.getAdapterManager();
+//    platformManager.registerAdapters(new PHPElementAdapterFactory(),
+//        PHPElement.class);
+//    platformManager.registerAdapters(new ResourceAdapterFactory(),
+//        IResource.class);
+//    //  externalTools.startUp();
+//    getStandardDisplay().asyncExec(new Runnable() {
+//      public void run() {
+//        //initialize the variable context manager
+//        VariableContextManager.getDefault();
+//      }
+//    });
+//  }
+	
+	
+	private void registerAdapters() {
+		fJavaElementAdapterFactory= new JavaElementAdapterFactory();
+//		fMarkerAdapterFactory= new MarkerAdapterFactory();
+//		fEditorInputAdapterFactory= new EditorInputAdapterFactory();
+		fResourceAdapterFactory= new ResourceAdapterFactory();
+//		fLogicalPackageAdapterFactory= new LogicalPackageAdapterFactory();
+
+		IAdapterManager manager= Platform.getAdapterManager();		
+		manager.registerAdapters(fJavaElementAdapterFactory, IJavaElement.class);
+//		manager.registerAdapters(fMarkerAdapterFactory, IMarker.class);
+//		manager.registerAdapters(fEditorInputAdapterFactory, IEditorInput.class);
+		manager.registerAdapters(fResourceAdapterFactory, IResource.class);
+//		manager.registerAdapters(fLogicalPackageAdapterFactory, LogicalPackage.class);
+	}
+	
+	private void unregisterAdapters() {
+		IAdapterManager manager= Platform.getAdapterManager();
+		manager.unregisterAdapters(fJavaElementAdapterFactory);
+//		manager.unregisterAdapters(fMarkerAdapterFactory);
+//		manager.unregisterAdapters(fEditorInputAdapterFactory);
+		manager.unregisterAdapters(fResourceAdapterFactory);
+//		manager.unregisterAdapters(fLogicalPackageAdapterFactory);
+	}
+	
+	/**
+	 * Returns a combined preference store, this store is read-only.
+	 * 
+	 * @return the combined preference store
+	 * 
+	 * @since 3.0
+	 */
+	public IPreferenceStore getCombinedPreferenceStore() {
+		if (fCombinedPreferenceStore == null) {
+			IPreferenceStore generalTextStore= EditorsUI.getPreferenceStore(); 
+			fCombinedPreferenceStore= new ChainedPreferenceStore(new IPreferenceStore[] { getPreferenceStore(), new PreferencesAdapter(JavaCore.getPlugin().getPluginPreferences()), generalTextStore });
+		}
+		return fCombinedPreferenceStore;
+	}
+	
+	public synchronized IBufferFactory getBufferFactory() {
+		if (fBufferFactory == null)
+			fBufferFactory= new CustomBufferFactory();
+		return fBufferFactory;
+	}
+	/**
+	 * Returns the registry of the extensions to the <code>org.eclipse.jdt.ui.javaFoldingStructureProvider</code>
+	 * extension point.
+	 * 
+	 * @return the registry of contributed <code>IJavaFoldingStructureProvider</code>
+	 * @since 3.0
+	 */
+	public synchronized JavaFoldingStructureProviderRegistry getFoldingStructureProviderRegistry() {
+		if (fFoldingStructureProviderRegistry == null)
+			fFoldingStructureProviderRegistry= new JavaFoldingStructureProviderRegistry();
+		return fFoldingStructureProviderRegistry;
+	}
 }
\ No newline at end of file