mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 14:42:11 +02:00
Improve handling external file
- streamline openInEditor methods - add support for breakpoints - markers supported for all editor input types - make external translation units non-modifiable
This commit is contained in:
parent
d309f414c0
commit
a6693eba42
10 changed files with 294 additions and 320 deletions
|
@ -10,16 +10,6 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.browser.opentype;
|
||||
|
||||
import org.eclipse.cdt.core.browser.AllTypesCache;
|
||||
import org.eclipse.cdt.core.browser.ITypeInfo;
|
||||
import org.eclipse.cdt.core.browser.ITypeReference;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IStorage;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
|
@ -33,6 +23,15 @@ import org.eclipse.ui.IWorkbenchWindowActionDelegate;
|
|||
import org.eclipse.ui.PartInitException;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
import org.eclipse.cdt.core.browser.AllTypesCache;
|
||||
import org.eclipse.cdt.core.browser.ITypeInfo;
|
||||
import org.eclipse.cdt.core.browser.ITypeReference;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
|
||||
public class OpenTypeAction implements IWorkbenchWindowActionDelegate {
|
||||
|
||||
public OpenTypeAction() {
|
||||
|
@ -96,11 +95,7 @@ public class OpenTypeAction implements IWorkbenchWindowActionDelegate {
|
|||
editorPart = EditorUtility.openInEditor(unit);
|
||||
if (editorPart == null) {
|
||||
// open as external file
|
||||
IPath path = location.getLocation();
|
||||
if (path != null) {
|
||||
IStorage storage = new FileStorage(path);
|
||||
editorPart = EditorUtility.openInEditor(storage);
|
||||
}
|
||||
editorPart = EditorUtility.openInEditor(location.getLocation(), null);
|
||||
}
|
||||
|
||||
// highlight the type in the editor
|
||||
|
|
|
@ -38,8 +38,6 @@ import org.eclipse.swt.graphics.Point;
|
|||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Caret;
|
||||
import org.eclipse.swt.widgets.Display;
|
||||
import org.eclipse.ui.IEditorDescriptor;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
import org.eclipse.ui.IWorkbenchPage;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.PartInitException;
|
||||
|
@ -360,10 +358,7 @@ public class TextEditorDropAdapter extends DropTargetAdapter implements
|
|||
null));
|
||||
}
|
||||
if (file.canRead()) {
|
||||
IEditorInput editorInput= EditorUtility.getEditorInputForLocation(path);
|
||||
IEditorDescriptor desc= IDE.getEditorDescriptor(file.getName());
|
||||
String editorId= desc.getId();
|
||||
IDE.openEditor(getPage(), editorInput, editorId);
|
||||
EditorUtility.openInEditor(path, null);
|
||||
} else {
|
||||
throw new CoreException(new Status(IStatus.ERROR, CUIPlugin
|
||||
.getPluginId(), 0, CUIMessages.getFormattedString(
|
||||
|
|
|
@ -73,6 +73,7 @@ import org.eclipse.cdt.internal.core.model.IBufferFactory;
|
|||
import org.eclipse.cdt.internal.ui.CFileElementWorkingCopy;
|
||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||
import org.eclipse.cdt.internal.ui.text.IProblemRequestorExtension;
|
||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||
|
||||
/**
|
||||
* CDocumentProvider2
|
||||
|
@ -863,6 +864,7 @@ public class CDocumentProvider extends TextFileDocumentProvider {
|
|||
if (fileBufferAnnotationModel != null) {
|
||||
((AnnotationModel)tuInfo.fModel).addAnnotationModel("secondaryModel", fileBufferAnnotationModel); //$NON-NLS-1$
|
||||
}
|
||||
tuInfo.fCachedReadOnlyState= true;
|
||||
}
|
||||
if (tuInfo.fModel instanceof TranslationUnitAnnotationModel) {
|
||||
TranslationUnitAnnotationModel model= (TranslationUnitAnnotationModel) tuInfo.fModel;
|
||||
|
@ -877,6 +879,30 @@ public class CDocumentProvider extends TextFileDocumentProvider {
|
|||
return tuInfo;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#isReadOnly(java.lang.Object)
|
||||
*/
|
||||
public boolean isReadOnly(Object element) {
|
||||
// external editor input must not be modified
|
||||
// because of missing functionality in CFileElementWorkingCopy
|
||||
if (element instanceof ExternalEditorInput) {
|
||||
return true;
|
||||
}
|
||||
return super.isReadOnly(element);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#isModifiable(java.lang.Object)
|
||||
*/
|
||||
public boolean isModifiable(Object element) {
|
||||
// external editor input must not be modified
|
||||
// because of missing functionality in CFileElementWorkingCopy
|
||||
if (element instanceof ExternalEditorInput) {
|
||||
return false;
|
||||
}
|
||||
return super.isModifiable(element);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.ui.editors.text.TextFileDocumentProvider#disposeFileInfo(java.lang.Object,
|
||||
* org.eclipse.ui.editors.text.TextFileDocumentProvider.FileInfo)
|
||||
|
@ -1053,20 +1079,6 @@ public class CDocumentProvider extends TextFileDocumentProvider {
|
|||
disconnect(e.next());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the underlying resource for the given element.
|
||||
*
|
||||
* @param element the element
|
||||
* @return the underlying resource of the given element
|
||||
*/
|
||||
public IResource getUnderlyingResource(Object element) {
|
||||
if (element instanceof IFileEditorInput) {
|
||||
IFileEditorInput input= (IFileEditorInput) element;
|
||||
return input.getFile();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ILineTracker createLineTracker(Object element) {
|
||||
return new DefaultLineTracker();
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**********************************************************************
|
||||
* Copyright (c) 2002, 2005 IBM Corporation and others.
|
||||
* Copyright (c) 2002, 2006 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -7,16 +7,15 @@
|
|||
*
|
||||
* Contributors:
|
||||
* IBM Rational Software - Initial Contribution
|
||||
* Norbert Ploett (Siemens AG)
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
**********************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.ui.editor;
|
||||
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IResourceChangeEvent;
|
||||
import org.eclipse.core.resources.IResourceChangeListener;
|
||||
import org.eclipse.core.resources.IStorage;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
@ -24,35 +23,54 @@ import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
|
|||
|
||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
|
||||
public class ExternalSearchAnnotationModel extends
|
||||
ResourceMarkerAnnotationModel implements IResourceChangeListener {
|
||||
public class ExternalSearchAnnotationModel extends ResourceMarkerAnnotationModel {
|
||||
|
||||
protected IWorkspace fWorkspace;
|
||||
protected IStorage fStorage;
|
||||
protected boolean fChangesApplied;
|
||||
private final IStorage fStorage;
|
||||
private final int fDepth;
|
||||
private final String fLocationAttribute;
|
||||
|
||||
/**
|
||||
* @param resource
|
||||
* @param markerResource
|
||||
* @param storage
|
||||
*/
|
||||
public ExternalSearchAnnotationModel(IResource resource, IStorage storage) {
|
||||
super(resource);
|
||||
this.fWorkspace = resource.getWorkspace();
|
||||
this.fStorage = storage;
|
||||
public ExternalSearchAnnotationModel(IResource markerResource, IStorage storage) {
|
||||
this(markerResource, storage, IResource.DEPTH_ZERO, ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param markerResource
|
||||
* @param storage
|
||||
* @param depth
|
||||
*/
|
||||
ExternalSearchAnnotationModel(IResource markerResource, IStorage storage, int depth) {
|
||||
this(markerResource, storage, depth, ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param markerResource
|
||||
* @param storage
|
||||
* @param depth
|
||||
* @param locationAttribute
|
||||
*/
|
||||
ExternalSearchAnnotationModel(IResource markerResource,
|
||||
IStorage storage, int depth, String locationAttribute) {
|
||||
super(markerResource);
|
||||
fStorage= storage;
|
||||
fDepth= depth;
|
||||
fLocationAttribute= locationAttribute;
|
||||
}
|
||||
|
||||
protected IMarker[] retrieveMarkers() throws CoreException {
|
||||
IMarker[] markers = null;
|
||||
if (getResource() != null) {
|
||||
markers = getResource().findMarkers(IMarker.MARKER, true,
|
||||
IResource.DEPTH_ZERO);
|
||||
markers = getResource().findMarkers(IMarker.MARKER, true, fDepth);
|
||||
}
|
||||
return markers;
|
||||
}
|
||||
|
||||
protected boolean isAcceptable(IMarker marker) {
|
||||
boolean acceptable = false;
|
||||
String externalFileName = marker.getAttribute(
|
||||
ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION, null);
|
||||
String externalFileName = marker.getAttribute(fLocationAttribute, null);
|
||||
if (externalFileName != null) { // Only accept markers with external
|
||||
// paths set
|
||||
IPath externalPath = new Path(externalFileName);
|
||||
|
@ -66,13 +84,4 @@ public class ExternalSearchAnnotationModel extends
|
|||
return acceptable;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
|
||||
*/
|
||||
public void resourceChanged(IResourceChangeEvent event) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,93 +7,98 @@
|
|||
*
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
* Norbert Ploett (Siemens AG)
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.ui.editor;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.text.CTextTools;
|
||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IStorage;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.jface.text.source.AnnotationModel;
|
||||
import org.eclipse.jface.text.source.IAnnotationModel;
|
||||
import org.eclipse.ui.editors.text.FileDocumentProvider;
|
||||
import org.eclipse.ui.IPathEditorInput;
|
||||
import org.eclipse.ui.IStorageEditorInput;
|
||||
import org.eclipse.ui.editors.text.ILocationProvider;
|
||||
|
||||
public class ExternalSearchDocumentProvider extends FileDocumentProvider {
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||
|
||||
public class ExternalSearchDocumentProvider extends CStorageDocumentProvider {
|
||||
|
||||
/** Location attribute for breakpoints. See <code>ICBreakpoint.SOURCE_HANDLE</code> */
|
||||
private static final String DEBUG_SOURCE_HANDLE = "org.eclipse.cdt.debug.core.sourceHandle"; //$NON-NLS-1$
|
||||
|
||||
public ExternalSearchDocumentProvider(){
|
||||
super();
|
||||
}
|
||||
|
||||
/*
|
||||
* @see AbstractDocumentProvider#createElementInfo(Object)
|
||||
* @see org.eclipse.ui.editors.text.StorageDocumentProvider#createAnnotationModel(java.lang.Object)
|
||||
*/
|
||||
protected ElementInfo createElementInfo(Object element) throws CoreException {
|
||||
|
||||
protected IAnnotationModel createAnnotationModel(Object element) throws CoreException {
|
||||
if (element instanceof ExternalEditorInput) {
|
||||
|
||||
ExternalEditorInput externalInput = (ExternalEditorInput) element;
|
||||
|
||||
IDocument d = createDocument(externalInput);
|
||||
IAnnotationModel m= createExternalSearchAnnotationModel(externalInput);
|
||||
|
||||
FileInfo info= new FileInfo(d, m, null);
|
||||
return info;
|
||||
return createExternalSearchAnnotationModel((ExternalEditorInput)element);
|
||||
}
|
||||
return super.createElementInfo(element);
|
||||
if (element instanceof IStorageEditorInput) {
|
||||
IStorage storage= ((IStorageEditorInput)element).getStorage();
|
||||
if (storage.getFullPath() != null) {
|
||||
return createExternalSearchAnnotationModel(storage, null);
|
||||
}
|
||||
}
|
||||
if (element instanceof IPathEditorInput) {
|
||||
IPath path= ((IPathEditorInput)element).getPath();
|
||||
IStorage storage= new FileStorage(path);
|
||||
return createExternalSearchAnnotationModel(storage, null);
|
||||
}
|
||||
if (element instanceof IAdaptable) {
|
||||
IAdaptable adaptable= (IAdaptable) element;
|
||||
ILocationProvider provider= (ILocationProvider) adaptable.getAdapter(ILocationProvider.class);
|
||||
if (provider != null) {
|
||||
IPath path= provider.getPath(element);
|
||||
IStorage storage= new FileStorage(path);
|
||||
return createExternalSearchAnnotationModel(storage, null);
|
||||
}
|
||||
}
|
||||
return super.createAnnotationModel(element);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an annotation model for the given {@link ExternalEditorInput}.
|
||||
*
|
||||
* @param externalInput
|
||||
* @return a new annotation model for the editor input
|
||||
* @return a new annotation model for the external editor input
|
||||
*/
|
||||
private IAnnotationModel createExternalSearchAnnotationModel(ExternalEditorInput externalInput) {
|
||||
|
||||
IStorage storage = externalInput.getStorage();
|
||||
|
||||
IResource resourceToUseForMarker = null;
|
||||
|
||||
IFile resourceFile = CUIPlugin.getWorkspace().getRoot().getFileForLocation(storage.getFullPath());
|
||||
|
||||
if (resourceFile == null){
|
||||
|
||||
resourceToUseForMarker = externalInput.getMarkerResource();
|
||||
|
||||
if (null==resourceToUseForMarker) {
|
||||
IProject[] proj = CUIPlugin.getWorkspace().getRoot()
|
||||
.getProjects();
|
||||
for (int i = 0; i < proj.length; i++) {
|
||||
if (proj[i].isOpen()) {
|
||||
resourceToUseForMarker = proj[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
resourceToUseForMarker = resourceFile.getProject();
|
||||
IResource markerResource = externalInput.getMarkerResource();
|
||||
return createExternalSearchAnnotationModel(storage, markerResource);
|
||||
}
|
||||
|
||||
if (resourceToUseForMarker != null){
|
||||
ExternalSearchAnnotationModel model = new ExternalSearchAnnotationModel(resourceToUseForMarker, storage);
|
||||
/**
|
||||
* Create an annotation model for the given file and associated resource marker.
|
||||
*
|
||||
* @param storage the file in the form of a <code>IStorage</code>
|
||||
* @param markerResource the resource to retrieve markers from, may be <code>null</code>
|
||||
* @return a new annotation model for the file
|
||||
*/
|
||||
private IAnnotationModel createExternalSearchAnnotationModel(IStorage storage, IResource markerResource) {
|
||||
AnnotationModel model= null;
|
||||
if (markerResource != null){
|
||||
model = new ExternalSearchAnnotationModel(markerResource, storage);
|
||||
} else {
|
||||
// no marker resource available - search workspace root and all project resources (depth one)
|
||||
markerResource= CUIPlugin.getWorkspace().getRoot();
|
||||
model = new ExternalSearchAnnotationModel(markerResource, storage, IResource.DEPTH_ONE);
|
||||
}
|
||||
// attach annotation model for C breakpoints
|
||||
model.addAnnotationModel("debugMarkerModel", new ExternalSearchAnnotationModel(markerResource, storage, IResource.DEPTH_ZERO, DEBUG_SOURCE_HANDLE)); //$NON-NLS-1$
|
||||
return model;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see AbstractDocumentProvider#createDocument(Object)
|
||||
*/
|
||||
protected IDocument createDocument(Object element) throws CoreException {
|
||||
IDocument document= super.createDocument(element);
|
||||
if (document != null){
|
||||
CTextTools textTools = CUIPlugin.getDefault().getTextTools();
|
||||
textTools.setupCDocument(document);
|
||||
}
|
||||
return document;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,20 +17,7 @@ import java.util.ArrayList;
|
|||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.ElementListSelectionDialog;
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IResourceProxy;
|
||||
|
@ -52,6 +39,17 @@ import org.eclipse.ui.IEditorDescriptor;
|
|||
import org.eclipse.ui.IEditorRegistry;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||
import org.eclipse.cdt.internal.ui.dialogs.ElementListSelectionDialog;
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
|
||||
|
||||
public class OpenIncludeAction extends Action {
|
||||
|
||||
|
@ -117,25 +115,7 @@ public class OpenIncludeAction extends Action {
|
|||
}
|
||||
|
||||
if (fileToOpen != null) {
|
||||
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(fileToOpen);
|
||||
if (file != null) {
|
||||
EditorUtility.openInEditor(file);
|
||||
} else {
|
||||
ICProject cproject = include.getCProject();
|
||||
ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, fileToOpen);
|
||||
if (unit != null) {
|
||||
EditorUtility.openInEditor(unit);
|
||||
} else {
|
||||
// try linked files
|
||||
IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(fileToOpen);
|
||||
for(int i=0; i<files.length; i++) {
|
||||
if (files[i].isAccessible()) {
|
||||
EditorUtility.openInEditor(files[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EditorUtility.openInEditor(fileToOpen, include);
|
||||
}
|
||||
} catch (CModelException e) {
|
||||
CUIPlugin.getDefault().log(e.getStatus());
|
||||
|
|
|
@ -12,9 +12,6 @@
|
|||
|
||||
package org.eclipse.cdt.internal.ui.search.actions;
|
||||
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
@ -25,15 +22,11 @@ import org.eclipse.jface.text.IDocument;
|
|||
import org.eclipse.jface.text.ITextSelection;
|
||||
import org.eclipse.jface.text.TextSelection;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.search.ui.NewSearchUI;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
import org.eclipse.ui.IEditorSite;
|
||||
import org.eclipse.ui.IFileEditorInput;
|
||||
import org.eclipse.ui.IViewSite;
|
||||
import org.eclipse.ui.IWorkbenchSite;
|
||||
import org.eclipse.ui.PartInitException;
|
||||
import org.eclipse.ui.ide.IDE;
|
||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
|
@ -41,13 +34,11 @@ import org.eclipse.cdt.core.dom.IName;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.parser.Keywords;
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.editor.ExternalSearchEditor;
|
||||
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||
|
||||
/**
|
||||
* @author aniefer
|
||||
|
@ -468,27 +459,13 @@ public class SelectionParseAction extends Action {
|
|||
open(path, currentOffset, currentLength);
|
||||
}
|
||||
|
||||
protected void open(IPath path, int currentOffset, int currentLength) throws PartInitException {
|
||||
IFile[] files = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocation(path);
|
||||
if (files.length > 0) {
|
||||
IEditorPart editor = IDE.openEditor(CUIPlugin.getActivePage(), files[0]);
|
||||
try {
|
||||
IMarker marker = files[0].createMarker(NewSearchUI.SEARCH_MARKER);
|
||||
marker.setAttribute(IMarker.CHAR_START, currentOffset);
|
||||
marker.setAttribute(IMarker.CHAR_END, currentOffset + currentLength);
|
||||
IDE.gotoMarker(editor, marker);
|
||||
marker.delete();
|
||||
} catch (CoreException e) {
|
||||
CUIPlugin.getDefault().log(e);
|
||||
}
|
||||
} else {
|
||||
// external file
|
||||
IEditorInput input = new ExternalEditorInput(new FileStorage(path));
|
||||
IEditorPart editor = CUIPlugin.getActivePage().openEditor(input, ExternalSearchEditor.EDITOR_ID);
|
||||
protected void open(IPath path, int currentOffset, int currentLength) throws CoreException {
|
||||
IEditorPart editor = EditorUtility.openInEditor(path, fEditor.getInputCElement());
|
||||
if (editor instanceof ITextEditor) {
|
||||
ITextEditor textEditor = (ITextEditor)editor;
|
||||
textEditor.selectAndReveal(currentOffset, currentLength);
|
||||
}
|
||||
} else {
|
||||
// TODO: report error
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,29 +8,16 @@
|
|||
* Contributors:
|
||||
* QNX Software Systems - Initial API and implementation
|
||||
* Markus Schorn (Wind River Systems)
|
||||
* Norbert Ploett (Siemens AG)
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.ui.util;
|
||||
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.text.MessageFormat;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.IBinary;
|
||||
import org.eclipse.cdt.core.model.IBuffer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ISourceReference;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
||||
import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.core.filebuffers.FileBuffers;
|
||||
import org.eclipse.core.resources.IContainer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
@ -41,6 +28,8 @@ import org.eclipse.core.resources.IStorage;
|
|||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
import org.eclipse.core.runtime.content.IContentType;
|
||||
import org.eclipse.jface.action.Action;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.widgets.MessageBox;
|
||||
|
@ -52,15 +41,31 @@ import org.eclipse.ui.IFileEditorInput;
|
|||
import org.eclipse.ui.IWorkbenchPage;
|
||||
import org.eclipse.ui.PartInitException;
|
||||
import org.eclipse.ui.PlatformUI;
|
||||
import org.eclipse.ui.editors.text.EditorsUI;
|
||||
import org.eclipse.ui.part.FileEditorInput;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
|
||||
import org.eclipse.cdt.core.model.CModelException;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.IBinary;
|
||||
import org.eclipse.cdt.core.model.IBuffer;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ISourceReference;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
||||
import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
|
||||
|
||||
public class EditorUtility {
|
||||
|
||||
/**
|
||||
* The ID of the default text editor
|
||||
*/
|
||||
public static final String DEFAULT_TEXT_EDITOR_ID = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$
|
||||
public static final String DEFAULT_TEXT_EDITOR_ID = EditorsUI.DEFAULT_TEXT_EDITOR_ID;
|
||||
|
||||
private EditorUtility () {
|
||||
}
|
||||
|
@ -88,9 +93,9 @@ public class EditorUtility {
|
|||
return null;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Opens a Java editor for an element such as <code>IJavaElement</code>, <code>IFile</code>, or <code>IStorage</code>.
|
||||
* Opens an editor for an element such as <code>ICElement</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
|
||||
*/
|
||||
|
@ -99,7 +104,7 @@ public class EditorUtility {
|
|||
}
|
||||
|
||||
/**
|
||||
* Opens a Java editor for an element (IJavaElement, IFile, IStorage...)
|
||||
* Opens an editor for an element (ICElement, 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 {
|
||||
|
@ -109,10 +114,6 @@ public class EditorUtility {
|
|||
}
|
||||
|
||||
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);
|
||||
|
@ -184,8 +185,8 @@ public class EditorUtility {
|
|||
}
|
||||
|
||||
/**
|
||||
* Open error dialog about closed project.
|
||||
* @param project
|
||||
*
|
||||
*/
|
||||
private static void closedProject(IProject project) {
|
||||
MessageBox errorMsg = new MessageBox(CUIPlugin.getActiveWorkbenchShell(), SWT.ICON_ERROR | SWT.OK);
|
||||
|
@ -201,23 +202,12 @@ public class EditorUtility {
|
|||
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())
|
||||
|
@ -253,11 +243,9 @@ public class EditorUtility {
|
|||
if (input instanceof ICElement) {
|
||||
return getEditorInput((ICElement) input);
|
||||
}
|
||||
|
||||
if (input instanceof IFile) {
|
||||
return new FileEditorInput((IFile) input);
|
||||
}
|
||||
|
||||
if (input instanceof IStorage) {
|
||||
return new ExternalEditorInput((IStorage)input);
|
||||
}
|
||||
|
@ -272,15 +260,64 @@ public class EditorUtility {
|
|||
*
|
||||
* @param location a valid file system location
|
||||
* @return an editor input
|
||||
* @deprecated Use {@link #getEditorInputForLocation(IPath, ICElement)} instead
|
||||
*/
|
||||
public static IEditorInput getEditorInputForLocation(IPath location) {
|
||||
return getEditorInputForLocation(location, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to open an editor for the given file system location
|
||||
* using {@link #getEditorInputForLocation(IPath, ICElement)} to create
|
||||
* the editor input.
|
||||
*
|
||||
* @param location a file system location
|
||||
* @param element an element related to the target file, may be <code>null</code>
|
||||
* @throws PartInitException
|
||||
*/
|
||||
public static IEditorPart openInEditor(IPath location, ICElement element) throws PartInitException {
|
||||
IEditorInput input= getEditorInputForLocation(location, element);
|
||||
return EditorUtility.openInEditor(input, getEditorID(input, element), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to get an editor input for the given file system location.
|
||||
* If the location denotes a workspace file, a <code>FileEditorInput</code>
|
||||
* is returned, otherwise, the input is an <code>IStorageEditorInput</code>
|
||||
* assuming the location points to an existing file in the file system.
|
||||
* The <code>ICElement</code> is used to determine the associated project
|
||||
* in case the location can not be resolved to a workspace <code>IFile</code>.
|
||||
*
|
||||
* @param location a valid file system location
|
||||
* @param element an element related to the target file, may be <code>null</code>
|
||||
* @return an editor input
|
||||
*/
|
||||
public static IEditorInput getEditorInputForLocation(IPath location, ICElement element) {
|
||||
IFile resource= FileBuffers.getWorkspaceFileAtLocation(location);
|
||||
if (resource != null) {
|
||||
return new FileEditorInput(resource);
|
||||
} else {
|
||||
return new ExternalEditorInput(new FileStorage(location));
|
||||
} else if (element != null) {
|
||||
// try to get a translation unit from the location and associated element
|
||||
ICProject cproject= element.getCProject();
|
||||
if (cproject != null) {
|
||||
ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, location);
|
||||
if (unit != null) {
|
||||
return new ExternalEditorInput(unit, new FileStorage(location));
|
||||
}
|
||||
}
|
||||
// no translation unit - still try to get a sensible marker resource
|
||||
// from the associated element
|
||||
if (element instanceof IWorkingCopy && ((IWorkingCopy) element).isWorkingCopy()) {
|
||||
element= ((IWorkingCopy) element).getOriginalElement();
|
||||
}
|
||||
IResource markerResource= null;
|
||||
if (element != null) {
|
||||
markerResource= element.getUnderlyingResource();
|
||||
}
|
||||
return new ExternalEditorInput(new FileStorage(location), markerResource);
|
||||
}
|
||||
return new ExternalEditorInput(new FileStorage(location));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
@ -316,30 +353,13 @@ public class EditorUtility {
|
|||
return cu.findSharedWorkingCopy(CUIPlugin.getDefault().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());
|
||||
// }
|
||||
|
||||
/**
|
||||
* Determine the editor id from the given file name using
|
||||
* the workspace-wide content-type definitions.
|
||||
*
|
||||
* @param name the file name
|
||||
* @return a valid editor id, never <code>null</code>
|
||||
*/
|
||||
public static String getEditorID(String name) {
|
||||
IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry();
|
||||
if (registry != null) {
|
||||
|
@ -347,27 +367,27 @@ public class EditorUtility {
|
|||
if (descriptor != null) {
|
||||
return descriptor.getId();
|
||||
}
|
||||
return registry.findEditor(DEFAULT_TEXT_EDITOR_ID).getId();
|
||||
}
|
||||
return null;
|
||||
return DEFAULT_TEXT_EDITOR_ID;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the editor id from the given editor input and optional input object.
|
||||
* When a translation unit can be obtained, the project-specific content-type
|
||||
* mechanism is used to determine the correct editor id.
|
||||
* If that fails, the editor id is determined by file name and extension using
|
||||
* the workspace-wide content-type definitions.
|
||||
*
|
||||
* @param input the editor input
|
||||
* @param inputObject the input object (used to create the editor input) or <code>null</code>
|
||||
* @return a valid editor id, never <code>null</code>
|
||||
*/
|
||||
public static String getEditorID(IEditorInput input, Object inputObject) {
|
||||
String ID = getEditorID(input.getName());
|
||||
|
||||
if (!"org.eclipse.ui.DefaultTextEditor".equals(ID)) { //$NON-NLS-1$
|
||||
return ID;
|
||||
}
|
||||
|
||||
// TODO:FIXME:HACK etc ...
|
||||
// Unfortunately unless specifying all of possible headers in the plugin.xml
|
||||
// and it is not possible(for example filenames: iostream, cstdlib, etc ...
|
||||
// We try this hack here. This is to be remove when the Eclipse Platform
|
||||
// implement there contentious IContentType
|
||||
|
||||
ITranslationUnit tunit = null;
|
||||
|
||||
if (input instanceof IFileEditorInput) {
|
||||
if (inputObject instanceof ITranslationUnit) {
|
||||
tunit= (ITranslationUnit)inputObject;
|
||||
} else if (input instanceof IFileEditorInput) {
|
||||
IFileEditorInput editorInput = (IFileEditorInput)input;
|
||||
IFile file = editorInput.getFile();
|
||||
ICElement celement = CoreModel.getDefault().create(file);
|
||||
|
@ -379,20 +399,31 @@ public class EditorUtility {
|
|||
tunit = editorInput.getTranslationUnit();
|
||||
}
|
||||
|
||||
// Choose an a file base on the extension.
|
||||
if (tunit != null) {
|
||||
// Choose an editor based on the content type
|
||||
String contentTypeId= tunit.getContentTypeId();
|
||||
if (contentTypeId != null) {
|
||||
IContentType contentType= Platform.getContentTypeManager().getContentType(contentTypeId);
|
||||
IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry();
|
||||
IEditorDescriptor desc= registry.getDefaultEditor(input.getName(), contentType);
|
||||
if (desc != null) {
|
||||
return desc.getId();
|
||||
}
|
||||
}
|
||||
// Choose an editor based on the language (obsolete?)
|
||||
if (tunit.isCLanguage()) {
|
||||
return "org.eclipse.cdt.ui.editor.CEditor"; //$NON-NLS-1$
|
||||
//return getEditorID("No_ExIsTeNt_FiLe.c");//$NON-NLS-1$
|
||||
return CUIPlugin.EDITOR_ID;
|
||||
} else if (tunit.isCXXLanguage()) {
|
||||
return "org.eclipse.cdt.ui.editor.CEditor"; //$NON-NLS-1$
|
||||
//return getEditorID("No_ExIsTeNt_FiLe.cpp");//$NON-NLS-1$
|
||||
return CUIPlugin.EDITOR_ID;
|
||||
} else if (tunit.isASMLanguage()) {
|
||||
return "org.eclipse.cdt.ui.editor.asm.AsmEditor"; //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
|
||||
return ID;
|
||||
// Choose an editor based on filename/extension
|
||||
String editorId = getEditorID(input.getName());
|
||||
|
||||
return editorId;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -134,6 +134,7 @@ public class ExternalEditorInput implements ITranslationUnitEditorInput {
|
|||
public ExternalEditorInput(ITranslationUnit unit, IStorage exFile) {
|
||||
this(exFile, exFile.getFullPath());
|
||||
this.unit = unit;
|
||||
markerResource= unit.getCProject().getProject();
|
||||
}
|
||||
|
||||
public ExternalEditorInput(IStorage exFile) {
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2006 Siemens AG.
|
||||
* Copyright (c) 2006 Siemens AG and others.
|
||||
* All rights reserved. This content and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
* http://www.eclipse.org/legal/epl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* Norbert Ploett - Initial implementation
|
||||
* Norbert Ploett (Siemens AG)
|
||||
* Anton Leherbauer (Wind River Systems)
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.ui.util;
|
||||
|
@ -17,31 +18,22 @@ import org.eclipse.core.runtime.CoreException;
|
|||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
import org.eclipse.jface.text.BadLocationException;
|
||||
import org.eclipse.jface.text.IDocument;
|
||||
import org.eclipse.jface.viewers.ISelection;
|
||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||
import org.eclipse.swt.widgets.Event;
|
||||
import org.eclipse.ui.IEditorInput;
|
||||
import org.eclipse.ui.IEditorPart;
|
||||
import org.eclipse.ui.IObjectActionDelegate;
|
||||
import org.eclipse.ui.IWorkbenchPart;
|
||||
import org.eclipse.ui.actions.ActionDelegate;
|
||||
import org.eclipse.ui.texteditor.ITextEditor;
|
||||
import org.eclipse.ui.ide.IDE;
|
||||
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.resources.FileStorage;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||
|
||||
import org.eclipse.cdt.internal.ui.editor.ExternalSearchEditor;
|
||||
|
||||
public class OpenExternalProblemAction extends ActionDelegate implements IObjectActionDelegate
|
||||
{
|
||||
public class OpenExternalProblemAction extends ActionDelegate implements IObjectActionDelegate {
|
||||
|
||||
IStructuredSelection selection ;
|
||||
|
||||
|
@ -59,38 +51,16 @@ public class OpenExternalProblemAction extends ActionDelegate implements IObject
|
|||
IMarker marker = (IMarker) object;
|
||||
Object attributeObject = marker.getAttribute(ICModelMarker.C_MODEL_MARKER_EXTERNAL_LOCATION);
|
||||
if (attributeObject instanceof String) {
|
||||
String externalLocation = (String) attributeObject ;
|
||||
String externalLocation = (String) attributeObject;
|
||||
IPath externalPath = new Path(externalLocation);
|
||||
IEditorPart editor = null ;
|
||||
// Try to open a C editor with the project and the path
|
||||
ICProject cproject = getCProject(marker);
|
||||
if (null!=cproject) {
|
||||
ITranslationUnit tu = CoreModel.getDefault()
|
||||
.createTranslationUnitFrom(cproject,
|
||||
externalPath);
|
||||
if (null!=tu) {
|
||||
editor = EditorUtility.openInEditor(tu);
|
||||
}
|
||||
} else {
|
||||
// Open in plain external editor
|
||||
IEditorInput input = new ExternalEditorInput(new FileStorage(externalPath), marker.getResource());
|
||||
editor = CUIPlugin.getActivePage().openEditor(input, ExternalSearchEditor.EDITOR_ID);
|
||||
}
|
||||
if (editor instanceof ITextEditor) {
|
||||
int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, 0);
|
||||
int currentOffset = 0 ;
|
||||
int currentLength = 0;
|
||||
ITextEditor textEditor = (ITextEditor) editor;
|
||||
IEditorInput ediinput = textEditor.getEditorInput();
|
||||
IDocument document = textEditor.getDocumentProvider().getDocument(ediinput);
|
||||
try {
|
||||
currentOffset = document.getLineOffset(lineNumber-1);
|
||||
} catch (BadLocationException e) {
|
||||
}
|
||||
textEditor.selectAndReveal(currentOffset, currentLength);
|
||||
|
||||
IEditorPart editor = EditorUtility.openInEditor(externalPath, getCProject(marker));
|
||||
if (editor != null) {
|
||||
IDE.gotoMarker(editor, marker);
|
||||
}
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
CUIPlugin.getDefault().log(e.getStatus());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -124,5 +94,4 @@ public class OpenExternalProblemAction extends ActionDelegate implements IObject
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue