From 7c700e68e97c6074ab4f7d48b4ccf7f2cc6b8d90 Mon Sep 17 00:00:00 2001 From: Bogdan Gheorghe Date: Fri, 19 Nov 2004 18:53:42 +0000 Subject: [PATCH] Fix for 43664: Search should report matches outside of workspace --- core/org.eclipse.cdt.ui/ChangeLog | 17 ++++ core/org.eclipse.cdt.ui/plugin.properties | 3 + core/org.eclipse.cdt.ui/plugin.xml | 7 ++ .../editor/ExternalSearchAnnotationModel.java | 57 +++++++++++ .../ExternalSearchDocumentProvider.java | 99 +++++++++++++++++++ .../ui/editor/ExternalSearchEditor.java | 33 +++++++ .../ui/editor/ExternalSearchFile.java | 29 ++++++ .../ui/preferences/CSearchPreferencePage.java | 44 +-------- .../cdt/internal/ui/search/CSearchResult.java | 45 +++++++++ .../internal/ui/search/CSearchResultPage.java | 18 +++- .../ui/search/NewSearchResultCollector.java | 47 ++------- .../actions/DeclarationsSearchGroup.java | 4 + .../search/actions/ReferencesSearchGroup.java | 4 + .../src/org/eclipse/cdt/ui/CUIPlugin.java | 14 ++- 14 files changed, 337 insertions(+), 84 deletions(-) create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchAnnotationModel.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchEditor.java create mode 100644 core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchFile.java diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 9847e4ee286..24839c2e070 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,20 @@ +2004-11-19 Bogdan Gheorghe + Fix for 43664 : Search should report matches outside of workspace + + * src/org/eclipse/cdt/internal/ui/editor/ExternalSearchAnnotationModel.java + * src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java + * src/org/eclipse/cdt/internal/ui/editor/ExternalSearchEditor.java + * src/org/eclipse/cdt/internal/ui/editor/ExternalSearchFile.java + * src/org/eclipse/cdt/internal/ui/preferences/CSearchPreferencePage.java + * src/org/eclipse/cdt/internal/ui/search/CSearchResult.java + * src/org/eclipse/cdt/internal/ui/search/CSearchResultPage.java + * src/org/eclipse/cdt/internal/ui/search/NewSearchResultCollector.java + * src/org/eclipse/cdt/internal/ui/search/actions/DeclarationsSearchGroup.java + * src/org/eclipse/cdt/internal/ui/search/actions/ReferencesSearchGroup.java + * src/org/eclipse/cdt/ui/CUIPlugin.java + * plugin.properties + * plugin.xml + 2004-11-12 David Inglis Fixed bug # 78292 diff --git a/core/org.eclipse.cdt.ui/plugin.properties b/core/org.eclipse.cdt.ui/plugin.properties index 978b076b0e7..ab9a5c71ec4 100644 --- a/core/org.eclipse.cdt.ui/plugin.properties +++ b/core/org.eclipse.cdt.ui/plugin.properties @@ -271,3 +271,6 @@ Folding.label= F&olding cCompareFontDefiniton.label= C/C++ compare text font cCompareFontDefiniton.description= The C/C++ compare text font is used by C/C++ compare/merge tools. +# External Search Editor + +ExternalSearchEditor.name=External Search Editor diff --git a/core/org.eclipse.cdt.ui/plugin.xml b/core/org.eclipse.cdt.ui/plugin.xml index 37b7617284c..8e23e7bd0fc 100644 --- a/core/org.eclipse.cdt.ui/plugin.xml +++ b/core/org.eclipse.cdt.ui/plugin.xml @@ -499,6 +499,13 @@ class="org.eclipse.cdt.internal.ui.editor.asm.AsmTextEditor" id="org.eclipse.cdt.ui.editor.asm.AsmEditor"> + + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchAnnotationModel.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchAnnotationModel.java new file mode 100644 index 00000000000..dd8d8a59d9b --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchAnnotationModel.java @@ -0,0 +1,57 @@ +/********************************************************************** +Copyright (c) 2002, 2004 IBM Rational Software 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: +    IBM Rational Software - Initial Contribution +**********************************************************************/ + +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.IWorkspace; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel; + + +public class ExternalSearchAnnotationModel extends + AbstractMarkerAnnotationModel implements IResourceChangeListener { + + protected IWorkspace fWorkspace; + protected IResource fMarkerResource; + protected boolean fChangesApplied; + + /** + * @param resource + */ + public ExternalSearchAnnotationModel(IResource resource) { + this.fMarkerResource = resource; + this.fWorkspace = resource.getWorkspace(); + } + + protected IMarker[] retrieveMarkers() throws CoreException { + if (fMarkerResource != null) + return fMarkerResource.findMarkers(IMarker.MARKER, true, IResource.DEPTH_INFINITE); + return null; + } + + protected void deleteMarkers(IMarker[] markers) throws CoreException { + } + + protected void listenToMarkerChanges(boolean listen) { + } + + protected boolean isAcceptable(IMarker marker) { + return false; + } + + public void resourceChanged(IResourceChangeEvent event) { + } + +} diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java new file mode 100644 index 00000000000..a89bca712e9 --- /dev/null +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/ExternalSearchDocumentProvider.java @@ -0,0 +1,99 @@ +/********************************************************************** +Copyright (c) 2002, 2004 IBM Rational Software 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: +    IBM Rational Software - Initial Contribution +**********************************************************************/ + +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.runtime.CoreException; +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.text.source.IAnnotationModel; +import org.eclipse.ui.editors.text.FileDocumentProvider; + +public class ExternalSearchDocumentProvider extends FileDocumentProvider { + + public ExternalSearchDocumentProvider(){ + super(); + } + + /* + * @see AbstractDocumentProvider#createElementInfo(Object) + */ + protected ElementInfo createElementInfo(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 null; + } + + /** + * @param externalInput + * @return + */ + private IAnnotationModel createExternalSearchAnnotationModel(ExternalEditorInput externalInput) { + + Object storage = externalInput.getStorage(); + ExternalSearchFile externalSearchFile = null; + if (storage instanceof ExternalSearchFile){ + externalSearchFile = (ExternalSearchFile) storage; + } + + if (externalSearchFile == null) + return null; + + IProject projectToUseForMarker = null; + + IFile resourceFile = CUIPlugin.getWorkspace().getRoot().getFileForLocation(externalSearchFile.searchMatch.referringElement); + + if (resourceFile == null){ + IProject[] proj = CUIPlugin.getWorkspace().getRoot().getProjects(); + + for (int i=0; i