package net.sourceforge.phpeclipse;
import java.io.File;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
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.ui.preferences.MembersOrderPreferenceCache;
import net.sourceforge.phpdt.internal.ui.preferences.TemplatePreferencePage;
+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.PreferenceConstants;
import net.sourceforge.phpdt.ui.text.JavaTextTools;
import net.sourceforge.phpeclipse.builder.ExternalEditorInput;
import net.sourceforge.phpeclipse.builder.IdentifierIndexManager;
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 org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
+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.text.BadLocationException;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
/**
* id of builder - matches plugin.xml (concatenate pluginid.builderid)
*/
- public static final String BUILDER_INDEX_ID = PLUGIN_ID + ".indexbuilder";
public static final String BUILDER_PARSER_ID = PLUGIN_ID + ".parserbuilder";
+ //public static final String BUILDER_INDEX_ID = PLUGIN_ID + ".indexbuilder";
/** General debug flag*/
public static final boolean DEBUG = false;
+ /**
+ * The maximum number of allowed proposals by category
+ */
+ public final static int MAX_PROPOSALS = 200;
+
private static ExternalToolsPlugin externalTools;
/**
/** Windows NT */
private static final int WINDOWS_NT = 5;
- private PHPDocumentProvider fCompilationUnitDocumentProvider;
- //Resource bundle.
- //private ResourceBundle resourceBundle;
private ImageDescriptorRegistry fImageDescriptorRegistry;
private HashMap fIndexManagerMap = new HashMap();
+ private IWorkingCopyManager fWorkingCopyManager;
+ private PHPDocumentProvider fCompilationUnitDocumentProvider;
private JavaTextTools fJavaTextTools;
+ private ProblemMarkerManager fProblemMarkerManager;
+ private MembersOrderPreferenceCache fMembersOrderPreferenceCache;
+
private IFile fLastEditorFile = null;
+
+ private JavaEditorTextHoverDescriptor[] fJavaEditorTextHoverDescriptors;
+
/**
* The constructor.
*/
// resourceBundle = null;
// }
}
-
+ /**
+ * 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();
+ return fJavaEditorTextHoverDescriptors;
+ }
+
+ /**
+ * Resets the Java editor text hovers contributed to the workbench.
+ * <p>
+ * This will force a rebuild of the descriptors the next time
+ * a client asks for them.
+ * </p>
+ *
+ * @return an array of JavaEditorTextHoverDescriptor
+ * @since 2.1
+ */
+ public void resetJavaEditorTextHoverDescriptors() {
+ fJavaEditorTextHoverDescriptors= null;
+ }
+ /**
+ * 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 static IWorkbenchPage getActivePage() {
return getDefault().internalGetActivePage();
}
return getActiveWorkbenchWindow().getShell();
}
+ /**
+ * Returns an array of all editors that have an unsaved content. If the identical content is
+ * presented in more than one editor, only one of those editor parts is part of the result.
+ *
+ * @return an array of all dirty editor parts.
+ */
+ public static IEditorPart[] getDirtyEditors() {
+ Set inputs = new HashSet();
+ List result = new ArrayList(0);
+ IWorkbench workbench = getDefault().getWorkbench();
+ IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+ for (int i = 0; i < windows.length; i++) {
+ IWorkbenchPage[] pages = windows[i].getPages();
+ for (int x = 0; x < pages.length; x++) {
+ IEditorPart[] editors = pages[x].getDirtyEditors();
+ for (int z = 0; z < editors.length; z++) {
+ IEditorPart ep = editors[z];
+ IEditorInput input = ep.getEditorInput();
+ if (!inputs.contains(input)) {
+ inputs.add(input);
+ result.add(ep);
+ }
+ }
+ }
+ }
+ return (IEditorPart[]) result.toArray(new IEditorPart[result.size()]);
+ }
+
public static IWorkbenchWindow getActiveWorkbenchWindow() {
return getDefault().getWorkbench().getActiveWorkbenchWindow();
}
return indexManager;
}
+ public synchronized IWorkingCopyManager getWorkingCopyManager() {
+ if (fWorkingCopyManager == null) {
+ PHPDocumentProvider provider = getCompilationUnitDocumentProvider();
+ fWorkingCopyManager = new WorkingCopyManager(provider);
+ }
+ return fWorkingCopyManager;
+ }
+
+ public synchronized MembersOrderPreferenceCache getMemberOrderPreferenceCache() {
+ if (fMembersOrderPreferenceCache == null)
+ fMembersOrderPreferenceCache= new MembersOrderPreferenceCache();
+ return fMembersOrderPreferenceCache;
+ }
+
+ public synchronized ProblemMarkerManager getProblemMarkerManager() {
+ if (fProblemMarkerManager == null)
+ fProblemMarkerManager = new ProblemMarkerManager();
+ return fProblemMarkerManager;
+ }
+
public synchronized JavaTextTools getJavaTextTools() {
if (fJavaTextTools == null)
fJavaTextTools = new JavaTextTools(getPreferenceStore());
PreferenceConverter.setDefault(store, PHP_MULTILINE_COMMENT, PHPColorProvider.MULTI_LINE_COMMENT);
PreferenceConverter.setDefault(store, PHP_SINGLELINE_COMMENT, PHPColorProvider.SINGLE_LINE_COMMENT);
+ PreferenceConverter.setDefault(store, PHP_TAG, PHPColorProvider.TAG);
PreferenceConverter.setDefault(store, PHP_KEYWORD, PHPColorProvider.KEYWORD);
PreferenceConverter.setDefault(store, PHP_VARIABLE, PHPColorProvider.VARIABLE);
PreferenceConverter.setDefault(store, PHP_FUNCTIONNAME, PHPColorProvider.FUNCTION_NAME);
PreferenceConverter.setDefault(store, PHP_TYPE, PHPColorProvider.TYPE);
PreferenceConverter.setDefault(store, PHP_STRING, PHPColorProvider.STRING);
PreferenceConverter.setDefault(store, PHP_DEFAULT, PHPColorProvider.DEFAULT);
+
+ PreferenceConverter.setDefault(store, PHPDOC_KEYWORD, PHPColorProvider.PHPDOC_KEYWORD);
+ PreferenceConverter.setDefault(store, PHPDOC_TAG, PHPColorProvider.PHPDOC_TAG);
+ PreferenceConverter.setDefault(store, PHPDOC_LINK, PHPColorProvider.PHPDOC_LINK);
+ PreferenceConverter.setDefault(store, PHPDOC_DEFAULT, PHPColorProvider.PHPDOC_DEFAULT);
+
// PreferenceConverter.setDefault(
// store,
// PHP_EDITOR_BACKGROUND,
// PHPColorProvider.BACKGROUND_COLOR);
//language stuff
- store.setDefault(RESOURCE_BUNDLE, LANGUAGE_DEFAULT);
- store.setDefault(RESOURCE_BUNDLE_EN_GB, "true");
- store.setDefault(RESOURCE_BUNDLE_DE, "false");
- store.setDefault(RESOURCE_BUNDLE_FR, "false");
- store.setDefault(RESOURCE_BUNDLE_ES, "false");
+ // store.setDefault(RESOURCE_BUNDLE, LANGUAGE_DEFAULT);
+ // store.setDefault(RESOURCE_BUNDLE_EN_GB, "true");
+ // store.setDefault(RESOURCE_BUNDLE_DE, "false");
+ // store.setDefault(RESOURCE_BUNDLE_FR, "false");
+ // store.setDefault(RESOURCE_BUNDLE_ES, "false");
store.setDefault(PHP_OUTLINE_CLASS, "true"); //$NON-NLS-1$
store.setDefault(PHP_OUTLINE_FUNC, "true"); //$NON-NLS-1$
fImageDescriptorRegistry = new ImageDescriptorRegistry();
return fImageDescriptorRegistry;
}
-
/**
* Open a file in the Workbench that may or may not exist in the workspace.
* Must be run on the UI thread.
* @param filename
- * @param line
* @throws CoreException
*/
- public void openFileInTextEditor(String filename, int line, String findString) throws CoreException {
+ public ITextEditor openFileInTextEditor(String filename) throws CoreException {
- // reject directories
+ // reject directories
if (new File(filename).isDirectory())
- return;
+ return null;
IWorkbench workbench = PlatformUI.getWorkbench();
IWorkbenchWindow window = workbench.getWorkbenchWindows()[0];
IEditorPart editor;
ITextEditor textEditor;
if (file != null && file.exists()) {
- editor = page.openEditor(file);
+ editor = IDE.openEditor(page, file, true);
textEditor = (ITextEditor) editor.getAdapter(ITextEditor.class);
} else {
// Otherwise open the stream directly
if (page == null)
- return;
+ return null;
FileStorage storage = new FileStorage(path);
IEditorRegistry registry = getWorkbench().getEditorRegistry();
IEditorDescriptor desc = registry.getDefaultEditor(filename);
}
}
}
+ return textEditor;
+ }
+ /**
+ * Open a file in the Workbench that may or may not exist in the workspace.
+ * Must be run on the UI thread.
+ * @param filename
+ * @param line
+ * @throws CoreException
+ */
+ public void openFileAndGotoLine(String filename, int line) throws CoreException {
+
+ ITextEditor textEditor = openFileInTextEditor(filename);
if (textEditor != null) {
// If a line number was given, go to it
if (line > 0) {
// invalid text position -> do nothing
}
}
+ }
+ }
+
+ /**
+ * Open a file in the Workbench that may or may not exist in the workspace.
+ * Must be run on the UI thread.
+ * @param filename
+ * @param offset
+ * @throws CoreException
+ */
+ 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 {
}
}
}
-
public void setLastEditorFile(IFile textEditor) {
this.fLastEditorFile = textEditor;
}
* @see org.eclipse.ui.plugin.AbstractUIPlugin#shutdown()
*/
public void shutdown() throws CoreException {
- super.shutdown();
-
+ // moved down:
+ // super.shutdown();
+
// externalTools.shutDown();
ColorManager.getDefault().dispose();
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);
+
}
public void startup() throws CoreException {