mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-11 18:25:40 +02:00
New static methods taken from JDT counterpart.
This commit is contained in:
parent
bc176d3e56
commit
c021d8a42e
2 changed files with 264 additions and 72 deletions
|
@ -10,94 +10,278 @@ import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
|
import org.eclipse.cdt.core.model.IBinary;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ISourceRange;
|
||||||
|
import org.eclipse.cdt.core.model.ISourceReference;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.resources.FileStorage;
|
||||||
|
import org.eclipse.cdt.internal.core.model.IWorkingCopy;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IStorage;
|
import org.eclipse.core.resources.IStorage;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.jface.viewers.SelectionChangedEvent;
|
|
||||||
import org.eclipse.jface.viewers.StructuredSelection;
|
|
||||||
import org.eclipse.ui.IEditorDescriptor;
|
import org.eclipse.ui.IEditorDescriptor;
|
||||||
import org.eclipse.ui.IEditorInput;
|
import org.eclipse.ui.IEditorInput;
|
||||||
import org.eclipse.ui.IEditorPart;
|
import org.eclipse.ui.IEditorPart;
|
||||||
import org.eclipse.ui.IEditorRegistry;
|
import org.eclipse.ui.IEditorRegistry;
|
||||||
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
import org.eclipse.ui.IWorkbenchPage;
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
|
||||||
import org.eclipse.ui.PartInitException;
|
import org.eclipse.ui.PartInitException;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.part.FileEditorInput;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
import org.eclipse.cdt.core.model.IBinary;
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
|
||||||
import org.eclipse.cdt.core.resources.FileStorage;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.cdt.utils.spawner.ProcessFactory;
|
|
||||||
|
|
||||||
public class EditorUtility {
|
public class EditorUtility {
|
||||||
|
|
||||||
private EditorUtility () {
|
private EditorUtility () {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEditorPart openInEditor (IFile file) throws PartInitException {
|
/**
|
||||||
IWorkbenchWindow window= CUIPlugin.getDefault().getActiveWorkbenchWindow();
|
* Tests if a cu is currently shown in an editor
|
||||||
if (window != null) {
|
* @return the IEditorPart if shown, null if element is not open in an editor
|
||||||
IWorkbenchPage p= window.getActivePage();
|
*/
|
||||||
if (p != null) {
|
public static IEditorPart isOpenInEditor(Object inputElement) {
|
||||||
return p.openEditor(file);
|
IEditorInput input = null;
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEditorPart openInEditor (ICElement element) throws PartInitException {
|
|
||||||
IResource res = null;
|
|
||||||
try {
|
try {
|
||||||
res = element.getUnderlyingResource();
|
input = getEditorInput(inputElement);
|
||||||
} catch (CModelException e) {
|
} catch (CModelException x) {
|
||||||
|
//CUIPlugin.log(x.getStatus());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Treat binary differently
|
if (input != null) {
|
||||||
if (element instanceof IBinary) {
|
IWorkbenchPage p= CUIPlugin.getActivePage();
|
||||||
IStorage store = getStorage((IBinary)element);
|
|
||||||
if (store != null) {
|
|
||||||
return openInEditor(store, element.getElementName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (res != null && res instanceof IFile) {
|
|
||||||
IEditorPart editor = openInEditor((IFile)res);
|
|
||||||
if (editor instanceof CEditor) {
|
|
||||||
CEditor e = (CEditor)editor;
|
|
||||||
StructuredSelection selection = new StructuredSelection(element);
|
|
||||||
e.selectionChanged (new SelectionChangedEvent (e.getOutlinePage (), selection));
|
|
||||||
}
|
|
||||||
return editor;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEditorPart openInEditor (IPath path) throws PartInitException {
|
|
||||||
IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
|
|
||||||
if (f == null) {
|
|
||||||
IStorage s = new FileStorage(path);
|
|
||||||
return openInEditor(s, path.lastSegment());
|
|
||||||
}
|
|
||||||
return openInEditor(f);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEditorPart openInEditor (IStorage store, String name) throws PartInitException {
|
|
||||||
IEditorInput ei = new ExternalEditorInput(store);
|
|
||||||
IWorkbenchWindow window= CUIPlugin.getDefault().getActiveWorkbenchWindow();
|
|
||||||
if (window != null) {
|
|
||||||
IWorkbenchPage p = window.getActivePage();
|
|
||||||
if (p != null) {
|
if (p != null) {
|
||||||
return p.openEditor(ei, getEditorID(name));
|
return p.findEditor(input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a Java editor for an element such as <code>IJavaElement</code>, <code>IFile</code>, or <code>IStorage</code>.
|
||||||
|
* The editor is activated by default.
|
||||||
|
* @return the IEditorPart or null if wrong element type or opening failed
|
||||||
|
*/
|
||||||
|
public static IEditorPart openInEditor(Object inputElement) throws CModelException, PartInitException {
|
||||||
|
return openInEditor(inputElement, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens a Java editor for an element (IJavaElement, IFile, IStorage...)
|
||||||
|
* @return the IEditorPart or null if wrong element type or opening failed
|
||||||
|
*/
|
||||||
|
public static IEditorPart openInEditor(Object inputElement, boolean activate) throws CModelException, PartInitException {
|
||||||
|
|
||||||
|
if (inputElement instanceof IFile) {
|
||||||
|
return openInEditor((IFile) inputElement, activate);
|
||||||
|
}
|
||||||
|
|
||||||
|
IEditorInput input = getEditorInput(inputElement);
|
||||||
|
if (input instanceof IFileEditorInput) {
|
||||||
|
IFileEditorInput fileInput= (IFileEditorInput) input;
|
||||||
|
return openInEditor(fileInput.getFile(), activate);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input != null) {
|
||||||
|
return openInEditor(input, getEditorID(input, inputElement), activate);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Selects a C Element in an editor
|
||||||
|
*/
|
||||||
|
public static void revealInEditor(IEditorPart part, ICElement element) {
|
||||||
|
if (element != null && part instanceof CEditor) {
|
||||||
|
if (element instanceof ISourceReference) {
|
||||||
|
try {
|
||||||
|
ISourceRange range = ((ISourceReference) element).getSourceRange();
|
||||||
|
((CEditor) part).setSelection(range, true);
|
||||||
|
} catch (CModelException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEditorPart openInEditor(IFile file, boolean activate) throws PartInitException {
|
||||||
|
if (file != null) {
|
||||||
|
IWorkbenchPage p= CUIPlugin.getActivePage();
|
||||||
|
if (p != null) {
|
||||||
|
IEditorPart editorPart= p.openEditor(file, null, activate);
|
||||||
|
initializeHighlightRange(editorPart);
|
||||||
|
return editorPart;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static IEditorPart openInEditor(IEditorInput input, String editorID, boolean activate) throws PartInitException {
|
||||||
|
if (input != null) {
|
||||||
|
IWorkbenchPage p= CUIPlugin.getActivePage();
|
||||||
|
if (p != null) {
|
||||||
|
IEditorPart editorPart= p.openEditor(input, editorID, activate);
|
||||||
|
initializeHighlightRange(editorPart);
|
||||||
|
return editorPart;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void initializeHighlightRange(IEditorPart editorPart) {
|
||||||
|
if (editorPart instanceof ITextEditor) {
|
||||||
|
//TogglePresentationAction toggleAction= new TogglePresentationAction();
|
||||||
|
// Initialize editor
|
||||||
|
//toggleAction.setEditor((ITextEditor)editorPart);
|
||||||
|
// Reset action
|
||||||
|
//toggleAction.setEditor(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static IEditorInput getEditorInput(ICElement element) throws CModelException {
|
||||||
|
while (element != null) {
|
||||||
|
if (element instanceof IWorkingCopy && ((IWorkingCopy) element).isWorkingCopy())
|
||||||
|
element= ((IWorkingCopy) element).getOriginalElement();
|
||||||
|
|
||||||
|
if (element instanceof ISourceReference) {
|
||||||
|
element = ((ISourceReference)element).getTranslationUnit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element instanceof ITranslationUnit) {
|
||||||
|
ITranslationUnit unit= (ITranslationUnit) element;
|
||||||
|
IResource resource= unit.getResource();
|
||||||
|
if (resource instanceof IFile)
|
||||||
|
return new FileEditorInput((IFile) resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (element instanceof IBinary) {
|
||||||
|
//return new InternalClassFileEditorInput((IBinary) element);
|
||||||
|
return new ExternalEditorInput(getStorage((IBinary)element));
|
||||||
|
}
|
||||||
|
|
||||||
|
element= element.getParent();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEditorInput getEditorInput(Object input) throws CModelException {
|
||||||
|
if (input instanceof ICElement) {
|
||||||
|
return getEditorInput((ICElement) input);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input instanceof IFile) {
|
||||||
|
return new FileEditorInput((IFile) input);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (input instanceof IStorage) {
|
||||||
|
//return new JarEntryEditorInput((IStorage)input);
|
||||||
|
return new ExternalEditorInput((IStorage)input);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the current active editor edits a c element return it, else
|
||||||
|
* return null
|
||||||
|
*/
|
||||||
|
public static ICElement getActiveEditorCInput() {
|
||||||
|
IWorkbenchPage page= CUIPlugin.getActivePage();
|
||||||
|
if (page != null) {
|
||||||
|
IEditorPart part= page.getActiveEditor();
|
||||||
|
if (part != null) {
|
||||||
|
IEditorInput editorInput= part.getEditorInput();
|
||||||
|
if (editorInput != null) {
|
||||||
|
return (ICElement)editorInput.getAdapter(ICElement.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the working copy of an compilation unit opened in an editor
|
||||||
|
* @param part the editor part
|
||||||
|
* @param cu the original compilation unit (or another working copy)
|
||||||
|
* @return the working copy of the compilation unit, or null if not found
|
||||||
|
*/
|
||||||
|
// public static ITranslationUnit getWorkingCopy(ITranslationUnit cu) {
|
||||||
|
// if (cu == null)
|
||||||
|
// return null;
|
||||||
|
// if (cu.isWorkingCopy())
|
||||||
|
// return cu;
|
||||||
|
//
|
||||||
|
// return (ITranslationUnit)cu.findSharedWorkingCopy(CUIPlugin.getBufferFactory());
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the translation unit for the given c element.
|
||||||
|
* @param element the c element whose compilation unit is searched for
|
||||||
|
* @return the compilation unit of the given java element
|
||||||
|
*/
|
||||||
|
private static ITranslationUnit getTranslationUnit(ICElement element) {
|
||||||
|
|
||||||
|
if (element == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
int type= element.getElementType();
|
||||||
|
if (ICElement.C_UNIT == type) {
|
||||||
|
return (ITranslationUnit) element;
|
||||||
|
}
|
||||||
|
if (ICElement.C_BINARY == type) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (element instanceof ISourceReference) {
|
||||||
|
return ((ISourceReference) element).getTranslationUnit();
|
||||||
|
}
|
||||||
|
return getTranslationUnit(element.getParent());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// public static IEditorPart openInEditor (IFile file) throws PartInitException {
|
||||||
|
// IWorkbenchWindow window= CUIPlugin.getDefault().getActiveWorkbenchWindow();
|
||||||
|
// if (window != null) {
|
||||||
|
// IWorkbenchPage p= window.getActivePage();
|
||||||
|
// if (p != null) {
|
||||||
|
// return p.openEditor(file);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// public static IEditorPart openInEditor (IPath path) throws PartInitException {
|
||||||
|
// IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
|
||||||
|
// if (f == null) {
|
||||||
|
// IStorage s = new FileStorage(path);
|
||||||
|
// return openInEditor(s, path.lastSegment());
|
||||||
|
// }
|
||||||
|
// return openInEditor(f);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public static IEditorPart openInEditor (IStorage store, String name) throws PartInitException {
|
||||||
|
// IEditorInput ei = new ExternalEditorInput(store);
|
||||||
|
// IWorkbenchWindow window= CUIPlugin.getDefault().getActiveWorkbenchWindow();
|
||||||
|
// if (window != null) {
|
||||||
|
// IWorkbenchPage p = window.getActivePage();
|
||||||
|
// if (p != null) {
|
||||||
|
// return p.openEditor(ei, getEditorID(name));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
|
||||||
public static String getEditorID(String name) {
|
public static String getEditorID(String name) {
|
||||||
IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry();
|
IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry();
|
||||||
if (registry != null) {
|
if (registry != null) {
|
||||||
|
@ -110,16 +294,11 @@ public class EditorUtility {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Selects a C Element in an editor
|
|
||||||
*/
|
|
||||||
public static void revealInEditor(IEditorPart part, ICElement element) {
|
|
||||||
if (element != null && part instanceof CEditor) {
|
|
||||||
//((CEditor) part).setSelection(element);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public static String getEditorID(IEditorInput input, Object inputObject) {
|
||||||
|
return getEditorID(input.getName());
|
||||||
|
}
|
||||||
|
|
||||||
public static IStorage getStorage(IBinary bin) {
|
public static IStorage getStorage(IBinary bin) {
|
||||||
IStorage store = null;
|
IStorage store = null;
|
||||||
Process objdump = null;
|
Process objdump = null;
|
||||||
|
|
|
@ -38,6 +38,7 @@ import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.swt.widgets.Shell;
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.IWorkbenchPage;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
||||||
|
|
||||||
|
@ -109,6 +110,17 @@ public class CUIPlugin extends AbstractUIPlugin {
|
||||||
return getDefault().getWorkbench().getActiveWorkbenchWindow();
|
return getDefault().getWorkbench().getActiveWorkbenchWindow();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static IWorkbenchPage getActivePage() {
|
||||||
|
IWorkbenchWindow window = getDefault().getActiveWorkbenchWindow();
|
||||||
|
if (window != null) {
|
||||||
|
return window.getActivePage();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Shell getActiveWorkbenchShell() {
|
public Shell getActiveWorkbenchShell() {
|
||||||
return getActiveWorkbenchWindow().getShell();
|
return getActiveWorkbenchWindow().getShell();
|
||||||
}
|
}
|
||||||
|
@ -274,4 +286,5 @@ public class CUIPlugin extends AbstractUIPlugin {
|
||||||
fProblemMarkerManager = new ProblemMarkerManager();
|
fProblemMarkerManager = new ProblemMarkerManager();
|
||||||
return fProblemMarkerManager;
|
return fProblemMarkerManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue