diff --git a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java index b25d15f3685..b916663816b 100644 --- a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java +++ b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java @@ -20,9 +20,6 @@ import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.index.IIndexChangeListener; -import org.eclipse.cdt.core.index.IIndexDelta; -import org.eclipse.cdt.core.index.IndexChangeEvent; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.search.BasicSearchResultCollector; import org.eclipse.cdt.core.search.ICSearchConstants; @@ -100,7 +97,7 @@ import org.eclipse.core.runtime.Platform; if (indexFile.exists()) indexFile.delete(); - testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(false)); if (testProject==null) fail("Unable to create project"); @@ -164,7 +161,8 @@ import org.eclipse.core.runtime.Platform; IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); //indexManager.setEnabled(testProject,true); - + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + String[] depTestModel = {File.separator + "DepTestProject" + File.separator + "d.h", File.separator + "DepTestProject" + File.separator + "Inc1.h", File.separator + "DepTestProject" + File.separator + "c.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "DepTest.h"}; String[] depTest2Model = {File.separator + "DepTestProject" + File.separator + "d.h", File.separator + "DepTestProject" + File.separator + "DepTest2.h"}; @@ -218,19 +216,22 @@ import org.eclipse.core.runtime.Platform; public void testDepTable() throws Exception{ //Add a file to the project + + IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp"); + IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp"); IFile cH = importFile("c.h","resources/dependency/c.h"); IFile aH = importFile("a.h","resources/dependency/a.h"); IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h"); IFile dH = importFile("d.h","resources/dependency/d.h"); IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h"); IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h"); - IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp"); - IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + PathCollector pathCollector = new PathCollector(); getTableRefs(dH, pathCollector); - String[] dHModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest2.cpp", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest2.h"}; + String[] dHModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest2.cpp", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"}; String[] iPath = pathCollector.getPaths(); if (dHModel.length != iPath.length) @@ -247,7 +248,7 @@ import org.eclipse.core.runtime.Platform; pathCollector = new PathCollector(); getTableRefs(Inc1H, pathCollector); - String[] Inc1HModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp",IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.h"}; + String[] Inc1HModel = {IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"}; iPath = pathCollector.getPaths(); if (Inc1HModel.length != iPath.length) @@ -272,6 +273,8 @@ import org.eclipse.core.runtime.Platform; IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h"); IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"}; PathCollector pathCollector = new PathCollector(); @@ -292,7 +295,7 @@ import org.eclipse.core.runtime.Platform; getTableRefs(Inc1H, pathCollector); iPath = pathCollector.getPaths(); - String[] inc1Model = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp",Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.h"}; + String[] inc1Model = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"}; compareArrays(iPath,inc1Model); pathCollector = new PathCollector(); @@ -307,7 +310,7 @@ import org.eclipse.core.runtime.Platform; iPath = pathCollector.getPaths(); - String[] cHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "Inc1.h", Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest.cpp", Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "a.h", Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest.h"}; + String[] cHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest.cpp"}; compareArrays(iPath,cHModel); editCode(depTestC,"#include \"DepTest.h\"","//#include \"DepTest.h\""); @@ -334,7 +337,7 @@ import org.eclipse.core.runtime.Platform; iPath = pathCollector.getPaths(); - if (iPath.length != 1) + if (iPath.length != 0) fail("Number of included files differs from model"); pathCollector = new PathCollector(); @@ -342,7 +345,7 @@ import org.eclipse.core.runtime.Platform; iPath = pathCollector.getPaths(); - if (iPath.length != 1) + if (iPath.length != 0) fail("Number of included files differs from model"); @@ -351,7 +354,7 @@ import org.eclipse.core.runtime.Platform; iPath = pathCollector.getPaths(); - if (iPath.length != 3) + if (iPath.length != 0) fail("Number of included files differs from model"); } @@ -367,6 +370,8 @@ import org.eclipse.core.runtime.Platform; IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp"); IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest.h", File.separator + "DepTestProject" + File.separator + "Inc1.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h", File.separator + "DepTestProject" + File.separator + "d.h"}; @@ -434,6 +439,8 @@ import org.eclipse.core.runtime.Platform; IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h"); IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); String[] preDepTestModel = {File.separator + "DepTestProject" + File.separator + "DepTest3.h", File.separator + "DepTestProject" + File.separator + "a.h", File.separator + "DepTestProject" + File.separator + "c.h"}; @@ -500,10 +507,13 @@ import org.eclipse.core.runtime.Platform; IFile aH = importFile("a.h","resources/dependency/a.h"); IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h"); IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp"); + + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"}; - String[] cHModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "a.h", IPath.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.h"}; - String[] aHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.cpp", Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.h"}; + String[] cHModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"}; + String[] aHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.cpp"}; PathCollector pathCollector = new PathCollector(); getTableRefs(depTest3H, pathCollector); @@ -570,6 +580,8 @@ import org.eclipse.core.runtime.Platform; IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h"); IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true ); search(workspace,pattern,scope,resultCollector); diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java index de8d05ee0ac..e7c948acaa0 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/BaseSearchTest.java @@ -14,7 +14,9 @@ package org.eclipse.cdt.core.search.tests; import java.io.FileInputStream; + import junit.framework.TestCase; + import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.search.BasicSearchResultCollector; @@ -27,7 +29,6 @@ import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.cdt.testplugin.CProjectHelper; import org.eclipse.cdt.testplugin.CTestPlugin; import org.eclipse.cdt.testplugin.FileManager; -import org.eclipse.core.internal.resources.ResourceException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspace; @@ -44,30 +45,28 @@ import org.eclipse.core.runtime.Path; */ public class BaseSearchTest extends TestCase implements ICSearchConstants { - ICSearchScope scope; - IFile file; - IProject testProject; - NullProgressMonitor monitor; - IWorkspace workspace; - BasicSearchResultCollector resultCollector; - SearchEngine searchEngine; - FileManager fileManager; - - public BaseSearchTest(String name) { - super(name); - } - - protected void setUp() throws Exception { - super.setUp(); + static protected ICSearchScope scope; + static protected IFile file; + static protected IProject testProject; + static protected NullProgressMonitor monitor; + static protected IWorkspace workspace; + static protected BasicSearchResultCollector resultCollector; + static protected SearchEngine searchEngine; + static protected FileManager fileManager; + { + (CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset(); monitor = new NullProgressMonitor(); workspace = ResourcesPlugin.getWorkspace(); - //Create temp project - testProject = createProject("SearchTestProject"); + try { + //Create temp project + testProject = createProject("SearchTestProject"); + testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); + } catch (CoreException e) {} + - testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true)); if (testProject == null) fail("Unable to create project"); @@ -75,10 +74,16 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants { //Create file manager fileManager = new FileManager(); - //Add a file to the project - //importFile("mail.cpp", "resources/indexer/mail.cpp"); - importFile("classDecl.cpp", "resources/search/classDecl.cpp"); - importFile("include.h", "resources/search/include.h"); + try { + //Add a file to the project + //importFile("mail.cpp", "resources/indexer/mail.cpp"); + importFile("classDecl.cpp", "resources/search/classDecl.cpp"); + importFile("include.h", "resources/search/include.h"); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + scope = SearchEngine.createWorkspaceScope(); @@ -87,20 +92,17 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants { searchEngine = new SearchEngine(); } + + + public BaseSearchTest(String name) { + super(name); + } + + protected void setUp() throws Exception { + + } + protected void tearDown() { - try { - super.tearDown(); - } catch (Exception e1) { - } - //Delete project - if (testProject.exists()){ - try { - fileManager.closeAllFiles(); - testProject.delete(true,monitor); - } catch (ResourceException e) { - } catch (CoreException e) { - } - } } private IProject createProject(String projectName) throws CoreException { diff --git a/core/org.eclipse.cdt.core/index/ChangeLog b/core/org.eclipse.cdt.core/index/ChangeLog index b33421b72c8..1e4f44c8f27 100644 --- a/core/org.eclipse.cdt.core/index/ChangeLog +++ b/core/org.eclipse.cdt.core/index/ChangeLog @@ -1,3 +1,16 @@ +2004-11-12 Bogdan Gheorghe + Fix for Bug 78414: IProblem count increased through indexing header files stand-alone + + * index/org/eclipse/cdt/internal/core/search/indexing/IndexAllProject.java + * index/org/eclipse/cdt/internal/core/search/indexing/AddCompilationUnitToIndex.java + * index/org/eclipse/cdt/internal/core/search/indexing/AddFileToIndex.java + * index/org/eclipse/cdt/internal/core/search/indexing/AddFolderToIndex.java + * index/org/eclipse/cdt/internal/core/search/indexing/CleanEncounteredHeaders.java + * index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java + * index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java + + * parser/org/eclipse/cdt/internal/core/parser/problem/Problem.java + 2004-11-02 Bogdan Gheorghe Fixed a bug in the index merge. diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddCompilationUnitToIndex.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddCompilationUnitToIndex.java index a67bdfb70d3..49121a3b9bd 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddCompilationUnitToIndex.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddCompilationUnitToIndex.java @@ -21,8 +21,8 @@ import org.eclipse.core.runtime.IPath; public class AddCompilationUnitToIndex extends AddFileToIndex { char[] contents; - public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, IndexManager manager) { - super(resource, indexedContainer, manager); + public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, IndexManager manager, boolean checkEncounteredHeaders) { + super(resource, indexedContainer, manager, checkEncounteredHeaders); } protected boolean indexDocument(IIndex index) throws IOException { if (!initializeContents()) return false; diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFileToIndex.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFileToIndex.java index 57d42486214..762d43915d4 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFileToIndex.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/AddFileToIndex.java @@ -12,26 +12,43 @@ package org.eclipse.cdt.internal.core.search.indexing; import java.io.IOException; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ICLogConstants; +import org.eclipse.cdt.core.filetype.ICFileType; import org.eclipse.cdt.internal.core.index.IIndex; import org.eclipse.cdt.internal.core.search.processing.JobManager; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; public abstract class AddFileToIndex extends IndexRequest { IFile resource; - + private boolean checkEncounteredHeaders; - public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager) { + public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager, boolean checkEncounteredHeaders) { super(indexPath, manager); this.resource = resource; + this.checkEncounteredHeaders = checkEncounteredHeaders; + } + + public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager) { + this(resource,indexPath,manager,false); } public boolean execute(IProgressMonitor progressMonitor) { if (progressMonitor != null && progressMonitor.isCanceled()) return true; - + if (checkEncounteredHeaders) { + IProject resourceProject = resource.getProject(); + /* Check to see if this is a header file */ + ICFileType type = CCorePlugin.getDefault().getFileType(resourceProject,resource.getName()); + + /* See if this file has been encountered before */ + if (type.isHeader() && + manager.haveEncounteredHeader(resourceProject.getFullPath(),resource.getLocation())) + return true; + } /* ensure no concurrent write access to index */ IIndex index = manager.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/); if (index == null) return true; 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 58a9782ea35..211ab828fef 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 @@ -34,7 +34,8 @@ class AddFolderToIndex extends IndexRequest { char[][] exclusionPattern; ArrayList sourceFilesToIndex; ArrayList headerFilesToIndex; - + boolean cleanEncouteredHeaders; + public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager) { super(project.getFullPath(), manager); this.folderPath = folderPath; @@ -42,6 +43,17 @@ class AddFolderToIndex extends IndexRequest { this.exclusionPattern = exclusionPattern; this.sourceFilesToIndex = new ArrayList(); this.headerFilesToIndex = new ArrayList(); + this.cleanEncouteredHeaders = false; + } + + public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager, boolean cleanEncounteredHeaders) { + super(project.getFullPath(), manager); + this.folderPath = folderPath; + this.project = project; + this.exclusionPattern = exclusionPattern; + this.sourceFilesToIndex = new ArrayList(); + this.headerFilesToIndex = new ArrayList(); + this.cleanEncouteredHeaders = cleanEncounteredHeaders; } public boolean execute(IProgressMonitor progressMonitor) { @@ -102,12 +114,15 @@ class AddFolderToIndex extends IndexRequest { private void scheduleJobs() { //Schedule the source jobs first, then the headers for (int i=0; i