/* * Copyright (c) 2004 Christopher Lenz and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Christopher Lenz - initial implementation * * $Id: WebUI.java,v 1.11 2007-11-08 01:37:06 scorphus Exp $ */ package net.sourceforge.phpeclipse.ui; import org.eclipse.jface.resource.JFaceResources; import java.io.File; import java.io.IOException; //import java.io.InputStream; import java.net.URL; //import java.util.Enumeration; import java.util.HashMap; //import java.util.PropertyResourceBundle; //import net.sourceforge.phpdt.core.JavaCore; import net.sourceforge.phpdt.core.IBuffer; import net.sourceforge.phpdt.core.ICompilationUnit; import net.sourceforge.phpdt.core.IJavaElement; import net.sourceforge.phpdt.core.WorkingCopyOwner; import net.sourceforge.phpdt.internal.core.JavaModelManager; import net.sourceforge.phpdt.internal.core.util.Util; import net.sourceforge.phpdt.internal.corext.template.php.CodeTemplateContextType; import net.sourceforge.phpdt.internal.corext.template.php.HTMLContextType; import net.sourceforge.phpdt.internal.corext.template.php.JavaContextType; import net.sourceforge.phpdt.internal.corext.template.php.JavaDocContextType; import net.sourceforge.phpdt.internal.ui.IJavaStatusConstants; 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.MockupPreferenceStore; import net.sourceforge.phpdt.internal.ui.text.PreferencesAdapter; import net.sourceforge.phpdt.internal.ui.text.folding.JavaFoldingStructureProviderRegistry; import net.sourceforge.phpdt.internal.ui.text.java.hover.JavaEditorTextHoverDescriptor; import net.sourceforge.phpdt.internal.ui.viewsupport.ImageDescriptorRegistry; import net.sourceforge.phpdt.internal.ui.viewsupport.ProblemMarkerManager; import net.sourceforge.phpdt.ui.IContextMenuConstants; import net.sourceforge.phpdt.ui.IWorkingCopyManager; import net.sourceforge.phpdt.ui.text.JavaTextTools; import net.sourceforge.phpdt.ui.PreferenceConstants; import net.sourceforge.phpeclipse.PHPeclipsePlugin; 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.DocumentAdapter; import net.sourceforge.phpeclipse.phpeditor.ICompilationUnitDocumentProvider; 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.ui.templates.template.HTMLTemplateContextType; //import net.sourceforge.phpdt.internal.corext.template.php.HTMLContextType; import net.sourceforge.phpeclipse.ui.templates.template.JSTemplateContextType; import net.sourceforge.phpeclipse.ui.templates.template.SmartyTemplateContextType; import net.sourceforge.phpeclipse.ui.templates.template.XMLTemplateContextType; 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.ISavedState; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; //import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.core.runtime.jobs.Job; 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.preference.PreferenceConverter; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; //import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.templates.ContextTypeRegistry; import org.eclipse.jface.text.templates.persistence.TemplateStore; //import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorRegistry; 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.editors.text.templates.ContributionContextTypeRegistry; import org.eclipse.ui.editors.text.templates.ContributionTemplateStore; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.eclipse.ui.texteditor.ChainedPreferenceStore; import org.eclipse.ui.texteditor.ConfigurationElementSorter; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; import org.osgi.framework.BundleContext; /** * The web development tools UI plugin. */ public class WebUI extends AbstractUIPlugin implements IPreferenceConstants { public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.ui"; public static final String EDITOR_ID = WebUI.PLUGIN_ID + ".PHPUnitEditor"; /** * The key to store customized templates. * * @since 3.0 */ private static final String TEMPLATES_KEY = "net.sourceforge.phpdt.ui.text.custom_templates"; //$NON-NLS-1$ /** * The key to store customized code templates. * * @since 3.0 */ private static final String CODE_TEMPLATES_KEY = "net.sourceforge.phpdt.ui.text.custom_code_templates"; //$NON-NLS-1$ private static final String CUSTOM_TEMPLATES_KEY = "net.sourceforge.phpeclipse.ui.templates"; //$NON-NLS-1$ /** * The key to store customized code templates. * * @since 3.0 */ // private static final String CODE_TEMPLATES_KEY = "net.sourceforge.phpdt.ui.text.custom_code_templates"; //$NON-NLS-1$ /** * The maximum number of allowed proposals by category */ public final static int MAX_PROPOSALS = 200; public final static String PHP_NATURE_ID = PLUGIN_ID + ".phpnature"; // Constants --------------------------------------------------------------- public static final String ICON_OVERLAY_ERROR = "full/ovr16/error_co.gif"; //$NON-NLS-1$ public static final String ICON_OVERLAY_WARNING = "full/ovr16/warning_co.gif"; //$NON-NLS-1$ // Instance Variables ------------------------------------------------------ /** The shared instance. */ private static WebUI plugin; /** * The combined preference store. * * @since 3.0 */ private IPreferenceStore fCombinedPreferenceStore; /** * The coded template store for the java editor. * * @since 3.0 */ private TemplateStore fCodeTemplateStore; /** * The code template context type registry for the java editor. * * @since 3.0 */ private ContextTypeRegistry fCodeTemplateContextTypeRegistry; /** * The template context type registry for the java editor. * * @since 3.0 */ private ContextTypeRegistry fContextTypeRegistry; private ResourceAdapterFactory fResourceAdapterFactory; private JavaElementAdapterFactory fJavaElementAdapterFactory; private ICompilationUnitDocumentProvider fCompilationUnitDocumentProvider; private JavaTextTools fJavaTextTools; private IWorkingCopyManager fWorkingCopyManager; private IPropertyChangeListener fFontPropertyChangeListener; private ProblemMarkerManager fProblemMarkerManager; private MockupPreferenceStore fMockupPreferenceStore; private ImageDescriptorRegistry fImageDescriptorRegistry; private JavaEditorTextHoverDescriptor[] fJavaEditorTextHoverDescriptors; private MembersOrderPreferenceCache fMembersOrderPreferenceCache; private HashMap fIndexManagerMap = new HashMap(); /** * The extension point registry for the * net.sourceforge.phpdt.ui.javaFoldingStructureProvider * extension point. * * @since 3.0 */ private JavaFoldingStructureProviderRegistry fFoldingStructureProviderRegistry; public static IWorkbenchPage getActivePage() { return getDefault().internalGetActivePage(); } private IWorkbenchPage internalGetActivePage() { return getWorkbench().getActiveWorkbenchWindow().getActivePage(); } public static Shell getActiveWorkbenchShell() { return getActiveWorkbenchWindow().getShell(); } public static IWorkbenchWindow getActiveWorkbenchWindow() { return getDefault().getWorkbench().getActiveWorkbenchWindow(); } // Public Methods ---------------------------------------------------------- /** * Returns the shared instance. */ public static WebUI getDefault() { return plugin; } /** * Returns the workspace instance. */ public static IWorkspace getWorkspace() { return ResourcesPlugin.getWorkspace(); } /** The context type registry. */ private ContributionContextTypeRegistry fRegistry; /** The template store. */ private TemplateStore fStore; // Constructors ------------------------------------------------------------ /** * The constructor. */ public WebUI() { plugin = this; } /** * Returns this plug-in's context type registry. * * @return the context type registry for this plug-in instance */ public ContextTypeRegistry getContextTypeRegistry() { if (fRegistry == null) { // create an configure the contexts available in the editor fRegistry = new ContributionContextTypeRegistry(); fRegistry.addContextType(XMLTemplateContextType.XML_CONTEXT_TYPE); fRegistry.addContextType(HTMLTemplateContextType.HTML_CONTEXT_TYPE); fRegistry.addContextType(SmartyTemplateContextType.SMARTY_CONTEXT_TYPE); fRegistry.addContextType(JSTemplateContextType.JS_CONTEXT_TYPE); } return fRegistry; } // Private Methods --------------------------------------------------------- /** * Returns an image descriptor for the image corresponding to the specified * key (which is the name of the image file). * * @param key * The key of the image * @return The descriptor for the requested image, or null if * the image could not be found */ private ImageDescriptor getImageDescriptor(String key) { try { URL url = getBundle().getEntry("/icons/" + key); //$NON-NLS-1$ return ImageDescriptor.createFromURL(url); } catch (IllegalStateException e) { return null; } } /** * Returns this plug-in's template store. * * @return the template store of this plug-in instance */ public TemplateStore getTemplateStore() { if (fStore == null) { fStore = new ContributionTemplateStore(/*getContextTypeRegistry()*/getTemplateContextRegistry(), getDefault().getPreferenceStore(), /*CUSTOM_*/TEMPLATES_KEY); try { fStore.load(); } catch (IOException e) { WebUI .getDefault() .getLog() .log( new Status( IStatus.ERROR, "net.sourceforge.phpeclipse.ui", IStatus.OK, "", e)); //$NON-NLS-1$ //$NON-NLS-2$ } } return fStore; } /* * @see AbstractUIPlugin#initializeImageRegistry(ImageRegistry) */ protected void initializeImageRegistry(ImageRegistry reg) { reg.put(ICON_OVERLAY_ERROR, getImageDescriptor(ICON_OVERLAY_ERROR)); reg.put(ICON_OVERLAY_WARNING, getImageDescriptor(ICON_OVERLAY_WARNING)); } // private IWorkbenchPage internalGetActivePage() { // IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow(); // if (window != null) // return window.getActivePage(); // return null; // } public static void log(IStatus status) { getDefault().getLog().log(status); } public static void log(Throwable e) { log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, "" + e.getLocalizedMessage(), e)); } public static String getPluginId() { return getDefault().getBundle().getSymbolicName(); } /** * 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(WebUI .getDefault().getPluginPreferences()), generalTextStore }); } return fCombinedPreferenceStore; } // TODO: refactor this into a better method name ! public synchronized ICompilationUnitDocumentProvider getCompilationUnitDocumentProvider() { if (fCompilationUnitDocumentProvider == null) fCompilationUnitDocumentProvider = new PHPDocumentProvider(); return fCompilationUnitDocumentProvider; } public synchronized JavaTextTools getJavaTextTools() { if (fJavaTextTools == null) fJavaTextTools = new JavaTextTools(getPreferenceStore(), /*JavaCore .getPlugin().*/getPluginPreferences()); return fJavaTextTools; } public synchronized IWorkingCopyManager getWorkingCopyManager() { if (fWorkingCopyManager == null) { ICompilationUnitDocumentProvider provider = getCompilationUnitDocumentProvider(); fWorkingCopyManager = new WorkingCopyManager(provider); } return fWorkingCopyManager; } public synchronized ProblemMarkerManager getProblemMarkerManager() { if (fProblemMarkerManager == null) fProblemMarkerManager = new ProblemMarkerManager(); return fProblemMarkerManager; } /** * Returns the mockup preference store for firing events and registering * listeners on project setting changes. Temporary solution. */ public MockupPreferenceStore getMockupPreferenceStore() { if (fMockupPreferenceStore == null) fMockupPreferenceStore = new MockupPreferenceStore(); return fMockupPreferenceStore; } public static ImageDescriptorRegistry getImageDescriptorRegistry() { return getDefault().internalGetImageDescriptorRegistry(); } private ImageDescriptorRegistry internalGetImageDescriptorRegistry() { if (fImageDescriptorRegistry == null) fImageDescriptorRegistry = new ImageDescriptorRegistry(); return fImageDescriptorRegistry; } /** * Returns the registry of the extensions to the * net.sourceforge.phpdt.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; } /** * Returns all Java editor text hovers contributed to the workbench. * * @return an array of JavaEditorTextHoverDescriptor * @since 2.1 */ public JavaEditorTextHoverDescriptor[] getJavaEditorTextHoverDescriptors() { if (fJavaEditorTextHoverDescriptors == null) { fJavaEditorTextHoverDescriptors = JavaEditorTextHoverDescriptor .getContributedHovers(); ConfigurationElementSorter sorter = new ConfigurationElementSorter() { /* * @see org.eclipse.ui.texteditor.ConfigurationElementSorter#getConfigurationElement(java.lang.Object) */ public IConfigurationElement getConfigurationElement( Object object) { return ((JavaEditorTextHoverDescriptor) object) .getConfigurationElement(); } }; sorter.sort(fJavaEditorTextHoverDescriptors); // The Problem hover has to be the first and the Annotation hover // has to // be the last one in the JDT UI's hover list int length = fJavaEditorTextHoverDescriptors.length; int first = -1; int last = length - 1; int problemHoverIndex = -1; int annotationHoverIndex = -1; for (int i = 0; i < length; i++) { if (!fJavaEditorTextHoverDescriptors[i].getId().startsWith( PLUGIN_ID)) { if (problemHoverIndex == -1 || annotationHoverIndex == -1) continue; else { last = i - 1; break; } } if (first == -1) first = i; if (fJavaEditorTextHoverDescriptors[i].getId().equals( "net.sourceforge.phpdt.ui.AnnotationHover")) { //$NON-NLS-1$ annotationHoverIndex = i; continue; } if (fJavaEditorTextHoverDescriptors[i].getId().equals( "net.sourceforge.phpdt.ui.ProblemHover")) { //$NON-NLS-1$ problemHoverIndex = i; continue; } } JavaEditorTextHoverDescriptor hoverDescriptor = null; if (first > -1 && problemHoverIndex > -1 && problemHoverIndex != first) { // move problem hover to beginning hoverDescriptor = fJavaEditorTextHoverDescriptors[first]; fJavaEditorTextHoverDescriptors[first] = fJavaEditorTextHoverDescriptors[problemHoverIndex]; fJavaEditorTextHoverDescriptors[problemHoverIndex] = hoverDescriptor; // update annotation hover index if needed if (annotationHoverIndex == first) annotationHoverIndex = problemHoverIndex; } if (annotationHoverIndex > -1 && annotationHoverIndex != last) { // move annotation hover to end hoverDescriptor = fJavaEditorTextHoverDescriptors[last]; fJavaEditorTextHoverDescriptors[last] = fJavaEditorTextHoverDescriptors[annotationHoverIndex]; fJavaEditorTextHoverDescriptors[annotationHoverIndex] = hoverDescriptor; } // Move Best Match hover to front for (int i = 0; i < fJavaEditorTextHoverDescriptors.length - 1; i++) { if (PreferenceConstants.ID_BESTMATCH_HOVER .equals(fJavaEditorTextHoverDescriptors[i].getId())) { hoverDescriptor = fJavaEditorTextHoverDescriptors[i]; for (int j = i; j > 0; j--) fJavaEditorTextHoverDescriptors[j] = fJavaEditorTextHoverDescriptors[j - 1]; fJavaEditorTextHoverDescriptors[0] = hoverDescriptor; break; } } } return fJavaEditorTextHoverDescriptors; } public synchronized MembersOrderPreferenceCache getMemberOrderPreferenceCache() { if (fMembersOrderPreferenceCache == null) fMembersOrderPreferenceCache = new MembersOrderPreferenceCache(); return fMembersOrderPreferenceCache; } /** * Open a file in the Workbench that may or may not exist in the workspace. * Must be run on the UI thread. * * @param filename * @throws CoreException */ public ITextEditor openFileInTextEditor(String filename) throws CoreException { // reject directories if (new File(filename).isDirectory()) return null; IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow window = workbench.getWorkbenchWindows()[0]; IWorkbenchPage page = window.getActivePage(); IPath path = new Path(filename); // If the file exists in the workspace, open it IFile file = getWorkspace().getRoot().getFile(path); IEditorPart editor; ITextEditor textEditor; if (file != null && file.exists()) { editor = IDE.openEditor(page, file, true); textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class); } else { // Otherwise open the stream directly if (page == null) return null; FileStorage storage = new FileStorage(path); IEditorRegistry registry = getWorkbench().getEditorRegistry(); IEditorDescriptor desc = registry.getDefaultEditor(filename); if (desc == null) { desc = registry .findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID); // desc = registry.getDefaultEditor(); } IEditorInput input = new ExternalEditorInput(storage); editor = page.openEditor(input, desc.getId()); textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class); // If the storage provider is not ours, we can't guarantee // read/write. if (textEditor != null) { IDocumentProvider documentProvider = textEditor .getDocumentProvider(); if (!(documentProvider instanceof ExternalStorageDocumentProvider)) { storage.setReadOnly(); } } } return textEditor; } /** * Creates the PHP plugin standard groups in a context menu. */ public static void createStandardGroups(IMenuManager menu) { if (!menu.isEmpty()) return; menu.add(new Separator(IContextMenuConstants.GROUP_NEW)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_GOTO)); menu.add(new Separator(IContextMenuConstants.GROUP_OPEN)); menu.add(new GroupMarker(IContextMenuConstants.GROUP_SHOW)); menu.add(new Separator(IContextMenuConstants.GROUP_REORGANIZE)); menu.add(new Separator(IContextMenuConstants.GROUP_GENERATE)); menu.add(new Separator(IContextMenuConstants.GROUP_SEARCH)); menu.add(new Separator(IContextMenuConstants.GROUP_BUILD)); menu.add(new Separator(IContextMenuConstants.GROUP_ADDITIONS)); menu.add(new Separator(IContextMenuConstants.GROUP_VIEWER_SETUP)); menu.add(new Separator(IContextMenuConstants.GROUP_PROPERTIES)); } public IdentifierIndexManager getIndexManager(IProject iProject) { IPath path = iProject.getWorkingLocation(/*WebUI*/PHPeclipsePlugin.PLUGIN_ID); path = path.append("project.index"); String indexFilename = path.toString(); // try { // IdentDB db = IdentDB.getInstance(); // } catch (ClassNotFoundException e) { // e.printStackTrace(); // } catch (SQLException e) { // e.printStackTrace(); // } IdentifierIndexManager indexManager = (IdentifierIndexManager) fIndexManagerMap .get(indexFilename); if (indexManager == null) { indexManager = new IdentifierIndexManager(indexFilename); fIndexManagerMap.put(indexFilename, indexManager); } return indexManager; } /** * Returns the template store for the code generation templates. * * @return the template store for the code generation templates * @since 3.0 */ public TemplateStore getCodeTemplateStore() { if (fCodeTemplateStore == null) { fCodeTemplateStore = new ContributionTemplateStore( getCodeTemplateContextRegistry(), getPreferenceStore(), CODE_TEMPLATES_KEY); try { fCodeTemplateStore.load(); } catch (IOException e) { log(e); } } return fCodeTemplateStore; } /** * Returns the template context type registry for the code generation * templates. * * @return the template context type registry for the code generation * templates * @since 3.0 */ public ContextTypeRegistry getCodeTemplateContextRegistry() { if (fCodeTemplateContextTypeRegistry == null) { fCodeTemplateContextTypeRegistry = new ContributionContextTypeRegistry(); CodeTemplateContextType .registerContextTypes(fCodeTemplateContextTypeRegistry); } return fCodeTemplateContextTypeRegistry; } public void openFileAndGotoOffset(String filename, int offset, int length) throws CoreException { ITextEditor textEditor = openFileInTextEditor(filename); if (textEditor != null) { // If a line number was given, go to it if (offset >= 0) { // IDocument document = textEditor.getDocumentProvider() // .getDocument(textEditor.getEditorInput()); textEditor.selectAndReveal(offset, length); } } } public void openFileAndFindString(String filename, String findString) throws CoreException { ITextEditor textEditor = openFileInTextEditor(filename); if (textEditor != null) { // If a string was given, go to it if (findString != null) { try { IDocument document = textEditor.getDocumentProvider() .getDocument(textEditor.getEditorInput()); int offset = document.search(0, findString, true, false, true); textEditor.selectAndReveal(offset, findString.length()); } catch (BadLocationException e) { // invalid text position -> do nothing } } } } public static void logErrorMessage(String message) { log(new Status(IStatus.ERROR, getPluginId(),IJavaStatusConstants.INTERNAL_ERROR, message, null)); } public static void log(int severity, String message) { Status status = new Status(severity, PLUGIN_ID, IStatus.OK, message, null); log(status); } public static void log(String message, Throwable t) { log(error(message, t)); } public static IStatus error(Throwable t) { return error("PHPeclipsePlugin.internalErrorOccurred", t); //$NON-NLS-1$ } public static IStatus error(String message, Throwable t) { return new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, t); } /** * Resets the Java editor text hovers contributed to the workbench. *

