mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-18 22:45:23 +02:00
Fix for Bug 78414: IProblem count increased through indexing header files stand-alone
This commit is contained in:
parent
4f1af97e09
commit
44e45fb15f
11 changed files with 242 additions and 65 deletions
|
@ -20,9 +20,6 @@ import junit.framework.TestCase;
|
||||||
import junit.framework.TestSuite;
|
import junit.framework.TestSuite;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
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.model.ICProject;
|
||||||
import org.eclipse.cdt.core.search.BasicSearchResultCollector;
|
import org.eclipse.cdt.core.search.BasicSearchResultCollector;
|
||||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
|
@ -100,7 +97,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
if (indexFile.exists())
|
if (indexFile.exists())
|
||||||
indexFile.delete();
|
indexFile.delete();
|
||||||
|
|
||||||
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(false));
|
||||||
|
|
||||||
if (testProject==null)
|
if (testProject==null)
|
||||||
fail("Unable to create project");
|
fail("Unable to create project");
|
||||||
|
@ -164,7 +161,8 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
//indexManager.setEnabled(testProject,true);
|
//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[] 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"};
|
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{
|
public void testDepTable() throws Exception{
|
||||||
//Add a file to the project
|
//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 cH = importFile("c.h","resources/dependency/c.h");
|
||||||
IFile aH = importFile("a.h","resources/dependency/a.h");
|
IFile aH = importFile("a.h","resources/dependency/a.h");
|
||||||
IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h");
|
IFile Inc1H = importFile("Inc1.h","resources/dependency/Inc1.h");
|
||||||
IFile dH = importFile("d.h","resources/dependency/d.h");
|
IFile dH = importFile("d.h","resources/dependency/d.h");
|
||||||
IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
|
IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
|
||||||
IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.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();
|
PathCollector pathCollector = new PathCollector();
|
||||||
getTableRefs(dH, 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();
|
String[] iPath = pathCollector.getPaths();
|
||||||
|
|
||||||
if (dHModel.length != iPath.length)
|
if (dHModel.length != iPath.length)
|
||||||
|
@ -247,7 +248,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
pathCollector = new PathCollector();
|
pathCollector = new PathCollector();
|
||||||
getTableRefs(Inc1H, 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();
|
iPath = pathCollector.getPaths();
|
||||||
|
|
||||||
if (Inc1HModel.length != iPath.length)
|
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 depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
|
||||||
IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
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"};
|
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
|
||||||
|
|
||||||
PathCollector pathCollector = new PathCollector();
|
PathCollector pathCollector = new PathCollector();
|
||||||
|
@ -292,7 +295,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
getTableRefs(Inc1H, pathCollector);
|
getTableRefs(Inc1H, pathCollector);
|
||||||
|
|
||||||
iPath = pathCollector.getPaths();
|
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);
|
compareArrays(iPath,inc1Model);
|
||||||
|
|
||||||
pathCollector = new PathCollector();
|
pathCollector = new PathCollector();
|
||||||
|
@ -307,7 +310,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
iPath = pathCollector.getPaths();
|
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);
|
compareArrays(iPath,cHModel);
|
||||||
|
|
||||||
editCode(depTestC,"#include \"DepTest.h\"","//#include \"DepTest.h\"");
|
editCode(depTestC,"#include \"DepTest.h\"","//#include \"DepTest.h\"");
|
||||||
|
@ -334,7 +337,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
iPath = pathCollector.getPaths();
|
iPath = pathCollector.getPaths();
|
||||||
|
|
||||||
if (iPath.length != 1)
|
if (iPath.length != 0)
|
||||||
fail("Number of included files differs from model");
|
fail("Number of included files differs from model");
|
||||||
|
|
||||||
pathCollector = new PathCollector();
|
pathCollector = new PathCollector();
|
||||||
|
@ -342,7 +345,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
iPath = pathCollector.getPaths();
|
iPath = pathCollector.getPaths();
|
||||||
|
|
||||||
if (iPath.length != 1)
|
if (iPath.length != 0)
|
||||||
fail("Number of included files differs from model");
|
fail("Number of included files differs from model");
|
||||||
|
|
||||||
|
|
||||||
|
@ -351,7 +354,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
iPath = pathCollector.getPaths();
|
iPath = pathCollector.getPaths();
|
||||||
|
|
||||||
if (iPath.length != 3)
|
if (iPath.length != 0)
|
||||||
fail("Number of included files differs from model");
|
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 depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
||||||
IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
|
IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
|
||||||
|
|
||||||
|
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
||||||
|
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
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"};
|
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 depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
||||||
|
|
||||||
|
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
||||||
|
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
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"};
|
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 aH = importFile("a.h","resources/dependency/a.h");
|
||||||
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
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[] 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[] cHModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"};
|
||||||
String[] aHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.cpp", Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.h"};
|
String[] aHModel = {Path.SEPARATOR + "DepTestProject" + Path.SEPARATOR + "DepTest3.cpp"};
|
||||||
PathCollector pathCollector = new PathCollector();
|
PathCollector pathCollector = new PathCollector();
|
||||||
getTableRefs(depTest3H, pathCollector);
|
getTableRefs(depTest3H, pathCollector);
|
||||||
|
|
||||||
|
@ -570,6 +580,8 @@ import org.eclipse.core.runtime.Platform;
|
||||||
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
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 );
|
ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true );
|
||||||
|
|
||||||
search(workspace,pattern,scope,resultCollector);
|
search(workspace,pattern,scope,resultCollector);
|
||||||
|
|
|
@ -14,7 +14,9 @@
|
||||||
package org.eclipse.cdt.core.search.tests;
|
package org.eclipse.cdt.core.search.tests;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.search.BasicSearchResultCollector;
|
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.CProjectHelper;
|
||||||
import org.eclipse.cdt.testplugin.CTestPlugin;
|
import org.eclipse.cdt.testplugin.CTestPlugin;
|
||||||
import org.eclipse.cdt.testplugin.FileManager;
|
import org.eclipse.cdt.testplugin.FileManager;
|
||||||
import org.eclipse.core.internal.resources.ResourceException;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IWorkspace;
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
@ -44,30 +45,28 @@ import org.eclipse.core.runtime.Path;
|
||||||
*/
|
*/
|
||||||
public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
||||||
|
|
||||||
ICSearchScope scope;
|
static protected ICSearchScope scope;
|
||||||
IFile file;
|
static protected IFile file;
|
||||||
IProject testProject;
|
static protected IProject testProject;
|
||||||
NullProgressMonitor monitor;
|
static protected NullProgressMonitor monitor;
|
||||||
IWorkspace workspace;
|
static protected IWorkspace workspace;
|
||||||
BasicSearchResultCollector resultCollector;
|
static protected BasicSearchResultCollector resultCollector;
|
||||||
SearchEngine searchEngine;
|
static protected SearchEngine searchEngine;
|
||||||
FileManager fileManager;
|
static protected FileManager fileManager;
|
||||||
|
{
|
||||||
public BaseSearchTest(String name) {
|
|
||||||
super(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected void setUp() throws Exception {
|
|
||||||
super.setUp();
|
|
||||||
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
||||||
monitor = new NullProgressMonitor();
|
monitor = new NullProgressMonitor();
|
||||||
|
|
||||||
workspace = ResourcesPlugin.getWorkspace();
|
workspace = ResourcesPlugin.getWorkspace();
|
||||||
|
|
||||||
//Create temp project
|
try {
|
||||||
testProject = createProject("SearchTestProject");
|
//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)
|
if (testProject == null)
|
||||||
fail("Unable to create project");
|
fail("Unable to create project");
|
||||||
|
@ -75,10 +74,16 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
||||||
//Create file manager
|
//Create file manager
|
||||||
fileManager = new FileManager();
|
fileManager = new FileManager();
|
||||||
|
|
||||||
//Add a file to the project
|
try {
|
||||||
//importFile("mail.cpp", "resources/indexer/mail.cpp");
|
//Add a file to the project
|
||||||
importFile("classDecl.cpp", "resources/search/classDecl.cpp");
|
//importFile("mail.cpp", "resources/indexer/mail.cpp");
|
||||||
importFile("include.h", "resources/search/include.h");
|
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();
|
scope = SearchEngine.createWorkspaceScope();
|
||||||
|
|
||||||
|
@ -87,20 +92,17 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
||||||
searchEngine = new SearchEngine();
|
searchEngine = new SearchEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public BaseSearchTest(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setUp() throws Exception {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected void tearDown() {
|
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 {
|
private IProject createProject(String projectName) throws CoreException {
|
||||||
|
|
|
@ -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
|
2004-11-02 Bogdan Gheorghe
|
||||||
Fixed a bug in the index merge.
|
Fixed a bug in the index merge.
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,8 @@ import org.eclipse.core.runtime.IPath;
|
||||||
public class AddCompilationUnitToIndex extends AddFileToIndex {
|
public class AddCompilationUnitToIndex extends AddFileToIndex {
|
||||||
char[] contents;
|
char[] contents;
|
||||||
|
|
||||||
public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, IndexManager manager) {
|
public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, IndexManager manager, boolean checkEncounteredHeaders) {
|
||||||
super(resource, indexedContainer, manager);
|
super(resource, indexedContainer, manager, checkEncounteredHeaders);
|
||||||
}
|
}
|
||||||
protected boolean indexDocument(IIndex index) throws IOException {
|
protected boolean indexDocument(IIndex index) throws IOException {
|
||||||
if (!initializeContents()) return false;
|
if (!initializeContents()) return false;
|
||||||
|
|
|
@ -12,26 +12,43 @@ package org.eclipse.cdt.internal.core.search.indexing;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICLogConstants;
|
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.index.IIndex;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
public abstract class AddFileToIndex extends IndexRequest {
|
public abstract class AddFileToIndex extends IndexRequest {
|
||||||
IFile resource;
|
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);
|
super(indexPath, manager);
|
||||||
this.resource = resource;
|
this.resource = resource;
|
||||||
|
this.checkEncounteredHeaders = checkEncounteredHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager) {
|
||||||
|
this(resource,indexPath,manager,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean execute(IProgressMonitor progressMonitor) {
|
public boolean execute(IProgressMonitor progressMonitor) {
|
||||||
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
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 */
|
/* ensure no concurrent write access to index */
|
||||||
IIndex index = manager.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
IIndex index = manager.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
|
|
|
@ -34,7 +34,8 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
char[][] exclusionPattern;
|
char[][] exclusionPattern;
|
||||||
ArrayList sourceFilesToIndex;
|
ArrayList sourceFilesToIndex;
|
||||||
ArrayList headerFilesToIndex;
|
ArrayList headerFilesToIndex;
|
||||||
|
boolean cleanEncouteredHeaders;
|
||||||
|
|
||||||
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager) {
|
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager) {
|
||||||
super(project.getFullPath(), manager);
|
super(project.getFullPath(), manager);
|
||||||
this.folderPath = folderPath;
|
this.folderPath = folderPath;
|
||||||
|
@ -42,6 +43,17 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
this.exclusionPattern = exclusionPattern;
|
this.exclusionPattern = exclusionPattern;
|
||||||
this.sourceFilesToIndex = new ArrayList();
|
this.sourceFilesToIndex = new ArrayList();
|
||||||
this.headerFilesToIndex = 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) {
|
public boolean execute(IProgressMonitor progressMonitor) {
|
||||||
|
@ -102,12 +114,15 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
private void scheduleJobs() {
|
private void scheduleJobs() {
|
||||||
//Schedule the source jobs first, then the headers
|
//Schedule the source jobs first, then the headers
|
||||||
for (int i=0; i<sourceFilesToIndex.size(); i++)
|
for (int i=0; i<sourceFilesToIndex.size(); i++)
|
||||||
this.manager.addSource((IFile)sourceFilesToIndex.get(i), this.indexPath);
|
this.manager.addSource((IFile)sourceFilesToIndex.get(i), this.indexPath, false);
|
||||||
|
|
||||||
for (int i=0;i<headerFilesToIndex.size(); i++)
|
for (int i=0;i<headerFilesToIndex.size(); i++)
|
||||||
this.manager.addSource((IFile)headerFilesToIndex.get(i), this.indexPath);
|
this.manager.addSource((IFile)headerFilesToIndex.get(i), this.indexPath, true);
|
||||||
|
|
||||||
|
|
||||||
|
if (cleanEncouteredHeaders){
|
||||||
|
CleanEncounteredHeaders cleanHeaders = new CleanEncounteredHeaders(this.manager);
|
||||||
|
this.manager.request(cleanHeaders);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Created on Aug 19, 2004
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated file go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
package org.eclipse.cdt.internal.core.search.indexing;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author bgheorgh
|
||||||
|
*
|
||||||
|
* TODO To change the template for this generated type comment go to
|
||||||
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
|
*/
|
||||||
|
public class CleanEncounteredHeaders implements IJob {
|
||||||
|
|
||||||
|
IndexManager manager = null;
|
||||||
|
|
||||||
|
public CleanEncounteredHeaders(IndexManager manager){
|
||||||
|
this.manager = manager;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.search.processing.IJob#execute(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
|
*/
|
||||||
|
public boolean execute(IProgressMonitor progress) {
|
||||||
|
|
||||||
|
//Clean out the headers
|
||||||
|
this.manager.resetEncounteredHeaders();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.search.processing.IJob#belongsTo(java.lang.String)
|
||||||
|
*/
|
||||||
|
public boolean belongsTo(String jobFamily) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.search.processing.IJob#cancel()
|
||||||
|
*/
|
||||||
|
public void cancel() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.search.processing.IJob#isReadyToRun()
|
||||||
|
*/
|
||||||
|
public boolean isReadyToRun() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -82,7 +82,11 @@ public class IndexAllProject extends IndexRequest {
|
||||||
for (int i=0;i<sourceRoot.length;i++){
|
for (int i=0;i<sourceRoot.length;i++){
|
||||||
if (sourceRoot[i] instanceof SourceRoot){
|
if (sourceRoot[i] instanceof SourceRoot){
|
||||||
ISourceEntry tempEntry = ((SourceRoot) sourceRoot[i]).getSourceEntry();
|
ISourceEntry tempEntry = ((SourceRoot) sourceRoot[i]).getSourceEntry();
|
||||||
this.manager.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), this.manager));
|
|
||||||
|
if ((i+1) != sourceRoot.length)
|
||||||
|
this.manager.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), this.manager));
|
||||||
|
else
|
||||||
|
this.manager.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), this.manager,true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.cdt.core.index.IIndexChangeListener;
|
||||||
import org.eclipse.cdt.core.index.IndexChangeEvent;
|
import org.eclipse.cdt.core.index.IndexChangeEvent;
|
||||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||||
import org.eclipse.cdt.core.parser.ParserTimeOut;
|
import org.eclipse.cdt.core.parser.ParserTimeOut;
|
||||||
|
import org.eclipse.cdt.core.parser.util.ObjectSet;
|
||||||
import org.eclipse.cdt.internal.core.CharOperation;
|
import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.Util;
|
import org.eclipse.cdt.internal.core.Util;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
@ -81,6 +82,8 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
private File savedIndexNamesFile =
|
private File savedIndexNamesFile =
|
||||||
new File(getCCorePluginWorkingLocation().append("savedIndexNames.txt").toOSString()); //$NON-NLS-1$
|
new File(getCCorePluginWorkingLocation().append("savedIndexNames.txt").toOSString()); //$NON-NLS-1$
|
||||||
|
|
||||||
|
private SimpleLookupTable encounteredHeaders = null;
|
||||||
|
|
||||||
public static Integer SAVED_STATE = new Integer(0);
|
public static Integer SAVED_STATE = new Integer(0);
|
||||||
public static Integer UPDATING_STATE = new Integer(1);
|
public static Integer UPDATING_STATE = new Integer(1);
|
||||||
public static Integer UNKNOWN_STATE = new Integer(2);
|
public static Integer UNKNOWN_STATE = new Integer(2);
|
||||||
|
@ -147,12 +150,16 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
request(job);
|
request(job);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
public void addSource(IFile resource, IPath indexedContainers){
|
||||||
|
this.addSource(resource,indexedContainers, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trigger addition of a resource to an index
|
* Trigger addition of a resource to an index
|
||||||
* Note: the actual operation is performed in background
|
* Note: the actual operation is performed in background
|
||||||
* @param checkEncounteredHeaders TODO
|
* @param checkEncounteredHeaders TODO
|
||||||
*/
|
*/
|
||||||
public void addSource(IFile resource, IPath indexedContainers){
|
public void addSource(IFile resource, IPath indexedContainers, boolean checkEncounteredHeaders){
|
||||||
|
|
||||||
IProject project = resource.getProject();
|
IProject project = resource.getProject();
|
||||||
|
|
||||||
|
@ -165,7 +172,7 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
if (CCorePlugin.getDefault() == null) return;
|
if (CCorePlugin.getDefault() == null) return;
|
||||||
|
|
||||||
if (indexEnabled){
|
if (indexEnabled){
|
||||||
AddCompilationUnitToIndex job = new AddCompilationUnitToIndex(resource, indexedContainers, this);
|
AddCompilationUnitToIndex job = new AddCompilationUnitToIndex(resource, indexedContainers, this, checkEncounteredHeaders);
|
||||||
|
|
||||||
//If we are in WAITING mode, we need to kick ourselves into enablement
|
//If we are in WAITING mode, we need to kick ourselves into enablement
|
||||||
if (!jobSet.add(job.resource.getLocation()) &&
|
if (!jobSet.add(job.resource.getLocation()) &&
|
||||||
|
@ -272,6 +279,32 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the index for a given project, according to the following algorithm:
|
||||||
|
* - if index is already in memory: answers this one back
|
||||||
|
* - if (reuseExistingFile) then read it and return this index and record it in memory
|
||||||
|
* - if (createIfMissing) then create a new empty index and record it in memory
|
||||||
|
*
|
||||||
|
* Warning: Does not check whether index is consistent (not being used)
|
||||||
|
*/
|
||||||
|
public synchronized boolean haveEncounteredHeader(IPath projectPath, IPath filePath) {
|
||||||
|
|
||||||
|
SimpleLookupTable headerTable = getEncounteredHeaders();
|
||||||
|
// Path is already canonical per construction
|
||||||
|
ObjectSet headers = (ObjectSet) headerTable.get(projectPath);
|
||||||
|
if (headers == null) {
|
||||||
|
//First time for the project, must create a new ObjectSet
|
||||||
|
headers = new ObjectSet(4);
|
||||||
|
headerTable.put(projectPath, headers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headers.containsKey(filePath.toOSString()))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
headers.put(filePath.toOSString());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private SimpleLookupTable getIndexStates() {
|
private SimpleLookupTable getIndexStates() {
|
||||||
if (indexStates != null) return indexStates;
|
if (indexStates != null) return indexStates;
|
||||||
|
@ -289,6 +322,23 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
return this.indexStates;
|
return this.indexStates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private SimpleLookupTable getEncounteredHeaders(){
|
||||||
|
|
||||||
|
if (encounteredHeaders == null){
|
||||||
|
this.encounteredHeaders = new SimpleLookupTable();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return this.encounteredHeaders;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the headers table
|
||||||
|
*/
|
||||||
|
public void resetEncounteredHeaders() {
|
||||||
|
this.encounteredHeaders = null;
|
||||||
|
}
|
||||||
|
|
||||||
private IPath getCCorePluginWorkingLocation() {
|
private IPath getCCorePluginWorkingLocation() {
|
||||||
if (this.cCorePluginLocation != null) return this.cCorePluginLocation;
|
if (this.cCorePluginLocation != null) return this.cCorePluginLocation;
|
||||||
|
|
||||||
|
@ -557,6 +607,7 @@ public class IndexManager extends JobManager implements IIndexConstants {
|
||||||
this.indexes = new HashMap(5);
|
this.indexes = new HashMap(5);
|
||||||
this.monitors = new HashMap(5);
|
this.monitors = new HashMap(5);
|
||||||
this.indexStates = null;
|
this.indexStates = null;
|
||||||
|
this.encounteredHeaders = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.timeoutThread == null){
|
if (this.timeoutThread == null){
|
||||||
|
|
|
@ -234,6 +234,9 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
ICFileType type = CCorePlugin.getDefault().getFileType(resourceProject,
|
ICFileType type = CCorePlugin.getDefault().getFileType(resourceProject,
|
||||||
inclusion.getFullFileName());
|
inclusion.getFullFileName());
|
||||||
|
|
||||||
|
/* See if this file has been encountered before */
|
||||||
|
if (type.isHeader())
|
||||||
|
CCorePlugin.getDefault().getCoreModel().getIndexManager().haveEncounteredHeader(resourceProject.getFullPath(),new Path(inclusion.getFullFileName()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,11 @@ public class Problem implements IProblem {
|
||||||
msg = MessageFormat.format( msg, new Object [] { new String(arg) } );
|
msg = MessageFormat.format( msg, new Object [] { new String(arg) } );
|
||||||
}
|
}
|
||||||
|
|
||||||
Object [] args = { msg, new String( originatingFileName ), new Integer( lineNumber ) };
|
Object [] args = null;
|
||||||
|
if (originatingFileName != null)
|
||||||
|
args = new Object []{ msg, new String( originatingFileName ), new Integer( lineNumber ) };
|
||||||
|
else
|
||||||
|
args = new Object []{ msg, new String(""), new Integer( lineNumber ) };
|
||||||
|
|
||||||
message = ParserMessages.getFormattedString( PROBLEM_PATTERN, args );
|
message = ParserMessages.getFormattedString( PROBLEM_PATTERN, args );
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue