From cf466da37fbaaf72723e921a015bb48d980fb691 Mon Sep 17 00:00:00 2001 From: Bogdan Gheorghe Date: Thu, 27 May 2004 19:07:09 +0000 Subject: [PATCH] Fix for Bug 62015 - Indexer to not rely on file extension for translation Unit Changed all indexer file type checking to use the CoreModel file resolution services. --- core/org.eclipse.cdt.core/index/ChangeLog | 4 +++ .../org/eclipse/cdt/internal/core/Util.java | 31 ---------------- .../cdt/internal/core/index/IIndexer.java | 11 +++--- .../core/search/indexing/AbstractIndexer.java | 36 ++++++++++++------- .../search/indexing/AddFolderToIndex.java | 5 +-- .../core/search/indexing/SourceIndexer.java | 8 +---- 6 files changed, 35 insertions(+), 60 deletions(-) diff --git a/core/org.eclipse.cdt.core/index/ChangeLog b/core/org.eclipse.cdt.core/index/ChangeLog index 66cf3a8e5f1..314fcde913b 100644 --- a/core/org.eclipse.cdt.core/index/ChangeLog +++ b/core/org.eclipse.cdt.core/index/ChangeLog @@ -1,3 +1,7 @@ +2004-05-27 Bogdan Gheorghe + Fix for Bug 62015 - Indexer to not rely on file extension for translation Unit + Changed all indexer file type checking to use the CoreModel file resolution services. + 2004-05-21 Andrew Niefer Indexer problem reporting * index/org/eclipse/cdt/internal/core/messages.properties diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/Util.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/Util.java index 3ddcafa0948..bd26fd6a135 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/Util.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/Util.java @@ -366,37 +366,6 @@ public class Util { return true; return false; } - /** - * @param string - * @return - */ - public static boolean isCCFileName(String fileName) { - String[] sourceExtensions = CModelManager.sourceExtensions; - String[] headerExtensions = CModelManager.headerExtensions; - - int dot =fileName.lastIndexOf("."); //$NON-NLS-1$ - - //No extension, give benefit of doubt - if (dot == -1) - return true; - - //Extract extension - String extension = ""; //$NON-NLS-1$ - if (dot + 1 <= fileName.length()) - extension = fileName.substring(dot + 1); - - for (int i=0; iIIndexer indexes ONE document at each time. It adds the document names and * the words references to an IIndex. Each IIndexer can index certain types of document, and should * not index the other files. */ public interface IIndexer { - /** - * Returns the file types the IIndexer handles. - */ - - String[] getFileTypes(); /** * Indexes the given document, adding the document name and the word references * to this document to the given IIndex.The caller should use @@ -35,8 +32,8 @@ public interface IIndexer { public void setFileTypes(String[] fileTypes); /** - * Returns whether the IIndexer can index the given document or not. + * Returns whether the IIndexer can index the given IFile or not. */ - public boolean shouldIndex(IDocument document); + public boolean shouldIndex(IFile file); } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java index 2f09852f424..e5adf3d4558 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AbstractIndexer.java @@ -14,6 +14,9 @@ package org.eclipse.cdt.internal.core.search.indexing; import java.io.IOException; import java.util.Iterator; +import org.eclipse.cdt.core.CCorePlugin; +import org.eclipse.cdt.core.filetype.ICFileType; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.parser.ast.ASTClassKind; import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException; import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier; @@ -53,6 +56,12 @@ public abstract class AbstractIndexer implements IIndexer, IIndexConstants, ICSe public static boolean VERBOSE = false; + //IDs defined in plugin.xml for file types + private final static String C_SOURCE_ID = "org.eclipse.cdt.core.fileType.c_source"; + private final static String C_HEADER_ID = "org.eclipse.cdt.core.fileType.c_header"; + private final static String CPP_SOURCE_ID = "org.eclipse.cdt.core.fileType.cxx_source"; + private final static String CPP_HEADER_ID = "org.eclipse.cdt.core.fileType.cxx_header"; + public AbstractIndexer() { super(); } @@ -423,10 +432,6 @@ public abstract class AbstractIndexer implements IIndexer, IIndexConstants, ICSe return result; } - /** - * Returns the file types the IIndexer handles. - */ - public abstract String[] getFileTypes(); /** * Returns the file types being indexed. */ @@ -436,20 +441,25 @@ public abstract class AbstractIndexer implements IIndexer, IIndexConstants, ICSe */ public void index(IDocument document, IIndexerOutput output) throws IOException { this.output = output; - if (shouldIndex(document)) indexFile(document); - } + if (shouldIndex(this.getResourceFile())) indexFile(document); + } protected abstract void indexFile(IDocument document) throws IOException; /** - * @see IIndexer#shouldIndex(IDocument document) + * @param fileToBeIndexed + * @see IIndexer#shouldIndex(IFile file) */ - public boolean shouldIndex(IDocument document) { - String type = document.getType(); - String[] supportedTypes = this.getFileTypes(); - for (int i = 0; i < supportedTypes.length; ++i) { - if (supportedTypes[i].equals(type)) - return true; + public boolean shouldIndex(IFile fileToBeIndexed) { + if (fileToBeIndexed != null){ + ICFileType type = CCorePlugin.getDefault().getFileType(fileToBeIndexed.getProject(),fileToBeIndexed.getName()); + if (type.isSource()){ + String id = type.getId(); + if (id.equals(AbstractIndexer.C_SOURCE_ID) || + id.equals(AbstractIndexer.CPP_SOURCE_ID)) + return true; + } } + return false; } /** diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFolderToIndex.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFolderToIndex.java index 5f225521c4b..f8836fbcd1a 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFolderToIndex.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFolderToIndex.java @@ -11,6 +11,7 @@ package org.eclipse.cdt.internal.core.search.indexing; +import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.index.IIndex; import org.eclipse.cdt.internal.core.search.processing.JobManager; @@ -58,8 +59,8 @@ class AddFolderToIndex extends IndexRequest { public boolean visit(IResourceProxy proxy) throws CoreException { switch(proxy.getType()) { case IResource.FILE : - if (Util.isCCFileName(proxy.getName())) { - IResource resource = proxy.requestResource(); + IResource resource = proxy.requestResource(); + if (CoreModel.isValidTranslationUnitName(resource.getProject(),resource.getName())) { if (pattern == null || !Util.isExcluded(resource, pattern)) indexManager.addSource((IFile)resource, container); } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java index 1d9339769b1..9d1c6166b4b 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java @@ -52,7 +52,7 @@ import org.eclipse.core.runtime.CoreException; * - Unions */ public class SourceIndexer extends AbstractIndexer { - + //TODO: Indexer, add additional file types //Header files: "h" , "hh", "hpp" //Use the CModelManager defined file types @@ -72,12 +72,6 @@ public class SourceIndexer extends AbstractIndexer { this.resourceFile = resource; this.timeOut = timeOut; } - /** - * Returns the file types the IIndexer handles. - */ - public String[] getFileTypes(){ - return CModelManager.sourceExtensions; - } protected void indexFile(IDocument document) throws IOException { // Add the name of the file to the index