* This will force a rebuild of the descriptors the next time a client asks * for them. *

* * @return an array of JavaEditorTextHoverDescriptor * @since 2.1 */ public void resetJavaEditorTextHoverDescriptors() { fJavaEditorTextHoverDescriptors = null; } /** * Returns the template context type registry for the java plugin. * * @return the template context type registry for the java plugin * @since 3.0 */ public ContextTypeRegistry getTemplateContextRegistry() { if (fContextTypeRegistry == null) { fContextTypeRegistry = new ContributionContextTypeRegistry(); fContextTypeRegistry.addContextType(new JavaContextType()); fContextTypeRegistry.addContextType(new JavaDocContextType()); fContextTypeRegistry.addContextType(new HTMLContextType()); } return fContextTypeRegistry; } // public static void logErrorMessage(String message) { // log(new Status(IStatus.ERROR, getPluginId(), // JavaStatusConstants.INTERNAL_ERROR, message, null)); // } /* * (non - Javadoc) Method declared in Plugin */ public void start(BundleContext context) throws Exception { super.start(context); // JavaCore.start(this, context); final JavaModelManager modelManager = JavaModelManager .getJavaModelManager(); try { modelManager.configurePluginDebugOptions(); // request state folder creation (workaround 19885) getStateLocation(); // retrieve variable values PHPeclipsePlugin.getDefault().getPluginPreferences() .addPropertyChangeListener( new JavaModelManager.PluginPreferencesListener()); // manager.loadVariablesAndContainers(); final IWorkspace workspace = ResourcesPlugin.getWorkspace(); workspace.addResourceChangeListener(modelManager.deltaState, IResourceChangeEvent.PRE_BUILD | IResourceChangeEvent.POST_BUILD | IResourceChangeEvent.POST_CHANGE | IResourceChangeEvent.PRE_DELETE | IResourceChangeEvent.PRE_CLOSE); // ISavedState savedState = workspace.addSaveParticipant( // /*PHPeclipsePlugin*/WebUI.this, modelManager); WorkspaceJob processSavedState = new WorkspaceJob( Util.bind("savedState.jobName")) { //$NON-NLS-1$ public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { ISavedState savedState = workspace.addSaveParticipant( /*PHPeclipsePlugin*/WebUI.this, modelManager); if (savedState != null) { modelManager.deltaState.getDeltaProcessor().overridenEventType = IResourceChangeEvent.POST_CHANGE; savedState.processResourceChangeEvents(modelManager.deltaState); } return Status.OK_STATUS; } }; processSavedState.setSystem(true); processSavedState.setPriority(Job.SHORT); // process asap processSavedState.schedule(); } catch (RuntimeException e) { modelManager.shutdown(); throw e; } registerAdapters(); // 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(); } private void registerAdapters() { fJavaElementAdapterFactory = new JavaElementAdapterFactory(); fResourceAdapterFactory = new ResourceAdapterFactory(); IAdapterManager manager = Platform.getAdapterManager(); manager .registerAdapters(fJavaElementAdapterFactory, IJavaElement.class); manager.registerAdapters(fResourceAdapterFactory, IResource.class); } /** * 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)); } }; // incastrix /*JFaceResources.getFontRegistry().addListener( fFontPropertyChangeListener);*/ } }