X-Git-Url: http://git.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 org.eclipse.jdt.ui.javaFoldingStructureProvider + * 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 org.eclipse.jdt.ui.javaFoldingStructureProvider + * extension point. + * + * @return the registry of contributed IJavaFoldingStructureProvider + * @since 3.0 + */ + public synchronized JavaFoldingStructureProviderRegistry getFoldingStructureProviderRegistry() { + if (fFoldingStructureProviderRegistry == null) + fFoldingStructureProviderRegistry= new JavaFoldingStructureProviderRegistry(); + return fFoldingStructureProviderRegistry; + } } \ No newline at end of file