mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-01 05:15:43 +02:00
New core framework for indexer
New UI framework for indexer Updates to core tests/ui tests
This commit is contained in:
parent
db73140257
commit
8cb9d02dae
73 changed files with 3400 additions and 2109 deletions
|
@ -1,3 +1,6 @@
|
||||||
|
2005-03-13 Bogdan Gheorghe
|
||||||
|
Updated tests to work with new index framework
|
||||||
|
|
||||||
2005-02-02 Tanya Wolff
|
2005-02-02 Tanya Wolff
|
||||||
added regression tests to AutomatedIntegrationSuite
|
added regression tests to AutomatedIntegrationSuite
|
||||||
* build.properties
|
* build.properties
|
||||||
|
|
|
@ -20,6 +20,9 @@ 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;
|
||||||
|
@ -30,12 +33,14 @@ import org.eclipse.cdt.core.search.IMatch;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||||
|
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.PathCollector;
|
import org.eclipse.cdt.internal.core.search.PathCollector;
|
||||||
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.cdt.internal.core.sourcedependency.DependencyQueryJob;
|
import org.eclipse.cdt.internal.core.sourcedependency.DependencyQueryJob;
|
||||||
import org.eclipse.cdt.internal.core.sourcedependency.UpdateDependency;
|
import org.eclipse.cdt.internal.core.sourcedependency.UpdateDependency;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
@ -53,7 +58,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
*/
|
*/
|
||||||
public class DependencyTests extends TestCase {
|
public class DependencyTests extends TestCase implements IIndexChangeListener {
|
||||||
IFile file;
|
IFile file;
|
||||||
IFileDocument fileDoc;
|
IFileDocument fileDoc;
|
||||||
IProject testProject;
|
IProject testProject;
|
||||||
|
@ -63,12 +68,15 @@ import org.eclipse.core.runtime.Platform;
|
||||||
BasicSearchResultCollector resultCollector;
|
BasicSearchResultCollector resultCollector;
|
||||||
SearchEngine searchEngine;
|
SearchEngine searchEngine;
|
||||||
ICSearchScope scope;
|
ICSearchScope scope;
|
||||||
|
SourceIndexer sourceIndexer;
|
||||||
|
boolean fileIndexed;
|
||||||
|
public static final int TIMEOUT = 50;
|
||||||
|
|
||||||
public static Test suite() {
|
public static Test suite() {
|
||||||
TestSuite suite = new TestSuite(DependencyTests.class.getName());
|
TestSuite suite = new TestSuite(DependencyTests.class.getName());
|
||||||
|
|
||||||
suite.addTest(new DependencyTests("testDependencyTree"));
|
suite.addTest(new DependencyTests("testDependencyTree"));
|
||||||
suite.addTest(new DependencyTests("testDepTable"));
|
//suite.addTest(new DependencyTests("testDepTable"));
|
||||||
suite.addTest(new DependencyTests("testDepSourceChangeTree"));
|
suite.addTest(new DependencyTests("testDepSourceChangeTree"));
|
||||||
suite.addTest(new DependencyTests("testDepHeaderChangeTree"));
|
suite.addTest(new DependencyTests("testDepHeaderChangeTree"));
|
||||||
suite.addTest(new DependencyTests("testDepHeaderChangeReindex"));
|
suite.addTest(new DependencyTests("testDepHeaderChangeReindex"));
|
||||||
|
@ -97,7 +105,8 @@ import org.eclipse.core.runtime.Platform;
|
||||||
if (indexFile.exists())
|
if (indexFile.exists())
|
||||||
indexFile.delete();
|
indexFile.delete();
|
||||||
|
|
||||||
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(false));
|
testProject.setSessionProperty(IndexManager.indexerIDKey, SourceIndexerTests.sourceIndexerID);
|
||||||
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
if (testProject==null)
|
if (testProject==null)
|
||||||
fail("Unable to create project");
|
fail("Unable to create project");
|
||||||
|
@ -105,6 +114,9 @@ import org.eclipse.core.runtime.Platform;
|
||||||
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
indexManager.reset();
|
indexManager.reset();
|
||||||
|
|
||||||
|
TypeCacheManager typeCacheManager = TypeCacheManager.getInstance();
|
||||||
|
typeCacheManager.setProcessTypeCacheEvents(false);
|
||||||
|
|
||||||
workspace = ResourcesPlugin.getWorkspace();
|
workspace = ResourcesPlugin.getWorkspace();
|
||||||
|
|
||||||
scope = SearchEngine.createWorkspaceScope();
|
scope = SearchEngine.createWorkspaceScope();
|
||||||
|
@ -112,6 +124,9 @@ import org.eclipse.core.runtime.Platform;
|
||||||
resultCollector = new BasicSearchResultCollector();
|
resultCollector = new BasicSearchResultCollector();
|
||||||
|
|
||||||
searchEngine = new SearchEngine();
|
searchEngine = new SearchEngine();
|
||||||
|
|
||||||
|
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||||
|
sourceIndexer.addIndexChangeListener(this);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* @see TestCase#tearDown()
|
* @see TestCase#tearDown()
|
||||||
|
@ -121,6 +136,9 @@ import org.eclipse.core.runtime.Platform;
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
} catch (Exception e1) {
|
} catch (Exception e1) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sourceIndexer.shutdown();
|
||||||
|
|
||||||
//Delete project
|
//Delete project
|
||||||
if (testProject.exists()){
|
if (testProject.exists()){
|
||||||
try {
|
try {
|
||||||
|
@ -156,19 +174,13 @@ import org.eclipse.core.runtime.Platform;
|
||||||
importFile("DepTest2.h","resources/dependency/DepTest2.h");
|
importFile("DepTest2.h","resources/dependency/DepTest2.h");
|
||||||
IFile depTest = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
IFile depTest = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
||||||
IFile depTest2 = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
|
IFile depTest2 = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
|
||||||
//Enable indexing on the created project
|
|
||||||
//By doing this, we force the Dependency Manager to do a g()
|
|
||||||
|
|
||||||
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[] 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"};
|
||||||
|
|
||||||
ArrayList includes = new ArrayList();
|
ArrayList includes = new ArrayList();
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest,sourceIndexer,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null);
|
||||||
|
|
||||||
String[] depTestModelLocal = convertToLocalPath(depTestModel);
|
String[] depTestModelLocal = convertToLocalPath(depTestModel);
|
||||||
String[] depTestIncludes = new String[includes.size()];
|
String[] depTestIncludes = new String[includes.size()];
|
||||||
|
@ -191,7 +203,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList includes2 = new ArrayList();
|
ArrayList includes2 = new ArrayList();
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest2,sourceIndexer,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null,null);
|
||||||
|
|
||||||
String[] depTest2ModelLocal = convertToLocalPath(depTest2Model);
|
String[] depTest2ModelLocal = convertToLocalPath(depTest2Model);
|
||||||
String[] depTest2Includes = new String[includes2.size()];
|
String[] depTest2Includes = new String[includes2.size()];
|
||||||
|
@ -226,7 +238,7 @@ 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 depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h");
|
IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h");
|
||||||
|
|
||||||
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
PathCollector pathCollector = new PathCollector();
|
PathCollector pathCollector = new PathCollector();
|
||||||
getTableRefs(dH, pathCollector);
|
getTableRefs(dH, pathCollector);
|
||||||
|
@ -273,7 +285,7 @@ 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));
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
|
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
|
||||||
|
|
||||||
|
@ -370,14 +382,14 @@ 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));
|
testProject.setSessionProperty(SourceIndexer.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"};
|
||||||
|
|
||||||
ArrayList includes = new ArrayList();
|
ArrayList includes = new ArrayList();
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,sourceIndexer,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
||||||
|
|
||||||
String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
|
String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
|
||||||
String[] preDepTestIncludes = new String[includes.size()];
|
String[] preDepTestIncludes = new String[includes.size()];
|
||||||
|
@ -406,7 +418,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
|
testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
|
||||||
|
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTestC,sourceIndexer,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
||||||
|
|
||||||
|
|
||||||
String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
|
String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
|
||||||
|
@ -439,14 +451,14 @@ 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));
|
testProject.setSessionProperty(SourceIndexer.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"};
|
||||||
|
|
||||||
ArrayList includes = new ArrayList();
|
ArrayList includes = new ArrayList();
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,sourceIndexer,includes),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
||||||
|
|
||||||
String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
|
String[] preDepTestModelLocal = convertToLocalPath(preDepTestModel);
|
||||||
String[] preDepTestIncludes = new String[includes.size()];
|
String[] preDepTestIncludes = new String[includes.size()];
|
||||||
|
@ -475,7 +487,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
|
testProject.refreshLocal(IResource.DEPTH_INFINITE,null);
|
||||||
|
|
||||||
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,indexManager,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
indexManager.performConcurrentJob(new DependencyQueryJob(testProject,depTest3C,sourceIndexer,includes2),ICSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,null, null);
|
||||||
|
|
||||||
|
|
||||||
String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
|
String[] postDepTestModelLocal = convertToLocalPath(postDepTestModel);
|
||||||
|
@ -508,7 +520,7 @@ 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));
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
|
|
||||||
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"};
|
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"};
|
||||||
|
@ -568,7 +580,7 @@ import org.eclipse.core.runtime.Platform;
|
||||||
assertFalse(nonExistantResource.exists());
|
assertFalse(nonExistantResource.exists());
|
||||||
assertNull(nonExistantResource.getLocation());
|
assertNull(nonExistantResource.getLocation());
|
||||||
|
|
||||||
IJob job = new UpdateDependency(nonExistantResource);
|
IIndexJob job = new UpdateDependency(nonExistantResource, sourceIndexer);
|
||||||
assertFalse(job.execute(new NullProgressMonitor()));
|
assertFalse(job.execute(new NullProgressMonitor()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,7 +592,7 @@ 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));
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true );
|
ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DECLARATIONS, true );
|
||||||
|
|
||||||
|
@ -712,8 +724,8 @@ import org.eclipse.core.runtime.Platform;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IFile importFile(String fileName, String resourceLocation)throws Exception{
|
private IFile importFile(String fileName, String resourceLocation)throws Exception {
|
||||||
String testCaseName = this.getName();
|
resetIndexState();
|
||||||
//Obtain file handle
|
//Obtain file handle
|
||||||
file = testProject.getProject().getFile(fileName);
|
file = testProject.getProject().getFile(fileName);
|
||||||
//Create file input stream
|
//Create file input stream
|
||||||
|
@ -724,6 +736,26 @@ import org.eclipse.core.runtime.Platform;
|
||||||
false, monitor);
|
false, monitor);
|
||||||
}
|
}
|
||||||
fileDoc = new IFileDocument(file);
|
fileDoc = new IFileDocument(file);
|
||||||
|
waitForIndex(10); // only wait 20 seconds max.
|
||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void resetIndexState() {
|
||||||
|
fileIndexed = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void waitForIndex(int maxSec) throws Exception {
|
||||||
|
int delay = 0;
|
||||||
|
while (fileIndexed != true && delay < (maxSec * 1000))
|
||||||
|
{
|
||||||
|
Thread.sleep(TIMEOUT);
|
||||||
|
delay += TIMEOUT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void indexChanged(IndexChangeEvent event) {
|
||||||
|
IIndexDelta delta = event.getDelta();
|
||||||
|
if (delta.getDeltaType() == IIndexDelta.MERGE_DELTA){
|
||||||
|
fileIndexed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IIndexConstants;
|
import org.eclipse.cdt.internal.core.search.indexing.IIndexConstants;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
@ -47,20 +49,22 @@ import org.eclipse.core.runtime.Path;
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
*/
|
*/
|
||||||
public class IndexManagerTests extends TestCase implements IIndexChangeListener {
|
public class SourceIndexerTests extends TestCase implements IIndexChangeListener {
|
||||||
IFile file;
|
IFile file;
|
||||||
IFileDocument fileDoc;
|
IFileDocument fileDoc;
|
||||||
IProject testProject;
|
IProject testProject;
|
||||||
NullProgressMonitor monitor;
|
NullProgressMonitor monitor;
|
||||||
IndexManager indexManager;
|
IndexManager indexManager;
|
||||||
|
SourceIndexer sourceIndexer;
|
||||||
boolean fileIndexed;
|
boolean fileIndexed;
|
||||||
|
|
||||||
|
static final String sourceIndexerID = "org.eclipse.cdt.core.originalsourceindexer"; //$NON-NLS-1$
|
||||||
public static final int TIMEOUT = 50;
|
public static final int TIMEOUT = 50;
|
||||||
/**
|
/**
|
||||||
* Constructor for IndexManagerTest.
|
* Constructor for IndexManagerTest.
|
||||||
* @param name
|
* @param name
|
||||||
*/
|
*/
|
||||||
public IndexManagerTests(String name) {
|
public SourceIndexerTests(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,22 +93,28 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
monitor = new NullProgressMonitor();
|
monitor = new NullProgressMonitor();
|
||||||
|
|
||||||
//Create temp project
|
//Create temp project
|
||||||
testProject = createProject("IndexerTestProject");
|
testProject = createProject("IndexerTestProject"); //$NON-NLS-1$
|
||||||
IPath pathLoc = CCorePlugin.getDefault().getStateLocation();
|
IPath pathLoc = CCorePlugin.getDefault().getStateLocation();
|
||||||
|
|
||||||
File indexFile = new File(pathLoc.append("3915980774.index").toOSString());
|
File indexFile = new File(pathLoc.append("3915980774.index").toOSString()); //$NON-NLS-1$
|
||||||
if (indexFile.exists())
|
if (indexFile.exists())
|
||||||
indexFile.delete();
|
indexFile.delete();
|
||||||
|
|
||||||
|
//Set the id of the source indexer extension point as a session property to allow
|
||||||
|
//index manager to instantiate it
|
||||||
|
testProject.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||||
|
|
||||||
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
//Enable indexing on test project
|
||||||
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
if (testProject==null)
|
if (testProject==null)
|
||||||
fail("Unable to create project");
|
fail("Unable to create project"); //$NON-NLS-1$
|
||||||
|
|
||||||
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
indexManager.reset();
|
indexManager.reset();
|
||||||
indexManager.addIndexChangeListener(this);
|
//Get the indexer used for the test project
|
||||||
|
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||||
|
sourceIndexer.addIndexChangeListener(this);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* @see TestCase#tearDown()
|
* @see TestCase#tearDown()
|
||||||
|
@ -112,7 +122,7 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
protected void tearDown() {
|
protected void tearDown() {
|
||||||
try {
|
try {
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
indexManager.removeIndexChangeListener(this);
|
sourceIndexer.removeIndexChangeListener(this);
|
||||||
} catch (Exception e1) {
|
} catch (Exception e1) {
|
||||||
}
|
}
|
||||||
//Delete project
|
//Delete project
|
||||||
|
@ -128,7 +138,7 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getMessage(IStatus status) {
|
private String getMessage(IStatus status) {
|
||||||
StringBuffer message = new StringBuffer("[");
|
StringBuffer message = new StringBuffer("["); //$NON-NLS-1$
|
||||||
message.append(status.getMessage());
|
message.append(status.getMessage());
|
||||||
if (status.isMultiStatus()) {
|
if (status.isMultiStatus()) {
|
||||||
IStatus children[] = status.getChildren();
|
IStatus children[] = status.getChildren();
|
||||||
|
@ -136,23 +146,23 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
message.append(getMessage(children[i]));
|
message.append(getMessage(children[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
message.append("]");
|
message.append("]"); //$NON-NLS-1$
|
||||||
return message.toString();
|
return message.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Test suite() {
|
public static Test suite() {
|
||||||
TestSuite suite = new TestSuite(IndexManagerTests.class.getName());
|
TestSuite suite = new TestSuite(SourceIndexerTests.class.getName());
|
||||||
|
|
||||||
suite.addTest(new IndexManagerTests("testAddNewFileToIndex"));
|
suite.addTest(new SourceIndexerTests("testAddNewFileToIndex")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testForwardDeclarations"));
|
suite.addTest(new SourceIndexerTests("testForwardDeclarations")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testIndexAll"));
|
suite.addTest(new SourceIndexerTests("testIndexAll")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testIndexContents"));
|
suite.addTest(new SourceIndexerTests("testIndexContents")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testMacros"));
|
suite.addTest(new SourceIndexerTests("testMacros")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testRefs"));
|
suite.addTest(new SourceIndexerTests("testRefs")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testExactDeclarations"));
|
suite.addTest(new SourceIndexerTests("testExactDeclarations")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testRemoveFileFromIndex"));
|
suite.addTest(new SourceIndexerTests("testRemoveFileFromIndex")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testRemoveProjectFromIndex"));
|
suite.addTest(new SourceIndexerTests("testRemoveProjectFromIndex")); //$NON-NLS-1$
|
||||||
suite.addTest(new IndexManagerTests("testIndexShutdown"));
|
suite.addTest(new SourceIndexerTests("testIndexShutdown")); //$NON-NLS-1$
|
||||||
|
|
||||||
return suite;
|
return suite;
|
||||||
|
|
||||||
|
@ -161,7 +171,7 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
* Utils
|
* Utils
|
||||||
*/
|
*/
|
||||||
private IProject createProject(String projectName) throws CoreException {
|
private IProject createProject(String projectName) throws CoreException {
|
||||||
ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin");
|
ICProject cPrj = CProjectHelper.createCCProject(projectName, "bin"); //$NON-NLS-1$
|
||||||
return cPrj.getProject();
|
return cPrj.getProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,27 +198,40 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
//Add a file to the project
|
//Add a file to the project
|
||||||
|
|
||||||
importFile("mail.cpp","resources/indexer/mail.cpp");
|
importFile("mail.cpp","resources/indexer/mail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
IIndex ind = indexManager.getIndex(testProject.getFullPath(),true,true);
|
IIndex ind = sourceIndexer.getIndex(testProject.getFullPath(),true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
char[] prefix = "typeDecl/".toCharArray();
|
char[] prefix = "typeDecl/".toCharArray(); //$NON-NLS-1$
|
||||||
IQueryResult[] qresults = ind.queryPrefix(prefix);
|
IQueryResult[] qresults = ind.queryPrefix(prefix);
|
||||||
IEntryResult[] eresults = ind.queryEntries(prefix);
|
IEntryResult[] eresults = ind.queryEntries(prefix);
|
||||||
|
|
||||||
assertTrue("Query Results exist", qresults != null);
|
assertTrue("Query Results exist", qresults != null); //$NON-NLS-1$
|
||||||
assertTrue("Entry Results exist", eresults != null);
|
assertTrue("Entry Results exist", eresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] queryResultModel = {"IndexedFile(1: /IndexerTestProject/mail.cpp)"};
|
String [] queryResultModel = {"IndexedFile(1: /IndexerTestProject/mail.cpp)"}; //$NON-NLS-1$
|
||||||
String [] entryResultModel ={"EntryResult: word=typeDecl/C/Mail, refs={ 1 }", "EntryResult: word=typeDecl/C/Unknown, refs={ 1 }", "EntryResult: word=typeDecl/C/container, refs={ 1 }", "EntryResult: word=typeDecl/C/first_class, refs={ 1 }", "EntryResult: word=typeDecl/C/postcard, refs={ 1 }","EntryResult: word=typeDecl/D/Mail, refs={ 1 }", "EntryResult: word=typeDecl/D/first_class, refs={ 1 }", "EntryResult: word=typeDecl/D/postcard, refs={ 1 }","EntryResult: word=typeDecl/V/PO_Box, refs={ 1 }", "EntryResult: word=typeDecl/V/index, refs={ 1 }", "EntryResult: word=typeDecl/V/mail, refs={ 1 }","EntryResult: word=typeDecl/V/size, refs={ 1 }", "EntryResult: word=typeDecl/V/temp, refs={ 1 }", "EntryResult: word=typeDecl/V/x, refs={ 1 }"};
|
String [] entryResultModel ={"EntryResult: word=typeDecl/C/Mail, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/C/Unknown, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/C/container, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/C/first_class, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/C/postcard, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/D/Mail, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/D/first_class, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/D/postcard, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/PO_Box, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/index, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/mail, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/size, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/temp, refs={ 1 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/V/x, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
if (qresults.length != queryResultModel.length)
|
if (qresults.length != queryResultModel.length)
|
||||||
fail("Query Result length different from model");
|
fail("Query Result length different from model"); //$NON-NLS-1$
|
||||||
|
|
||||||
if (eresults.length != entryResultModel.length)
|
if (eresults.length != entryResultModel.length)
|
||||||
fail("Entry Result length different from model");
|
fail("Entry Result length different from model"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0; i<qresults.length;i++)
|
for (int i=0; i<qresults.length;i++)
|
||||||
{
|
{
|
||||||
|
@ -225,28 +248,28 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
|
|
||||||
//Add a file to the project
|
//Add a file to the project
|
||||||
importFile("mail.cpp","resources/indexer/mail.cpp");
|
importFile("mail.cpp","resources/indexer/mail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
//Add a new file to the project, give it some time to index
|
//Add a new file to the project, give it some time to index
|
||||||
|
|
||||||
importFile("DocumentManager.h","resources/indexer/DocumentManager.h");
|
importFile("DocumentManager.h","resources/indexer/DocumentManager.h"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
importFile("DocumentManager.cpp","resources/indexer/DocumentManager.cpp");
|
importFile("DocumentManager.cpp","resources/indexer/DocumentManager.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
ind = indexManager.getIndex(testProjectPath,true,true);
|
ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
|
|
||||||
char[] prefix = "typeDecl/C/CDocumentManager".toCharArray();
|
char[] prefix = "typeDecl/C/CDocumentManager".toCharArray(); //$NON-NLS-1$
|
||||||
String [] entryResultModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }"};
|
String [] entryResultModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }"}; //$NON-NLS-1$
|
||||||
IEntryResult[] eresults =ind.queryEntries(prefix);
|
IEntryResult[] eresults =ind.queryEntries(prefix);
|
||||||
IEntryResult[] bogRe = ind.queryEntries(IIndexConstants.TYPE_DECL);
|
IEntryResult[] bogRe = ind.queryEntries(IIndexConstants.TYPE_DECL);
|
||||||
assertTrue("Entry Result exists", eresults != null);
|
assertTrue("Entry Result exists", eresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (eresults.length != entryResultModel.length)
|
if (eresults.length != entryResultModel.length)
|
||||||
fail("Entry Result length different from model");
|
fail("Entry Result length different from model"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<eresults.length; i++)
|
for (int i=0;i<eresults.length; i++)
|
||||||
{
|
{
|
||||||
|
@ -258,18 +281,18 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
|
|
||||||
//Add a file to the project
|
//Add a file to the project
|
||||||
importFile("mail.cpp","resources/indexer/mail.cpp");
|
importFile("mail.cpp","resources/indexer/mail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
//Delete the project
|
//Delete the project
|
||||||
safeDelete(testProject);
|
safeDelete(testProject);
|
||||||
|
|
||||||
//See if the index is still there
|
//See if the index is still there
|
||||||
ind = indexManager.getIndex(testProjectPath,true,true);
|
ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index deleted",ind == null);
|
assertTrue("Index deleted",ind == null); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -290,33 +313,41 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
public void testRemoveFileFromIndex() throws Exception{
|
public void testRemoveFileFromIndex() throws Exception{
|
||||||
|
|
||||||
//Add a file to the project
|
//Add a file to the project
|
||||||
importFile("mail.cpp","resources/indexer/mail.cpp");
|
importFile("mail.cpp","resources/indexer/mail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
importFile("DocumentManager.h","resources/indexer/DocumentManager.h");
|
importFile("DocumentManager.h","resources/indexer/DocumentManager.h"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
importFile("DocumentManager.cpp","resources/indexer/DocumentManager.cpp");
|
importFile("DocumentManager.cpp","resources/indexer/DocumentManager.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
ind = indexManager.getIndex(testProjectPath,true,true);
|
ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
|
|
||||||
//Do a "before" deletion comparison
|
//Do a "before" deletion comparison
|
||||||
//ind = indexManager.getIndex(testProjectPath,true,true);
|
//ind = indexManager.getIndex(testProjectPath,true,true);
|
||||||
char[] prefix = "typeDecl/".toCharArray();
|
char[] prefix = "typeDecl/".toCharArray(); //$NON-NLS-1$
|
||||||
IEntryResult[] eresults = ind.queryEntries(prefix);
|
IEntryResult[] eresults = ind.queryEntries(prefix);
|
||||||
assertTrue("Entry result found for typdeDecl/", eresults != null);
|
assertTrue("Entry result found for typdeDecl/", eresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] entryResultBeforeModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }", "EntryResult: word=typeDecl/C/Mail, refs={ 3 }", "EntryResult: word=typeDecl/C/Unknown, refs={ 3 }", "EntryResult: word=typeDecl/C/container, refs={ 3 }", "EntryResult: word=typeDecl/C/first_class, refs={ 3 }", "EntryResult: word=typeDecl/C/postcard, refs={ 3 }", "EntryResult: word=typeDecl/D/Mail, refs={ 3 }", "EntryResult: word=typeDecl/D/first_class, refs={ 3 }", "EntryResult: word=typeDecl/D/postcard, refs={ 3 }", "EntryResult: word=typeDecl/V/, refs={ 1, 2 }", "EntryResult: word=typeDecl/V/PO_Box, refs={ 3 }", "EntryResult: word=typeDecl/V/index, refs={ 3 }", "EntryResult: word=typeDecl/V/mail, refs={ 3 }", "EntryResult: word=typeDecl/V/size, refs={ 3 }", "EntryResult: word=typeDecl/V/temp, refs={ 3 }", "EntryResult: word=typeDecl/V/x, refs={ 3 }"};
|
String [] entryResultBeforeModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }", //$NON-NLS-1$
|
||||||
|
"EntryResult: word=typeDecl/C/Mail, refs={ 3 }", "EntryResult: word=typeDecl/C/Unknown, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/C/container, refs={ 3 }", "EntryResult: word=typeDecl/C/first_class, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/C/postcard, refs={ 3 }", "EntryResult: word=typeDecl/D/Mail, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/D/first_class, refs={ 3 }", "EntryResult: word=typeDecl/D/postcard, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/, refs={ 1, 2 }", "EntryResult: word=typeDecl/V/PO_Box, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/index, refs={ 3 }", "EntryResult: word=typeDecl/V/mail, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/size, refs={ 3 }", "EntryResult: word=typeDecl/V/temp, refs={ 3 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/x, refs={ 3 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
if (eresults.length != entryResultBeforeModel.length)
|
if (eresults.length != entryResultBeforeModel.length)
|
||||||
fail("Entry Result length different from model");
|
fail("Entry Result length different from model"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<eresults.length; i++)
|
for (int i=0;i<eresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(entryResultBeforeModel[i],eresults[i].toString());
|
assertEquals(entryResultBeforeModel[i],eresults[i].toString());
|
||||||
}
|
}
|
||||||
//Delete mail.cpp from the project, give some time to remove index
|
//Delete mail.cpp from the project, give some time to remove index
|
||||||
IResource resourceHdl = testProject.findMember("mail.cpp") ;
|
IResource resourceHdl = testProject.findMember("mail.cpp") ; //$NON-NLS-1$
|
||||||
// Cleaning up file handles before delete
|
// Cleaning up file handles before delete
|
||||||
System.gc();
|
System.gc();
|
||||||
System.runFinalization();
|
System.runFinalization();
|
||||||
|
@ -325,13 +356,13 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
waitForIndex(10); // wait up to 10 seconds for the index to be deleted.
|
waitForIndex(10); // wait up to 10 seconds for the index to be deleted.
|
||||||
|
|
||||||
//See if the index is still there
|
//See if the index is still there
|
||||||
ind = indexManager.getIndex(testProjectPath,true,true);
|
ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
eresults = ind.queryEntries(prefix);
|
eresults = ind.queryEntries(prefix);
|
||||||
assertTrue("Entry exists", eresults != null);
|
assertTrue("Entry exists", eresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] entryResultAfterModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }", "EntryResult: word=typeDecl/V/, refs={ 1, 2 }"};
|
String [] entryResultAfterModel ={"EntryResult: word=typeDecl/C/CDocumentManager, refs={ 2 }", "EntryResult: word=typeDecl/V/, refs={ 1, 2 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
if (eresults.length != entryResultAfterModel.length)
|
if (eresults.length != entryResultAfterModel.length)
|
||||||
fail("Entry Result length different from model");
|
fail("Entry Result length different from model"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<eresults.length; i++)
|
for (int i=0;i<eresults.length; i++)
|
||||||
{
|
{
|
||||||
|
@ -342,180 +373,190 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
public void testIndexContents() throws Exception{
|
public void testIndexContents() throws Exception{
|
||||||
|
|
||||||
//Add a new file to the project
|
//Add a new file to the project
|
||||||
importFile("extramail.cpp","resources/indexer/extramail.cpp");
|
importFile("extramail.cpp","resources/indexer/extramail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
IEntryResult[] typerefreesults = ind.queryEntries(IIndexConstants.TYPE_REF);
|
IEntryResult[] typerefreesults = ind.queryEntries(IIndexConstants.TYPE_REF);
|
||||||
assertTrue("Type Ref Results exist", typerefreesults != null);
|
assertTrue("Type Ref Results exist", typerefreesults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] typeDeclEntryResultModel ={"EntryResult: word=typeDecl/C/Mail/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/Unknown/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/container/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/first_class/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/postcard/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/D/Mail/Y/X/Z, refs={ 1 }", "EntryResult: word=typeDecl/D/first_class/Y/X/Z, refs={ 1 }", "EntryResult: word=typeDecl/D/postcard/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/E/test/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/T/int32, refs={ 1 }", "EntryResult: word=typeDecl/V/PO_Box, refs={ 1 }","EntryResult: word=typeDecl/V/index, refs={ 1 }", "EntryResult: word=typeDecl/V/mail, refs={ 1 }", "EntryResult: word=typeDecl/V/size, refs={ 1 }", "EntryResult: word=typeDecl/V/temp, refs={ 1 }", "EntryResult: word=typeDecl/V/x, refs={ 1 }", "EntryResult: word=typeDecl/V/x/Z, refs={ 1 }"};
|
String [] typeDeclEntryResultModel ={"EntryResult: word=typeDecl/C/Mail/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/Unknown/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/C/container/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/C/first_class/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/C/postcard/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/D/Mail/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/D/first_class/Y/X/Z, refs={ 1 }", "EntryResult: word=typeDecl/D/postcard/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/E/test/Y/X/Z, refs={ 1 }","EntryResult: word=typeDecl/T/int32, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/PO_Box, refs={ 1 }","EntryResult: word=typeDecl/V/index, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/mail, refs={ 1 }", "EntryResult: word=typeDecl/V/size, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/temp, refs={ 1 }", "EntryResult: word=typeDecl/V/x, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeDecl/V/x/Z, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
IEntryResult[] typedeclresults =ind.queryEntries(IIndexConstants.TYPE_DECL);
|
IEntryResult[] typedeclresults =ind.queryEntries(IIndexConstants.TYPE_DECL);
|
||||||
assertTrue("Type Decl Results exist", typedeclresults != null);
|
assertTrue("Type Decl Results exist", typedeclresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (typedeclresults.length != typeDeclEntryResultModel.length)
|
if (typedeclresults.length != typeDeclEntryResultModel.length)
|
||||||
fail("Entry Result length different from model for typeDecl");
|
fail("Entry Result length different from model for typeDecl"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<typedeclresults.length; i++)
|
for (int i=0;i<typedeclresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(typeDeclEntryResultModel[i],typedeclresults[i].toString());
|
assertEquals(typeDeclEntryResultModel[i],typedeclresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] typeDefEntryResultModel ={"EntryResult: word=typeDecl/T/int32, refs={ 1 }"};
|
String [] typeDefEntryResultModel ={"EntryResult: word=typeDecl/T/int32, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
IEntryResult[] typedefresults =ind.queryEntries(IIndexConstants.TYPEDEF_DECL);
|
IEntryResult[] typedefresults =ind.queryEntries(IIndexConstants.TYPEDEF_DECL);
|
||||||
assertTrue("Type Def Results exist", typedefresults != null);
|
assertTrue("Type Def Results exist", typedefresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (typedefresults.length != typeDefEntryResultModel.length)
|
if (typedefresults.length != typeDefEntryResultModel.length)
|
||||||
fail("Entry Result length different from model for typeDef");
|
fail("Entry Result length different from model for typeDef"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<typedefresults.length; i++)
|
for (int i=0;i<typedefresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(typeDefEntryResultModel[i],typedefresults[i].toString());
|
assertEquals(typeDefEntryResultModel[i],typedefresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] namespaceResultModel = {"EntryResult: word=namespaceDecl/X/Z, refs={ 1 }", "EntryResult: word=namespaceDecl/Y/X/Z, refs={ 1 }", "EntryResult: word=namespaceDecl/Z, refs={ 1 }"};
|
String [] namespaceResultModel = {"EntryResult: word=namespaceDecl/X/Z, refs={ 1 }", "EntryResult: word=namespaceDecl/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=namespaceDecl/Z, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
IEntryResult[] namespaceresults =ind.queryEntries(IIndexConstants.NAMESPACE_DECL);
|
IEntryResult[] namespaceresults =ind.queryEntries(IIndexConstants.NAMESPACE_DECL);
|
||||||
assertTrue("Namespace Results exist", namespaceresults != null);
|
assertTrue("Namespace Results exist", namespaceresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (namespaceresults.length != namespaceResultModel.length)
|
if (namespaceresults.length != namespaceResultModel.length)
|
||||||
fail("Entry Result length different from model for namespace");
|
fail("Entry Result length different from model for namespace"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<namespaceresults.length; i++)
|
for (int i=0;i<namespaceresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(namespaceResultModel[i],namespaceresults[i].toString());
|
assertEquals(namespaceResultModel[i],namespaceresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] fieldResultModel = {"EntryResult: word=fieldDecl/array/container/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/index/container/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/postage/Mail/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/sz/container/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/type/Mail/Y/X/Z, refs={ 1 }"};
|
String [] fieldResultModel = {"EntryResult: word=fieldDecl/array/container/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/index/container/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=fieldDecl/postage/Mail/Y/X/Z, refs={ 1 }", "EntryResult: word=fieldDecl/sz/container/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=fieldDecl/type/Mail/Y/X/Z, refs={ 1 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
IEntryResult[] fieldresults =ind.queryEntries(IIndexConstants.FIELD_DECL);
|
IEntryResult[] fieldresults =ind.queryEntries(IIndexConstants.FIELD_DECL);
|
||||||
assertTrue("Field Results exist", fieldresults != null);
|
assertTrue("Field Results exist", fieldresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (fieldresults.length != fieldResultModel.length)
|
if (fieldresults.length != fieldResultModel.length)
|
||||||
fail("Entry Result length different from model for fieldDecl");
|
fail("Entry Result length different from model for fieldDecl"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<fieldresults.length; i++)
|
for (int i=0;i<fieldresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(fieldResultModel[i],fieldresults[i].toString());
|
assertEquals(fieldResultModel[i],fieldresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] enumeratorResultModel = {"EntryResult: word=enumtorDecl/bye/Y/X/Z, refs={ 1 }", "EntryResult: word=enumtorDecl/cool/Y/X/Z, refs={ 1 }", "EntryResult: word=enumtorDecl/hi/Y/X/Z, refs={ 1 }", "EntryResult: word=enumtorDecl/why/Y/X/Z, refs={ 1 }"};
|
String [] enumeratorResultModel = {"EntryResult: word=enumtorDecl/bye/Y/X/Z, refs={ 1 }", "EntryResult: word=enumtorDecl/cool/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=enumtorDecl/hi/Y/X/Z, refs={ 1 }", "EntryResult: word=enumtorDecl/why/Y/X/Z, refs={ 1 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
IEntryResult[] enumeratorresults =ind.queryEntries(IIndexConstants.ENUMTOR_DECL);
|
IEntryResult[] enumeratorresults =ind.queryEntries(IIndexConstants.ENUMTOR_DECL);
|
||||||
assertTrue("Enumerator Results exist", enumeratorresults != null);
|
assertTrue("Enumerator Results exist", enumeratorresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (enumeratorresults.length != enumeratorResultModel.length)
|
if (enumeratorresults.length != enumeratorResultModel.length)
|
||||||
fail("Entry Result length different from model for enumtorDecl");
|
fail("Entry Result length different from model for enumtorDecl"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<enumeratorresults.length; i++)
|
for (int i=0;i<enumeratorresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(enumeratorResultModel[i],enumeratorresults[i].toString());
|
assertEquals(enumeratorResultModel[i],enumeratorresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] functionResultModel = {"EntryResult: word=functionDecl/doSomething, refs={ 1 }", "EntryResult: word=functionDecl/main/Y/X/Z, refs={ 1 }"};
|
String [] functionResultModel = {"EntryResult: word=functionDecl/doSomething, refs={ 1 }", "EntryResult: word=functionDecl/main/Y/X/Z, refs={ 1 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
IEntryResult[] functionresults =ind.queryEntries(IIndexConstants.FUNCTION_DECL);
|
IEntryResult[] functionresults =ind.queryEntries(IIndexConstants.FUNCTION_DECL);
|
||||||
|
|
||||||
if (functionresults.length != functionResultModel.length)
|
if (functionresults.length != functionResultModel.length)
|
||||||
fail("Entry Result length different from model for functionDecl");
|
fail("Entry Result length different from model for functionDecl"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<functionresults.length; i++)
|
for (int i=0;i<functionresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(functionResultModel[i],functionresults[i].toString());
|
assertEquals(functionResultModel[i],functionresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] methodResultModel = {"EntryResult: word=methodDecl/Mail/Mail/Y/X/Z, refs={ 1 }",
|
String [] methodResultModel = {"EntryResult: word=methodDecl/Mail/Mail/Y/X/Z, refs={ 1 }", "EntryResult: word=methodDecl/Unknown/Unknown/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/Unknown/Unknown/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/container/container/Y/X/Z, refs={ 1 }", "EntryResult: word=methodDecl/first_class/first_class/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/container/container/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/operator =/container/Y/X/Z, refs={ 1 }","EntryResult: word=methodDecl/operator []/container/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/first_class/first_class/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/postcard/postcard/Y/X/Z, refs={ 1 }", "EntryResult: word=methodDecl/print/Mail/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/operator =/container/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/print/Unknown/Y/X/Z, refs={ 1 }", "EntryResult: word=methodDecl/print/first_class/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/operator []/container/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/print/postcard/Y/X/Z, refs={ 1 }", "EntryResult: word=methodDecl/size/container/Y/X/Z, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
"EntryResult: word=methodDecl/postcard/postcard/Y/X/Z, refs={ 1 }",
|
"EntryResult: word=methodDecl/~container/container/Y/X/Z, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
"EntryResult: word=methodDecl/print/Mail/Y/X/Z, refs={ 1 }",
|
|
||||||
"EntryResult: word=methodDecl/print/Unknown/Y/X/Z, refs={ 1 }",
|
|
||||||
"EntryResult: word=methodDecl/print/first_class/Y/X/Z, refs={ 1 }",
|
|
||||||
"EntryResult: word=methodDecl/print/postcard/Y/X/Z, refs={ 1 }",
|
|
||||||
"EntryResult: word=methodDecl/size/container/Y/X/Z, refs={ 1 }",
|
|
||||||
"EntryResult: word=methodDecl/~container/container/Y/X/Z, refs={ 1 }"};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
IEntryResult[] methodresults =ind.queryEntries(IIndexConstants.METHOD_DECL);
|
IEntryResult[] methodresults =ind.queryEntries(IIndexConstants.METHOD_DECL);
|
||||||
assertTrue("Entry exists", methodresults != null);
|
assertTrue("Entry exists", methodresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (methodresults.length != methodResultModel.length)
|
if (methodresults.length != methodResultModel.length)
|
||||||
fail("Entry Result length different from model for functionDecl");
|
fail("Entry Result length different from model for functionDecl"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<methodresults.length; i++)
|
for (int i=0;i<methodresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals("Index is " +i , methodResultModel[i],methodresults[i].toString());
|
assertEquals("Index is " +i , methodResultModel[i],methodresults[i].toString()); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testRefs() throws Exception{
|
public void testRefs() throws Exception{
|
||||||
//Add a new file to the project
|
//Add a new file to the project
|
||||||
importFile("reftest.cpp","resources/indexer/reftest.cpp");
|
importFile("reftest.cpp","resources/indexer/reftest.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
|
String [] typeRefEntryResultModel ={"EntryResult: word=typeRef/C/C/B/A, refs={ 1 }", "EntryResult: word=typeRef/E/e1/B/A, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=typeRef/G/ForwardA/A, refs={ 1 }", "EntryResult: word=typeRef/V/x/B/A, refs={ 1 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
String [] typeRefEntryResultModel ={"EntryResult: word=typeRef/C/C/B/A, refs={ 1 }", "EntryResult: word=typeRef/E/e1/B/A, refs={ 1 }", "EntryResult: word=typeRef/G/ForwardA/A, refs={ 1 }", "EntryResult: word=typeRef/V/x/B/A, refs={ 1 }"};
|
|
||||||
IEntryResult[] typerefresults = ind.queryEntries(IIndexConstants.TYPE_REF);
|
IEntryResult[] typerefresults = ind.queryEntries(IIndexConstants.TYPE_REF);
|
||||||
assertTrue("Entry exists",typerefresults != null);
|
assertTrue("Entry exists",typerefresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (typerefresults.length != typeRefEntryResultModel.length)
|
if (typerefresults.length != typeRefEntryResultModel.length)
|
||||||
fail("Entry Result length different from model for typeRef");
|
fail("Entry Result length different from model for typeRef"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<typerefresults.length; i++)
|
for (int i=0;i<typerefresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(typeRefEntryResultModel[i],typerefresults[i].toString());
|
assertEquals(typeRefEntryResultModel[i],typerefresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] funRefEntryResultModel ={"EntryResult: word=functionRef/something/A, refs={ 1 }"};
|
String [] funRefEntryResultModel ={"EntryResult: word=functionRef/something/A, refs={ 1 }"};//$NON-NLS-1$
|
||||||
IEntryResult[] funRefresults = ind.queryEntries(IIndexConstants.FUNCTION_REF);
|
IEntryResult[] funRefresults = ind.queryEntries(IIndexConstants.FUNCTION_REF);
|
||||||
assertTrue("Entry exists",funRefresults != null);
|
assertTrue("Entry exists",funRefresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (funRefresults.length != funRefEntryResultModel.length)
|
if (funRefresults.length != funRefEntryResultModel.length)
|
||||||
fail("Entry Result length different from model for funcRef");
|
fail("Entry Result length different from model for funcRef"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<funRefresults.length; i++)
|
for (int i=0;i<funRefresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(funRefEntryResultModel[i],funRefresults[i].toString());
|
assertEquals(funRefEntryResultModel[i],funRefresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] namespaceRefResultModel = {"EntryResult: word=namespaceRef/A, refs={ 1 }", "EntryResult: word=namespaceRef/B/A, refs={ 1 }"};
|
String [] namespaceRefResultModel = {"EntryResult: word=namespaceRef/A, refs={ 1 }", "EntryResult: word=namespaceRef/B/A, refs={ 1 }"}; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
IEntryResult[] namespacerefresults = ind.queryEntries(IIndexConstants.NAMESPACE_REF);
|
IEntryResult[] namespacerefresults = ind.queryEntries(IIndexConstants.NAMESPACE_REF);
|
||||||
assertTrue("Entry exists",namespacerefresults!=null);
|
assertTrue("Entry exists",namespacerefresults!=null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (namespacerefresults.length != namespaceRefResultModel.length)
|
if (namespacerefresults.length != namespaceRefResultModel.length)
|
||||||
fail("Entry Result length different from model for namespaceRef");
|
fail("Entry Result length different from model for namespaceRef"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<namespacerefresults.length; i++)
|
for (int i=0;i<namespacerefresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(namespaceRefResultModel[i],namespacerefresults[i].toString());
|
assertEquals(namespaceRefResultModel[i],namespacerefresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] fieldRefResultModel = {"EntryResult: word=fieldRef/y/C/B/A, refs={ 1 }"};
|
String [] fieldRefResultModel = {"EntryResult: word=fieldRef/y/C/B/A, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
IEntryResult[] fieldrefresults = ind.queryEntries(IIndexConstants.FIELD_REF);
|
IEntryResult[] fieldrefresults = ind.queryEntries(IIndexConstants.FIELD_REF);
|
||||||
assertTrue("Entry exists",fieldrefresults!=null);
|
assertTrue("Entry exists",fieldrefresults!=null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (fieldrefresults.length != fieldRefResultModel.length)
|
if (fieldrefresults.length != fieldRefResultModel.length)
|
||||||
fail("Entry Result length different from model for fieldRef");
|
fail("Entry Result length different from model for fieldRef"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<fieldrefresults.length; i++)
|
for (int i=0;i<fieldrefresults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(fieldRefResultModel[i],fieldrefresults[i].toString());
|
assertEquals(fieldRefResultModel[i],fieldrefresults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
String [] methodRefResultModel = {"EntryResult: word=methodRef/bar/C/B/A, refs={ 1 }"};
|
String [] methodRefResultModel = {"EntryResult: word=methodRef/bar/C/B/A, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
IEntryResult[] methodrefresults = ind.queryEntries(IIndexConstants.METHOD_REF);
|
IEntryResult[] methodrefresults = ind.queryEntries(IIndexConstants.METHOD_REF);
|
||||||
assertTrue("Entry exists", methodrefresults != null);
|
assertTrue("Entry exists", methodrefresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
if (methodrefresults.length != methodRefResultModel.length)
|
if (methodrefresults.length != methodRefResultModel.length)
|
||||||
fail("Entry Result length different from model for methodRef");
|
fail("Entry Result length different from model for methodRef");//$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<methodrefresults.length; i++)
|
for (int i=0;i<methodrefresults.length; i++)
|
||||||
{
|
{
|
||||||
|
@ -525,55 +566,55 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
public void testExactDeclarations() throws Exception
|
public void testExactDeclarations() throws Exception
|
||||||
{
|
{
|
||||||
importFile("a.h","resources/dependency/a.h");
|
importFile("a.h","resources/dependency/a.h");//$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
importFile("DepTest3.h","resources/dependency/DepTest3.h");//$NON-NLS-1$ //$NON-NLS-2$
|
||||||
importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");//$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
IEntryResult[] eResult = ind.queryEntries(IIndexConstants.CLASS_DECL);
|
IEntryResult[] eResult = ind.queryEntries(IIndexConstants.CLASS_DECL);
|
||||||
IQueryResult[] qResult = ind.queryPrefix(IIndexConstants.CLASS_DECL);
|
IQueryResult[] qResult = ind.queryPrefix(IIndexConstants.CLASS_DECL);
|
||||||
|
|
||||||
assertTrue("Expected 2 files indexed", qResult.length == 2);
|
assertTrue("Expected 2 files indexed", qResult.length == 2); //$NON-NLS-1$
|
||||||
assertTrue("Checking DepTest3.h location", qResult[0].getPath().equals("/IndexerTestProject/DepTest3.h"));
|
assertTrue("Checking DepTest3.h location", qResult[0].getPath().equals("/IndexerTestProject/DepTest3.h")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
assertTrue("Checking a.h location", qResult[1].getPath().equals("/IndexerTestProject/a.h"));
|
assertTrue("Checking a.h location", qResult[1].getPath().equals("/IndexerTestProject/a.h")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
assertTrue("Expect 2 class declaration entries", eResult.length == 2);
|
assertTrue("Expect 2 class declaration entries", eResult.length == 2); //$NON-NLS-1$
|
||||||
|
|
||||||
int[] DepTest3FileRefs = {2};
|
int[] DepTest3FileRefs = {2};
|
||||||
|
|
||||||
int[] fileRefs = eResult[0].getFileReferences();
|
int[] fileRefs = eResult[0].getFileReferences();
|
||||||
|
|
||||||
assertTrue("Check DepTest3 File Refs number", fileRefs.length == 1);
|
assertTrue("Check DepTest3 File Refs number", fileRefs.length == 1); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0; i<fileRefs.length; i++){
|
for (int i=0; i<fileRefs.length; i++){
|
||||||
assertTrue("Verify DepTest3 File Ref",fileRefs[i] == DepTest3FileRefs[i]);
|
assertTrue("Verify DepTest3 File Ref",fileRefs[i] == DepTest3FileRefs[i]); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
int[] aFileRefs = {3};
|
int[] aFileRefs = {3};
|
||||||
|
|
||||||
fileRefs = eResult[1].getFileReferences();
|
fileRefs = eResult[1].getFileReferences();
|
||||||
|
|
||||||
assertTrue("Check a.h File Refs number", fileRefs.length == 1);
|
assertTrue("Check a.h File Refs number", fileRefs.length == 1); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0; i<fileRefs.length; i++){
|
for (int i=0; i<fileRefs.length; i++){
|
||||||
assertTrue("Verify a.h File Ref",fileRefs[i] == aFileRefs[i]);
|
assertTrue("Verify a.h File Ref",fileRefs[i] == aFileRefs[i]); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testMD5() throws Exception
|
public void testMD5() throws Exception
|
||||||
{
|
{
|
||||||
importFile("extramail.cpp","resources/indexer/extramail.cpp");
|
importFile("extramail.cpp","resources/indexer/extramail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
//importFile("mail.cpp","resources/indexer/mail.cpp");
|
//importFile("mail.cpp","resources/indexer/mail.cpp");
|
||||||
|
|
||||||
MessageDigest md = MessageDigest.getInstance("MD5");
|
MessageDigest md = MessageDigest.getInstance("MD5"); //$NON-NLS-1$
|
||||||
//MessageDigest md = MessageDigest.getInstance("SHA");
|
//MessageDigest md = MessageDigest.getInstance("SHA");
|
||||||
String fileName = testProject.getFile("extramail.cpp").getLocation().toOSString();
|
String fileName = testProject.getFile("extramail.cpp").getLocation().toOSString(); //$NON-NLS-1$
|
||||||
//String fileName = testProject.getFile("mail.cpp").getLocation().toOSString();
|
//String fileName = testProject.getFile("mail.cpp").getLocation().toOSString();
|
||||||
|
|
||||||
long startTime = System.currentTimeMillis();
|
long startTime = System.currentTimeMillis();
|
||||||
|
@ -596,20 +637,21 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
public void testMacros() throws Exception
|
public void testMacros() throws Exception
|
||||||
{
|
{
|
||||||
//Add a new file to the project
|
//Add a new file to the project
|
||||||
importFile("extramail.cpp","resources/indexer/extramail.cpp");
|
importFile("extramail.cpp","resources/indexer/extramail.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
IEntryResult[] macroresults = ind.queryEntries(IIndexConstants.MACRO_DECL);
|
IEntryResult[] macroresults = ind.queryEntries(IIndexConstants.MACRO_DECL);
|
||||||
assertTrue("Entry exists", macroresults != null);
|
assertTrue("Entry exists", macroresults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] macroResultModel = {"EntryResult: word=macroDecl/CASE, refs={ 1 }", "EntryResult: word=macroDecl/MAX, refs={ 1 }", "EntryResult: word=macroDecl/PRINT, refs={ 1 }"};
|
String [] macroResultModel = {"EntryResult: word=macroDecl/CASE, refs={ 1 }", "EntryResult: word=macroDecl/MAX, refs={ 1 }", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
"EntryResult: word=macroDecl/PRINT, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
if (macroresults.length != macroResultModel.length)
|
if (macroresults.length != macroResultModel.length)
|
||||||
fail("Entry Result length different from model for macros");
|
fail("Entry Result length different from model for macros"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<macroresults.length; i++)
|
for (int i=0;i<macroresults.length; i++)
|
||||||
{
|
{
|
||||||
|
@ -619,15 +661,15 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
public void testIndexShutdown() throws Exception{
|
public void testIndexShutdown() throws Exception{
|
||||||
//Add a new file to the project
|
//Add a new file to the project
|
||||||
importFile("reftest.cpp","resources/indexer/reftest.cpp");
|
importFile("reftest.cpp","resources/indexer/reftest.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
//Create an empty index file
|
//Create an empty index file
|
||||||
String badIndexFile = CCorePlugin.getDefault().getStateLocation().append("badIndex.index").toOSString();
|
String badIndexFile = CCorePlugin.getDefault().getStateLocation().append("badIndex.index").toOSString(); //$NON-NLS-1$
|
||||||
FileWriter writer = null;
|
FileWriter writer = null;
|
||||||
try {
|
try {
|
||||||
writer = new FileWriter(badIndexFile);
|
writer = new FileWriter(badIndexFile);
|
||||||
|
@ -645,8 +687,8 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
File[] indexesFiles = indexesDirectory.listFiles();
|
File[] indexesFiles = indexesDirectory.listFiles();
|
||||||
if (indexesFiles != null) {
|
if (indexesFiles != null) {
|
||||||
for (int i = 0, indexesFilesLength = indexesFiles.length; i < indexesFilesLength; i++) {
|
for (int i = 0, indexesFilesLength = indexesFiles.length; i < indexesFilesLength; i++) {
|
||||||
if(indexesFiles[i].getName().equals("badIndex.index")){
|
if(indexesFiles[i].getName().equals("badIndex.index")){ //$NON-NLS-1$
|
||||||
fail("Shutdown did not delete .index file");
|
fail("Shutdown did not delete .index file"); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -654,34 +696,33 @@ public class IndexManagerTests extends TestCase implements IIndexChangeListener
|
||||||
|
|
||||||
public void testForwardDeclarations() throws Exception{
|
public void testForwardDeclarations() throws Exception{
|
||||||
//Add a new file to the project
|
//Add a new file to the project
|
||||||
importFile("reftest.cpp","resources/indexer/reftest.cpp");
|
importFile("reftest.cpp","resources/indexer/reftest.cpp"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
//Make sure project got added to index
|
//Make sure project got added to index
|
||||||
IPath testProjectPath = testProject.getFullPath();
|
IPath testProjectPath = testProject.getFullPath();
|
||||||
IIndex ind = indexManager.getIndex(testProjectPath,true,true);
|
IIndex ind = sourceIndexer.getIndex(testProjectPath,true,true);
|
||||||
assertTrue("Index exists for project",ind != null);
|
assertTrue("Index exists for project",ind != null); //$NON-NLS-1$
|
||||||
|
|
||||||
//IEntryResult[] fwdDclResults = ind.queryEntries("typeDecl/C/ForwardA/A".toCharArray());
|
//IEntryResult[] fwdDclResults = ind.queryEntries("typeDecl/C/ForwardA/A".toCharArray());
|
||||||
IEntryResult[] fwdDclResults = ind.queryEntries("typeDecl/G/ForwardA/A".toCharArray());
|
IEntryResult[] fwdDclResults = ind.queryEntries("typeDecl/G/ForwardA/A".toCharArray()); //$NON-NLS-1$
|
||||||
assertTrue("Entry exists",fwdDclResults != null);
|
assertTrue("Entry exists",fwdDclResults != null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] fwdDclModel = {"EntryResult: word=typeDecl/G/ForwardA/A, refs={ 1 }"};
|
String [] fwdDclModel = {"EntryResult: word=typeDecl/G/ForwardA/A, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
if (fwdDclResults.length != fwdDclModel.length)
|
if (fwdDclResults.length != fwdDclModel.length)
|
||||||
fail("Entry Result length different from model for forward declarations");
|
fail("Entry Result length different from model for forward declarations"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<fwdDclResults.length; i++)
|
for (int i=0;i<fwdDclResults.length; i++)
|
||||||
{
|
{
|
||||||
assertEquals(fwdDclModel[i],fwdDclResults[i].toString());
|
assertEquals(fwdDclModel[i],fwdDclResults[i].toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
IEntryResult[] fwdDclRefResults = ind.queryEntries("typeRef/G/ForwardA/A".toCharArray());
|
IEntryResult[] fwdDclRefResults = ind.queryEntries("typeRef/G/ForwardA/A".toCharArray()); //$NON-NLS-1$
|
||||||
assertTrue("Entry exists", fwdDclRefResults!= null);
|
assertTrue("Entry exists", fwdDclRefResults!= null); //$NON-NLS-1$
|
||||||
|
|
||||||
String [] fwdDclRefModel = {"EntryResult: word=typeRef/G/ForwardA/A, refs={ 1 }"};
|
String [] fwdDclRefModel = {"EntryResult: word=typeRef/G/ForwardA/A, refs={ 1 }"}; //$NON-NLS-1$
|
||||||
|
|
||||||
if (fwdDclRefResults.length != fwdDclRefModel.length)
|
if (fwdDclRefResults.length != fwdDclRefModel.length)
|
||||||
fail("Entry Result length different from model for forward declarations refs");
|
fail("Entry Result length different from model for forward declarations refs"); //$NON-NLS-1$
|
||||||
|
|
||||||
for (int i=0;i<fwdDclRefResults.length; i++)
|
for (int i=0;i<fwdDclRefResults.length; i++)
|
||||||
{
|
{
|
|
@ -70,9 +70,9 @@ import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.parser.Parser;
|
import org.eclipse.cdt.internal.core.parser.Parser;
|
||||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IFolder;
|
import org.eclipse.core.resources.IFolder;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -105,7 +105,7 @@ public class FileBasePluginTest extends TestCase {
|
||||||
cPrj = CProjectHelper.createCCProject("ParserTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
cPrj = CProjectHelper.createCCProject("ParserTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
project = cPrj.getProject();
|
project = cPrj.getProject();
|
||||||
project.setSessionProperty(IndexManager.activationKey,new Boolean(false));
|
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(false));
|
||||||
|
|
||||||
// ugly
|
// ugly
|
||||||
if (className == null || !className.equals(aClassName)) {
|
if (className == null || !className.equals(aClassName)) {
|
||||||
|
|
|
@ -23,7 +23,7 @@ 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.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
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.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
@ -41,7 +41,8 @@ abstract public class BaseTestFramework extends TestCase {
|
||||||
static protected IProject project;
|
static protected IProject project;
|
||||||
static protected ICProject cproject;
|
static protected ICProject cproject;
|
||||||
static protected FileManager fileManager;
|
static protected FileManager fileManager;
|
||||||
|
static final String sourceIndexerID = "org.eclipse.cdt.core.originalsourceindexer"; //$NON-NLS-1$
|
||||||
|
static protected SourceIndexer sourceIndexer;
|
||||||
{
|
{
|
||||||
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
||||||
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
||||||
|
@ -53,7 +54,14 @@ abstract public class BaseTestFramework extends TestCase {
|
||||||
cproject = CProjectHelper.createCCProject("RegressionTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
cproject = CProjectHelper.createCCProject("RegressionTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
project = cproject.getProject();
|
project = cproject.getProject();
|
||||||
project.setSessionProperty(IndexManager.activationKey, Boolean.FALSE );
|
|
||||||
|
/*project.setSessionProperty(SourceIndexer.activationKey, Boolean.FALSE );
|
||||||
|
//Set the id of the source indexer extension point as a session property to allow
|
||||||
|
//index manager to instantiate it
|
||||||
|
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} catch ( CoreException e ) {
|
} catch ( CoreException e ) {
|
||||||
/*boo*/
|
/*boo*/
|
||||||
}
|
}
|
||||||
|
@ -69,7 +77,7 @@ abstract public class BaseTestFramework extends TestCase {
|
||||||
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
||||||
if( project != null )
|
if( project != null )
|
||||||
try {
|
try {
|
||||||
project.setSessionProperty( IndexManager.activationKey, Boolean.TRUE );
|
project.setSessionProperty( SourceIndexer.activationKey, Boolean.TRUE );
|
||||||
} catch ( CoreException e ) { //boo
|
} catch ( CoreException e ) { //boo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -79,7 +87,7 @@ abstract public class BaseTestFramework extends TestCase {
|
||||||
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
if( CCorePlugin.getDefault() != null && CCorePlugin.getDefault().getCoreModel() != null){
|
||||||
if( project != null )
|
if( project != null )
|
||||||
try {
|
try {
|
||||||
project.setSessionProperty( IndexManager.activationKey, Boolean.FALSE );
|
project.setSessionProperty( SourceIndexer.activationKey, Boolean.FALSE );
|
||||||
} catch ( CoreException e ) { //boo
|
} catch ( CoreException e ) { //boo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ import org.eclipse.cdt.core.search.ICSearchPattern;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.core.search.IMatch;
|
import org.eclipse.cdt.core.search.IMatch;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
|
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -42,11 +44,10 @@ import org.eclipse.core.runtime.Path;
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
*/
|
*/
|
||||||
public class SearchRegressionTests extends BaseTestFramework implements ICSearchConstants, IIndexChangeListener{
|
public class SearchRegressionTests extends BaseTestFramework implements ICSearchConstants, IIndexChangeListener{
|
||||||
static protected ICSearchScope scope;
|
static protected ICSearchScope scope;
|
||||||
static protected SearchEngine searchEngine;
|
static protected SearchEngine searchEngine;
|
||||||
static protected BasicSearchResultCollector resultCollector;
|
static protected BasicSearchResultCollector resultCollector;
|
||||||
static private boolean indexChanged = false;
|
static private boolean indexChanged = false;
|
||||||
|
|
||||||
{
|
{
|
||||||
scope = SearchEngine.createWorkspaceScope();
|
scope = SearchEngine.createWorkspaceScope();
|
||||||
resultCollector = new BasicSearchResultCollector();
|
resultCollector = new BasicSearchResultCollector();
|
||||||
|
@ -67,11 +68,18 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
try{
|
try{
|
||||||
project.setSessionProperty( IndexManager.activationKey, new Boolean( true ) );
|
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||||
|
project.setSessionProperty( SourceIndexer.activationKey, new Boolean( true ) );
|
||||||
} catch ( CoreException e ) { //boo
|
} catch ( CoreException e ) { //boo
|
||||||
}
|
}
|
||||||
|
TypeCacheManager typeCacheManager = TypeCacheManager.getInstance();
|
||||||
|
typeCacheManager.setProcessTypeCacheEvents(false);
|
||||||
|
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
indexManager.addIndexChangeListener( this );
|
indexManager.reset();
|
||||||
|
|
||||||
|
sourceIndexer = (SourceIndexer) CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(project);
|
||||||
|
sourceIndexer.addIndexChangeListener( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
|
@ -79,9 +87,9 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
indexManager.removeIndexChangeListener( this );
|
sourceIndexer.removeIndexChangeListener( this );
|
||||||
try{
|
try{
|
||||||
project.setSessionProperty( IndexManager.activationKey, new Boolean( false ) );
|
project.setSessionProperty( SourceIndexer.activationKey, new Boolean( false ) );
|
||||||
} catch ( CoreException e ) { //boo
|
} catch ( CoreException e ) { //boo
|
||||||
}
|
}
|
||||||
super.tearDown();
|
super.tearDown();
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -53,6 +54,8 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
||||||
static protected BasicSearchResultCollector resultCollector;
|
static protected BasicSearchResultCollector resultCollector;
|
||||||
static protected SearchEngine searchEngine;
|
static protected SearchEngine searchEngine;
|
||||||
static protected FileManager fileManager;
|
static protected FileManager fileManager;
|
||||||
|
static final String sourceIndexerID = "org.eclipse.cdt.core.originalsourceindexer"; //$NON-NLS-1$
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
||||||
|
@ -63,7 +66,12 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
||||||
try {
|
try {
|
||||||
//Create temp project
|
//Create temp project
|
||||||
testProject = createProject("SearchTestProject");
|
testProject = createProject("SearchTestProject");
|
||||||
testProject.setSessionProperty(IndexManager.activationKey,new Boolean(true));
|
|
||||||
|
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||||
|
|
||||||
|
//Set the id of the source indexer extension point as a session property to allow
|
||||||
|
//index manager to instantiate it
|
||||||
|
testProject.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||||
} catch (CoreException e) {}
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ import org.eclipse.cdt.core.build.managed.tests.StandardBuildTests;
|
||||||
import org.eclipse.cdt.core.cdescriptor.tests.CDescriptorTests;
|
import org.eclipse.cdt.core.cdescriptor.tests.CDescriptorTests;
|
||||||
import org.eclipse.cdt.core.filetype.tests.ResolverTests;
|
import org.eclipse.cdt.core.filetype.tests.ResolverTests;
|
||||||
import org.eclipse.cdt.core.indexer.tests.DependencyTests;
|
import org.eclipse.cdt.core.indexer.tests.DependencyTests;
|
||||||
import org.eclipse.cdt.core.indexer.tests.IndexManagerTests;
|
import org.eclipse.cdt.core.indexer.tests.SourceIndexerTests;
|
||||||
import org.eclipse.cdt.core.model.tests.AllCoreTests;
|
import org.eclipse.cdt.core.model.tests.AllCoreTests;
|
||||||
import org.eclipse.cdt.core.model.tests.BinaryTests;
|
import org.eclipse.cdt.core.model.tests.BinaryTests;
|
||||||
import org.eclipse.cdt.core.model.tests.ElementDeltaTests;
|
import org.eclipse.cdt.core.model.tests.ElementDeltaTests;
|
||||||
|
@ -65,7 +65,7 @@ public class AutomatedIntegrationSuite extends TestSuite {
|
||||||
suite.addTest(RegressionTestSuite.suite());
|
suite.addTest(RegressionTestSuite.suite());
|
||||||
//Indexer Tests need to be run after any indexer client tests
|
//Indexer Tests need to be run after any indexer client tests
|
||||||
//as the last test shuts down the indexing thread
|
//as the last test shuts down the indexing thread
|
||||||
suite.addTest(IndexManagerTests.suite());
|
suite.addTest(SourceIndexerTests.suite());
|
||||||
// Last test to trigger report generation
|
// Last test to trigger report generation
|
||||||
|
|
||||||
// Add all failed tests
|
// Add all failed tests
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
|
2005-03-13 Bogdan Gheorghe
|
||||||
|
Added support for new indexer framework
|
||||||
|
|
||||||
|
* model/org/eclipse/cdt/core/model/CoreModel.java
|
||||||
|
* model/org/eclipse/cdt/internal/core/model/CModelManager.java
|
||||||
|
* model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
|
||||||
|
* src/org/eclipse/cdt/core/CCorePlugin.java
|
||||||
|
* plugin.xml
|
||||||
|
|
||||||
2005-03-12 Alain Magloire
|
2005-03-12 Alain Magloire
|
||||||
Plan item 79518: for PathEntry variable manager.
|
Plan item 79518: for PathEntry variable manager.
|
||||||
* model/org/eclipse/cdt/internal/core/model/PathEntryManager.java
|
* model/org/eclipse/cdt/internal/core/model/PathEntryManager.java
|
||||||
|
|
|
@ -1,3 +1,15 @@
|
||||||
|
2005-03-13 Bogdan Gheorghe
|
||||||
|
Updated references to IndexManager to reflect new multi-indexer framework.
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/IndexerDependencies.java
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/IndexerJob.java
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/IndexerTypesJob.java
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/TypeCache.java
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacherJob.java
|
||||||
|
|
||||||
|
Added temporary flag to TypeCacheManager to prevent deadlocks during JUnit runs, pending
|
||||||
|
changes to Index Storage framework.
|
||||||
|
* browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacheManager.java
|
||||||
|
|
||||||
2005-01-06 Chris Wiebe
|
2005-01-06 Chris Wiebe
|
||||||
added parser timeout to TypeParser
|
added parser timeout to TypeParser
|
||||||
* browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
|
* browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
|
||||||
|
|
|
@ -13,10 +13,12 @@ package org.eclipse.cdt.internal.core.browser.cache;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
@ -25,16 +27,23 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
|
||||||
public abstract class IndexerJob implements IJob {
|
public abstract class IndexerJob implements IIndexJob {
|
||||||
|
|
||||||
private IndexManager fIndexManager;
|
private IndexManager fIndexManager;
|
||||||
private IProject fProject;
|
private IProject fProject;
|
||||||
private IIndex fProjectIndex = null;
|
private IIndex fProjectIndex = null;
|
||||||
|
private SourceIndexer fSourceIndexer = null;
|
||||||
|
|
||||||
public static final String FAMILY= "BasicTypeIndexerJob"; //$NON-NLS-1$
|
public static final String FAMILY= "BasicTypeIndexerJob"; //$NON-NLS-1$
|
||||||
|
|
||||||
public IndexerJob(IndexManager indexManager, IProject project) {
|
public IndexerJob(IndexManager indexManager, IProject project) {
|
||||||
fIndexManager = indexManager;
|
fIndexManager = indexManager;
|
||||||
fProject = project;
|
fProject = project;
|
||||||
|
//Get the indexer assigned to this project; check to see if it's
|
||||||
|
//a Source Indexder
|
||||||
|
ICDTIndexer indexer = indexManager.getIndexerForProject(project);
|
||||||
|
if (indexer instanceof SourceIndexer)
|
||||||
|
fSourceIndexer = (SourceIndexer) indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean belongsTo(String family) {
|
public boolean belongsTo(String family) {
|
||||||
|
@ -94,7 +103,11 @@ public abstract class IndexerJob implements IJob {
|
||||||
if (index == null)
|
if (index == null)
|
||||||
return COMPLETE;
|
return COMPLETE;
|
||||||
|
|
||||||
ReadWriteMonitor monitor = fIndexManager.getMonitorFor(index);
|
if (fSourceIndexer == null)
|
||||||
|
return FAILED;
|
||||||
|
|
||||||
|
ReadWriteMonitor monitor = fSourceIndexer.getMonitorFor(index);
|
||||||
|
|
||||||
if (monitor == null)
|
if (monitor == null)
|
||||||
return COMPLETE; // index got deleted since acquired
|
return COMPLETE; // index got deleted since acquired
|
||||||
|
|
||||||
|
@ -105,7 +118,7 @@ public abstract class IndexerJob implements IJob {
|
||||||
try {
|
try {
|
||||||
monitor.exitRead(); // free read lock
|
monitor.exitRead(); // free read lock
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
fIndexManager.saveIndex(index);
|
fSourceIndexer.saveIndex(index);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return FAILED;
|
return FAILED;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -135,7 +148,10 @@ public abstract class IndexerJob implements IJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
// may trigger some index recreation work
|
// may trigger some index recreation work
|
||||||
return fIndexManager.getIndex(path, true /*reuse index file*/, false /*do not create if none*/);
|
if (fSourceIndexer != null)
|
||||||
|
return fSourceIndexer.getIndex(path, true /*reuse index file*/, false /*do not create if none*/);
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ public class TypeCacheManager implements ITypeCacheChangedListener {
|
||||||
//TODO make this a WeakHashMap or LRUCache
|
//TODO make this a WeakHashMap or LRUCache
|
||||||
private Map fTypeToElementMap = new HashMap(INITIAL_TYPE_MAP_SIZE);
|
private Map fTypeToElementMap = new HashMap(INITIAL_TYPE_MAP_SIZE);
|
||||||
private Map fElementToTypeMap = new HashMap(INITIAL_TYPE_MAP_SIZE);
|
private Map fElementToTypeMap = new HashMap(INITIAL_TYPE_MAP_SIZE);
|
||||||
|
private boolean processTypeCacheEvents = true;
|
||||||
|
|
||||||
private TypeCacheManager() {
|
private TypeCacheManager() {
|
||||||
fCacheMap = new HashMap();
|
fCacheMap = new HashMap();
|
||||||
|
@ -227,6 +228,9 @@ public class TypeCacheManager implements ITypeCacheChangedListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void reconcile(boolean enableIndexing, int priority, int delay) {
|
public synchronized void reconcile(boolean enableIndexing, int priority, int delay) {
|
||||||
|
if (!(processTypeCacheEvents))
|
||||||
|
return;
|
||||||
|
|
||||||
TypeSearchScope workspaceScope = new TypeSearchScope(true);
|
TypeSearchScope workspaceScope = new TypeSearchScope(true);
|
||||||
IProject[] projects = workspaceScope.getEnclosingProjects();
|
IProject[] projects = workspaceScope.getEnclosingProjects();
|
||||||
for (int i = 0; i < projects.length; ++i) {
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
|
@ -236,6 +240,9 @@ public class TypeCacheManager implements ITypeCacheChangedListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void reconcileAndWait(boolean enableIndexing, int priority, IProgressMonitor monitor) {
|
public synchronized void reconcileAndWait(boolean enableIndexing, int priority, IProgressMonitor monitor) {
|
||||||
|
if (!(processTypeCacheEvents))
|
||||||
|
return;
|
||||||
|
|
||||||
TypeSearchScope workspaceScope = new TypeSearchScope(true);
|
TypeSearchScope workspaceScope = new TypeSearchScope(true);
|
||||||
IProject[] projects = workspaceScope.getEnclosingProjects();
|
IProject[] projects = workspaceScope.getEnclosingProjects();
|
||||||
for (int i = 0; i < projects.length; ++i) {
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
|
@ -444,4 +451,10 @@ public class TypeCacheManager implements ITypeCacheChangedListener {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
public boolean getProcessTypeCacheEvents() {
|
||||||
|
return processTypeCacheEvents;
|
||||||
|
}
|
||||||
|
public void setProcessTypeCacheEvents(boolean processTypeCacheEvents) {
|
||||||
|
this.processTypeCacheEvents = processTypeCacheEvents;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2005-03-12 Bogdan Gheorghe
|
||||||
|
- Updated references from IndexManager to SourceIndexer due to new indexer framework
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/core/sourcedependency/DependencyQueryJob.java
|
||||||
|
* src/org/eclipse/cdt/internal/core/sourcedependency/UpdateDependency.java
|
||||||
|
|
||||||
2004-02-25 Bogdan Gheorghe
|
2004-02-25 Bogdan Gheorghe
|
||||||
- Check to see if the resource has a location before using it in
|
- Check to see if the resource has a location before using it in
|
||||||
UpdateDependency
|
UpdateDependency
|
||||||
|
|
|
@ -7,6 +7,8 @@ import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexStorage;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.internal.core.index.IDocument;
|
import org.eclipse.cdt.internal.core.index.IDocument;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
@ -15,10 +17,12 @@ import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IncludeEntry;
|
import org.eclipse.cdt.internal.core.index.impl.IncludeEntry;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IndexSelector;
|
import org.eclipse.cdt.internal.core.search.IndexSelector;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
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.resources.IProject;
|
||||||
|
@ -28,20 +32,22 @@ import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
*/
|
*/
|
||||||
public class DependencyQueryJob implements IJob {
|
public class DependencyQueryJob implements IIndexJob {
|
||||||
|
|
||||||
IProject project;
|
IProject project;
|
||||||
IFile file;
|
IFile file;
|
||||||
ArrayList includeFiles;
|
ArrayList includeFiles;
|
||||||
|
SourceIndexer indexer;
|
||||||
IndexManager indexManager;
|
IndexManager indexManager;
|
||||||
protected IndexSelector indexSelector;
|
protected IndexSelector indexSelector;
|
||||||
protected long executionTime = 0;
|
protected long executionTime = 0;
|
||||||
|
|
||||||
public DependencyQueryJob(IProject project, IFile file, IndexManager inMan, List includeFiles) {
|
public DependencyQueryJob(IProject project, IFile file, SourceIndexer indexer, List includeFiles) {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.file = file;
|
this.file = file;
|
||||||
this.indexManager = inMan;
|
this.indexer = indexer;
|
||||||
this.includeFiles = (ArrayList) includeFiles;
|
this.includeFiles = (ArrayList) includeFiles;
|
||||||
|
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -69,11 +75,12 @@ public class DependencyQueryJob implements IJob {
|
||||||
executionTime = 0;
|
executionTime = 0;
|
||||||
if (this.indexSelector == null) {
|
if (this.indexSelector == null) {
|
||||||
this.indexSelector =
|
this.indexSelector =
|
||||||
new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, this.indexManager);
|
new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, indexManager);
|
||||||
}
|
}
|
||||||
IIndex[] searchIndexes = this.indexSelector.getIndexes();
|
IIndex[] searchIndexes = this.indexSelector.getIndexes();
|
||||||
try {
|
try {
|
||||||
int max = searchIndexes.length;
|
int max = searchIndexes.length;
|
||||||
|
int min=0;
|
||||||
if (progressMonitor != null) {
|
if (progressMonitor != null) {
|
||||||
progressMonitor.beginTask("", max); //$NON-NLS-1$
|
progressMonitor.beginTask("", max); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
@ -115,7 +122,15 @@ public class DependencyQueryJob implements IJob {
|
||||||
|
|
||||||
if (index == null)
|
if (index == null)
|
||||||
return COMPLETE;
|
return COMPLETE;
|
||||||
ReadWriteMonitor monitor = indexManager.getMonitorFor(index);
|
|
||||||
|
|
||||||
|
if (!(indexer instanceof SourceIndexer))
|
||||||
|
return FAILED;
|
||||||
|
|
||||||
|
|
||||||
|
SourceIndexer sourceIndexer = (SourceIndexer)indexer;
|
||||||
|
|
||||||
|
ReadWriteMonitor monitor = sourceIndexer.getMonitorFor(index);
|
||||||
if (monitor == null)
|
if (monitor == null)
|
||||||
return COMPLETE; // index got deleted since acquired
|
return COMPLETE; // index got deleted since acquired
|
||||||
try {
|
try {
|
||||||
|
@ -126,7 +141,7 @@ public class DependencyQueryJob implements IJob {
|
||||||
try {
|
try {
|
||||||
monitor.exitRead(); // free read lock
|
monitor.exitRead(); // free read lock
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
this.indexManager.saveIndex(index);
|
sourceIndexer.saveIndex(index);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return FAILED;
|
return FAILED;
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -219,7 +234,7 @@ public class DependencyQueryJob implements IJob {
|
||||||
*/
|
*/
|
||||||
public boolean isReadyToRun() {
|
public boolean isReadyToRun() {
|
||||||
if (this.indexSelector == null) { // only check once. As long as this job is used, it will keep the same index picture
|
if (this.indexSelector == null) { // only check once. As long as this job is used, it will keep the same index picture
|
||||||
this.indexSelector = new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, this.indexManager);
|
this.indexSelector = new IndexSelector(SearchEngine.createWorkspaceScope(), null, false, indexManager);
|
||||||
this.indexSelector.getIndexes(); // will only cache answer if all indexes were available originally
|
this.indexSelector.getIndexes(); // will only cache answer if all indexes were available originally
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -20,11 +20,12 @@ import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.PathCollector;
|
import org.eclipse.cdt.internal.core.search.PathCollector;
|
||||||
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
|
@ -38,15 +39,17 @@ import org.eclipse.core.runtime.Path;
|
||||||
* To change the template for this generated type comment go to
|
* To change the template for this generated type comment go to
|
||||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
* Window>Preferences>Java>Code Generation>Code and Comments
|
||||||
*/
|
*/
|
||||||
public class UpdateDependency implements IJob {
|
public class UpdateDependency implements IIndexJob {
|
||||||
PathCollector pathCollector;
|
PathCollector pathCollector;
|
||||||
IResource resource;
|
IResource resource;
|
||||||
|
SourceIndexer indexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param resource
|
* @param resource
|
||||||
*/
|
*/
|
||||||
public UpdateDependency(IResource resource) {
|
public UpdateDependency(IResource resource, SourceIndexer indexer) {
|
||||||
this.resource = resource;
|
this.resource = resource;
|
||||||
|
this.indexer = indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -99,7 +102,7 @@ public class UpdateDependency implements IJob {
|
||||||
if (fileToReindex!=null && fileToReindex.exists() ) {
|
if (fileToReindex!=null && fileToReindex.exists() ) {
|
||||||
// if (VERBOSE)
|
// if (VERBOSE)
|
||||||
// System.out.println("Going to reindex " + fileToReindex.getName());
|
// System.out.println("Going to reindex " + fileToReindex.getName());
|
||||||
indexManager.addSource(fileToReindex,fileToReindex.getProject().getProject().getFullPath());
|
indexer.addSource(fileToReindex,fileToReindex.getProject().getProject().getFullPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -1,3 +1,33 @@
|
||||||
|
2005-03-12 Bogdan Gheorghe
|
||||||
|
Restructured indexer framework to allow for multiple indexers in a workspace.
|
||||||
|
|
||||||
|
* index/org/eclipse/cdt/core/index/ICDTIndexer.java
|
||||||
|
* index/org/eclipse/cdt/core/index/IIndexStorage.java
|
||||||
|
* index/org/eclipse/cdt/core/index/Indexer.java
|
||||||
|
* index/org/eclipse/cdt/core/index/IndexManager.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/IIndexer.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/impl/Index.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/impl/MergeFactory.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/search/indexing/IndexerModelListener.java
|
||||||
|
|
||||||
|
Moved following classes to new source indexer folder:
|
||||||
|
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/AbstractIndexer.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/AddCompilationUnit.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/AddFileToIndex.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/AddFolderToIndex.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/CIndexStorage.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/CleanEncounteredHeaders.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexAllProject.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexRequest.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/RemoveFolderFromIndex.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/RemoveFromIndex.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SaveIndex.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRequestor.java
|
||||||
|
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java
|
||||||
|
|
||||||
|
|
||||||
2004-11-17 Bogdan Gheorghe
|
2004-11-17 Bogdan Gheorghe
|
||||||
Fix for Bug 78678: Indexer stops reindexing file after repeated saves
|
Fix for Bug 78678: Indexer stops reindexing file after repeated saves
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,91 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation 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 - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* An <code>ICDTIndexer</code> 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.
|
||||||
|
*
|
||||||
|
* Warning: This interface is still under development - API may change.
|
||||||
|
* @since 3.0
|
||||||
|
*/
|
||||||
|
public interface ICDTIndexer extends IIndexer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indexer Support bit flags
|
||||||
|
*/
|
||||||
|
static public final int _DECLARATIONS = 1;
|
||||||
|
static public final int _DEFINITIONS = 2;
|
||||||
|
static public final int _REFERENCES = 4;
|
||||||
|
static public final int _LINENUMBERS = 8;
|
||||||
|
static public final int _OFFSETINFO = 16;
|
||||||
|
static public final int _CPP = 32;
|
||||||
|
static public final int _C = 64;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indexer Policy bit flags
|
||||||
|
*/
|
||||||
|
static public final int _NORMAL= 1;
|
||||||
|
static public final int _POSTBUILD = 2;
|
||||||
|
static public final int _MANUAL = 4;
|
||||||
|
static public final int _STATIC = 8;
|
||||||
|
static public final int _DELAYUNTILBUILDINFO = 16;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns what features this <code>ICDTIndexer</code> provides.
|
||||||
|
*/
|
||||||
|
public int getIndexerFeatures();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code>IndexManager</code> calls addRequest when it receives an event from the <code>DeltaProcessor</code>.
|
||||||
|
* The <code>IResourcDelta</code> and (TODO: <code>IResourceChangeEvent</code> are provided for indexers
|
||||||
|
* to decide how to schedule this event).
|
||||||
|
*/
|
||||||
|
public void addRequest(ICElement cElement, IResourceDelta delta/*, IResourceChangeEvent event*/);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code>IndexManager</code> calls addRequest when it receives an event from the <code>DeltaProcessor</code>.
|
||||||
|
* The <code>IResourcDelta</code> and (TODO:<code>IResourceChangeEvent</code> are provided for the indexder
|
||||||
|
* to decide how to schedule this event).
|
||||||
|
*/
|
||||||
|
public void removeRequest(ICElement cElement, IResourceDelta delta/*, IResourceChangeEvent event*/);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code>IndexManager</code> will send out a jobFinishedEvent to the indexer that
|
||||||
|
* had scheduled the previous runnign job to give that indexer a chance to update its
|
||||||
|
* state info.
|
||||||
|
*/
|
||||||
|
public void indexJobFinishedNotification(IIndexJob job);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The <code>IndexManager</code> will notify all indexers of impending shutdown events
|
||||||
|
* in order to allow indexers to perform whatever clean up they need to do.
|
||||||
|
*/
|
||||||
|
public void shutdown();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by the index manager when there are no index jobs queued up - can be
|
||||||
|
* used by the indexer to save indexes etc.
|
||||||
|
* @param idlingTime
|
||||||
|
*/
|
||||||
|
public void notifyIdle(long idlingTime);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation 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 - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.core.index;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*
|
||||||
|
* IIndexStorage must be implemented by all indexStorage providers
|
||||||
|
*/
|
||||||
|
public interface IIndexStorage {
|
||||||
|
|
||||||
|
//Indexer that use this indexer storage
|
||||||
|
public ICDTIndexer[] getIndexers();
|
||||||
|
|
||||||
|
//Get path variables that are used
|
||||||
|
public String[] getPathVariables();
|
||||||
|
public void resolvePathVariables();
|
||||||
|
|
||||||
|
//Merge functionality for the storage
|
||||||
|
public void merge();
|
||||||
|
public boolean canMergeWith(IIndexStorage storage);
|
||||||
|
}
|
|
@ -19,7 +19,6 @@ package org.eclipse.cdt.core.index;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
@ -63,7 +62,8 @@ public class Indexer {
|
||||||
public static boolean indexEnabledOnProject(IProject project){
|
public static boolean indexEnabledOnProject(IProject project){
|
||||||
boolean allEnabled = true;
|
boolean allEnabled = true;
|
||||||
|
|
||||||
try {
|
//TODO: BOG make this generic
|
||||||
|
/*try {
|
||||||
Boolean indexValue = (Boolean) project.getSessionProperty(IndexManager.activationKey);
|
Boolean indexValue = (Boolean) project.getSessionProperty(IndexManager.activationKey);
|
||||||
if (indexValue != null){
|
if (indexValue != null){
|
||||||
if(!indexValue.booleanValue()){
|
if(!indexValue.booleanValue()){
|
||||||
|
@ -76,7 +76,7 @@ public class Indexer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (CoreException e) {}
|
} catch (CoreException e) {}*/
|
||||||
|
|
||||||
return allEnabled;
|
return allEnabled;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,11 +26,7 @@ public interface IIndexer {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void index(IDocument document, IIndexerOutput output) throws java.io.IOException;
|
void index(IDocument document, IIndexerOutput output) throws java.io.IOException;
|
||||||
/**
|
|
||||||
* Sets the document types the <code>IIndexer</code> handles.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void setFileTypes(String[] fileTypes);
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the <code>IIndexer</code> can index the given IFile or not.
|
* Returns whether the <code>IIndexer</code> can index the given IFile or not.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,12 +18,14 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
import org.eclipse.cdt.core.index.IIndexDelta;
|
import org.eclipse.cdt.core.index.IIndexDelta;
|
||||||
import org.eclipse.cdt.internal.core.index.IDocument;
|
import org.eclipse.cdt.internal.core.index.IDocument;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
@ -67,31 +69,20 @@ public class Index implements IIndex {
|
||||||
protected static final int MERGED= 1;
|
protected static final int MERGED= 1;
|
||||||
private File indexFile;
|
private File indexFile;
|
||||||
|
|
||||||
|
private ICDTIndexer indexer = null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* String representation of this index.
|
* String representation of this index.
|
||||||
*/
|
*/
|
||||||
public String toString;
|
public String toString;
|
||||||
|
|
||||||
public Index(File indexDirectory, boolean reuseExistingFile) throws IOException {
|
public Index(String indexName, String toString, boolean reuseExistingFile, ICDTIndexer indexer) throws IOException {
|
||||||
this(indexDirectory,".index", reuseExistingFile); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
public Index(File indexDirectory, String indexName, boolean reuseExistingFile) throws IOException {
|
|
||||||
super();
|
|
||||||
state= MERGED;
|
|
||||||
indexFile= new File(indexDirectory, indexName);
|
|
||||||
initialize(reuseExistingFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Index(String indexName, boolean reuseExistingFile) throws IOException {
|
|
||||||
this(indexName, null, reuseExistingFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Index(String indexName, String toString, boolean reuseExistingFile) throws IOException {
|
|
||||||
super();
|
super();
|
||||||
state= MERGED;
|
state= MERGED;
|
||||||
indexFile= new File(indexName);
|
indexFile= new File(indexName);
|
||||||
this.toString = toString;
|
this.toString = toString;
|
||||||
|
this.indexer = indexer;
|
||||||
initialize(reuseExistingFile);
|
initialize(reuseExistingFile);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -278,8 +269,10 @@ public class Index implements IIndex {
|
||||||
CCorePlugin.getDefault().cdtLog.flushLog();
|
CCorePlugin.getDefault().cdtLog.flushLog();
|
||||||
|
|
||||||
//Send out notification to listeners;
|
//Send out notification to listeners;
|
||||||
IndexDelta indexDelta = new IndexDelta(null,null,IIndexDelta.MERGE_DELTA);
|
if (indexer instanceof SourceIndexer){
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().notifyListeners(indexDelta);
|
IndexDelta indexDelta = new IndexDelta(null,null,IIndexDelta.MERGE_DELTA);
|
||||||
|
((SourceIndexer) indexer).notifyListeners(indexDelta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
|
@ -444,5 +437,10 @@ public class Index implements IIndex {
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public org.eclipse.cdt.core.index.ICDTIndexer getIndexer(){
|
||||||
|
return (org.eclipse.cdt.core.index.ICDTIndexer) indexer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
@ -38,9 +38,10 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IDocument;
|
import org.eclipse.cdt.internal.core.index.IDocument;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IIndexConstants;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
|
||||||
public abstract class AbstractIndexer implements IIndexer, IIndexConstants, ICSearchConstants {
|
public abstract class AbstractIndexer implements IIndexer,IIndexConstants, ICSearchConstants {
|
||||||
|
|
||||||
IIndexerOutput output;
|
IIndexerOutput output;
|
||||||
final static int CLASS = 1;
|
final static int CLASS = 1;
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -21,12 +21,13 @@ 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, boolean checkEncounteredHeaders) {
|
public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, SourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||||
super(resource, indexedContainer, manager, checkEncounteredHeaders);
|
super(resource, indexedContainer, indexer, checkEncounteredHeaders);
|
||||||
}
|
}
|
||||||
protected boolean indexDocument(IIndex index) throws IOException {
|
protected boolean indexDocument(IIndex index) throws IOException {
|
||||||
if (!initializeContents()) return false;
|
if (!initializeContents()) return false;
|
||||||
index.add(new IFileDocument(resource, this.contents), new SourceIndexer(resource, manager.getTimeout()));
|
index.add(new IFileDocument(resource, this.contents), new SourceIndexerRunner(resource, indexer));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
public boolean initializeContents() {
|
public boolean initializeContents() {
|
|
@ -8,7 +8,7 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -16,9 +16,12 @@ 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.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.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
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.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
|
@ -26,14 +29,14 @@ public abstract class AddFileToIndex extends IndexRequest {
|
||||||
IFile resource;
|
IFile resource;
|
||||||
private boolean checkEncounteredHeaders;
|
private boolean checkEncounteredHeaders;
|
||||||
|
|
||||||
public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager, boolean checkEncounteredHeaders) {
|
public AddFileToIndex(IFile resource, IPath indexPath, SourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||||
super(indexPath, manager);
|
super(indexPath, indexer);
|
||||||
this.resource = resource;
|
this.resource = resource;
|
||||||
this.checkEncounteredHeaders = checkEncounteredHeaders;
|
this.checkEncounteredHeaders = checkEncounteredHeaders;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddFileToIndex(IFile resource, IPath indexPath, IndexManager manager) {
|
public AddFileToIndex(IFile resource, IPath indexPath, SourceIndexer indexer) {
|
||||||
this(resource,indexPath,manager,false);
|
this(resource,indexPath,indexer,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean execute(IProgressMonitor progressMonitor) {
|
public boolean execute(IProgressMonitor progressMonitor) {
|
||||||
|
@ -46,13 +49,13 @@ public abstract class AddFileToIndex extends IndexRequest {
|
||||||
|
|
||||||
/* See if this file has been encountered before */
|
/* See if this file has been encountered before */
|
||||||
if (type.isHeader() &&
|
if (type.isHeader() &&
|
||||||
manager.haveEncounteredHeader(resourceProject.getFullPath(),resource.getLocation()))
|
indexer.haveEncounteredHeader(resourceProject.getFullPath(),resource.getLocation()))
|
||||||
return true;
|
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 = indexer.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
try {
|
try {
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
|
@ -75,4 +78,12 @@ public abstract class AddFileToIndex extends IndexRequest {
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "indexing " + this.resource.getFullPath(); //$NON-NLS-1$
|
return "indexing " + this.resource.getFullPath(); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The resource being indexed
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public IResource getResource(){
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@ -18,6 +18,8 @@ import org.eclipse.cdt.core.filetype.ICFileType;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
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;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
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.resources.IProject;
|
||||||
|
@ -28,7 +30,7 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
class AddFolderToIndex extends IndexRequest {
|
public class AddFolderToIndex extends IndexRequest {
|
||||||
IPath folderPath;
|
IPath folderPath;
|
||||||
IProject project;
|
IProject project;
|
||||||
char[][] exclusionPattern;
|
char[][] exclusionPattern;
|
||||||
|
@ -36,8 +38,8 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
ArrayList headerFilesToIndex;
|
ArrayList headerFilesToIndex;
|
||||||
boolean cleanEncouteredHeaders;
|
boolean cleanEncouteredHeaders;
|
||||||
|
|
||||||
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager) {
|
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, SourceIndexer indexer) {
|
||||||
super(project.getFullPath(), manager);
|
super(project.getFullPath(), indexer);
|
||||||
this.folderPath = folderPath;
|
this.folderPath = folderPath;
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.exclusionPattern = exclusionPattern;
|
this.exclusionPattern = exclusionPattern;
|
||||||
|
@ -46,8 +48,8 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
this.cleanEncouteredHeaders = false;
|
this.cleanEncouteredHeaders = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, IndexManager manager, boolean cleanEncounteredHeaders) {
|
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, SourceIndexer indexer, boolean cleanEncounteredHeaders) {
|
||||||
super(project.getFullPath(), manager);
|
super(project.getFullPath(), indexer);
|
||||||
this.folderPath = folderPath;
|
this.folderPath = folderPath;
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.exclusionPattern = exclusionPattern;
|
this.exclusionPattern = exclusionPattern;
|
||||||
|
@ -58,21 +60,22 @@ class AddFolderToIndex extends IndexRequest {
|
||||||
|
|
||||||
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 (!project.isAccessible()) return true; // nothing to do
|
if (!project.isAccessible()) return true; // nothing to do
|
||||||
IResource folder = this.project.getParent().findMember(this.folderPath);
|
IResource folder = this.project.getParent().findMember(this.folderPath);
|
||||||
if (folder == null || folder.getType() == IResource.FILE) return true; // nothing to do, source folder was removed
|
if (folder == null || folder.getType() == IResource.FILE) return true; // nothing to do, source folder was removed
|
||||||
|
|
||||||
/* 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 = indexer.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
|
|
||||||
try {
|
try {
|
||||||
monitor.enterRead(); // ask permission to read
|
monitor.enterRead(); // ask permission to read
|
||||||
|
|
||||||
final IPath container = this.indexPath;
|
final IPath container = this.indexPath;
|
||||||
final IndexManager indexManager = this.manager;
|
//final IndexManager indexManager = this.manager;
|
||||||
final char[][] pattern = exclusionPattern;
|
final char[][] pattern = exclusionPattern;
|
||||||
folder.accept(
|
folder.accept(
|
||||||
new IResourceProxyVisitor() {
|
new IResourceProxyVisitor() {
|
||||||
|
@ -114,14 +117,14 @@ 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, false);
|
this.indexer.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, true);
|
this.indexer.addSource((IFile)headerFilesToIndex.get(i), this.indexPath, true);
|
||||||
|
|
||||||
if (cleanEncouteredHeaders){
|
if (cleanEncouteredHeaders){
|
||||||
CleanEncounteredHeaders cleanHeaders = new CleanEncounteredHeaders(this.manager);
|
CleanEncounteredHeaders cleanHeaders = new CleanEncounteredHeaders(this.indexer);
|
||||||
this.manager.request(cleanHeaders);
|
this.indexer.request(cleanHeaders);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,544 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation 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 - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.zip.CRC32;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexStorage;
|
||||||
|
import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.index.impl.Index;
|
||||||
|
import org.eclipse.cdt.internal.core.search.CWorkspaceScope;
|
||||||
|
import org.eclipse.cdt.internal.core.search.IndexSelector;
|
||||||
|
import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IWorkspace;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*/
|
||||||
|
public class CIndexStorage implements IIndexStorage {
|
||||||
|
|
||||||
|
/* number of file contents in memory */
|
||||||
|
public static int MAX_FILES_IN_MEMORY = 0;
|
||||||
|
|
||||||
|
public IWorkspace workspace;
|
||||||
|
public SimpleLookupTable indexNames = new SimpleLookupTable();
|
||||||
|
private Map indexes = new HashMap(5);
|
||||||
|
|
||||||
|
/* read write monitors */
|
||||||
|
private Map monitors = new HashMap(5);
|
||||||
|
|
||||||
|
/* need to save ? */
|
||||||
|
private boolean needToSave = false;
|
||||||
|
private static final CRC32 checksumCalculator = new CRC32();
|
||||||
|
private IPath cCorePluginLocation = null;
|
||||||
|
|
||||||
|
/* can only replace a current state if its less than the new one */
|
||||||
|
private SimpleLookupTable indexStates = null;
|
||||||
|
private File savedIndexNamesFile =
|
||||||
|
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 UPDATING_STATE = new Integer(1);
|
||||||
|
public static Integer UNKNOWN_STATE = new Integer(2);
|
||||||
|
public static Integer REBUILDING_STATE = new Integer(3);
|
||||||
|
|
||||||
|
public static boolean VERBOSE = false;
|
||||||
|
|
||||||
|
private SourceIndexer indexer = null;
|
||||||
|
private IndexManager indexManager = null;
|
||||||
|
|
||||||
|
public ReadWriteMonitor indexAccessMonitor = null;
|
||||||
|
|
||||||
|
public CIndexStorage(ICDTIndexer indexer){
|
||||||
|
if (indexer instanceof SourceIndexer)
|
||||||
|
this.indexer = (SourceIndexer) indexer;
|
||||||
|
|
||||||
|
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public synchronized void aboutToUpdateIndex(IPath path, Integer newIndexState) {
|
||||||
|
// newIndexState is either UPDATING_STATE or REBUILDING_STATE
|
||||||
|
// must tag the index as inconsistent, in case we exit before the update job is started
|
||||||
|
String indexName = computeIndexName(path);
|
||||||
|
Object state = getIndexStates().get(indexName);
|
||||||
|
Integer currentIndexState = state == null ? UNKNOWN_STATE : (Integer) state;
|
||||||
|
if (currentIndexState.equals(REBUILDING_STATE)) return; // already rebuilding the index
|
||||||
|
|
||||||
|
int compare = newIndexState.compareTo(currentIndexState);
|
||||||
|
if (compare > 0) {
|
||||||
|
// so UPDATING_STATE replaces SAVED_STATE and REBUILDING_STATE replaces everything
|
||||||
|
updateIndexState(indexName, newIndexState);
|
||||||
|
} else if (compare < 0 && this.indexes.get(path) == null) {
|
||||||
|
// if already cached index then there is nothing more to do
|
||||||
|
rebuildIndex(indexName, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String computeIndexName(IPath path) {
|
||||||
|
String name = (String) indexNames.get(path);
|
||||||
|
if (name == null) {
|
||||||
|
String pathString = path.toOSString();
|
||||||
|
checksumCalculator.reset();
|
||||||
|
checksumCalculator.update(pathString.getBytes());
|
||||||
|
String fileName = Long.toString(checksumCalculator.getValue()) + ".index"; //$NON-NLS-1$
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("-> index name for " + pathString + " is " + fileName); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
name = getCCorePluginWorkingLocation().append(fileName).toOSString();
|
||||||
|
indexNames.put(path, name);
|
||||||
|
}
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 IIndex getIndex(IPath path, boolean reuseExistingFile, boolean createIfMissing) {
|
||||||
|
// Path is already canonical per construction
|
||||||
|
IIndex index = (IIndex) indexes.get(path);
|
||||||
|
if (index == null) {
|
||||||
|
String indexName = computeIndexName(path);
|
||||||
|
Object state = getIndexStates().get(indexName);
|
||||||
|
Integer currentIndexState = state == null ? UNKNOWN_STATE : (Integer) state;
|
||||||
|
if (currentIndexState == UNKNOWN_STATE) {
|
||||||
|
// should only be reachable for query jobs
|
||||||
|
// IF you put an index in the cache, then AddJarFileToIndex fails because it thinks there is nothing to do
|
||||||
|
rebuildIndex(indexName, path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// index isn't cached, consider reusing an existing index file
|
||||||
|
if (reuseExistingFile) {
|
||||||
|
File indexFile = new File(indexName);
|
||||||
|
if (indexFile.exists()) { // check before creating index so as to avoid creating a new empty index if file is missing
|
||||||
|
try {
|
||||||
|
index = new Index(indexName, "Index for " + path.toOSString(), true /*reuse index file*/, indexer); //$NON-NLS-1$
|
||||||
|
indexes.put(path, index);
|
||||||
|
monitors.put(index, new ReadWriteMonitor());
|
||||||
|
return index;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// failed to read the existing file or its no longer compatible
|
||||||
|
if (currentIndexState != REBUILDING_STATE) { // rebuild index if existing file is corrupt, unless the index is already being rebuilt
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("-> cannot reuse existing index: "+indexName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
rebuildIndex(indexName, path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
index = null; // will fall thru to createIfMissing & create a empty index for the rebuild all job to populate
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (currentIndexState == SAVED_STATE) { // rebuild index if existing file is missing
|
||||||
|
rebuildIndex(indexName, path);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// index wasn't found on disk, consider creating an empty new one
|
||||||
|
if (createIfMissing) {
|
||||||
|
try {
|
||||||
|
if (VERBOSE)
|
||||||
|
JobManager.verbose("-> create empty index: "+indexName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
index = new Index(indexName, "Index for " + path.toOSString(), false /*do not reuse index file*/, indexer); //$NON-NLS-1$
|
||||||
|
indexes.put(path, index);
|
||||||
|
monitors.put(index, new ReadWriteMonitor());
|
||||||
|
return index;
|
||||||
|
} catch (IOException e) {
|
||||||
|
if (VERBOSE)
|
||||||
|
JobManager.verbose("-> unable to create empty index: "+indexName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
// The file could not be created. Possible reason: the project has been deleted.
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//System.out.println(" index name: " + path.toOSString() + " <----> " + index.getIndexFile().getName());
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SimpleLookupTable getIndexStates() {
|
||||||
|
if (indexStates != null) return indexStates;
|
||||||
|
|
||||||
|
this.indexStates = new SimpleLookupTable();
|
||||||
|
char[] savedIndexNames = readIndexState();
|
||||||
|
if (savedIndexNames.length > 0) {
|
||||||
|
char[][] names = CharOperation.splitOn('\n', savedIndexNames);
|
||||||
|
for (int i = 0, l = names.length; i < l; i++) {
|
||||||
|
char[] name = names[i];
|
||||||
|
if (name.length > 0)
|
||||||
|
this.indexStates.put(new String(name), SAVED_STATE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return this.indexStates;
|
||||||
|
}
|
||||||
|
|
||||||
|
public 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() {
|
||||||
|
if (this.cCorePluginLocation != null) return this.cCorePluginLocation;
|
||||||
|
|
||||||
|
return this.cCorePluginLocation = CCorePlugin.getDefault().getStateLocation();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Index access is controlled through a read-write monitor so as
|
||||||
|
* to ensure there is no concurrent read and write operations
|
||||||
|
* (only concurrent reading is allowed).
|
||||||
|
*/
|
||||||
|
public ReadWriteMonitor getMonitorFor(IIndex index){
|
||||||
|
return (ReadWriteMonitor) monitors.get(index);
|
||||||
|
}
|
||||||
|
private void rebuildIndex(String indexName, IPath path) {
|
||||||
|
Object target = org.eclipse.cdt.internal.core.Util.getTarget(ResourcesPlugin.getWorkspace().getRoot(), path, true);
|
||||||
|
if (target == null) return;
|
||||||
|
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("-> request to rebuild index: "+indexName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
|
updateIndexState(indexName, REBUILDING_STATE);
|
||||||
|
IndexRequest request = null;
|
||||||
|
if (target instanceof IProject) {
|
||||||
|
IProject p = (IProject) target;
|
||||||
|
if( p.exists() && indexer.isIndexEnabled( p ) )
|
||||||
|
request = new IndexAllProject(p, indexer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (request != null)
|
||||||
|
indexManager.request(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Recreates the index for a given path, keeping the same read-write monitor.
|
||||||
|
* Returns the new empty index or null if it didn't exist before.
|
||||||
|
* Warning: Does not check whether index is consistent (not being used)
|
||||||
|
*/
|
||||||
|
public synchronized IIndex recreateIndex(IPath path) {
|
||||||
|
// only called to over write an existing cached index...
|
||||||
|
try {
|
||||||
|
IIndex index = (IIndex) this.indexes.get(path);
|
||||||
|
ReadWriteMonitor monitor = (ReadWriteMonitor) this.monitors.remove(index);
|
||||||
|
|
||||||
|
// Path is already canonical
|
||||||
|
String indexPath = computeIndexName(path);
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("-> recreating index: "+indexPath+" for path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
index = new Index(indexPath, "Index for " + path.toOSString(), false /*reuse index file*/,indexer); //$NON-NLS-1$
|
||||||
|
indexes.put(path, index);
|
||||||
|
monitors.put(index, monitor);
|
||||||
|
return index;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// The file could not be created. Possible reason: the project has been deleted.
|
||||||
|
if (IndexManager.VERBOSE) {
|
||||||
|
JobManager.verbose("-> failed to recreate index for path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the index for a given path.
|
||||||
|
* This is a no-op if the index did not exist.
|
||||||
|
*/
|
||||||
|
public synchronized void removeIndex(IPath path) {
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("removing index " + path); //$NON-NLS-1$
|
||||||
|
String indexName = computeIndexName(path);
|
||||||
|
File indexFile = new File(indexName);
|
||||||
|
if (indexFile.exists())
|
||||||
|
indexFile.delete();
|
||||||
|
Object o = this.indexes.get(path);
|
||||||
|
if (o instanceof IIndex)
|
||||||
|
this.monitors.remove(o);
|
||||||
|
this.indexes.remove(path);
|
||||||
|
updateIndexState(indexName, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all indexes whose paths start with (or are equal to) the given path.
|
||||||
|
*/
|
||||||
|
public synchronized void removeIndexFamily(IPath path) {
|
||||||
|
// only finds cached index files... shutdown removes all non-cached index files
|
||||||
|
ArrayList toRemove = null;
|
||||||
|
Iterator iterator = this.indexes.keySet().iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
IPath indexPath = (IPath) iterator.next();
|
||||||
|
if (path.isPrefixOf(indexPath)) {
|
||||||
|
if (toRemove == null)
|
||||||
|
toRemove = new ArrayList();
|
||||||
|
toRemove.add(indexPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (toRemove != null)
|
||||||
|
for (int i = 0, length = toRemove.size(); i < length; i++)
|
||||||
|
this.removeIndex((IPath) toRemove.get(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveIndex(IIndex index) throws IOException {
|
||||||
|
// must have permission to write from the write monitor
|
||||||
|
if (index.hasChanged()) {
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("-> saving index " + index.getIndexFile()); //$NON-NLS-1$
|
||||||
|
index.save();
|
||||||
|
}
|
||||||
|
String indexName = index.getIndexFile().getPath();
|
||||||
|
if (indexManager.getJobEnd() > indexManager.getJobStart()) {
|
||||||
|
Object indexPath = indexNames.keyForValue(indexName);
|
||||||
|
if (indexPath != null) {
|
||||||
|
for (int i = indexManager.getJobEnd(); i > indexManager.getJobStart(); i--) { // skip the current job
|
||||||
|
IIndexJob job = indexManager.getAwaitingJobAt(i);
|
||||||
|
if (job instanceof IndexRequest)
|
||||||
|
if (((IndexRequest) job).indexPath.equals(indexPath)) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateIndexState(indexName, SAVED_STATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Commit all index memory changes to disk
|
||||||
|
*/
|
||||||
|
public void saveIndexes() {
|
||||||
|
// only save cached indexes... the rest were not modified
|
||||||
|
ArrayList toSave = new ArrayList();
|
||||||
|
synchronized(this) {
|
||||||
|
for (Iterator iter = this.indexes.values().iterator(); iter.hasNext();) {
|
||||||
|
Object o = iter.next();
|
||||||
|
if (o instanceof IIndex)
|
||||||
|
toSave.add(o);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0, length = toSave.size(); i < length; i++) {
|
||||||
|
IIndex index = (IIndex) toSave.get(i);
|
||||||
|
ReadWriteMonitor monitor = getMonitorFor(index);
|
||||||
|
if (monitor == null) continue; // index got deleted since acquired
|
||||||
|
try {
|
||||||
|
monitor.enterWrite();
|
||||||
|
try {
|
||||||
|
saveIndex(index);
|
||||||
|
} catch(IOException e){
|
||||||
|
if (IndexManager.VERBOSE) {
|
||||||
|
JobManager.verbose("-> got the following exception while saving:"); //$NON-NLS-1$
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
//Util.log(e);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
monitor.exitWrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
needToSave = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void shutdown() {
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("Shutdown"); //$NON-NLS-1$
|
||||||
|
//Get index entries for all projects in the workspace, store their absolute paths
|
||||||
|
IndexSelector indexSelector = new IndexSelector(new CWorkspaceScope(), null, false, indexManager);
|
||||||
|
IIndex[] selectedIndexes = indexSelector.getIndexes();
|
||||||
|
SimpleLookupTable knownPaths = new SimpleLookupTable();
|
||||||
|
for (int i = 0, max = selectedIndexes.length; i < max; i++) {
|
||||||
|
String path = selectedIndexes[i].getIndexFile().getAbsolutePath();
|
||||||
|
knownPaths.put(path, path);
|
||||||
|
}
|
||||||
|
//Any index entries that are in the index state must have a corresponding
|
||||||
|
//path entry - if not they are removed from the saved indexes file
|
||||||
|
if (indexStates != null) {
|
||||||
|
Object[] indexNames = indexStates.keyTable;
|
||||||
|
for (int i = 0, l = indexNames.length; i < l; i++) {
|
||||||
|
String key = (String) indexNames[i];
|
||||||
|
if (key != null && !knownPaths.containsKey(key)) //here is an index that is in t
|
||||||
|
updateIndexState(key, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Clean up the .metadata folder - if there are any files in the directory that
|
||||||
|
//are not associated to an index we delete them
|
||||||
|
File indexesDirectory = new File(getCCorePluginWorkingLocation().toOSString());
|
||||||
|
if (indexesDirectory.isDirectory()) {
|
||||||
|
File[] indexesFiles = indexesDirectory.listFiles();
|
||||||
|
if (indexesFiles != null) {
|
||||||
|
for (int i = 0, indexesFilesLength = indexesFiles.length; i < indexesFilesLength; i++) {
|
||||||
|
String fileName = indexesFiles[i].getAbsolutePath();
|
||||||
|
if (!knownPaths.containsKey(fileName) && fileName.toLowerCase().endsWith(".index")) { //$NON-NLS-1$
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("Deleting index file " + indexesFiles[i]); //$NON-NLS-1$
|
||||||
|
indexesFiles[i].delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
StringBuffer buffer = new StringBuffer(10);
|
||||||
|
buffer.append(super.toString());
|
||||||
|
buffer.append("In-memory indexes:\n"); //$NON-NLS-1$
|
||||||
|
int count = 0;
|
||||||
|
for (Iterator iter = this.indexes.values().iterator(); iter.hasNext();) {
|
||||||
|
buffer.append(++count).append(" - ").append(iter.next().toString()).append('\n'); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
return buffer.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private char[] readIndexState() {
|
||||||
|
try {
|
||||||
|
return org.eclipse.cdt.internal.core.Util.getFileCharContent(savedIndexNamesFile, null);
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("Failed to read saved index file names"); //$NON-NLS-1$
|
||||||
|
return new char[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateIndexState(String indexName, Integer indexState) {
|
||||||
|
getIndexStates(); // ensure the states are initialized
|
||||||
|
if (indexState != null) {
|
||||||
|
if (indexState.equals(indexStates.get(indexName))) return; // not changed
|
||||||
|
indexStates.put(indexName, indexState);
|
||||||
|
} else {
|
||||||
|
if (!indexStates.containsKey(indexName)) return; // did not exist anyway
|
||||||
|
indexStates.removeKey(indexName);
|
||||||
|
}
|
||||||
|
|
||||||
|
BufferedWriter writer = null;
|
||||||
|
try {
|
||||||
|
writer = new BufferedWriter(new FileWriter(savedIndexNamesFile));
|
||||||
|
Object[] indexNames = indexStates.keyTable;
|
||||||
|
Object[] states = indexStates.valueTable;
|
||||||
|
for (int i = 0, l = states.length; i < l; i++) {
|
||||||
|
if (states[i] == SAVED_STATE) {
|
||||||
|
writer.write((String) indexNames[i]);
|
||||||
|
writer.write('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException ignored) {
|
||||||
|
if (IndexManager.VERBOSE)
|
||||||
|
JobManager.verbose("Failed to write saved index file names"); //$NON-NLS-1$
|
||||||
|
} finally {
|
||||||
|
if (writer != null) {
|
||||||
|
try {
|
||||||
|
writer.close();
|
||||||
|
} catch (IOException e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (IndexManager.VERBOSE) {
|
||||||
|
String state = "?"; //$NON-NLS-1$
|
||||||
|
if (indexState == SAVED_STATE) state = "SAVED"; //$NON-NLS-1$
|
||||||
|
else if (indexState == UPDATING_STATE) state = "UPDATING"; //$NON-NLS-1$
|
||||||
|
else if (indexState == UNKNOWN_STATE) state = "UNKNOWN"; //$NON-NLS-1$
|
||||||
|
else if (indexState == REBUILDING_STATE) state = "REBUILDING"; //$NON-NLS-1$
|
||||||
|
JobManager.verbose("-> index state updated to: " + state + " for: "+indexName); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexStorage#getIndexers()
|
||||||
|
*/
|
||||||
|
public ICDTIndexer[] getIndexers() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexStorage#getPathVariables()
|
||||||
|
*/
|
||||||
|
public String[] getPathVariables() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexStorage#resolvePathVariables()
|
||||||
|
*/
|
||||||
|
public void resolvePathVariables() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexStorage#merge()
|
||||||
|
*/
|
||||||
|
public void merge() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexStorage#canMergeWith(org.eclipse.cdt.core.index2.IIndexStorage)
|
||||||
|
*/
|
||||||
|
public boolean canMergeWith(IIndexStorage storage) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean getNeedToSave() {
|
||||||
|
return needToSave;
|
||||||
|
}
|
||||||
|
public void setNeedToSave(boolean needToSave) {
|
||||||
|
this.needToSave = needToSave;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void jobWasCancelled(IPath path) {
|
||||||
|
Object o = this.indexes.get(path);
|
||||||
|
if (o instanceof IIndex) {
|
||||||
|
this.monitors.remove(o);
|
||||||
|
this.indexes.remove(path);
|
||||||
|
}
|
||||||
|
updateIndexState(computeIndexName(path), UNKNOWN_STATE);
|
||||||
|
}
|
||||||
|
public ReadWriteMonitor getIndexAccessMonitor() {
|
||||||
|
return indexAccessMonitor;
|
||||||
|
}
|
||||||
|
}
|
|
@ -4,9 +4,9 @@
|
||||||
* TODO To change the template for this generated file go to
|
* TODO To change the template for this generated file go to
|
||||||
* Window - Preferences - Java - Code Style - Code Templates
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -15,20 +15,18 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
* TODO To change the template for this generated type comment go to
|
* TODO To change the template for this generated type comment go to
|
||||||
* Window - Preferences - Java - Code Style - Code Templates
|
* Window - Preferences - Java - Code Style - Code Templates
|
||||||
*/
|
*/
|
||||||
public class CleanEncounteredHeaders implements IJob {
|
public class CleanEncounteredHeaders implements IIndexJob {
|
||||||
|
|
||||||
IndexManager manager = null;
|
SourceIndexer indexer = null;
|
||||||
|
|
||||||
public CleanEncounteredHeaders(IndexManager manager){
|
public CleanEncounteredHeaders(SourceIndexer indexer){
|
||||||
this.manager = manager;
|
this.indexer = indexer;
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.search.processing.IJob#execute(org.eclipse.core.runtime.IProgressMonitor)
|
* @see org.eclipse.cdt.internal.core.search.processing.IJob#execute(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
*/
|
*/
|
||||||
public boolean execute(IProgressMonitor progress) {
|
public boolean execute(IProgressMonitor progress) {
|
||||||
|
indexer.resetEncounteredHeaders();
|
||||||
//Clean out the headers
|
|
||||||
this.manager.resetEncounteredHeaders();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ import org.eclipse.cdt.internal.core.model.CModel;
|
||||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||||
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
||||||
import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
|
import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -31,8 +33,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
public class IndexAllProject extends IndexRequest {
|
public class IndexAllProject extends IndexRequest {
|
||||||
IProject project;
|
IProject project;
|
||||||
|
|
||||||
public IndexAllProject(IProject project, IndexManager manager) {
|
public IndexAllProject(IProject project, SourceIndexer indexer) {
|
||||||
super(project.getFullPath(), manager);
|
super(project.getFullPath(), indexer);
|
||||||
this.project = project;
|
this.project = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -51,9 +53,11 @@ public class IndexAllProject extends IndexRequest {
|
||||||
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
||||||
if (!project.isAccessible()) return true; // nothing to do
|
if (!project.isAccessible()) return true; // nothing to do
|
||||||
|
|
||||||
IIndex index = this.manager.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
String test = this.indexPath.toOSString();
|
||||||
|
|
||||||
|
IIndex index = indexer.getIndex(this.indexPath, true, /*reuse index file*/ true /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = this.manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -84,27 +88,27 @@ public class IndexAllProject extends IndexRequest {
|
||||||
ISourceEntry tempEntry = ((SourceRoot) sourceRoot[i]).getSourceEntry();
|
ISourceEntry tempEntry = ((SourceRoot) sourceRoot[i]).getSourceEntry();
|
||||||
|
|
||||||
if ((i+1) != sourceRoot.length)
|
if ((i+1) != sourceRoot.length)
|
||||||
this.manager.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), this.manager));
|
indexer.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), indexer));
|
||||||
else
|
else
|
||||||
this.manager.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), this.manager,true));
|
indexer.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(),indexer,true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// request to save index when all cus have been indexed
|
// request to save index when all cus have been indexed
|
||||||
this.manager.request(new SaveIndex(this.indexPath, this.manager));
|
indexer.request(new SaveIndex(this.indexPath, indexer));
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
if (IndexManager.VERBOSE) {
|
if (IndexManager.VERBOSE) {
|
||||||
JobManager.verbose("-> failed to index " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
JobManager.verbose("-> failed to index " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
this.manager.removeIndex(this.indexPath);
|
indexer.removeIndex(this.indexPath);
|
||||||
return false;
|
return false;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (IndexManager.VERBOSE) {
|
if (IndexManager.VERBOSE) {
|
||||||
JobManager.verbose("-> failed to index " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
JobManager.verbose("-> failed to index " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
this.manager.removeIndex(this.indexPath);
|
indexer.removeIndex(this.indexPath);
|
||||||
return false;
|
return false;
|
||||||
} finally {
|
} finally {
|
||||||
monitor.exitRead(); // free read lock
|
monitor.exitRead(); // free read lock
|
||||||
|
@ -117,7 +121,7 @@ public class IndexAllProject extends IndexRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Integer updatedIndexState() {
|
protected Integer updatedIndexState() {
|
||||||
return IndexManager.REBUILDING_STATE;
|
return CIndexStorage.REBUILDING_STATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
|
@ -9,24 +9,25 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
public abstract class IndexRequest implements IJob {
|
public abstract class IndexRequest implements IIndexJob {
|
||||||
protected boolean isCancelled = false;
|
protected boolean isCancelled = false;
|
||||||
protected IPath indexPath;
|
protected IPath indexPath = null;
|
||||||
protected IndexManager manager;
|
protected SourceIndexer indexer = null;
|
||||||
|
|
||||||
public IndexRequest(IPath indexPath, IndexManager manager) {
|
public IndexRequest(IPath indexPath, SourceIndexer indexer) {
|
||||||
this.indexPath = indexPath;
|
this.indexPath = indexPath;
|
||||||
this.manager = manager;
|
this.indexer = indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean belongsTo(String projectName) {
|
public boolean belongsTo(String projectName) {
|
||||||
|
@ -34,18 +35,18 @@ public abstract class IndexRequest implements IJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void cancel() {
|
public void cancel() {
|
||||||
this.manager.jobFinishedNotification( this );
|
this.indexer.jobFinishedNotification( this );
|
||||||
this.manager.jobWasCancelled(this.indexPath);
|
this.indexer.jobWasCancelled(this.indexPath);
|
||||||
this.isCancelled = true;
|
this.isCancelled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isReadyToRun() {
|
public boolean isReadyToRun() {
|
||||||
IProject project = CCorePlugin.getWorkspace().getRoot().getProject(indexPath.segment(0));
|
IProject project = CCorePlugin.getWorkspace().getRoot().getProject(indexPath.segment(0));
|
||||||
if ( !project.isAccessible() || !this.manager.isIndexEnabled( project ) )
|
if ( !project.isAccessible() || !this.indexer.isIndexEnabled( project ) )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// tag the index as inconsistent
|
// tag the index as inconsistent
|
||||||
this.manager.aboutToUpdateIndex(indexPath, updatedIndexState());
|
indexer.aboutToUpdateIndex(indexPath, updatedIndexState());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -57,7 +58,7 @@ public abstract class IndexRequest implements IJob {
|
||||||
try {
|
try {
|
||||||
monitor.exitRead(); // free read lock
|
monitor.exitRead(); // free read lock
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
this.manager.saveIndex(index);
|
indexer.saveIndex(index);
|
||||||
} finally {
|
} finally {
|
||||||
monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
|
monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
|
||||||
}
|
}
|
||||||
|
@ -65,6 +66,10 @@ public abstract class IndexRequest implements IJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Integer updatedIndexState() {
|
protected Integer updatedIndexState() {
|
||||||
return IndexManager.UPDATING_STATE;
|
return CIndexStorage.UPDATING_STATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IPath getIndexPath(){
|
||||||
|
return indexPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -9,26 +9,28 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
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;
|
||||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
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;
|
||||||
import org.eclipse.core.runtime.Path;
|
import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
class RemoveFolderFromIndex extends IndexRequest {
|
public class RemoveFolderFromIndex extends IndexRequest {
|
||||||
IPath folderPath;
|
IPath folderPath;
|
||||||
char[][] exclusionPatterns;
|
char[][] exclusionPatterns;
|
||||||
IProject project;
|
IProject project;
|
||||||
|
|
||||||
public RemoveFolderFromIndex(IPath folderPath, char[][] exclusionPatterns, IProject project, IndexManager manager) {
|
public RemoveFolderFromIndex(IPath folderPath, char[][] exclusionPatterns, IProject project, SourceIndexer indexer) {
|
||||||
super(project.getFullPath(), manager);
|
super(project.getFullPath(), indexer);
|
||||||
this.folderPath = folderPath;
|
this.folderPath = folderPath;
|
||||||
this.exclusionPatterns = exclusionPatterns;
|
this.exclusionPatterns = exclusionPatterns;
|
||||||
this.project = project;
|
this.project = project;
|
||||||
|
@ -38,9 +40,9 @@ class RemoveFolderFromIndex extends IndexRequest {
|
||||||
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
if (progressMonitor != null && progressMonitor.isCanceled()) 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*/ false /*create if none*/);
|
IIndex index = indexer.getIndex(this.indexPath, true, /*reuse index file*/ false /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -50,7 +52,7 @@ class RemoveFolderFromIndex extends IndexRequest {
|
||||||
for (int i = 0, max = results == null ? 0 : results.length; i < max; i++) {
|
for (int i = 0, max = results == null ? 0 : results.length; i < max; i++) {
|
||||||
String documentPath = results[i].getPath();
|
String documentPath = results[i].getPath();
|
||||||
if (this.exclusionPatterns == null || !Util.isExcluded(new Path(documentPath), this.exclusionPatterns)) {
|
if (this.exclusionPatterns == null || !Util.isExcluded(new Path(documentPath), this.exclusionPatterns)) {
|
||||||
manager.remove(documentPath, this.indexPath); // write lock will be acquired by the remove operation
|
indexer.remove(documentPath, this.indexPath); // write lock will be acquired by the remove operation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
|
@ -9,20 +9,22 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
|
||||||
|
|
||||||
class RemoveFromIndex extends IndexRequest {
|
public class RemoveFromIndex extends IndexRequest {
|
||||||
String resourceName;
|
String resourceName;
|
||||||
|
|
||||||
public RemoveFromIndex(String resourceName, IPath indexPath, IndexManager manager) {
|
public RemoveFromIndex(String resourceName, IPath indexPath, SourceIndexer indexer) {
|
||||||
super(indexPath, manager);
|
super(indexPath, indexer);
|
||||||
this.resourceName = resourceName;
|
this.resourceName = resourceName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,9 +33,9 @@ class RemoveFromIndex extends IndexRequest {
|
||||||
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
if (progressMonitor != null && progressMonitor.isCanceled()) 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*/ false /*create if none*/);
|
IIndex index = indexer.getIndex(this.indexPath, true, /*reuse index file*/ false /*create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
|
|
||||||
try {
|
try {
|
|
@ -9,35 +9,37 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Save the index of a project.
|
* Save the index of a project.
|
||||||
*/
|
*/
|
||||||
public class SaveIndex extends IndexRequest {
|
public class SaveIndex extends IndexRequest {
|
||||||
public SaveIndex(IPath indexPath, IndexManager manager) {
|
public SaveIndex(IPath indexPath, SourceIndexer indexer) {
|
||||||
super(indexPath, manager);
|
super(indexPath, indexer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean execute(IProgressMonitor progressMonitor) {
|
public boolean execute(IProgressMonitor progressMonitor) {
|
||||||
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
if (progressMonitor != null && progressMonitor.isCanceled()) return true;
|
||||||
|
|
||||||
/* ensure no concurrent write access to index */
|
/* ensure no concurrent write access to index */
|
||||||
IIndex index = this.manager.getIndex(this.indexPath, true /*reuse index file*/, false /*don't create if none*/);
|
IIndex index = indexer.getIndex(this.indexPath, true /*reuse index file*/, false /*don't create if none*/);
|
||||||
if (index == null) return true;
|
if (index == null) return true;
|
||||||
ReadWriteMonitor monitor = this.manager.getMonitorFor(index);
|
ReadWriteMonitor monitor = indexer.getMonitorFor(index);
|
||||||
if (monitor == null) return true; // index got deleted since acquired
|
if (monitor == null) return true; // index got deleted since acquired
|
||||||
|
|
||||||
try {
|
try {
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
this.manager.saveIndex(index);
|
indexer.saveIndex(index);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
if (IndexManager.VERBOSE) {
|
if (IndexManager.VERBOSE) {
|
||||||
JobManager.verbose("-> failed to save index " + this.indexPath + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
JobManager.verbose("-> failed to save index " + this.indexPath + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
|
@ -0,0 +1,685 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation 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 - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.core.ICLogConstants;
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexChangeListener;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexStorage;
|
||||||
|
import org.eclipse.cdt.core.index.IndexChangeEvent;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||||
|
import org.eclipse.cdt.core.parser.util.ObjectSet;
|
||||||
|
import org.eclipse.cdt.internal.core.Util;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IDocument;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||||
|
import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||||
|
import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
|
import org.eclipse.cdt.internal.core.sourcedependency.UpdateDependency;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.ISafeRunnable;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.QualifiedName;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*/
|
||||||
|
public class SourceIndexer implements ICDTIndexer {
|
||||||
|
|
||||||
|
public static boolean VERBOSE = false;
|
||||||
|
|
||||||
|
//private IndexerModelListener indexModelListener = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Collection of listeners for indexer deltas
|
||||||
|
*/
|
||||||
|
protected List indexChangeListeners = Collections.synchronizedList(new ArrayList());
|
||||||
|
public static final String INDEX_NOTIFICATION_NAME = Util.bind( "indexNotificationJob" ); //$NON-NLS-1$
|
||||||
|
|
||||||
|
public final static String INDEX_MODEL_ID = CCorePlugin.PLUGIN_ID + ".newindexmodel"; //$NON-NLS-1$
|
||||||
|
public final static String ACTIVATION = "enable"; //$NON-NLS-1$
|
||||||
|
public final static String PROBLEM_ACTIVATION = "problemEnable"; //$NON-NLS-1$
|
||||||
|
public final static QualifiedName activationKey = new QualifiedName(INDEX_MODEL_ID, ACTIVATION);
|
||||||
|
public final static QualifiedName problemsActivationKey = new QualifiedName( INDEX_MODEL_ID, PROBLEM_ACTIVATION );
|
||||||
|
|
||||||
|
public static final String INDEXER_ENABLED = "indexEnabled"; //$NON-NLS-1$
|
||||||
|
public static final String INDEXER_PROBLEMS_ENABLED = "indexerProblemsEnabled"; //$NON-NLS-1$
|
||||||
|
public static final String SOURCE_INDEXER = "cdt_source_indexer"; //$NON-NLS-1$
|
||||||
|
public static final String INDEXER_VALUE = "indexValue"; //$NON-NLS-1$
|
||||||
|
public static final String INDEXER_PROBLEMS_VALUE = "indexProblemsValue"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
public static final int PREPROCESSOR_PROBLEMS_BIT = 1;
|
||||||
|
public static final int SEMANTIC_PROBLEMS_BIT = 1 << 1;
|
||||||
|
public static final int SYNTACTIC_PROBLEMS_BIT = 1 << 2;
|
||||||
|
|
||||||
|
private CIndexStorage indexStorage = null;
|
||||||
|
public ReadWriteMonitor storageMonitor = null;
|
||||||
|
private IndexManager indexManager = null;
|
||||||
|
|
||||||
|
private HashSet jobSet = null;
|
||||||
|
|
||||||
|
public SourceIndexer(){
|
||||||
|
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
|
this.indexStorage = (CIndexStorage) indexManager.getIndexStorageForIndexer(this);
|
||||||
|
this.jobSet = new HashSet();
|
||||||
|
this.storageMonitor = new ReadWriteMonitor();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private IIndexStorage getIndexStorage() {
|
||||||
|
return indexStorage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void addSource(IFile resource, IPath indexedContainers){
|
||||||
|
this.addSource(resource,indexedContainers, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger addition of a resource to an index
|
||||||
|
* Note: the actual operation is performed in background
|
||||||
|
* @param checkEncounteredHeaders TODO
|
||||||
|
*/
|
||||||
|
public void addSource(IFile resource, IPath indexedContainers, boolean checkEncounteredHeaders){
|
||||||
|
|
||||||
|
IProject project = resource.getProject();
|
||||||
|
|
||||||
|
boolean indexEnabled = false;
|
||||||
|
if (project != null)
|
||||||
|
indexEnabled = isIndexEnabled(project);
|
||||||
|
else
|
||||||
|
org.eclipse.cdt.internal.core.model.Util.log(null, "IndexManager addSource: File has no project associated : " + resource.getName(), ICLogConstants.CDT); //$NON-NLS-1$
|
||||||
|
|
||||||
|
if (CCorePlugin.getDefault() == null) return;
|
||||||
|
|
||||||
|
if (indexEnabled){
|
||||||
|
AddCompilationUnitToIndex job = new AddCompilationUnitToIndex(resource, indexedContainers, this, checkEncounteredHeaders);
|
||||||
|
|
||||||
|
//If we are in WAITING mode, we need to kick ourselves into enablement
|
||||||
|
if (!jobSet.add(resource.getLocation()) &&
|
||||||
|
indexManager.enabledState()==IndexManager.ENABLED)
|
||||||
|
return;
|
||||||
|
|
||||||
|
|
||||||
|
if (indexManager.awaitingJobsCount() < CIndexStorage.MAX_FILES_IN_MEMORY) {
|
||||||
|
// reduces the chance that the file is open later on, preventing it from being deleted
|
||||||
|
if (!job.initializeContents()) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.indexManager.request(job);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public void updateDependencies(IResource resource){
|
||||||
|
if (CCorePlugin.getDefault() == null || !isIndexEnabled( resource.getProject() ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
UpdateDependency job = new UpdateDependency(resource, this);
|
||||||
|
indexManager.request(job);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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) {
|
||||||
|
|
||||||
|
if (!(indexStorage instanceof CIndexStorage))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SimpleLookupTable headerTable = ((CIndexStorage)indexStorage).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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger addition of the entire content of a project
|
||||||
|
* Note: the actual operation is performed in background
|
||||||
|
*/
|
||||||
|
public void indexAll(IProject project) {
|
||||||
|
if (CCorePlugin.getDefault() == null) return;
|
||||||
|
|
||||||
|
//check to see if indexing isEnabled for this project
|
||||||
|
boolean indexEnabled = isIndexEnabled(project);
|
||||||
|
|
||||||
|
if (indexEnabled){
|
||||||
|
if( indexManager.enabledState() == IndexManager.WAITING ){
|
||||||
|
//if we are paused because the user cancelled a previous index, this is a good
|
||||||
|
//enough reason to restart
|
||||||
|
indexManager.enable();
|
||||||
|
}
|
||||||
|
// check if the same request is not already in the queue
|
||||||
|
IndexRequest request = new IndexAllProject(project, this);
|
||||||
|
for (int i = indexManager.getJobEnd(); i > indexManager.getJobStart(); i--) // NB: don't check job at jobStart, as it may have already started (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32488)
|
||||||
|
if (request.equals(indexManager.getAwaitingJobAt(i))) return;
|
||||||
|
indexManager.request(request);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param project
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public boolean isIndexEnabled(IProject project) {
|
||||||
|
if( project == null || !project.exists() || !project.isOpen() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Boolean indexValue = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
indexValue = (Boolean) project.getSessionProperty(activationKey);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indexValue != null)
|
||||||
|
return indexValue.booleanValue();
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Load value for project
|
||||||
|
indexValue = loadIndexerEnabledFromCDescriptor(project);
|
||||||
|
if (indexValue != null){
|
||||||
|
project.setSessionProperty(SourceIndexer.activationKey, indexValue);
|
||||||
|
return indexValue.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Indexer Block Place holder for Managed Make - take out
|
||||||
|
indexValue = new Boolean(true);
|
||||||
|
project.setSessionProperty(SourceIndexer.activationKey, indexValue);
|
||||||
|
return indexValue.booleanValue();
|
||||||
|
} catch (CoreException e1) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public int indexProblemsEnabled(IProject project) {
|
||||||
|
Integer value = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
value = (Integer) project.getSessionProperty(problemsActivationKey);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (value != null)
|
||||||
|
return value.intValue();
|
||||||
|
|
||||||
|
try {
|
||||||
|
//Load value for project
|
||||||
|
value = loadIndexerProblemsEnabledFromCDescriptor(project);
|
||||||
|
if (value != null){
|
||||||
|
project.setSessionProperty(SourceIndexer.problemsActivationKey, value);
|
||||||
|
return value.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: Indexer Block Place holder for Managed Make - take out
|
||||||
|
value = new Integer(0);
|
||||||
|
project.setSessionProperty(SourceIndexer.problemsActivationKey, value);
|
||||||
|
return value.intValue();
|
||||||
|
} catch (CoreException e1) {
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Index the content of the given source folder.
|
||||||
|
*/
|
||||||
|
public void indexSourceFolder(IProject project, IPath sourceFolder, final char[][] exclusionPattern) {
|
||||||
|
if( !isIndexEnabled( project ) )
|
||||||
|
return;
|
||||||
|
if (indexManager.getJobEnd() > indexManager.getJobStart()) {
|
||||||
|
// check if a job to index the project is not already in the queue
|
||||||
|
IndexRequest request = new IndexAllProject(project, this);
|
||||||
|
for (int i = indexManager.getJobEnd(); i > indexManager.getJobStart(); i--) // NB: don't check job at jobStart, as it may have already started (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32488)
|
||||||
|
if (request.equals(indexManager.getAwaitingJobAt(i))) return;
|
||||||
|
}
|
||||||
|
this.request(new AddFolderToIndex(sourceFolder, project, exclusionPattern, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger removal of a resource to an index
|
||||||
|
* Note: the actual operation is performed in background
|
||||||
|
*/
|
||||||
|
public void remove(String resourceName, IPath indexedContainer){
|
||||||
|
IProject project = CCorePlugin.getWorkspace().getRoot().getProject(indexedContainer.toString());
|
||||||
|
if( isIndexEnabled( project ) )
|
||||||
|
request(new RemoveFromIndex(resourceName, indexedContainer, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the content of the given source folder from the index.
|
||||||
|
*/
|
||||||
|
public void removeSourceFolderFromIndex(IProject project, IPath sourceFolder, char[][] exclusionPatterns) {
|
||||||
|
|
||||||
|
if( !isIndexEnabled( project ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (indexManager.getJobEnd()> indexManager.getJobStart()) {
|
||||||
|
// check if a job to index the project is not already in the queue
|
||||||
|
IndexRequest request = new IndexAllProject(project, this);
|
||||||
|
for (int i = indexManager.getJobEnd(); i > indexManager.getJobStart(); i--) // NB: don't check job at jobStart, as it may have already started (see http://bugs.eclipse.org/bugs/show_bug.cgi?id=32488)
|
||||||
|
if (request.equals(indexManager.getAwaitingJobAt(i))) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.request(new RemoveFolderFromIndex(sourceFolder, exclusionPatterns, project, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.internal.core.search.processing.JobManager#jobFinishedNotification(org.eclipse.cdt.internal.core.search.processing.IJob)
|
||||||
|
*/
|
||||||
|
public void jobFinishedNotification(IIndexJob job) {
|
||||||
|
this.indexJobFinishedNotification(job);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private Boolean loadIndexerEnabledFromCDescriptor(IProject project) throws CoreException {
|
||||||
|
// Check if we have the property in the descriptor
|
||||||
|
// We pass false since we do not want to create the descriptor if it does not exists.
|
||||||
|
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||||
|
Boolean strBool = null;
|
||||||
|
if (descriptor != null) {
|
||||||
|
Node child = descriptor.getProjectData(SOURCE_INDEXER).getFirstChild();
|
||||||
|
|
||||||
|
while (child != null) {
|
||||||
|
if (child.getNodeName().equals(INDEXER_ENABLED))
|
||||||
|
strBool = Boolean.valueOf(((Element)child).getAttribute(INDEXER_VALUE));
|
||||||
|
|
||||||
|
|
||||||
|
child = child.getNextSibling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strBool;
|
||||||
|
}
|
||||||
|
private Integer loadIndexerProblemsEnabledFromCDescriptor(IProject project) throws CoreException {
|
||||||
|
// we are only checking for the settings do not create the descriptor.
|
||||||
|
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||||
|
Integer strInt = null;
|
||||||
|
if( descriptor != null ){
|
||||||
|
Node child = descriptor.getProjectData(SourceIndexer.SOURCE_INDEXER).getFirstChild();
|
||||||
|
|
||||||
|
while (child != null) {
|
||||||
|
if (child.getNodeName().equals(INDEXER_PROBLEMS_ENABLED)){
|
||||||
|
String val = ((Element)child).getAttribute(INDEXER_PROBLEMS_VALUE);
|
||||||
|
try{
|
||||||
|
strInt = Integer.valueOf( val );
|
||||||
|
} catch( NumberFormatException e ){
|
||||||
|
//some old projects might have a boolean stored, translate that into just preprocessors
|
||||||
|
Boolean bool = Boolean.valueOf( val );
|
||||||
|
if( bool.booleanValue() )
|
||||||
|
strInt = new Integer( SourceIndexer.PREPROCESSOR_PROBLEMS_BIT );
|
||||||
|
else
|
||||||
|
strInt = new Integer( 0 );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
child = child.getNextSibling();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return strInt;
|
||||||
|
}
|
||||||
|
|
||||||
|
static private class RemoveIndexMarkersJob extends Job{
|
||||||
|
private final IResource resource;
|
||||||
|
public RemoveIndexMarkersJob( IResource resource, String name ){
|
||||||
|
super( name );
|
||||||
|
this.resource = resource;
|
||||||
|
}
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
|
try {
|
||||||
|
resource.deleteMarkers( ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE );
|
||||||
|
} catch (CoreException e) {
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
}
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeIndexerProblems( IResource resource){
|
||||||
|
String jobName = "remove markers"; //$NON-NLS-1$
|
||||||
|
RemoveIndexMarkersJob job = new RemoveIndexMarkersJob( resource, jobName );
|
||||||
|
job.setRule( resource );
|
||||||
|
job.setPriority( Job.DECORATE );
|
||||||
|
job.schedule();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addIndexChangeListener(IIndexChangeListener listener) {
|
||||||
|
synchronized(indexChangeListeners) {
|
||||||
|
if (!indexChangeListeners.contains(listener)) {
|
||||||
|
indexChangeListeners.add(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeIndexChangeListener(IIndexChangeListener listener) {
|
||||||
|
synchronized(indexChangeListeners) {
|
||||||
|
int i = indexChangeListeners.indexOf(listener);
|
||||||
|
if (i != -1) {
|
||||||
|
indexChangeListeners.remove(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param indexDelta
|
||||||
|
*/
|
||||||
|
public void notifyListeners(IndexDelta indexDelta) {
|
||||||
|
final IndexChangeEvent indexEvent = new IndexChangeEvent(indexDelta);
|
||||||
|
for (int i= 0; i < indexChangeListeners.size(); i++) {
|
||||||
|
IIndexChangeListener tempListener = null;
|
||||||
|
synchronized(indexChangeListeners){
|
||||||
|
tempListener = (IIndexChangeListener) indexChangeListeners.get(i);
|
||||||
|
}
|
||||||
|
final IIndexChangeListener listener = tempListener;
|
||||||
|
long start = -1;
|
||||||
|
if (VERBOSE) {
|
||||||
|
System.out.print("Listener #" + (i+1) + "=" + listener.toString());//$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
start = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
// wrap callbacks with Safe runnable for subsequent listeners to be called when some are causing grief
|
||||||
|
Job job = new Job(INDEX_NOTIFICATION_NAME){
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
|
Platform.run(new ISafeRunnable() {
|
||||||
|
public void handleException(Throwable exception) {
|
||||||
|
CCorePlugin.log(exception);
|
||||||
|
}
|
||||||
|
public void run() throws Exception {
|
||||||
|
listener.indexChanged(indexEvent);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
job.schedule();
|
||||||
|
if (VERBOSE) {
|
||||||
|
System.out.println(" -> " + (System.currentTimeMillis()-start) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* No more job awaiting.
|
||||||
|
*/
|
||||||
|
public void notifyIdle(long idlingTime){
|
||||||
|
if (idlingTime > 1000 && ((CIndexStorage) indexStorage).getNeedToSave())
|
||||||
|
((CIndexStorage) indexStorage).saveIndexes();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#getIndexerFeatures()
|
||||||
|
*/
|
||||||
|
public int getIndexerFeatures() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#shouldIndex(org.eclipse.core.resources.IFile)
|
||||||
|
*/
|
||||||
|
public boolean shouldIndex(IFile file) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#index(org.eclipse.cdt.internal.core.index.IDocument, org.eclipse.cdt.internal.core.index.IIndexerOutput)
|
||||||
|
*/
|
||||||
|
public void index(IDocument document, IIndexerOutput output) throws IOException {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#addRequest(org.eclipse.cdt.core.model.ICElement, org.eclipse.core.resources.IResourceDelta, org.eclipse.core.resources.IResourceChangeEvent)
|
||||||
|
*/
|
||||||
|
public void addRequest(ICElement element, IResourceDelta delta) {
|
||||||
|
|
||||||
|
switch (element.getElementType()) {
|
||||||
|
case ICElement.C_PROJECT :
|
||||||
|
this.indexAll(element.getCProject().getProject());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICElement.C_CCONTAINER:
|
||||||
|
this.indexSourceFolder(element.getCProject().getProject(),element.getPath(),null);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICElement.C_UNIT:
|
||||||
|
IFile file = (IFile) delta.getResource();
|
||||||
|
IProject filesProject = file.getProject();
|
||||||
|
this.addSource(file, filesProject.getFullPath());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#removeRequest(org.eclipse.cdt.core.model.ICElement, org.eclipse.core.resources.IResourceDelta, org.eclipse.core.resources.IResourceChangeEvent)
|
||||||
|
*/
|
||||||
|
public void removeRequest(ICElement element, IResourceDelta delta) {
|
||||||
|
switch (element.getElementType()) {
|
||||||
|
case ICElement.C_PROJECT :
|
||||||
|
IPath fullPath = element.getCProject().getProject().getFullPath();
|
||||||
|
if( delta.getKind() == IResourceDelta.CHANGED )
|
||||||
|
indexManager.discardJobs(fullPath.segment(0));
|
||||||
|
indexStorage.removeIndexFamily(fullPath);
|
||||||
|
// NB: Discarding index jobs belonging to this project was done during PRE_DELETE
|
||||||
|
break;
|
||||||
|
// NB: Update of index if project is opened, closed, or its c nature is added or removed
|
||||||
|
// is done in updateCurrentDeltaAndIndex
|
||||||
|
|
||||||
|
case ICElement.C_CCONTAINER:
|
||||||
|
this.removeSourceFolderFromIndex(element.getCProject().getProject(),element.getPath(),null);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ICElement.C_UNIT:
|
||||||
|
IFile file = (IFile) delta.getResource();
|
||||||
|
this.remove(file.getFullPath().toString(), file.getProject().getFullPath());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#indexJobFinishedNotification(org.eclipse.cdt.internal.core.search.processing.IIndexJob)
|
||||||
|
*/
|
||||||
|
public void indexJobFinishedNotification(IIndexJob job) {
|
||||||
|
((CIndexStorage)indexStorage).setNeedToSave(true);
|
||||||
|
|
||||||
|
if (job instanceof AddCompilationUnitToIndex){
|
||||||
|
AddCompilationUnitToIndex tempJob = (AddCompilationUnitToIndex) job;
|
||||||
|
jobSet.remove(tempJob.getResource().getLocation());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.core.index2.IIndexer#shutdown()
|
||||||
|
*/
|
||||||
|
public void shutdown() {
|
||||||
|
indexStorage.shutdown();
|
||||||
|
//indexModelListener.shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forward job request to Index Manager
|
||||||
|
* @param cleanHeaders
|
||||||
|
*/
|
||||||
|
public void request(IIndexJob indexJob) {
|
||||||
|
this.indexManager.request(indexJob);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ReadWriteMonitor getStorageMonitor() {
|
||||||
|
return storageMonitor;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void resetEncounteredHeaders() {
|
||||||
|
try{
|
||||||
|
storageMonitor.enterWrite();
|
||||||
|
indexStorage.resetEncounteredHeaders();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
storageMonitor.exitWrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param path
|
||||||
|
* @param reuseIndexFile
|
||||||
|
* @param createIfMissing
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public synchronized IIndex getIndex(IPath path, boolean reuseExistingFile, boolean createIfMissing) {
|
||||||
|
IIndex index = null;
|
||||||
|
try{
|
||||||
|
storageMonitor.enterRead();
|
||||||
|
index = indexStorage.getIndex(path,reuseExistingFile, createIfMissing);
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
storageMonitor.exitRead();
|
||||||
|
}
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param index
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public ReadWriteMonitor getMonitorFor(IIndex index) {
|
||||||
|
ReadWriteMonitor monitor = null;
|
||||||
|
try{
|
||||||
|
storageMonitor.enterRead();
|
||||||
|
monitor=indexStorage.getMonitorFor(index);
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
storageMonitor.exitRead();
|
||||||
|
}
|
||||||
|
return monitor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
public void removeIndex(IPath path) {
|
||||||
|
try{
|
||||||
|
storageMonitor.enterWrite();
|
||||||
|
indexStorage.removeIndex(path);
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
storageMonitor.exitWrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
public void jobWasCancelled(IPath path) {
|
||||||
|
try{
|
||||||
|
storageMonitor.enterWrite();
|
||||||
|
indexStorage.jobWasCancelled(path);
|
||||||
|
}
|
||||||
|
finally{
|
||||||
|
storageMonitor.exitWrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param index
|
||||||
|
*/
|
||||||
|
public void saveIndex(IIndex index) throws IOException {
|
||||||
|
try{
|
||||||
|
storageMonitor.enterWrite();
|
||||||
|
indexStorage.saveIndex(index);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
storageMonitor.exitWrite();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param indexPath
|
||||||
|
* @param indexState
|
||||||
|
*/
|
||||||
|
public void aboutToUpdateIndex(IPath indexPath, Integer indexState) {
|
||||||
|
try{
|
||||||
|
//storageMonitor.enterWrite();
|
||||||
|
indexStorage.aboutToUpdateIndex(indexPath, indexState);
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
//storageMonitor.exitWrite();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
@ -31,7 +31,6 @@ import org.eclipse.cdt.core.parser.IParser;
|
||||||
import org.eclipse.cdt.core.parser.IProblem;
|
import org.eclipse.cdt.core.parser.IProblem;
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ParserTimeOut;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||||
|
@ -72,6 +71,9 @@ import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||||
import org.eclipse.cdt.internal.core.Util;
|
import org.eclipse.cdt.internal.core.Util;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
import org.eclipse.cdt.internal.core.index.impl.IFileDocument;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IIndexConstants;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexProblemHandler;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IMarker;
|
import org.eclipse.core.resources.IMarker;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -94,7 +96,7 @@ import org.eclipse.core.runtime.jobs.Job;
|
||||||
*/
|
*/
|
||||||
public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexConstants {
|
public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexConstants {
|
||||||
|
|
||||||
SourceIndexer indexer;
|
SourceIndexerRunner indexer;
|
||||||
IFile resourceFile;
|
IFile resourceFile;
|
||||||
|
|
||||||
char[] packageName;
|
char[] packageName;
|
||||||
|
@ -109,7 +111,6 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
private Map problemsMap = null;
|
private Map problemsMap = null;
|
||||||
|
|
||||||
private IProgressMonitor pm = new NullProgressMonitor();
|
private IProgressMonitor pm = new NullProgressMonitor();
|
||||||
private ParserTimeOut timeoutThread = null;
|
|
||||||
|
|
||||||
private static final String INDEXER_MARKER_ORIGINATOR = ICModelMarker.INDEXER_MARKER + ".originator"; //$NON-NLS-1$
|
private static final String INDEXER_MARKER_ORIGINATOR = ICModelMarker.INDEXER_MARKER + ".originator"; //$NON-NLS-1$
|
||||||
private static final String INDEXER_MARKER_PREFIX = Util.bind("indexerMarker.prefix" ) + " "; //$NON-NLS-1$ //$NON-NLS-2$
|
private static final String INDEXER_MARKER_PREFIX = Util.bind("indexerMarker.prefix" ) + " "; //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
@ -118,11 +119,10 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
private ArrayList filesTraversed = null;
|
private ArrayList filesTraversed = null;
|
||||||
private IParser parser;
|
private IParser parser;
|
||||||
|
|
||||||
public SourceIndexerRequestor(SourceIndexer indexer, IFile resourceFile, ParserTimeOut timeOut) {
|
public SourceIndexerRequestor(SourceIndexerRunner indexer, IFile resourceFile) {
|
||||||
super();
|
super();
|
||||||
this.indexer = indexer;
|
this.indexer = indexer;
|
||||||
this.resourceFile = resourceFile;
|
this.resourceFile = resourceFile;
|
||||||
this.timeoutThread = timeOut;
|
|
||||||
this.filesTraversed = new ArrayList(15);
|
this.filesTraversed = new ArrayList(15);
|
||||||
this.filesTraversed.add(resourceFile.getLocation().toOSString());
|
this.filesTraversed.add(resourceFile.getLocation().toOSString());
|
||||||
}
|
}
|
||||||
|
@ -236,7 +236,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
|
|
||||||
/* See if this file has been encountered before */
|
/* See if this file has been encountered before */
|
||||||
if (type.isHeader())
|
if (type.isHeader())
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().haveEncounteredHeader(resourceProject.getFullPath(),new Path(inclusion.getFullFileName()));
|
indexer.haveEncounteredHeader(resourceProject.getFullPath(),new Path(inclusion.getFullFileName()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
//file number for the current file (if it has one). If the current file does not
|
//file number for the current file (if it has one). If the current file does not
|
||||||
//have a file number, we need to add it to the index.
|
//have a file number, we need to add it to the index.
|
||||||
IFile tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(include.getFullFileName()));
|
IFile tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(include.getFullFileName()));
|
||||||
String filePath = "";
|
String filePath = ""; //$NON-NLS-1$
|
||||||
if (tempFile != null){
|
if (tempFile != null){
|
||||||
//File is local to workspace
|
//File is local to workspace
|
||||||
filePath = tempFile.getFullPath().toString();
|
filePath = tempFile.getFullPath().toString();
|
||||||
|
@ -578,56 +578,6 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setParser( IParser parser )
|
|
||||||
{
|
|
||||||
this.parser = parser;
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#setTimeout(int)
|
|
||||||
*/
|
|
||||||
public void setTimeout(int timeout) {
|
|
||||||
timeoutThread.setTimeout(timeout);
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#startTimer()
|
|
||||||
*/
|
|
||||||
public void startTimer() {
|
|
||||||
createProgressMonitor(parser);
|
|
||||||
while (!timeoutThread.isReadyToRun()){
|
|
||||||
try {
|
|
||||||
Thread.sleep(20);
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
// TODO Auto-generated catch block
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
timeoutThread.startTimer();
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#stopTimer()
|
|
||||||
*/
|
|
||||||
public void stopTimer() {
|
|
||||||
timeoutThread.stopTimer();
|
|
||||||
pm.setCanceled(false);
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout()
|
|
||||||
*/
|
|
||||||
public boolean parserTimeout() {
|
|
||||||
if ((pm != null) && (pm.isCanceled()))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* Creates a new progress monitor with each start timer
|
|
||||||
*/
|
|
||||||
private void createProgressMonitor( IParser parser ) {
|
|
||||||
pm.setCanceled(false);
|
|
||||||
timeoutThread.setParser(parser);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public boolean areProblemMarkersEnabled(){
|
public boolean areProblemMarkersEnabled(){
|
||||||
return problemMarkersEnabled != 0;
|
return problemMarkersEnabled != 0;
|
||||||
}
|
}
|
||||||
|
@ -682,9 +632,9 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
|
||||||
if( problem.getSourceLineNumber() == -1 )
|
if( problem.getSourceLineNumber() == -1 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
boolean preprocessor = ( problemMarkersEnabled & IndexManager.PREPROCESSOR_PROBLEMS_BIT ) != 0;
|
boolean preprocessor = ( problemMarkersEnabled & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT ) != 0;
|
||||||
boolean semantics = ( problemMarkersEnabled & IndexManager.SEMANTIC_PROBLEMS_BIT ) != 0;
|
boolean semantics = ( problemMarkersEnabled & SourceIndexer.SEMANTIC_PROBLEMS_BIT ) != 0;
|
||||||
boolean syntax = ( problemMarkersEnabled & IndexManager.SYNTACTIC_PROBLEMS_BIT ) != 0;
|
boolean syntax = ( problemMarkersEnabled & SourceIndexer.SYNTACTIC_PROBLEMS_BIT ) != 0;
|
||||||
|
|
||||||
if( problem.checkCategory( IProblem.PREPROCESSOR_RELATED ) || problem.checkCategory( IProblem.SCANNER_RELATED ) )
|
if( problem.checkCategory( IProblem.PREPROCESSOR_RELATED ) || problem.checkCategory( IProblem.SCANNER_RELATED ) )
|
||||||
return preprocessor && problem.getID() != IProblem.PREPROCESSOR_CIRCULAR_INCLUSION;
|
return preprocessor && problem.getID() != IProblem.PREPROCESSOR_CIRCULAR_INCLUSION;
|
|
@ -9,7 +9,7 @@
|
||||||
* IBM Corporation - initial API and implementation
|
* IBM Corporation - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
@ -27,12 +27,10 @@ import org.eclipse.cdt.core.parser.CodeReader;
|
||||||
import org.eclipse.cdt.core.parser.IParser;
|
import org.eclipse.cdt.core.parser.IParser;
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||||
import org.eclipse.cdt.core.parser.ParseError;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||||
import org.eclipse.cdt.core.parser.ParserFactoryError;
|
import org.eclipse.cdt.core.parser.ParserFactoryError;
|
||||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ParserTimeOut;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||||
import org.eclipse.cdt.internal.core.index.IDocument;
|
import org.eclipse.cdt.internal.core.index.IDocument;
|
||||||
|
@ -40,6 +38,8 @@ import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||||
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.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A SourceIndexer indexes source files using the parser. The following items are indexed:
|
* A SourceIndexer indexes source files using the parser. The following items are indexed:
|
||||||
|
@ -52,36 +52,27 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
* - Structs
|
* - Structs
|
||||||
* - Unions
|
* - Unions
|
||||||
*/
|
*/
|
||||||
public class SourceIndexer extends AbstractIndexer {
|
public class SourceIndexerRunner extends AbstractIndexer {
|
||||||
|
|
||||||
//TODO: Indexer, add additional file types
|
|
||||||
//Header files: "h" , "hh", "hpp"
|
|
||||||
//Use the CModelManager defined file types
|
|
||||||
//public static final String[] FILE_TYPES= new String[] {"cpp","c", "cc", "cxx"}; //$NON-NLS-1$
|
|
||||||
|
|
||||||
//protected DefaultProblemFactory problemFactory= new DefaultProblemFactory(Locale.getDefault());
|
|
||||||
public static final String CDT_INDEXER_TIMEOUT= "CDT_INDEXER_TIMEOUT"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
IFile resourceFile;
|
IFile resourceFile;
|
||||||
ParserTimeOut timeOut = null;
|
private SourceIndexer indexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param resource
|
* @param resource
|
||||||
* @param out
|
* @param out
|
||||||
*/
|
*/
|
||||||
public SourceIndexer(IFile resource, ParserTimeOut timeOut) {
|
public SourceIndexerRunner(IFile resource, SourceIndexer indexer) {
|
||||||
|
this.indexer = indexer;
|
||||||
this.resourceFile = resource;
|
this.resourceFile = resource;
|
||||||
this.timeOut = timeOut;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void indexFile(IDocument document) throws IOException {
|
protected void indexFile(IDocument document) throws IOException {
|
||||||
// Add the name of the file to the index
|
// Add the name of the file to the index
|
||||||
output.addDocument(document);
|
output.addDocument(document);
|
||||||
// Create a new Parser
|
// Create a new Parser
|
||||||
SourceIndexerRequestor requestor = new SourceIndexerRequestor(this, resourceFile, timeOut);
|
SourceIndexerRequestor requestor = new SourceIndexerRequestor(this, resourceFile);
|
||||||
|
|
||||||
IndexManager manager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
int problems = indexer.indexProblemsEnabled( resourceFile.getProject() );
|
||||||
int problems = manager.indexProblemsEnabled( resourceFile.getProject() );
|
|
||||||
requestor.setProblemMarkersEnabled( problems );
|
requestor.setProblemMarkersEnabled( problems );
|
||||||
requestor.requestRemoveMarkers( resourceFile, null );
|
requestor.requestRemoveMarkers( resourceFile, null );
|
||||||
|
|
||||||
|
@ -108,7 +99,6 @@ public class SourceIndexer extends AbstractIndexer {
|
||||||
parser = ParserFactory.createParser(
|
parser = ParserFactory.createParser(
|
||||||
ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
|
ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
|
||||||
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
|
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
|
||||||
requestor.setParser(parser);
|
|
||||||
} catch( ParserFactoryError pfe ){
|
} catch( ParserFactoryError pfe ){
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -118,14 +108,6 @@ public class SourceIndexer extends AbstractIndexer {
|
||||||
}
|
}
|
||||||
|
|
||||||
try{
|
try{
|
||||||
|
|
||||||
// start timer
|
|
||||||
String timeOut = CCorePlugin.getDefault().getPluginPreferences().getString(CDT_INDEXER_TIMEOUT);
|
|
||||||
Integer timeOutValue = new Integer(timeOut);
|
|
||||||
if (timeOutValue.intValue() > 0) {
|
|
||||||
requestor.setTimeout(timeOutValue.intValue());
|
|
||||||
requestor.startTimer();
|
|
||||||
}
|
|
||||||
boolean retVal = parser.parse();
|
boolean retVal = parser.parse();
|
||||||
|
|
||||||
if (AbstractIndexer.VERBOSE){
|
if (AbstractIndexer.VERBOSE){
|
||||||
|
@ -140,23 +122,19 @@ public class SourceIndexer extends AbstractIndexer {
|
||||||
org.eclipse.cdt.internal.core.model.Util.log(null, "Out Of Memory error: " + vmErr.getMessage() + " on File: " + resourceFile.getName(), ICLogConstants.CDT); //$NON-NLS-1$ //$NON-NLS-2$
|
org.eclipse.cdt.internal.core.model.Util.log(null, "Out Of Memory error: " + vmErr.getMessage() + " on File: " + resourceFile.getName(), ICLogConstants.CDT); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (ParseError e){
|
|
||||||
org.eclipse.cdt.internal.core.model.Util.log(null, "Parser Timeout on File: " + resourceFile.getName(), ICLogConstants.CDT); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
}
|
|
||||||
catch ( Exception ex ){
|
catch ( Exception ex ){
|
||||||
if (ex instanceof IOException)
|
if (ex instanceof IOException)
|
||||||
throw (IOException) ex;
|
throw (IOException) ex;
|
||||||
}
|
}
|
||||||
finally{
|
finally{
|
||||||
requestor.stopTimer();
|
|
||||||
//if the user disable problem reporting since we last checked, don't report the collected problems
|
//if the user disable problem reporting since we last checked, don't report the collected problems
|
||||||
if( manager.indexProblemsEnabled( resourceFile.getProject() ) != 0 )
|
if( indexer.indexProblemsEnabled( resourceFile.getProject() ) != 0 )
|
||||||
requestor.reportProblems();
|
requestor.reportProblems();
|
||||||
|
|
||||||
//Report events
|
//Report events
|
||||||
ArrayList filesTrav = requestor.getFilesTraversed();
|
ArrayList filesTrav = requestor.getFilesTraversed();
|
||||||
IndexDelta indexDelta = new IndexDelta(resourceFile.getProject(),filesTrav, IIndexDelta.INDEX_FINISHED_DELTA);
|
IndexDelta indexDelta = new IndexDelta(resourceFile.getProject(),filesTrav, IIndexDelta.INDEX_FINISHED_DELTA);
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().notifyListeners(indexDelta);
|
indexer.notifyListeners(indexDelta);
|
||||||
//Release all resources
|
//Release all resources
|
||||||
parser=null;
|
parser=null;
|
||||||
currentProject = null;
|
currentProject = null;
|
||||||
|
@ -165,11 +143,7 @@ public class SourceIndexer extends AbstractIndexer {
|
||||||
scanInfo=null;
|
scanInfo=null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* Sets the document types the <code>IIndexer</code> handles.
|
|
||||||
*/
|
|
||||||
|
|
||||||
public void setFileTypes(String[] fileTypes){}
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer#getResourceFile()
|
* @see org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer#getResourceFile()
|
||||||
*/
|
*/
|
||||||
|
@ -177,4 +151,11 @@ public class SourceIndexer extends AbstractIndexer {
|
||||||
return resourceFile;
|
return resourceFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param fullPath
|
||||||
|
* @param path
|
||||||
|
*/
|
||||||
|
public boolean haveEncounteredHeader(IPath fullPath, Path path) {
|
||||||
|
return indexer.haveEncounteredHeader(fullPath, path);
|
||||||
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -10,12 +10,14 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.search.indexing;
|
package org.eclipse.cdt.internal.core.search.indexing;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -54,6 +56,13 @@ public class IndexerModelListener implements IElementChangedListener {
|
||||||
int kind= delta.getKind();
|
int kind= delta.getKind();
|
||||||
int flags= delta.getFlags();
|
int flags= delta.getFlags();
|
||||||
ICElement element= delta.getElement();
|
ICElement element= delta.getElement();
|
||||||
|
IProject project = element.getCProject().getProject();
|
||||||
|
ICDTIndexer indexer = indexManager.getIndexerForProject(project);
|
||||||
|
|
||||||
|
if (!(indexer instanceof SourceIndexer))
|
||||||
|
return;
|
||||||
|
|
||||||
|
SourceIndexer sourceIndexer = (SourceIndexer) indexer;
|
||||||
|
|
||||||
switch(kind){
|
switch(kind){
|
||||||
case ICElementDelta.CHANGED:
|
case ICElementDelta.CHANGED:
|
||||||
|
@ -69,27 +78,27 @@ public class IndexerModelListener implements IElementChangedListener {
|
||||||
switch(tempResource.getType())
|
switch(tempResource.getType())
|
||||||
{
|
{
|
||||||
case IResource.FILE:
|
case IResource.FILE:
|
||||||
indexManager.addSource((IFile) tempResource,tempResource.getProject().getFullPath());
|
sourceIndexer.addSource((IFile) tempResource,tempResource.getProject().getFullPath());
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IResource.FOLDER:
|
case IResource.FOLDER:
|
||||||
tempRootElement = (SourceRoot) getElementSource(element);
|
tempRootElement = (SourceRoot) getElementSource(element);
|
||||||
if (tempRootElement != null){
|
if (tempRootElement != null){
|
||||||
IProject theProj = tempResource.getProject();
|
IProject theProj = tempResource.getProject();
|
||||||
indexManager.indexSourceFolder(theProj,tempResource.getFullPath(),tempRootElement.getSourceEntry().fullExclusionPatternChars());
|
sourceIndexer.indexSourceFolder(theProj,tempResource.getFullPath(),tempRootElement.getSourceEntry().fullExclusionPatternChars());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IResource.PROJECT:
|
case IResource.PROJECT:
|
||||||
indexManager.indexAll(tempResource.getProject());
|
sourceIndexer.indexAll(tempResource.getProject());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if( (flags & ICElementDelta.F_REMOVED_PATHENTRY_SOURCE) != 0 ){
|
} else if( (flags & ICElementDelta.F_REMOVED_PATHENTRY_SOURCE) != 0 ){
|
||||||
IResource tempResource = element.getResource();
|
IResource tempResource = element.getResource();
|
||||||
IProject project = tempResource.getProject();
|
IProject tempProject = tempResource.getProject();
|
||||||
if( indexManager.indexProblemsEnabled(project) != 0 ){
|
if( sourceIndexer.indexProblemsEnabled(tempProject) != 0 ){
|
||||||
indexManager.removeIndexerProblems( tempResource );
|
sourceIndexer.removeIndexerProblems( tempResource );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,6 +40,7 @@ import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.Plugin;
|
||||||
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
import org.eclipse.core.runtime.jobs.ISchedulingRule;
|
||||||
|
|
||||||
public class CoreModel {
|
public class CoreModel {
|
||||||
|
@ -986,4 +987,6 @@ public class CoreModel {
|
||||||
public IndexManager getIndexManager() {
|
public IndexManager getIndexManager() {
|
||||||
return manager.getIndexManager();
|
return manager.getIndexManager();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1114,6 +1114,7 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
|
||||||
return this.fDeltaProcessor.indexManager;
|
return this.fDeltaProcessor.indexManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void deleting(IProject project) {
|
public void deleting(IProject project) {
|
||||||
// discard all indexing jobs for this project
|
// discard all indexing jobs for this project
|
||||||
this.getIndexManager().discardJobs(project.getName());
|
this.getIndexManager().discardJobs(project.getName());
|
||||||
|
|
|
@ -5,7 +5,6 @@ package org.eclipse.cdt.internal.core.model;
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.IArchive;
|
import org.eclipse.cdt.core.model.IArchive;
|
||||||
|
@ -17,7 +16,6 @@ import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.ISourceRoot;
|
import org.eclipse.cdt.core.model.ISourceRoot;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IResourceDelta;
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
@ -607,21 +605,7 @@ public class DeltaProcessor {
|
||||||
if (indexManager == null)
|
if (indexManager == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (element.getElementType()) {
|
indexManager.addResourceEvent(element.getCProject().getProject(),element,delta);
|
||||||
case ICElement.C_PROJECT :
|
|
||||||
this.indexManager.indexAll(element.getCProject().getProject());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ICElement.C_CCONTAINER:
|
|
||||||
indexManager.indexSourceFolder(element.getCProject().getProject(),element.getPath(),null);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ICElement.C_UNIT:
|
|
||||||
IFile file = (IFile) delta.getResource();
|
|
||||||
IProject filesProject = file.getProject();
|
|
||||||
indexManager.addSource(file, filesProject.getFullPath());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -630,26 +614,7 @@ public class DeltaProcessor {
|
||||||
if (indexManager == null)
|
if (indexManager == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (element.getElementType()) {
|
indexManager.removeResourceEvent(element.getCProject().getProject(),element,delta);
|
||||||
case ICElement.C_PROJECT :
|
|
||||||
IPath fullPath = element.getCProject().getProject().getFullPath();
|
|
||||||
if( delta.getKind() == IResourceDelta.CHANGED )
|
|
||||||
indexManager.discardJobs(fullPath.segment(0));
|
|
||||||
indexManager.removeIndexFamily(fullPath);
|
|
||||||
// NB: Discarding index jobs belonging to this project was done during PRE_DELETE
|
|
||||||
break;
|
|
||||||
// NB: Update of index if project is opened, closed, or its c nature is added or removed
|
|
||||||
// is done in updateCurrentDeltaAndIndex
|
|
||||||
|
|
||||||
case ICElement.C_CCONTAINER:
|
|
||||||
indexManager.removeSourceFolderFromIndex(element.getCProject().getProject(),element.getPath(),null);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ICElement.C_UNIT:
|
|
||||||
IFile file = (IFile) delta.getResource();
|
|
||||||
indexManager.remove(file.getFullPath().toString(), file.getProject().getFullPath());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -660,10 +625,11 @@ public class DeltaProcessor {
|
||||||
if (resource == null)
|
if (resource == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
IProject project = resource.getProject();
|
||||||
String filename = resource.getName();
|
String filename = resource.getName();
|
||||||
|
|
||||||
if (CoreModel.isValidHeaderUnitName(resource.getProject(), filename)) {
|
if (CoreModel.isValidHeaderUnitName(project, filename)) {
|
||||||
indexManager.updateDependencies(resource);
|
indexManager.updateDependencies(project, resource);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,7 +61,7 @@
|
||||||
<!-- =================================================================================== -->
|
<!-- =================================================================================== -->
|
||||||
<extension-point id="PathEntryContainerInitializer" name="%PathEntryContainerInitializer" schema="schema/PathEntryContainerInitializer.exsd"/>
|
<extension-point id="PathEntryContainerInitializer" name="%PathEntryContainerInitializer" schema="schema/PathEntryContainerInitializer.exsd"/>
|
||||||
<extension-point id="CodeFormatter" name="%CodeFormatter.name" schema="schema/CodeFormatter.exsd"/>
|
<extension-point id="CodeFormatter" name="%CodeFormatter.name" schema="schema/CodeFormatter.exsd"/>
|
||||||
|
<extension-point id="CIndexer" name="C/C++ Indexer" schema="schema/CIndexer.exsd"/>
|
||||||
<!-- =================================================================================== -->
|
<!-- =================================================================================== -->
|
||||||
<!-- Define the list of the Binary Parser provided by the CDT -->
|
<!-- Define the list of the Binary Parser provided by the CDT -->
|
||||||
<!-- =================================================================================== -->
|
<!-- =================================================================================== -->
|
||||||
|
@ -527,5 +527,20 @@
|
||||||
<extension point="org.eclipse.core.runtime.preferences">
|
<extension point="org.eclipse.core.runtime.preferences">
|
||||||
<initializer class="org.eclipse.cdt.internal.core.CCorePreferenceInitializer"/>
|
<initializer class="org.eclipse.cdt.internal.core.CCorePreferenceInitializer"/>
|
||||||
</extension>
|
</extension>
|
||||||
|
<extension
|
||||||
|
point="org.eclipse.cdt.core.CIndexer">
|
||||||
|
<indexer
|
||||||
|
indexStorageID="org.eclipse.cdt.core.cindexstorage"
|
||||||
|
class="org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer"
|
||||||
|
name="Original C/C++ Indexer"
|
||||||
|
id="org.eclipse.cdt.core.originalsourceindexer">
|
||||||
|
</indexer>
|
||||||
|
</extension>
|
||||||
|
<extension
|
||||||
|
point="org.eclipse.core.runtime.applications">
|
||||||
|
<application>
|
||||||
|
<run class="org.eclipse.cdt.core.index2.IndexRunner"/>
|
||||||
|
</application>
|
||||||
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
119
core/org.eclipse.cdt.core/schema/CIndexer.exsd
Normal file
119
core/org.eclipse.cdt.core/schema/CIndexer.exsd
Normal file
|
@ -0,0 +1,119 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!-- Schema file written by PDE -->
|
||||||
|
<schema targetNamespace="org.eclipse.cdt.core">
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.schema plugin="org.eclipse.cdt.core" id="CDTIndexer" name="CDT Indexer"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
This extension point is used to contribute a new Indexer to the CDT. This indexer can choose to receive event notification from the index manager.
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<element name="extension">
|
||||||
|
<complexType>
|
||||||
|
<sequence>
|
||||||
|
<element ref="indexer"/>
|
||||||
|
</sequence>
|
||||||
|
<attribute name="point" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="id" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="name" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name="indexer">
|
||||||
|
<complexType>
|
||||||
|
<sequence>
|
||||||
|
<element ref="indexer" minOccurs="1" maxOccurs="unbounded"/>
|
||||||
|
</sequence>
|
||||||
|
<attribute name="id" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
a unique name for this indexer
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="name" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
a name that will be used for this indexer in the UI
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="class" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
the class that implements <code>org.eclipse.cdt.core.index2.IIndexer</code>
|
||||||
|
</documentation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.attribute kind="java" basedOn="org.eclipse.cdt.core.index2.IIndexer"/>
|
||||||
|
</appInfo>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="since"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
CDT 3.0
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="examples"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter extension point usage example here.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="apiInfo"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
Plug-ins that want to extend this extension point must implement <samp>org.eclipse.cdt.core.index.IIndexer</samp> interface.
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="implementation"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter information about supplied implementation of this extension point.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="copyright"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
</schema>
|
|
@ -1,3 +1,6 @@
|
||||||
|
2005-03-12 Bogdan Gheorghe
|
||||||
|
Updated search to work with new index framework
|
||||||
|
|
||||||
2004-11-02 Bogdan Gheorghe
|
2004-11-02 Bogdan Gheorghe
|
||||||
Partial Fix for 74427: Indexer needs to store more info
|
Partial Fix for 74427: Indexer needs to store more info
|
||||||
|
|
||||||
|
|
|
@ -187,17 +187,17 @@ public interface ICSearchConstants {
|
||||||
* has not finished indexing the workspace. Results will more likely
|
* has not finished indexing the workspace. Results will more likely
|
||||||
* not contain all the matches.
|
* not contain all the matches.
|
||||||
*/
|
*/
|
||||||
int FORCE_IMMEDIATE_SEARCH = IJob.ForceImmediate;
|
int FORCE_IMMEDIATE_SEARCH = IIndexJob.ForceImmediate;
|
||||||
/**
|
/**
|
||||||
* The search operation throws an <code>org.eclipse.core.runtime.OperationCanceledException</code>
|
* The search operation throws an <code>org.eclipse.core.runtime.OperationCanceledException</code>
|
||||||
* if the underlying indexer has not finished indexing the workspace.
|
* if the underlying indexer has not finished indexing the workspace.
|
||||||
*/
|
*/
|
||||||
int CANCEL_IF_NOT_READY_TO_SEARCH = IJob.CancelIfNotReady;
|
int CANCEL_IF_NOT_READY_TO_SEARCH = IIndexJob.CancelIfNotReady;
|
||||||
/**
|
/**
|
||||||
* The search operation waits for the underlying indexer to finish indexing
|
* The search operation waits for the underlying indexer to finish indexing
|
||||||
* the workspace before starting the search.
|
* the workspace before starting the search.
|
||||||
*/
|
*/
|
||||||
int WAIT_UNTIL_READY_TO_SEARCH = IJob.WaitUntilReady;
|
int WAIT_UNTIL_READY_TO_SEARCH = IIndexJob.WaitUntilReady;
|
||||||
|
|
||||||
public static final String EXTERNAL_SEARCH_LINK_PREFIX = "cdtlnk"; //$NON-NLS-1$
|
public static final String EXTERNAL_SEARCH_LINK_PREFIX = "cdtlnk"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
|
@ -12,11 +12,13 @@ package org.eclipse.cdt.internal.core.search;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICModel;
|
import org.eclipse.cdt.core.model.ICModel;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.core.resources.IWorkspaceRoot;
|
import org.eclipse.core.resources.IWorkspaceRoot;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
@ -89,7 +91,17 @@ public class IndexSelector {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (int i = 0; i < length; i++){
|
for (int i = 0; i < length; i++){
|
||||||
// may trigger some index recreation work
|
// may trigger some index recreation work
|
||||||
IIndex index = indexManager.getIndex(indexKeys[i], true /*reuse index file*/, false /*do not create if none*/);
|
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
|
||||||
|
ICDTIndexer indexer = indexManager.getIndexerForProject( root.getProject(indexKeys[i].toOSString()));
|
||||||
|
|
||||||
|
IIndex index = null;
|
||||||
|
|
||||||
|
if (indexer != null){
|
||||||
|
if (indexer instanceof SourceIndexer){
|
||||||
|
SourceIndexer sourceIndexer = (SourceIndexer) indexer;
|
||||||
|
index =sourceIndexer.getIndex(indexKeys[i], true /*reuse index file*/, false /*do not create if none*/);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (index != null) indexes[count++] = index; // only consider indexes which are ready yet
|
if (index != null) indexes[count++] = index; // only consider indexes which are ready yet
|
||||||
}
|
}
|
||||||
if (count != length) {
|
if (count != length) {
|
||||||
|
|
|
@ -15,19 +15,22 @@ package org.eclipse.cdt.internal.core.search;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.internal.core.index.impl.Index;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||||
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
import org.eclipse.cdt.internal.core.search.matching.CSearchPattern;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.IJob;
|
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
|
||||||
|
|
||||||
public class PatternSearchJob implements IJob {
|
public class PatternSearchJob implements IIndexJob {
|
||||||
|
|
||||||
|
|
||||||
protected CSearchPattern pattern;
|
protected CSearchPattern pattern;
|
||||||
|
@ -129,7 +132,17 @@ public class PatternSearchJob implements IJob {
|
||||||
|
|
||||||
if (index == null)
|
if (index == null)
|
||||||
return COMPLETE;
|
return COMPLETE;
|
||||||
ReadWriteMonitor monitor = indexManager.getMonitorFor(index);
|
|
||||||
|
if (!(index instanceof Index))
|
||||||
|
return FAILED;
|
||||||
|
|
||||||
|
ICDTIndexer indexer =((Index) index).getIndexer();
|
||||||
|
|
||||||
|
if (!(indexer instanceof SourceIndexer))
|
||||||
|
return FAILED;
|
||||||
|
|
||||||
|
SourceIndexer sourceIndexer = (SourceIndexer) indexer;
|
||||||
|
ReadWriteMonitor monitor = sourceIndexer.getMonitorFor(index);
|
||||||
if (monitor == null)
|
if (monitor == null)
|
||||||
return COMPLETE; // index got deleted since acquired
|
return COMPLETE; // index got deleted since acquired
|
||||||
try {
|
try {
|
||||||
|
@ -140,7 +153,7 @@ public class PatternSearchJob implements IJob {
|
||||||
try {
|
try {
|
||||||
monitor.exitRead(); // free read lock
|
monitor.exitRead(); // free read lock
|
||||||
monitor.enterWrite(); // ask permission to write
|
monitor.enterWrite(); // ask permission to write
|
||||||
this.indexManager.saveIndex(index);
|
sourceIndexer.saveIndex(index);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return FAILED;
|
return FAILED;
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -28,8 +28,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -23,7 +23,7 @@ import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
|
|
@ -29,8 +29,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,7 +22,7 @@ import java.util.Iterator;
|
||||||
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
|
|
@ -19,8 +19,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author bgheorgh
|
* @author bgheorgh
|
||||||
|
|
|
@ -23,8 +23,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
|
|
|
@ -25,8 +25,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
|
|
|
@ -22,8 +22,8 @@ import org.eclipse.cdt.internal.core.CharOperation;
|
||||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
import org.eclipse.cdt.internal.core.index.impl.IndexInput;
|
||||||
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
import org.eclipse.cdt.internal.core.index.impl.IndexedFile;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||||
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
import org.eclipse.cdt.internal.core.search.IIndexSearchRequestor;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author aniefer
|
* @author aniefer
|
||||||
|
|
|
@ -13,12 +13,9 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.internal.core.search.processing;
|
package org.eclipse.cdt.internal.core.search.processing;
|
||||||
|
|
||||||
/**
|
|
||||||
* @author bgheorgh
|
|
||||||
*/
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
|
||||||
public interface IJob {
|
public interface IIndexJob {
|
||||||
|
|
||||||
/* Waiting policies */
|
/* Waiting policies */
|
||||||
int ForceImmediate = 1;
|
int ForceImmediate = 1;
|
||||||
|
@ -30,20 +27,20 @@ public interface IJob {
|
||||||
boolean COMPLETE = true;
|
boolean COMPLETE = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* True if job belongs to the passed in jobFamily
|
* True if index job belongs to the passed in jobFamily
|
||||||
*/
|
*/
|
||||||
public boolean belongsTo(String jobFamily);
|
public boolean belongsTo(String jobFamily);
|
||||||
/**
|
/**
|
||||||
* Asks this job to cancel its execution. The cancellation
|
* Asks this index job to cancel its execution. The cancellation
|
||||||
* can take an undertermined amount of time.
|
* can take an undertermined amount of time.
|
||||||
*/
|
*/
|
||||||
public void cancel();
|
public void cancel();
|
||||||
/**
|
/**
|
||||||
* Execute the current job, answer whether it was successful.
|
* Execute the current index job, answer whether it was successful.
|
||||||
*/
|
*/
|
||||||
public boolean execute(IProgressMonitor progress);
|
public boolean execute(IProgressMonitor progress);
|
||||||
/**
|
/**
|
||||||
* Answer whether the job is ready to run.
|
* Answer whether the index job is ready to run.
|
||||||
*/
|
*/
|
||||||
public boolean isReadyToRun();
|
public boolean isReadyToRun();
|
||||||
|
|
|
@ -13,11 +13,9 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.internal.core.search.processing;
|
package org.eclipse.cdt.internal.core.search.processing;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.ICLogConstants;
|
import org.eclipse.cdt.core.ICLogConstants;
|
||||||
import org.eclipse.cdt.internal.core.Util;
|
import org.eclipse.cdt.internal.core.Util;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexRequest;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.IndexRequest;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.OperationCanceledException;
|
import org.eclipse.core.runtime.OperationCanceledException;
|
||||||
|
@ -27,7 +25,7 @@ import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
public abstract class JobManager implements Runnable {
|
public abstract class JobManager implements Runnable {
|
||||||
|
|
||||||
/* queue of jobs to execute */
|
/* queue of jobs to execute */
|
||||||
protected IJob[] awaitingJobs = new IJob[10];
|
protected IIndexJob[] awaitingJobs = new IIndexJob[10];
|
||||||
protected int jobStart = 0;
|
protected int jobStart = 0;
|
||||||
protected int jobEnd = -1;
|
protected int jobEnd = -1;
|
||||||
protected boolean executing = false;
|
protected boolean executing = false;
|
||||||
|
@ -47,8 +45,6 @@ public abstract class JobManager implements Runnable {
|
||||||
|
|
||||||
private int awaitingClients = 0;
|
private int awaitingClients = 0;
|
||||||
|
|
||||||
protected HashSet jobSet;
|
|
||||||
|
|
||||||
protected IndexingJob indexJob = null;
|
protected IndexingJob indexJob = null;
|
||||||
|
|
||||||
static private final IStatus OK_STATUS = new Status( IStatus.OK, "org.eclipse.cdt.core", IStatus.OK, "", null ); //$NON-NLS-1$//$NON-NLS-2$
|
static private final IStatus OK_STATUS = new Status( IStatus.OK, "org.eclipse.cdt.core", IStatus.OK, "", null ); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
@ -87,7 +83,7 @@ public abstract class JobManager implements Runnable {
|
||||||
* Answers the first job in the queue, or null if there is no job available
|
* Answers the first job in the queue, or null if there is no job available
|
||||||
* Until the job has completed, the job manager will keep answering the same job.
|
* Until the job has completed, the job manager will keep answering the same job.
|
||||||
*/
|
*/
|
||||||
public synchronized IJob currentJob() {
|
public synchronized IIndexJob currentJob() {
|
||||||
|
|
||||||
if ( enabled != ENABLED )
|
if ( enabled != ENABLED )
|
||||||
return null;
|
return null;
|
||||||
|
@ -114,7 +110,7 @@ public abstract class JobManager implements Runnable {
|
||||||
|
|
||||||
int oldEnabledState = 0;
|
int oldEnabledState = 0;
|
||||||
try {
|
try {
|
||||||
IJob currentJob;
|
IIndexJob currentJob;
|
||||||
// cancel current job if it belongs to the given family
|
// cancel current job if it belongs to the given family
|
||||||
synchronized(this){
|
synchronized(this){
|
||||||
currentJob = this.currentJob();
|
currentJob = this.currentJob();
|
||||||
|
@ -208,7 +204,7 @@ public abstract class JobManager implements Runnable {
|
||||||
}
|
}
|
||||||
if( indexJob != null ){
|
if( indexJob != null ){
|
||||||
String progressString = null;
|
String progressString = null;
|
||||||
IJob job = currentJob();
|
IIndexJob job = currentJob();
|
||||||
if( job instanceof IndexRequest ){
|
if( job instanceof IndexRequest ){
|
||||||
progressString = " ("; //$NON-NLS-1$
|
progressString = " ("; //$NON-NLS-1$
|
||||||
progressString += job.toString();
|
progressString += job.toString();
|
||||||
|
@ -241,23 +237,23 @@ public abstract class JobManager implements Runnable {
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public boolean performConcurrentJob(
|
public boolean performConcurrentJob(
|
||||||
IJob searchJob,
|
IIndexJob searchJob,
|
||||||
int waitingPolicy,
|
int waitingPolicy,
|
||||||
IProgressMonitor progress,
|
IProgressMonitor progress,
|
||||||
IJob jobToIgnore) {
|
IIndexJob jobToIgnore) {
|
||||||
|
|
||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
JobManager.verbose("STARTING concurrent job - " + searchJob); //$NON-NLS-1$
|
JobManager.verbose("STARTING concurrent job - " + searchJob); //$NON-NLS-1$
|
||||||
if (!searchJob.isReadyToRun()) {
|
if (!searchJob.isReadyToRun()) {
|
||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
JobManager.verbose("ABORTED concurrent job - " + searchJob); //$NON-NLS-1$
|
JobManager.verbose("ABORTED concurrent job - " + searchJob); //$NON-NLS-1$
|
||||||
return IJob.FAILED;
|
return IIndexJob.FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
int concurrentJobWork = 100;
|
int concurrentJobWork = 100;
|
||||||
if (progress != null)
|
if (progress != null)
|
||||||
progress.beginTask("", concurrentJobWork); //$NON-NLS-1$
|
progress.beginTask("", concurrentJobWork); //$NON-NLS-1$
|
||||||
boolean status = IJob.FAILED;
|
boolean status = IIndexJob.FAILED;
|
||||||
if (awaitingJobsCount() > 0) {
|
if (awaitingJobsCount() > 0) {
|
||||||
if( enabledState() == WAITING ){
|
if( enabledState() == WAITING ){
|
||||||
//the indexer is paused, resume now that we have been asked for something
|
//the indexer is paused, resume now that we have been asked for something
|
||||||
|
@ -268,7 +264,7 @@ public abstract class JobManager implements Runnable {
|
||||||
attemptPolicy = false;
|
attemptPolicy = false;
|
||||||
switch (waitingPolicy) {
|
switch (waitingPolicy) {
|
||||||
|
|
||||||
case IJob.ForceImmediate :
|
case IIndexJob.ForceImmediate :
|
||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
JobManager.verbose("-> NOT READY - forcing immediate - " + searchJob);//$NON-NLS-1$
|
JobManager.verbose("-> NOT READY - forcing immediate - " + searchJob);//$NON-NLS-1$
|
||||||
boolean wasEnabled = ( enabledState() == ENABLED );
|
boolean wasEnabled = ( enabledState() == ENABLED );
|
||||||
|
@ -284,7 +280,7 @@ public abstract class JobManager implements Runnable {
|
||||||
JobManager.verbose("FINISHED concurrent job - " + searchJob); //$NON-NLS-1$
|
JobManager.verbose("FINISHED concurrent job - " + searchJob); //$NON-NLS-1$
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
case IJob.CancelIfNotReady :
|
case IIndexJob.CancelIfNotReady :
|
||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
JobManager.verbose("-> NOT READY - cancelling - " + searchJob); //$NON-NLS-1$
|
JobManager.verbose("-> NOT READY - cancelling - " + searchJob); //$NON-NLS-1$
|
||||||
if (progress != null) progress.setCanceled(true);
|
if (progress != null) progress.setCanceled(true);
|
||||||
|
@ -292,10 +288,10 @@ public abstract class JobManager implements Runnable {
|
||||||
JobManager.verbose("CANCELED concurrent job - " + searchJob); //$NON-NLS-1$
|
JobManager.verbose("CANCELED concurrent job - " + searchJob); //$NON-NLS-1$
|
||||||
throw new OperationCanceledException();
|
throw new OperationCanceledException();
|
||||||
|
|
||||||
case IJob.WaitUntilReady :
|
case IIndexJob.WaitUntilReady :
|
||||||
int awaitingWork;
|
int awaitingWork;
|
||||||
IJob previousJob = null;
|
IIndexJob previousJob = null;
|
||||||
IJob currentJob;
|
IIndexJob currentJob;
|
||||||
IProgressMonitor subProgress = null;
|
IProgressMonitor subProgress = null;
|
||||||
int totalWork = this.awaitingJobsCount();
|
int totalWork = this.awaitingJobsCount();
|
||||||
if (progress != null && totalWork > 0) {
|
if (progress != null && totalWork > 0) {
|
||||||
|
@ -333,7 +329,7 @@ public abstract class JobManager implements Runnable {
|
||||||
|
|
||||||
if( enabledState() == WAITING ){
|
if( enabledState() == WAITING ){
|
||||||
//user canceled the index we are waiting on, force immediate
|
//user canceled the index we are waiting on, force immediate
|
||||||
waitingPolicy = IJob.ForceImmediate;
|
waitingPolicy = IIndexJob.ForceImmediate;
|
||||||
attemptPolicy = true;
|
attemptPolicy = true;
|
||||||
continue policy;
|
continue policy;
|
||||||
}
|
}
|
||||||
|
@ -372,7 +368,7 @@ public abstract class JobManager implements Runnable {
|
||||||
* @param jobToIgnore
|
* @param jobToIgnore
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private boolean jobShouldBeIgnored(IJob jobToIgnore) {
|
private boolean jobShouldBeIgnored(IIndexJob jobToIgnore) {
|
||||||
if (jobToIgnore == null)
|
if (jobToIgnore == null)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -384,7 +380,7 @@ public abstract class JobManager implements Runnable {
|
||||||
|
|
||||||
public abstract String processName();
|
public abstract String processName();
|
||||||
|
|
||||||
public synchronized void request(IJob job) {
|
public synchronized void request(IIndexJob job) {
|
||||||
if (!job.isReadyToRun()) {
|
if (!job.isReadyToRun()) {
|
||||||
if (VERBOSE)
|
if (VERBOSE)
|
||||||
JobManager.verbose("ABORTED request of background job - " + job); //$NON-NLS-1$
|
JobManager.verbose("ABORTED request of background job - " + job); //$NON-NLS-1$
|
||||||
|
@ -398,7 +394,7 @@ public abstract class JobManager implements Runnable {
|
||||||
System.arraycopy(
|
System.arraycopy(
|
||||||
awaitingJobs,
|
awaitingJobs,
|
||||||
jobStart,
|
jobStart,
|
||||||
(awaitingJobs = new IJob[size * 2]),
|
(awaitingJobs = new IIndexJob[size * 2]),
|
||||||
0,
|
0,
|
||||||
jobEnd);
|
jobEnd);
|
||||||
jobStart = 0;
|
jobStart = 0;
|
||||||
|
@ -435,11 +431,10 @@ public abstract class JobManager implements Runnable {
|
||||||
thread = new Thread(this, this.processName());
|
thread = new Thread(this, this.processName());
|
||||||
thread.setDaemon(true);
|
thread.setDaemon(true);
|
||||||
// less prioritary by default, priority is raised if clients are actively waiting on it
|
// less prioritary by default, priority is raised if clients are actively waiting on it
|
||||||
thread.setPriority(Thread.NORM_PRIORITY-1);
|
thread.setPriority(Thread.MIN_PRIORITY);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
jobSet = new HashSet();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -452,7 +447,7 @@ public abstract class JobManager implements Runnable {
|
||||||
try {
|
try {
|
||||||
while (this.thread != null) {
|
while (this.thread != null) {
|
||||||
try {
|
try {
|
||||||
IJob job;
|
IIndexJob job;
|
||||||
if ((job = currentJob()) == null) {
|
if ((job = currentJob()) == null) {
|
||||||
if (idlingStart < 0)
|
if (idlingStart < 0)
|
||||||
idlingStart = System.currentTimeMillis();
|
idlingStart = System.currentTimeMillis();
|
||||||
|
@ -548,6 +543,6 @@ public abstract class JobManager implements Runnable {
|
||||||
return buffer.toString();
|
return buffer.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void jobFinishedNotification(IJob job);
|
protected abstract void jobFinishedNotification(IIndexJob job);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,13 +31,13 @@ import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.internal.core.CDTLogWriter;
|
import org.eclipse.cdt.internal.core.CDTLogWriter;
|
||||||
import org.eclipse.cdt.internal.core.CDescriptorManager;
|
import org.eclipse.cdt.internal.core.CDescriptorManager;
|
||||||
import org.eclipse.cdt.internal.core.PathEntryVariableManager;
|
import org.eclipse.cdt.internal.core.PathEntryVariableManager;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexerRunner;
|
||||||
import org.eclipse.cdt.internal.core.model.BufferManager;
|
import org.eclipse.cdt.internal.core.model.BufferManager;
|
||||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||||
import org.eclipse.cdt.internal.core.model.DeltaProcessor;
|
import org.eclipse.cdt.internal.core.model.DeltaProcessor;
|
||||||
import org.eclipse.cdt.internal.core.model.IBufferFactory;
|
import org.eclipse.cdt.internal.core.model.IBufferFactory;
|
||||||
import org.eclipse.cdt.internal.core.model.Util;
|
import org.eclipse.cdt.internal.core.model.Util;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.SourceIndexer;
|
|
||||||
import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
|
import org.eclipse.cdt.internal.core.search.matching.MatchLocator;
|
||||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -889,7 +889,7 @@ public class CCorePlugin extends Plugin {
|
||||||
} //$NON-NLS-1$
|
} //$NON-NLS-1$
|
||||||
|
|
||||||
option = Platform.getDebugOption(INDEXER);
|
option = Platform.getDebugOption(INDEXER);
|
||||||
if(option != null) SourceIndexer.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
if(option != null) SourceIndexerRunner.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
||||||
|
|
||||||
option = Platform.getDebugOption(SEARCH);
|
option = Platform.getDebugOption(SEARCH);
|
||||||
if(option != null) SearchEngine.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
if(option != null) SearchEngine.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
2005-03-13 Bogdan Gheorghe
|
||||||
|
Updated references to IndexManager to reflect new indexing framework.
|
||||||
|
|
||||||
2005-02-03 Tanya Wolff
|
2005-02-03 Tanya Wolff
|
||||||
Fixed some content assist regression tests.
|
Fixed some content assist regression tests.
|
||||||
Added Regression tests (content assist, refactoring) to automated suite for nightly builds
|
Added Regression tests (content assist, refactoring) to automated suite for nightly builds
|
||||||
|
|
|
@ -100,8 +100,7 @@ public abstract class CompletionProposalsBaseTest extends TestCase{
|
||||||
}
|
}
|
||||||
|
|
||||||
// use the new indexer
|
// use the new indexer
|
||||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
//IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||||
indexManager.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
|
private static void addNatureToProject(IProject proj, String natureId, IProgressMonitor monitor) throws CoreException {
|
||||||
|
|
|
@ -30,7 +30,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.CHelpProviderManager;
|
import org.eclipse.cdt.internal.ui.CHelpProviderManager;
|
||||||
import org.eclipse.cdt.internal.ui.text.CHelpBookDescriptor;
|
import org.eclipse.cdt.internal.ui.text.CHelpBookDescriptor;
|
||||||
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor;
|
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor;
|
||||||
|
@ -65,7 +65,7 @@ public class ContentAssistTests extends TestCase {
|
||||||
cPrj = CProjectHelper.createCCProject("ContentAssistTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
cPrj = CProjectHelper.createCCProject("ContentAssistTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
project = cPrj.getProject();
|
project = cPrj.getProject();
|
||||||
project.setSessionProperty(IndexManager.activationKey,new Boolean(false));
|
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(false));
|
||||||
} catch ( CoreException e ) {
|
} catch ( CoreException e ) {
|
||||||
/*boo*/
|
/*boo*/
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,14 @@
|
||||||
|
2005-03-13 Bogdan Gheorghe
|
||||||
|
New UI items to support index framework
|
||||||
|
|
||||||
|
* src/org/eclipse/cdt/internal/ui/CPluginResources
|
||||||
|
* src/org/eclipse/cdt/ui/CUIPreferenceInitializer.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/dialogs/IndexerBlock.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/dialogs/IndexerOptionPropertyPage.java
|
||||||
|
* src/org/eclipse/cdt/internal/ui/dialogs/SourceIndexerBlock.java
|
||||||
|
* src/org/eclipse/cdt/ui/index/AbstractIndexerPage
|
||||||
|
* plugin.xml
|
||||||
|
|
||||||
2005-03-12 Alain Magloire
|
2005-03-12 Alain Magloire
|
||||||
Plan item 79518: for PathEntry variable manager. Enable.
|
Plan item 79518: for PathEntry variable manager. Enable.
|
||||||
* src/org/eclipse/cdt/internal/ui/preferences/PathEntryVariablesGroup.java
|
* src/org/eclipse/cdt/internal/ui/preferences/PathEntryVariablesGroup.java
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
<!-- Purpose: Provide a perspective specific text hovering for CEditor files -->
|
<!-- Purpose: Provide a perspective specific text hovering for CEditor files -->
|
||||||
<!-- =========================================================================== -->
|
<!-- =========================================================================== -->
|
||||||
<extension-point id="textHovers" name="%textHoversName"/>
|
<extension-point id="textHovers" name="%textHoversName"/>
|
||||||
|
<extension-point id="IndexerPage" name="Indexer Page" schema="schema/IndexerPage.exsd"/>
|
||||||
<extension-point id="completionContributors" name="%completionContributors" schema="schema/completionContributors.exsd"/>
|
<extension-point id="completionContributors" name="%completionContributors" schema="schema/completionContributors.exsd"/>
|
||||||
|
|
||||||
<extension
|
<extension
|
||||||
|
@ -616,11 +617,6 @@
|
||||||
class="org.eclipse.cdt.internal.ui.preferences.CFileTypesPreferencePage"
|
class="org.eclipse.cdt.internal.ui.preferences.CFileTypesPreferencePage"
|
||||||
id="org.eclipse.cdt.ui.preferences.CFileTypesPreferences">
|
id="org.eclipse.cdt.ui.preferences.CFileTypesPreferences">
|
||||||
</page>
|
</page>
|
||||||
<page
|
|
||||||
class="org.eclipse.cdt.internal.ui.preferences.CSearchPreferencePage"
|
|
||||||
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
|
|
||||||
name="%CDTSearch.name"
|
|
||||||
id="org.eclipse.cdt.ui.preferences.CSearchPreferencePage"/>
|
|
||||||
<page
|
<page
|
||||||
name="%appearancePrefName"
|
name="%appearancePrefName"
|
||||||
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
|
category="org.eclipse.cdt.ui.preferences.CPluginPreferencePage"
|
||||||
|
@ -1324,13 +1320,20 @@
|
||||||
file="templates/default-templates.xml">
|
file="templates/default-templates.xml">
|
||||||
</include>
|
</include>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
<extension
|
<extension
|
||||||
|
point="org.eclipse.cdt.ui.IndexerPage">
|
||||||
|
<indexerUI
|
||||||
|
class="org.eclipse.cdt.ui.dialogs.SourceIndexerBlock"
|
||||||
|
indexerID="org.eclipse.cdt.core.originalsourceindexer"
|
||||||
|
name="Original C/C++ Indexer"
|
||||||
|
id="org.eclipse.cdt.ui.originalSourceIndexerUI"/>
|
||||||
|
</extension>
|
||||||
|
<extension
|
||||||
point="org.eclipse.cdt.ui.completionContributors">
|
point="org.eclipse.cdt.ui.completionContributors">
|
||||||
<contributor
|
<contributor
|
||||||
class="org.eclipse.cdt.internal.ui.text.contentassist.DOMCompletionContributor"
|
class="org.eclipse.cdt.internal.ui.text.contentassist.DOMCompletionContributor"
|
||||||
id="DOM"
|
id="DOM"
|
||||||
priority="1"/>
|
priority="1"/>
|
||||||
</extension>
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
123
core/org.eclipse.cdt.ui/schema/IndexerPage.exsd
Normal file
123
core/org.eclipse.cdt.ui/schema/IndexerPage.exsd
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
|
<!-- Schema file written by PDE -->
|
||||||
|
<schema targetNamespace="org.eclipse.cdt.ui">
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.schema plugin="org.eclipse.cdt.ui" id="IndexerPage" name="Indexer Page"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter description of this extension point.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<element name="extension">
|
||||||
|
<complexType>
|
||||||
|
<sequence>
|
||||||
|
<element ref="indexerUI" minOccurs="1" maxOccurs="unbounded"/>
|
||||||
|
</sequence>
|
||||||
|
<attribute name="point" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="id" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="name" type="string">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<element name="indexerUI">
|
||||||
|
<complexType>
|
||||||
|
<attribute name="id" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
a unique id for this indexer page
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="name" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
a UI name for this page to be used in the UI
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="indexerID" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
the unique id of the indexer that this UI is associated with
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
<attribute name="class" type="string" use="required">
|
||||||
|
<annotation>
|
||||||
|
<documentation>
|
||||||
|
the class that implements <code>org.eclipse.cdt.ui.index2.AbstractIndexerPage</code>
|
||||||
|
</documentation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.attribute kind="java"/>
|
||||||
|
</appInfo>
|
||||||
|
</annotation>
|
||||||
|
</attribute>
|
||||||
|
</complexType>
|
||||||
|
</element>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="since"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter the first release in which this extension point appears.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="examples"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter extension point usage example here.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="apiInfo"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter API information here.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="implementation"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
[Enter information about supplied implementation of this extension point.]
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
<annotation>
|
||||||
|
<appInfo>
|
||||||
|
<meta.section type="copyright"/>
|
||||||
|
</appInfo>
|
||||||
|
<documentation>
|
||||||
|
|
||||||
|
</documentation>
|
||||||
|
</annotation>
|
||||||
|
|
||||||
|
</schema>
|
|
@ -38,8 +38,9 @@ ErrorParserBlock.desc=Set the error parsers for this project
|
||||||
BinaryParserBlock.label=Binary Parser
|
BinaryParserBlock.label=Binary Parser
|
||||||
BinaryParserBlock.desc=Set required binary parser for this project
|
BinaryParserBlock.desc=Set required binary parser for this project
|
||||||
|
|
||||||
IndexerBlock.label=C/C++ Indexer
|
BaseIndexerBlock.label=C/C++ Indexer
|
||||||
IndexerBlock.desc=C/C++ Indexer setting for this project.
|
BaseIndexerBlock.desc=C/C++ Indexer setting for this project.
|
||||||
|
BaseIndexerBlock.comboLabel=Available indexers
|
||||||
|
|
||||||
ReferenceBlock.label= Projects
|
ReferenceBlock.label= Projects
|
||||||
ReferenceBlock.desc= Referenced C/C++ Projects
|
ReferenceBlock.desc= Referenced C/C++ Projects
|
||||||
|
|
|
@ -1,191 +0,0 @@
|
||||||
/**********************************************************************
|
|
||||||
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.preferences;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.SourceIndexer;
|
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchPage;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
|
||||||
import org.eclipse.core.runtime.Preferences;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
import org.eclipse.jface.preference.PreferencePage;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Button;
|
|
||||||
import org.eclipse.swt.widgets.Combo;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Control;
|
|
||||||
import org.eclipse.swt.widgets.Group;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
import org.eclipse.ui.IWorkbench;
|
|
||||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
|
||||||
|
|
||||||
public class CSearchPreferencePage extends PreferencePage
|
|
||||||
implements
|
|
||||||
IWorkbenchPreferencePage {
|
|
||||||
|
|
||||||
private Combo fExternLinks;
|
|
||||||
private Button fExternEnabled;
|
|
||||||
|
|
||||||
protected OverlayPreferenceStore fOverlayStore;
|
|
||||||
private Text fTextControl;
|
|
||||||
|
|
||||||
private static final String TIMEOUT_VALUE = "20000"; //$NON-NLS-1$
|
|
||||||
|
|
||||||
public CSearchPreferencePage(){
|
|
||||||
setPreferenceStore(CUIPlugin.getDefault().getPreferenceStore());
|
|
||||||
fOverlayStore = createOverlayStore();
|
|
||||||
}
|
|
||||||
|
|
||||||
private OverlayPreferenceStore createOverlayStore() {
|
|
||||||
ArrayList overlayKeys = new ArrayList();
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CSearchPage.EXTERNALMATCH_ENABLED));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSearchPage.EXTERNALMATCH_VISIBLE));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, SourceIndexer.CDT_INDEXER_TIMEOUT));
|
|
||||||
|
|
||||||
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
|
||||||
overlayKeys.toArray(keys);
|
|
||||||
return new OverlayPreferenceStore(getPreferenceStore(), keys);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
|
|
||||||
*/
|
|
||||||
protected Control createContents(Composite parent) {
|
|
||||||
fOverlayStore.load();
|
|
||||||
fOverlayStore.start();
|
|
||||||
|
|
||||||
initializeDialogUnits(parent);
|
|
||||||
|
|
||||||
Composite result= new Composite(parent, SWT.NONE);
|
|
||||||
GridLayout layout= new GridLayout();
|
|
||||||
layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
|
|
||||||
layout.marginWidth= 0;
|
|
||||||
layout.verticalSpacing= convertVerticalDLUsToPixels(10);
|
|
||||||
layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
|
|
||||||
result.setLayout(layout);
|
|
||||||
|
|
||||||
Group indexerTimeoutGroup= new Group(result, SWT.NONE);
|
|
||||||
indexerTimeoutGroup.setLayout(new GridLayout());
|
|
||||||
indexerTimeoutGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
indexerTimeoutGroup.setText(PreferencesMessages.getString("CSearchPreferences.IndexerTimeout.IndexerTimeoutGroup")); //$NON-NLS-1$
|
|
||||||
|
|
||||||
fTextControl = (Text) addTextField( indexerTimeoutGroup, PreferencesMessages.getString("CSearchPreferences.IndexerTimeout.Timeout"),"TimeOut",6,0,true); //$NON-NLS-1$ //$NON-NLS-2$
|
|
||||||
|
|
||||||
initialize();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initialize(){
|
|
||||||
fTextControl.setText(fOverlayStore.getString(SourceIndexer.CDT_INDEXER_TIMEOUT));
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
|
|
||||||
*/
|
|
||||||
public void init(IWorkbench workbench) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a button with the given label and sets the default
|
|
||||||
* configuration data.
|
|
||||||
*/
|
|
||||||
private Combo createComboBox( Composite parent, String label, String[] items, String selection )
|
|
||||||
{
|
|
||||||
ControlFactory.createLabel( parent, label );
|
|
||||||
Combo combo = ControlFactory.createSelectCombo( parent, items, selection );
|
|
||||||
combo.setLayoutData( new GridData() );
|
|
||||||
return combo;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Creates a button with the given label and sets the default
|
|
||||||
* configuration data.
|
|
||||||
*/
|
|
||||||
private Button createCheckButton( Composite parent, String label )
|
|
||||||
{
|
|
||||||
Button button = new Button( parent, SWT.CHECK | SWT.LEFT );
|
|
||||||
button.setText( label );
|
|
||||||
// FieldEditor GridData
|
|
||||||
GridData data = new GridData();
|
|
||||||
button.setLayoutData( data );
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Control addTextField(Composite composite, String label, String key, int textLimit, int indentation, boolean isNumber) {
|
|
||||||
|
|
||||||
Label labelControl = new Label(composite, SWT.NONE);
|
|
||||||
labelControl.setText(label);
|
|
||||||
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
||||||
gd.horizontalIndent = indentation;
|
|
||||||
labelControl.setLayoutData(gd);
|
|
||||||
|
|
||||||
Text textControl = new Text(composite, SWT.BORDER | SWT.SINGLE);
|
|
||||||
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
||||||
gd.widthHint = convertWidthInCharsToPixels(textLimit + 1);
|
|
||||||
textControl.setLayoutData(gd);
|
|
||||||
textControl.setTextLimit(textLimit);
|
|
||||||
|
|
||||||
return textControl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @see IPreferencePage#performOk()
|
|
||||||
*/
|
|
||||||
public boolean performOk() {
|
|
||||||
|
|
||||||
String timeOut = fTextControl.getText();
|
|
||||||
try {
|
|
||||||
// Check the string number
|
|
||||||
Integer.parseInt(timeOut);
|
|
||||||
} catch (NumberFormatException ex){
|
|
||||||
timeOut = TIMEOUT_VALUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
fOverlayStore.setValue(SourceIndexer.CDT_INDEXER_TIMEOUT, timeOut);
|
|
||||||
fOverlayStore.propagate();
|
|
||||||
|
|
||||||
// Store IProblem Marker value in CCorePlugin Preferences
|
|
||||||
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
|
||||||
|
|
||||||
prefs.setValue(SourceIndexer.CDT_INDEXER_TIMEOUT,timeOut);
|
|
||||||
CCorePlugin.getDefault().savePluginPreferences();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param store
|
|
||||||
*/
|
|
||||||
public static void initDefaults(IPreferenceStore store) {
|
|
||||||
store.setDefault(SourceIndexer.CDT_INDEXER_TIMEOUT,TIMEOUT_VALUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @see PreferencePage#performDefaults()
|
|
||||||
*/
|
|
||||||
protected void performDefaults() {
|
|
||||||
fOverlayStore.loadDefaults();
|
|
||||||
initialize();
|
|
||||||
super.performDefaults();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,210 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004 IBM Corporation 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 Corporation - initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
/*
|
|
||||||
* Created on Mar 30, 2004
|
|
||||||
*
|
|
||||||
* TODO To change the template for this generated file go to
|
|
||||||
* Window - Preferences - Java - Code Generation - Code and Comments
|
|
||||||
*/
|
|
||||||
package org.eclipse.cdt.internal.ui.preferences;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.browser.AllTypesCache;
|
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.SourceIndexer;
|
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchPage;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
|
||||||
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
|
||||||
import org.eclipse.core.runtime.Preferences;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
|
||||||
import org.eclipse.jface.preference.PreferencePage;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.events.SelectionEvent;
|
|
||||||
import org.eclipse.swt.events.SelectionListener;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Button;
|
|
||||||
import org.eclipse.swt.widgets.Combo;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Control;
|
|
||||||
import org.eclipse.swt.widgets.Group;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
import org.eclipse.ui.IWorkbench;
|
|
||||||
import org.eclipse.ui.IWorkbenchPreferencePage;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author bgheorgh
|
|
||||||
*
|
|
||||||
* TODO To change the template for this generated type comment go to
|
|
||||||
* Window - Preferences - Java - Code Generation - Code and Comments
|
|
||||||
*/
|
|
||||||
public class WorkInProgressPreferencePage extends PreferencePage
|
|
||||||
implements
|
|
||||||
IWorkbenchPreferencePage {
|
|
||||||
|
|
||||||
private Button fBackgroundTypeCacheEnabled;
|
|
||||||
protected OverlayPreferenceStore fOverlayStore;
|
|
||||||
|
|
||||||
public WorkInProgressPreferencePage(){
|
|
||||||
setPreferenceStore(CUIPlugin.getDefault().getPreferenceStore());
|
|
||||||
fOverlayStore = createOverlayStore();
|
|
||||||
}
|
|
||||||
|
|
||||||
private OverlayPreferenceStore createOverlayStore() {
|
|
||||||
ArrayList overlayKeys = new ArrayList();
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, CSearchPage.EXTERNALMATCH_ENABLED));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.INT, CSearchPage.EXTERNALMATCH_VISIBLE));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.STRING, SourceIndexer.CDT_INDEXER_TIMEOUT));
|
|
||||||
overlayKeys.add(new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
|
||||||
|
|
||||||
OverlayPreferenceStore.OverlayKey[] keys = new OverlayPreferenceStore.OverlayKey[overlayKeys.size()];
|
|
||||||
overlayKeys.toArray(keys);
|
|
||||||
return new OverlayPreferenceStore(getPreferenceStore(), keys);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
|
|
||||||
*/
|
|
||||||
protected Control createContents(Composite parent) {
|
|
||||||
fOverlayStore.load();
|
|
||||||
fOverlayStore.start();
|
|
||||||
|
|
||||||
initializeDialogUnits(parent);
|
|
||||||
|
|
||||||
Composite result= new Composite(parent, SWT.NONE);
|
|
||||||
GridLayout layout= new GridLayout();
|
|
||||||
layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
|
|
||||||
layout.marginWidth= 0;
|
|
||||||
layout.verticalSpacing= convertVerticalDLUsToPixels(10);
|
|
||||||
layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
|
|
||||||
result.setLayout(layout);
|
|
||||||
|
|
||||||
Group backgroundTypeCacheGroup= new Group(result, SWT.NONE);
|
|
||||||
backgroundTypeCacheGroup.setLayout(new GridLayout());
|
|
||||||
backgroundTypeCacheGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
backgroundTypeCacheGroup.setText("Open Type"); //$NON-NLS-1$
|
|
||||||
|
|
||||||
fBackgroundTypeCacheEnabled = createCheckButton(backgroundTypeCacheGroup, "Cache types in background"); //$NON-NLS-1$
|
|
||||||
fBackgroundTypeCacheEnabled.addSelectionListener(new SelectionListener() {
|
|
||||||
public void widgetDefaultSelected(SelectionEvent e) {
|
|
||||||
}
|
|
||||||
public void widgetSelected(SelectionEvent e) {
|
|
||||||
Button button = (Button) e.widget;
|
|
||||||
fOverlayStore.setValue(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, button.getSelection());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Group editorCorrectionGroup= new Group(result, SWT.NONE);
|
|
||||||
editorCorrectionGroup.setLayout(new GridLayout());
|
|
||||||
editorCorrectionGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
editorCorrectionGroup.setText("Editor"); //$NON-NLS-1$
|
|
||||||
|
|
||||||
initialize();
|
|
||||||
|
|
||||||
return result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initialize(){
|
|
||||||
fBackgroundTypeCacheEnabled.setSelection(fOverlayStore.getBoolean(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
|
|
||||||
*/
|
|
||||||
public void init(IWorkbench workbench) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a button with the given label and sets the default
|
|
||||||
* configuration data.
|
|
||||||
*/
|
|
||||||
private Combo createComboBox( Composite parent, String label, String[] items, String selection )
|
|
||||||
{
|
|
||||||
ControlFactory.createLabel( parent, label );
|
|
||||||
Combo combo = ControlFactory.createSelectCombo( parent, items, selection );
|
|
||||||
combo.setLayoutData( new GridData() );
|
|
||||||
return combo;
|
|
||||||
}
|
|
||||||
/**
|
|
||||||
* Creates a button with the given label and sets the default
|
|
||||||
* configuration data.
|
|
||||||
*/
|
|
||||||
private Button createCheckButton( Composite parent, String label )
|
|
||||||
{
|
|
||||||
Button button = new Button( parent, SWT.CHECK | SWT.LEFT );
|
|
||||||
button.setText( label );
|
|
||||||
// FieldEditor GridData
|
|
||||||
GridData data = new GridData();
|
|
||||||
button.setLayoutData( data );
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Control addTextField(Composite composite, String label, String key, int textLimit, int indentation, boolean isNumber) {
|
|
||||||
|
|
||||||
Label labelControl = new Label(composite, SWT.NONE);
|
|
||||||
labelControl.setText(label);
|
|
||||||
GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
||||||
gd.horizontalIndent = indentation;
|
|
||||||
labelControl.setLayoutData(gd);
|
|
||||||
|
|
||||||
Text textControl = new Text(composite, SWT.BORDER | SWT.SINGLE);
|
|
||||||
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
|
|
||||||
gd.widthHint = convertWidthInCharsToPixels(textLimit + 1);
|
|
||||||
textControl.setLayoutData(gd);
|
|
||||||
textControl.setTextLimit(textLimit);
|
|
||||||
|
|
||||||
return textControl;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* @see IPreferencePage#performOk()
|
|
||||||
*/
|
|
||||||
public boolean performOk() {
|
|
||||||
|
|
||||||
fOverlayStore.propagate();
|
|
||||||
|
|
||||||
// Store IProblem Marker value in CCorePlugin Preferences
|
|
||||||
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
|
||||||
|
|
||||||
prefs.setValue(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, fOverlayStore.getString(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
|
||||||
CCorePlugin.getDefault().savePluginPreferences();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param store
|
|
||||||
*/
|
|
||||||
public static void initDefaults(IPreferenceStore store) {
|
|
||||||
store.setDefault(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, false);
|
|
||||||
Preferences prefs = CCorePlugin.getDefault().getPluginPreferences();
|
|
||||||
|
|
||||||
if (prefs != null){
|
|
||||||
prefs.setValue(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE, store.getString(AllTypesCache.ENABLE_BACKGROUND_TYPE_CACHE));
|
|
||||||
CCorePlugin.getDefault().savePluginPreferences();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* @see PreferencePage#performDefaults()
|
|
||||||
*/
|
|
||||||
protected void performDefaults() {
|
|
||||||
fOverlayStore.loadDefaults();
|
|
||||||
initialize();
|
|
||||||
super.performDefaults();
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,9 +14,7 @@ import org.eclipse.cdt.internal.ui.cview.CView;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.BuildConsolePreferencePage;
|
import org.eclipse.cdt.internal.ui.preferences.BuildConsolePreferencePage;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.CEditorPreferencePage;
|
import org.eclipse.cdt.internal.ui.preferences.CEditorPreferencePage;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.CPluginPreferencePage;
|
import org.eclipse.cdt.internal.ui.preferences.CPluginPreferencePage;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.CSearchPreferencePage;
|
|
||||||
import org.eclipse.cdt.internal.ui.preferences.CodeAssistPreferencePage;
|
import org.eclipse.cdt.internal.ui.preferences.CodeAssistPreferencePage;
|
||||||
import org.eclipse.cdt.internal.ui.preferences.WorkInProgressPreferencePage;
|
|
||||||
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
|
import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer;
|
||||||
import org.eclipse.jface.preference.IPreferenceStore;
|
import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
import org.eclipse.ui.editors.text.EditorsUI;
|
import org.eclipse.ui.editors.text.EditorsUI;
|
||||||
|
@ -38,8 +36,6 @@ public class CUIPreferenceInitializer extends AbstractPreferenceInitializer {
|
||||||
PreferenceConstants.initializeDefaultValues(store);
|
PreferenceConstants.initializeDefaultValues(store);
|
||||||
CPluginPreferencePage.initDefaults(store);
|
CPluginPreferencePage.initDefaults(store);
|
||||||
BuildConsolePreferencePage.initDefaults(store);
|
BuildConsolePreferencePage.initDefaults(store);
|
||||||
WorkInProgressPreferencePage.initDefaults(store);
|
|
||||||
CSearchPreferencePage.initDefaults(store);
|
|
||||||
CView.initDefaults(store);
|
CView.initDefaults(store);
|
||||||
CEditorPreferencePage.initDefaults(store);
|
CEditorPreferencePage.initDefaults(store);
|
||||||
CodeAssistPreferencePage.initDefaults(store);
|
CodeAssistPreferencePage.initDefaults(store);
|
||||||
|
|
|
@ -1,80 +1,443 @@
|
||||||
/*******************************************************************************
|
/**********************************************************************
|
||||||
* Copyright (c) 2004 IBM Corporation and others.
|
* Copyright (c) 2005 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Common Public License v0.5
|
* are made available under the terms of the Common Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
* http://www.eclipse.org/legal/cpl-v05.html
|
* http://www.eclipse.org/legal/cpl-v10.html
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* IBM Corp. - Rational Software - initial implementation
|
* IBM - Initial API and implementation
|
||||||
******************************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
package org.eclipse.cdt.ui.dialogs;
|
package org.eclipse.cdt.ui.dialogs;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.cdt.ui.index.AbstractIndexerPage;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.TabFolderLayout;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.QualifiedName;
|
||||||
|
import org.eclipse.swt.events.SelectionAdapter;
|
||||||
|
import org.eclipse.swt.events.SelectionEvent;
|
||||||
|
import org.eclipse.swt.graphics.Font;
|
||||||
import org.eclipse.swt.layout.GridData;
|
import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
|
import org.eclipse.swt.widgets.Combo;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Group;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This <code>IndexerBlock2</code> is used in the <code>MakeProjectWizardOptionPage</code> and
|
||||||
|
* the <code>NewManagedProjectOptionPage</code> to display the indexer options during the creation of
|
||||||
|
* a new project.
|
||||||
|
*/
|
||||||
|
|
||||||
public class IndexerBlock extends AbstractCOptionPage {
|
public class IndexerBlock extends AbstractCOptionPage {
|
||||||
|
|
||||||
private IndexerOptionDialogPage optionPage;
|
public final static String INDEX_UI_ID = CUIPlugin.PLUGIN_ID + ".cdtindexers"; //$NON-NLS-1$
|
||||||
|
public final static String INDEXERUIID = "indexerUIID"; //$NON-NLS-1$
|
||||||
|
public final static QualifiedName indexerUIIDKey = new QualifiedName(INDEX_UI_ID, INDEXERUIID);
|
||||||
|
|
||||||
|
public static final String INDEXER_UI = "indexerUI"; //$NON-NLS-1$
|
||||||
|
public static final String INDEXER_UI_VALUE = "indexerUIValue"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
private static final String INDEXER_LABEL = CUIPlugin.getResourceString("BaseIndexerBlock.label" ); //$NON-NLS-1$
|
||||||
|
private static final String INDEXER_DESCRIPTION = CUIPlugin.getResourceString("BaseIndexerBlock.desc"); //$NON-NLS-1$
|
||||||
|
private static final String INDEXER_COMBO_LABEL = CUIPlugin.getResourceString("BaseIndexerBlock.comboLabel"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
private static final String INDEXER_LABEL = "IndexerBlock.label"; //$NON-NLS-1$
|
private Combo indexersComboBox;
|
||||||
private static final String INDEXER_DESC = "IndexerBlock.desc"; //$NON-NLS-1$
|
private HashMap indexerPageMap;
|
||||||
|
private String selectedIndexerId = null;
|
||||||
|
private Composite parentComposite;
|
||||||
|
private ICOptionPage currentPage;
|
||||||
|
|
||||||
public IndexerBlock(){
|
|
||||||
super(CUIPlugin.getResourceString(INDEXER_LABEL));
|
public IndexerBlock(){
|
||||||
setDescription(CUIPlugin.getResourceString(INDEXER_DESC));
|
super(INDEXER_LABEL);
|
||||||
optionPage = new IndexerOptionDialogPage();
|
setDescription(INDEXER_DESCRIPTION);
|
||||||
|
initializeIndexerPageMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/**
|
||||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(org.eclipse.core.runtime.IProgressMonitor)
|
* Create a profile page only on request
|
||||||
|
*/
|
||||||
|
protected static class IndexerPageConfiguration {
|
||||||
|
|
||||||
|
ICOptionPage page;
|
||||||
|
IConfigurationElement element;
|
||||||
|
|
||||||
|
public IndexerPageConfiguration(IConfigurationElement _element) {
|
||||||
|
element = _element;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICOptionPage getPage() throws CoreException {
|
||||||
|
if (page == null) {
|
||||||
|
page = (ICOptionPage) element.createExecutableExtension("class"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
return page;
|
||||||
|
}
|
||||||
|
public String getName() {
|
||||||
|
return element.getAttribute("name"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
public String getIndexerID(){
|
||||||
|
return element.getAttribute("indexerID"); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
|
||||||
|
*/
|
||||||
|
public void createControl(Composite parent) {
|
||||||
|
|
||||||
|
|
||||||
|
Composite composite = ControlFactory.createComposite(parent, 1);
|
||||||
|
Font font = parent.getFont();
|
||||||
|
GridLayout layout= ((GridLayout)composite.getLayout());
|
||||||
|
layout.marginHeight= 0;
|
||||||
|
layout.marginWidth= 0;
|
||||||
|
layout.verticalSpacing= 0;
|
||||||
|
layout.horizontalSpacing= GridData.FILL_HORIZONTAL;
|
||||||
|
composite.setFont(font);
|
||||||
|
setControl(composite);
|
||||||
|
|
||||||
|
|
||||||
|
// create a composite for general scanner config discovery options
|
||||||
|
Composite scComp = ControlFactory.createComposite(composite, 1);
|
||||||
|
((GridLayout)scComp.getLayout()).marginHeight = 0;
|
||||||
|
((GridLayout)scComp.getLayout()).marginTop = 5;
|
||||||
|
scComp.setFont(font);
|
||||||
|
|
||||||
|
// Create a group for discovered indexer's UI
|
||||||
|
if (createIndexerControls(scComp)) {
|
||||||
|
// create a composite for discovery profile options
|
||||||
|
Composite indexPageComposite = ControlFactory.createComposite(composite, 1);
|
||||||
|
indexPageComposite.setFont(font);
|
||||||
|
GridData gd = (GridData) indexPageComposite.getLayoutData();
|
||||||
|
gd.grabExcessHorizontalSpace = true;
|
||||||
|
// gd.grabExcessVerticalSpace = true;
|
||||||
|
gd.horizontalAlignment = GridData.FILL;
|
||||||
|
gd.verticalAlignment = GridData.FILL;
|
||||||
|
indexPageComposite.setLayout(new TabFolderLayout());
|
||||||
|
// Must set the composite parent to super class.
|
||||||
|
parentComposite = indexPageComposite;
|
||||||
|
|
||||||
|
setPage();
|
||||||
|
|
||||||
|
}
|
||||||
|
parent.layout(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
public void performApply(IProgressMonitor monitor) throws CoreException {
|
private void setPage() {
|
||||||
IProject newProject = null;
|
|
||||||
|
String profileId = getCurrentIndexPageId();
|
||||||
|
|
||||||
|
//If no indexer has been selected, return
|
||||||
|
if (profileId == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ICOptionPage page = getIndexerPage(profileId);
|
||||||
|
if (page != null) {
|
||||||
|
if (page.getControl() == null) {
|
||||||
|
page.setContainer(getContainer());
|
||||||
|
page.createControl(parentComposite);
|
||||||
|
parentComposite.layout(true);
|
||||||
|
parentComposite.pack(true);
|
||||||
|
} else {
|
||||||
|
page.setVisible(false);
|
||||||
|
}
|
||||||
|
page.setVisible(true);
|
||||||
|
}
|
||||||
|
setCurrentPage(page);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param page
|
||||||
|
*/
|
||||||
|
private void setCurrentPage(ICOptionPage page) {
|
||||||
|
currentPage = page;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
protected String getCurrentIndexPageId() {
|
||||||
|
String selectedIndexPageName = getSelectedIndexerID();
|
||||||
|
|
||||||
|
if (selectedIndexPageName == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
String selectedIndexPageId = getIndexerPageId(selectedIndexPageName);
|
||||||
|
return selectedIndexPageId;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param scComp
|
||||||
|
* @param numberOfColumns
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private boolean createIndexerControls(Composite parent) {
|
||||||
|
//TODO: Put in some logic to deal with old CDT project: upgrade old projects
|
||||||
|
//to use the Classic CDT Indexer
|
||||||
|
|
||||||
|
Group group= ControlFactory.createGroup(parent,INDEXER_COMBO_LABEL,2);
|
||||||
|
|
||||||
|
// Add discovered indexers combo box
|
||||||
|
indexersComboBox = ControlFactory.createSelectCombo(group,"", ""); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
|
//Add combo box listener
|
||||||
|
indexersComboBox.addSelectionListener(new SelectionAdapter() {
|
||||||
|
public void widgetSelected(SelectionEvent e) {
|
||||||
|
setPage();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//Add button
|
||||||
|
ControlFactory.createPushButton(group,"Info ...");
|
||||||
|
|
||||||
|
// fill the combobox and set the initial value
|
||||||
|
for (Iterator items = getIndexerPageIdList().iterator(); items.hasNext();) {
|
||||||
|
String profileId = (String)items.next();
|
||||||
|
String pageName = getIndexerPageName(profileId);
|
||||||
|
if (pageName != null) {
|
||||||
|
indexersComboBox.add(pageName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds all the contributed Indexer Pages to a map
|
||||||
|
*/
|
||||||
|
private void initializeIndexerPageMap() {
|
||||||
|
indexerPageMap = new HashMap(5);
|
||||||
|
|
||||||
|
IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(CUIPlugin.getPluginId(), "IndexerPage"); //$NON-NLS-1$
|
||||||
|
IConfigurationElement[] infos = extensionPoint.getConfigurationElements();
|
||||||
|
for (int i = 0; i < infos.length; i++) {
|
||||||
|
if (infos[i].getName().equals("indexerUI")) { //$NON-NLS-1$
|
||||||
|
String id = infos[i].getAttribute("id"); //$NON-NLS-1$
|
||||||
|
indexerPageMap.put(id, new IndexerPageConfiguration(infos[i]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the contributed Indexer Pages as a list
|
||||||
|
*/
|
||||||
|
protected List getIndexerPageIdList() {
|
||||||
|
return new ArrayList(indexerPageMap.keySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the page name for the given id
|
||||||
|
* @param profileId
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
protected String getIndexerPageName(String indexerPageId) {
|
||||||
|
IndexerPageConfiguration configElement =
|
||||||
|
(IndexerPageConfiguration) indexerPageMap.get(indexerPageId);
|
||||||
|
if (configElement != null) {
|
||||||
|
return configElement.getName();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Returns the indexer page id for the give name
|
||||||
|
* @param indexerPageName
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
protected String getIndexerPageId(String indexerPageName) {
|
||||||
|
for (Iterator I = indexerPageMap.keySet().iterator(); I.hasNext();) {
|
||||||
|
String indexerPageId = (String) I.next();
|
||||||
|
String tempPageName = getIndexerPageName(indexerPageId);
|
||||||
|
if (indexerPageName.equals(tempPageName)) {
|
||||||
|
return indexerPageId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICOptionPage getIndexerPage(String indexerPageId) {
|
||||||
|
IndexerPageConfiguration configElement =
|
||||||
|
(IndexerPageConfiguration) indexerPageMap.get(indexerPageId);
|
||||||
|
if (configElement != null) {
|
||||||
|
try {
|
||||||
|
return configElement.getPage();
|
||||||
|
} catch (CoreException e) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the indexer id for the given name
|
||||||
|
* @param profileId
|
||||||
|
* @return String
|
||||||
|
*/
|
||||||
|
protected String getIndexerIdName(String indexerPageId) {
|
||||||
|
IndexerPageConfiguration configElement =
|
||||||
|
(IndexerPageConfiguration) indexerPageMap.get(indexerPageId);
|
||||||
|
if (configElement != null) {
|
||||||
|
return configElement.getIndexerID();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||||
|
IProject newProject = null;
|
||||||
newProject = getContainer().getProject();
|
newProject = getContainer().getProject();
|
||||||
|
|
||||||
optionPage.persistIndexerValues(newProject);
|
persistIndexerSettings(newProject, monitor);
|
||||||
|
}
|
||||||
|
|
||||||
boolean indexProject = optionPage.getIndexerValue();
|
/**
|
||||||
|
* Persists BasicIndexerBlock settings to disk and allows current indexer page to persist settings
|
||||||
|
* This is needed since we need to pass in the project if we are trying to save changes made to the
|
||||||
|
* property page.
|
||||||
|
*/
|
||||||
|
public void persistIndexerSettings(IProject project, IProgressMonitor monitor) throws CoreException{
|
||||||
|
|
||||||
if (indexProject && newProject != null)
|
persistIndexerValues(project);
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexAll(newProject);
|
|
||||||
|
|
||||||
}
|
//Give the chosen indexer a chance to persist its values
|
||||||
/* (non-Javadoc)
|
if (currentPage != null){
|
||||||
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performDefaults()
|
currentPage.performApply(monitor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void performDefaults() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return
|
||||||
*/
|
*/
|
||||||
public void performDefaults() {
|
public boolean isIndexEnabled() {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
|
//Storage section
|
||||||
|
|
||||||
|
public void persistIndexerValues(IProject project){
|
||||||
|
ICDescriptor descriptor = null;
|
||||||
|
Element rootElement = null;
|
||||||
|
IProject newProject = null;
|
||||||
|
|
||||||
|
//Get the currently selected indexer from the UI
|
||||||
|
String indexerName = getSelectedIndexerID();
|
||||||
|
//If no indexer has been selected, return
|
||||||
|
if (indexerName == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Match up the selected indexer in the UI to a corresponding
|
||||||
|
//contributed Indexer Page ID
|
||||||
|
String indexerPageID = getIndexerPageId(indexerName);
|
||||||
|
|
||||||
|
if (indexerPageID == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
//Get the id of the indexer that goes along with this UI page - this gets persisted
|
||||||
|
String indexerID = getIndexerIdName(indexerPageID);
|
||||||
|
|
||||||
|
try {
|
||||||
|
newProject = project;
|
||||||
|
descriptor = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
|
||||||
|
rootElement = descriptor.getProjectData(IndexManager.CDT_INDEXER);
|
||||||
|
|
||||||
|
// Clear out all current children
|
||||||
|
Node child = rootElement.getFirstChild();
|
||||||
|
while (child != null) {
|
||||||
|
rootElement.removeChild(child);
|
||||||
|
child = rootElement.getFirstChild();
|
||||||
|
}
|
||||||
|
Document doc = rootElement.getOwnerDocument();
|
||||||
|
|
||||||
|
saveIndexerInfo(indexerID, indexerPageID, rootElement, doc);
|
||||||
|
|
||||||
|
descriptor.saveProjectData();
|
||||||
|
|
||||||
|
//Update project session property
|
||||||
|
|
||||||
|
project.setSessionProperty(IndexManager.indexerIDKey, indexerID);
|
||||||
|
project.setSessionProperty(indexerUIIDKey, indexerPageID);
|
||||||
|
|
||||||
|
} catch (CoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param oldIndexerID
|
||||||
|
* @param project
|
||||||
*/
|
*/
|
||||||
public void createControl(Composite parent) {
|
public void setIndexerID(String oldIndexerID, IProject project) {
|
||||||
Composite result = new Composite(parent, SWT.NONE);
|
//Get the corresponding text for the given indexer id
|
||||||
result.setLayout(new GridLayout());
|
selectedIndexerId = getIndexerPageName(oldIndexerID);
|
||||||
result.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
|
|
||||||
optionPage.createControl(result);
|
|
||||||
optionPage.setIndexerValue(true);
|
|
||||||
|
|
||||||
setControl(result);
|
|
||||||
|
|
||||||
|
|
||||||
|
//Set the appropriate indexer in the combo box
|
||||||
|
indexersComboBox.setText(selectedIndexerId);
|
||||||
|
//Load the appropriate page
|
||||||
|
setPage();
|
||||||
|
//Give the contributed page a chance to initialize
|
||||||
|
if (currentPage instanceof AbstractIndexerPage){
|
||||||
|
((AbstractIndexerPage) currentPage).initialize(project);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isIndexEnabled(){
|
|
||||||
return optionPage.getIndexerValue();
|
private static void saveIndexerInfo (String indexerID, String indexerUIID, Element rootElement, Document doc ) {
|
||||||
|
|
||||||
|
//Save the indexer id
|
||||||
|
Element indexerIDElement = doc.createElement(IndexManager.INDEXER_ID);
|
||||||
|
indexerIDElement.setAttribute(IndexManager.INDEXER_ID_VALUE,indexerID);
|
||||||
|
rootElement.appendChild(indexerIDElement);
|
||||||
|
|
||||||
|
//Save the indexer UI id
|
||||||
|
Element indexerUIIDElement = doc.createElement(INDEXER_UI);
|
||||||
|
indexerUIIDElement.setAttribute(INDEXER_UI_VALUE,indexerUIID);
|
||||||
|
rootElement.appendChild(indexerUIIDElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSelectedIndexerID(){
|
||||||
|
String indexerID = null;
|
||||||
|
|
||||||
|
int selIndex = indexersComboBox.getSelectionIndex();
|
||||||
|
|
||||||
|
//If no indexer has been selected return
|
||||||
|
if (selIndex != -1)
|
||||||
|
indexerID = indexersComboBox.getItem(selIndex);
|
||||||
|
|
||||||
|
return indexerID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,172 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2004 IBM Corporation and others.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Common Public License v0.5
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/cpl-v05.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* IBM Corp. - Rational Software - initial implementation
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
package org.eclipse.cdt.ui.dialogs;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.ICDescriptor;
|
|
||||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
|
||||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.jface.dialogs.DialogPage;
|
|
||||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
|
||||||
import org.eclipse.swt.SWT;
|
|
||||||
import org.eclipse.swt.layout.GridData;
|
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
|
||||||
import org.eclipse.swt.widgets.Button;
|
|
||||||
import org.eclipse.swt.widgets.Composite;
|
|
||||||
import org.eclipse.swt.widgets.Group;
|
|
||||||
import org.w3c.dom.Document;
|
|
||||||
import org.w3c.dom.Element;
|
|
||||||
import org.w3c.dom.Node;
|
|
||||||
|
|
||||||
|
|
||||||
public class IndexerOptionDialogPage extends DialogPage {
|
|
||||||
|
|
||||||
private static final String ENABLE_PREPROCESSOR_PROBLEMS = CUIMessages.getString( "IndexerOptions.enablePreprocessor" ); //$NON-NLS-1$
|
|
||||||
private static final String ENABLE_SEMANTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSemantic" ); //$NON-NLS-1$
|
|
||||||
private static final String ENABLE_SYNTACTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSyntactic" ); //$NON-NLS-1$
|
|
||||||
private static final String ENABLE_INDEXING = CUIMessages.getString( "IndexerOptions.enableIndexing" ); //$NON-NLS-1$
|
|
||||||
private static final String INDEXER = CUIMessages.getString("IndexerOptions.indexer" ); //$NON-NLS-1$
|
|
||||||
private static final String INDEXER_PROBLEMS = CUIMessages.getString("IndexerOptions.problemReporting" ); //$NON-NLS-1$
|
|
||||||
|
|
||||||
private Button indexerEnabled;
|
|
||||||
private Button preprocessorProblemsEnabled;
|
|
||||||
private Button syntacticProblemsEnabled;
|
|
||||||
private Button semanticProblemsEnabled;
|
|
||||||
|
|
||||||
public IndexerOptionDialogPage(){
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
|
|
||||||
*/
|
|
||||||
public void createControl(Composite parent) {
|
|
||||||
Composite result= new Composite(parent, SWT.NONE);
|
|
||||||
GridLayout layout= new GridLayout();
|
|
||||||
layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
|
|
||||||
layout.marginWidth= 0;
|
|
||||||
layout.verticalSpacing= convertVerticalDLUsToPixels(10);
|
|
||||||
layout.horizontalSpacing= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
|
|
||||||
result.setLayout(layout);
|
|
||||||
|
|
||||||
Group group= new Group(result, SWT.NONE);
|
|
||||||
group.setLayout(new GridLayout());
|
|
||||||
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
group.setText( INDEXER );
|
|
||||||
|
|
||||||
indexerEnabled = createCheckButton(group, ENABLE_INDEXING );
|
|
||||||
|
|
||||||
Group problemsGroup = new Group(result, SWT.NONE );
|
|
||||||
problemsGroup.setLayout(new GridLayout());
|
|
||||||
problemsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
|
|
||||||
problemsGroup.setText( INDEXER_PROBLEMS );
|
|
||||||
|
|
||||||
preprocessorProblemsEnabled = createCheckButton( problemsGroup, ENABLE_PREPROCESSOR_PROBLEMS );
|
|
||||||
semanticProblemsEnabled = createCheckButton( problemsGroup, ENABLE_SEMANTIC_PROBLEMS );
|
|
||||||
//uncomment when we want to report syntax problems
|
|
||||||
syntacticProblemsEnabled = createCheckButton( problemsGroup, ENABLE_SYNTACTIC_PROBLEMS );
|
|
||||||
setControl(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a button with the given label and sets the default
|
|
||||||
* configuration data.
|
|
||||||
*/
|
|
||||||
private Button createCheckButton( Composite parent, String label )
|
|
||||||
{
|
|
||||||
Button button = new Button( parent, SWT.CHECK | SWT.LEFT );
|
|
||||||
button.setText( label );
|
|
||||||
// FieldEditor GridData
|
|
||||||
GridData data = new GridData();
|
|
||||||
button.setLayoutData( data );
|
|
||||||
return button;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIndexerValue(boolean value){
|
|
||||||
indexerEnabled.setSelection(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setIndexerProblemValues( int value ){
|
|
||||||
preprocessorProblemsEnabled.setSelection( (value & IndexManager.PREPROCESSOR_PROBLEMS_BIT) != 0 );
|
|
||||||
if( syntacticProblemsEnabled != null )
|
|
||||||
syntacticProblemsEnabled.setSelection( (value & IndexManager.SYNTACTIC_PROBLEMS_BIT) != 0 );
|
|
||||||
semanticProblemsEnabled.setSelection( (value & IndexManager.SEMANTIC_PROBLEMS_BIT) != 0 );
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getIndexerValue(){
|
|
||||||
return indexerEnabled.getSelection();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getIndexerProblemsValues(){
|
|
||||||
int result = 0;
|
|
||||||
result |= preprocessorProblemsEnabled.getSelection() ? IndexManager.PREPROCESSOR_PROBLEMS_BIT : 0;
|
|
||||||
if( syntacticProblemsEnabled != null )
|
|
||||||
result |= syntacticProblemsEnabled.getSelection() ? IndexManager.SYNTACTIC_PROBLEMS_BIT : 0;
|
|
||||||
result |= semanticProblemsEnabled.getSelection() ? IndexManager.SEMANTIC_PROBLEMS_BIT : 0;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void persistIndexerValues(IProject project){
|
|
||||||
ICDescriptor descriptor = null;
|
|
||||||
Element rootElement = null;
|
|
||||||
IProject newProject = null;
|
|
||||||
|
|
||||||
try {
|
|
||||||
newProject = project;
|
|
||||||
descriptor = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
|
|
||||||
rootElement = descriptor.getProjectData(IndexManager.CDT_INDEXER);
|
|
||||||
|
|
||||||
// Clear out all current children
|
|
||||||
Node child = rootElement.getFirstChild();
|
|
||||||
while (child != null) {
|
|
||||||
rootElement.removeChild(child);
|
|
||||||
child = rootElement.getFirstChild();
|
|
||||||
}
|
|
||||||
Document doc = rootElement.getOwnerDocument();
|
|
||||||
|
|
||||||
boolean indexProject = getIndexerValue();
|
|
||||||
int problemValues = getIndexerProblemsValues();
|
|
||||||
|
|
||||||
saveIndexerEnabled(indexProject, rootElement, doc);
|
|
||||||
saveIndexerProblemsEnabled( problemValues, rootElement, doc );
|
|
||||||
|
|
||||||
descriptor.saveProjectData();
|
|
||||||
|
|
||||||
//Update project session property
|
|
||||||
|
|
||||||
project.setSessionProperty(IndexManager.activationKey,new Boolean(indexProject));
|
|
||||||
project.setSessionProperty(IndexManager.problemsActivationKey, new Integer( problemValues ));
|
|
||||||
|
|
||||||
} catch (CoreException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void saveIndexerEnabled (boolean indexerEnabled, Element rootElement, Document doc ) {
|
|
||||||
|
|
||||||
Element indexEnabled = doc.createElement(IndexManager.INDEXER_ENABLED);
|
|
||||||
Boolean tempValue= new Boolean(indexerEnabled);
|
|
||||||
|
|
||||||
indexEnabled.setAttribute(IndexManager.INDEXER_VALUE,tempValue.toString());
|
|
||||||
rootElement.appendChild(indexEnabled);
|
|
||||||
|
|
||||||
}
|
|
||||||
private static void saveIndexerProblemsEnabled ( int problemValues, Element rootElement, Document doc ) {
|
|
||||||
|
|
||||||
Element enabled = doc.createElement(IndexManager.INDEXER_PROBLEMS_ENABLED);
|
|
||||||
Integer tempValue= new Integer( problemValues );
|
|
||||||
|
|
||||||
enabled.setAttribute(IndexManager.INDEXER_PROBLEMS_VALUE, tempValue.toString());
|
|
||||||
rootElement.appendChild(enabled);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.layout.FillLayout;
|
import org.eclipse.swt.layout.FillLayout;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
@ -29,14 +30,16 @@ import org.w3c.dom.Node;
|
||||||
|
|
||||||
public class IndexerOptionPropertyPage extends PropertyPage {
|
public class IndexerOptionPropertyPage extends PropertyPage {
|
||||||
|
|
||||||
private IndexerOptionDialogPage optionPage;
|
|
||||||
private boolean oldIndexerValue;
|
|
||||||
private int oldIndexerProblemsValue;
|
private IndexerBlock optionPage;
|
||||||
|
private String oldIndexerID;
|
||||||
|
|
||||||
private boolean requestedIndexAll;
|
private boolean requestedIndexAll;
|
||||||
|
|
||||||
public IndexerOptionPropertyPage(){
|
public IndexerOptionPropertyPage(){
|
||||||
super();
|
super();
|
||||||
optionPage = new IndexerOptionDialogPage();
|
optionPage = new IndexerBlock();
|
||||||
requestedIndexAll = false;
|
requestedIndexAll = false;
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -63,14 +66,13 @@ public class IndexerOptionPropertyPage extends PropertyPage {
|
||||||
IProject project = getProject();
|
IProject project = getProject();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
oldIndexerValue = getIndexerEnabled(project);
|
oldIndexerID = getIndexerID(project);
|
||||||
oldIndexerProblemsValue = getIndexerProblemsEnabled( project );
|
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
optionPage.setIndexerValue(oldIndexerValue);
|
optionPage.setIndexerID(oldIndexerID, project);
|
||||||
optionPage.setIndexerProblemValues( oldIndexerProblemsValue );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -78,28 +80,29 @@ public class IndexerOptionPropertyPage extends PropertyPage {
|
||||||
*/
|
*/
|
||||||
public boolean performOk() {
|
public boolean performOk() {
|
||||||
|
|
||||||
boolean newIndexerValue = optionPage.getIndexerValue();
|
/* String newIndexerID = optionPage.getSelectedIndexerID();
|
||||||
int newIndexerProblemsValue = optionPage.getIndexerProblemsValues();
|
|
||||||
|
|
||||||
boolean indexChanged = (oldIndexerValue != newIndexerValue);
|
boolean indexerIDChanged = false;
|
||||||
boolean problemsChanged = (oldIndexerProblemsValue != newIndexerProblemsValue );
|
|
||||||
|
|
||||||
if ( indexChanged || problemsChanged){
|
if (newIndexerID != null){
|
||||||
//persist new values
|
indexerIDChanged = !(oldIndexerID.equals(newIndexerID));
|
||||||
IProject tempProject = getProject();
|
|
||||||
optionPage.persistIndexerValues(tempProject);
|
|
||||||
|
|
||||||
if( problemsChanged && newIndexerProblemsValue == 0)
|
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().removeIndexerProblems(tempProject);
|
|
||||||
|
|
||||||
//if indexer is now on send a index all request
|
|
||||||
if( indexChanged && newIndexerValue && !requestedIndexAll ) {
|
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexAll(tempProject);
|
|
||||||
requestedIndexAll = true;
|
|
||||||
} else if( indexChanged && !newIndexerValue ) {
|
|
||||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().discardJobs( tempProject.getName() );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (oldIndexerID != null){
|
||||||
|
//newIndexerID is null, oldIndexerID wasn't null
|
||||||
|
indexerIDChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( indexerIDChanged ){
|
||||||
|
//persist new values
|
||||||
|
IProject tempProject = getProject();
|
||||||
|
optionPage.persistIndexerValues(tempProject);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
IProject tempProject = getProject();
|
||||||
|
try {
|
||||||
|
optionPage.persistIndexerSettings(tempProject, new NullProgressMonitor());
|
||||||
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,104 +115,51 @@ public class IndexerOptionPropertyPage extends PropertyPage {
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean getIndexerEnabled(IProject project) throws CoreException {
|
public String getIndexerID(IProject project) throws CoreException {
|
||||||
// See if there's already one associated with the resource for this
|
//See if there's already one associated with the resource for this session
|
||||||
// session
|
String indexerID = (String) project.getSessionProperty(IndexerBlock.indexerUIIDKey);
|
||||||
Boolean indexValue = (Boolean) project.getSessionProperty(IndexManager.activationKey);
|
|
||||||
|
if (indexerID != null)
|
||||||
|
return indexerID;
|
||||||
|
|
||||||
// Try to load one for the project
|
// Try to load one for the project
|
||||||
if (indexValue == null) {
|
indexerID = loadIndexerIDFromCDescriptor(project);
|
||||||
indexValue = loadIndexerEnabledFromCDescriptor(project);
|
|
||||||
}
|
|
||||||
|
|
||||||
// There is nothing persisted for the session, or saved in a file so
|
// There is nothing persisted for the session, or saved in a file so
|
||||||
// create a build info object
|
// create a build info object
|
||||||
if (indexValue != null) {
|
if (indexerID != null) {
|
||||||
project.setSessionProperty(IndexManager.activationKey, indexValue);
|
project.setSessionProperty(IndexerBlock.indexerUIIDKey, indexerID);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
//Hmm, no persisted indexer value. Could be an old project - set to true and persist
|
//Hmm, no persisted indexer value. Could be an old project - need to run project
|
||||||
indexValue = new Boolean(true);
|
//update code here
|
||||||
optionPage.setIndexerValue(true);
|
|
||||||
optionPage.persistIndexerValues(project);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return indexValue.booleanValue();
|
return indexerID;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getIndexerProblemsEnabled( IProject project ) throws CoreException
|
|
||||||
{
|
|
||||||
// See if there's already one associated with the resource for this session
|
|
||||||
Integer value = (Integer) project.getSessionProperty( IndexManager.problemsActivationKey );
|
|
||||||
|
|
||||||
// Try to load one for the project
|
|
||||||
if (value == null) {
|
|
||||||
value = loadIndexerProblemsEnabledFromCDescriptor(project);
|
|
||||||
}
|
|
||||||
|
|
||||||
// There is nothing persisted for the session, or saved in a file so
|
|
||||||
// create a build info object
|
|
||||||
if (value != null) {
|
|
||||||
project.setSessionProperty(IndexManager.problemsActivationKey, value);
|
|
||||||
} else {
|
|
||||||
//Hmm, no persisted indexer value. Could be an old project - set all to false and persist
|
|
||||||
value = new Integer( 0 );
|
|
||||||
optionPage.setIndexerProblemValues( 0 );
|
|
||||||
optionPage.persistIndexerValues(project);
|
|
||||||
}
|
|
||||||
|
|
||||||
return value.intValue();
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Loads dis from .cdtproject file
|
* Loads indexerID from .cdtproject file
|
||||||
* @param project
|
* @param project
|
||||||
* @param includes
|
* @param includes
|
||||||
* @param symbols
|
* @param symbols
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
*/
|
*/
|
||||||
private Boolean loadIndexerEnabledFromCDescriptor(IProject project) throws CoreException {
|
private String loadIndexerIDFromCDescriptor(IProject project) throws CoreException {
|
||||||
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
||||||
|
|
||||||
Node child = descriptor.getProjectData(IndexManager.CDT_INDEXER).getFirstChild();
|
Node child = descriptor.getProjectData(IndexManager.CDT_INDEXER).getFirstChild();
|
||||||
Boolean strBool = null;
|
|
||||||
|
String indexerID = ""; //$NON-NLS-1$
|
||||||
|
|
||||||
while (child != null) {
|
while (child != null) {
|
||||||
if (child.getNodeName().equals(IndexManager.INDEXER_ENABLED))
|
if (child.getNodeName().equals(IndexerBlock.INDEXER_UI))
|
||||||
strBool = Boolean.valueOf(((Element)child).getAttribute(IndexManager.INDEXER_VALUE));
|
indexerID = ((Element)child).getAttribute(IndexerBlock.INDEXER_UI_VALUE);
|
||||||
|
|
||||||
|
|
||||||
child = child.getNextSibling();
|
child = child.getNextSibling();
|
||||||
}
|
}
|
||||||
|
|
||||||
return strBool;
|
return indexerID;
|
||||||
}
|
|
||||||
|
|
||||||
private Integer loadIndexerProblemsEnabledFromCDescriptor( IProject project ) throws CoreException
|
|
||||||
{
|
|
||||||
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
|
||||||
|
|
||||||
Node child = descriptor.getProjectData(IndexManager.CDT_INDEXER).getFirstChild();
|
|
||||||
Integer strInt = null;
|
|
||||||
|
|
||||||
while (child != null) {
|
|
||||||
if (child.getNodeName().equals(IndexManager.INDEXER_PROBLEMS_ENABLED)) {
|
|
||||||
String val = ((Element)child).getAttribute(IndexManager.INDEXER_PROBLEMS_VALUE);
|
|
||||||
try{
|
|
||||||
strInt = Integer.valueOf( val );
|
|
||||||
} catch( NumberFormatException e ){
|
|
||||||
//some old projects might have a boolean stored, translate that into just preprocessors
|
|
||||||
Boolean bool = Boolean.valueOf( val );
|
|
||||||
if( bool.booleanValue() )
|
|
||||||
strInt = new Integer( IndexManager.PREPROCESSOR_PROBLEMS_BIT );
|
|
||||||
else
|
|
||||||
strInt = new Integer( 0 );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
child = child.getNextSibling();
|
|
||||||
}
|
|
||||||
return strInt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,301 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2004 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v0.5
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v05.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corp. - Rational Software - initial implementation
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.ui.dialogs;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
|
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||||
|
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||||
|
import org.eclipse.cdt.ui.index.AbstractIndexerPage;
|
||||||
|
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.swt.layout.GridData;
|
||||||
|
import org.eclipse.swt.widgets.Button;
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.eclipse.swt.widgets.Group;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.Node;
|
||||||
|
|
||||||
|
|
||||||
|
public class SourceIndexerBlock extends AbstractIndexerPage {
|
||||||
|
|
||||||
|
private static final String ENABLE_PREPROCESSOR_PROBLEMS = CUIMessages.getString( "IndexerOptions.enablePreprocessor" ); //$NON-NLS-1$
|
||||||
|
private static final String ENABLE_SEMANTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSemantic" ); //$NON-NLS-1$
|
||||||
|
private static final String ENABLE_SYNTACTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSyntactic" ); //$NON-NLS-1$
|
||||||
|
private static final String ENABLE_INDEXING = CUIMessages.getString( "IndexerOptions.enableIndexing" ); //$NON-NLS-1$
|
||||||
|
private static final String INDEXER = CUIMessages.getString("IndexerOptions.indexer" ); //$NON-NLS-1$
|
||||||
|
private static final String INDEXER_PROBLEMS = CUIMessages.getString("IndexerOptions.problemReporting" ); //$NON-NLS-1$
|
||||||
|
|
||||||
|
private Button indexerEnabled;
|
||||||
|
private Button preprocessorProblemsEnabled;
|
||||||
|
private Button syntacticProblemsEnabled;
|
||||||
|
private Button semanticProblemsEnabled;
|
||||||
|
|
||||||
|
private boolean oldIndexerValue;
|
||||||
|
private int oldIndexerProblemsValue;
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performApply(org.eclipse.core.runtime.IProgressMonitor)
|
||||||
|
*/
|
||||||
|
public void performApply(IProgressMonitor monitor) throws CoreException {
|
||||||
|
|
||||||
|
IProject newProject = null;
|
||||||
|
newProject = getContainer().getProject();
|
||||||
|
|
||||||
|
this.persistIndexerValues(newProject);
|
||||||
|
|
||||||
|
boolean indexProject = getIndexerValue();
|
||||||
|
|
||||||
|
//if (indexProject && newProject != null)
|
||||||
|
//SourceIndexer.indexAll()
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.ui.dialogs.ICOptionPage#performDefaults()
|
||||||
|
*/
|
||||||
|
public void performDefaults() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
}
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
|
||||||
|
*/
|
||||||
|
public void createControl(Composite parent) {
|
||||||
|
|
||||||
|
Composite page = ControlFactory.createComposite(parent, 1);
|
||||||
|
|
||||||
|
Group group = ControlFactory.createGroup(page,INDEXER,1);
|
||||||
|
|
||||||
|
GridData gd = (GridData) group.getLayoutData();
|
||||||
|
gd.grabExcessHorizontalSpace = true;
|
||||||
|
gd.horizontalAlignment = GridData.FILL;
|
||||||
|
|
||||||
|
|
||||||
|
indexerEnabled = ControlFactory.createCheckBox(group, ENABLE_INDEXING );
|
||||||
|
|
||||||
|
|
||||||
|
Group problemsGroup = ControlFactory.createGroup(page,INDEXER_PROBLEMS,1);
|
||||||
|
|
||||||
|
GridData gd2 = (GridData) problemsGroup.getLayoutData();
|
||||||
|
gd2.grabExcessHorizontalSpace = true;
|
||||||
|
gd2.horizontalAlignment = GridData.FILL;
|
||||||
|
|
||||||
|
|
||||||
|
preprocessorProblemsEnabled = ControlFactory.createCheckBox( problemsGroup, ENABLE_PREPROCESSOR_PROBLEMS );
|
||||||
|
semanticProblemsEnabled = ControlFactory.createCheckBox( problemsGroup, ENABLE_SEMANTIC_PROBLEMS );
|
||||||
|
//uncomment when we want to report syntax problems
|
||||||
|
syntacticProblemsEnabled = ControlFactory.createCheckBox( problemsGroup, ENABLE_SYNTACTIC_PROBLEMS );
|
||||||
|
setControl(page);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void persistIndexerValues(IProject project){
|
||||||
|
ICDescriptor descriptor = null;
|
||||||
|
Element rootElement = null;
|
||||||
|
IProject newProject = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
newProject = project;
|
||||||
|
descriptor = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
|
||||||
|
rootElement = descriptor.getProjectData(SourceIndexer.SOURCE_INDEXER);
|
||||||
|
|
||||||
|
// Clear out all current children
|
||||||
|
Node child = rootElement.getFirstChild();
|
||||||
|
while (child != null) {
|
||||||
|
rootElement.removeChild(child);
|
||||||
|
child = rootElement.getFirstChild();
|
||||||
|
}
|
||||||
|
Document doc = rootElement.getOwnerDocument();
|
||||||
|
|
||||||
|
boolean indexProject = getIndexerValue();
|
||||||
|
int problemValues = getIndexerProblemsValues();
|
||||||
|
|
||||||
|
saveIndexerEnabled(indexProject, rootElement, doc);
|
||||||
|
saveIndexerProblemsEnabled( problemValues, rootElement, doc );
|
||||||
|
|
||||||
|
descriptor.saveProjectData();
|
||||||
|
|
||||||
|
//Update project session property
|
||||||
|
|
||||||
|
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(indexProject));
|
||||||
|
project.setSessionProperty(SourceIndexer.problemsActivationKey, new Integer( problemValues ));
|
||||||
|
|
||||||
|
} catch (CoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean getIndexerValue(){
|
||||||
|
return indexerEnabled.getSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIndexerProblemsValues(){
|
||||||
|
int result = 0;
|
||||||
|
result |= preprocessorProblemsEnabled.getSelection() ? SourceIndexer.PREPROCESSOR_PROBLEMS_BIT : 0;
|
||||||
|
if( syntacticProblemsEnabled != null )
|
||||||
|
result |= syntacticProblemsEnabled.getSelection() ? SourceIndexer.SYNTACTIC_PROBLEMS_BIT : 0;
|
||||||
|
result |= semanticProblemsEnabled.getSelection() ? SourceIndexer.SEMANTIC_PROBLEMS_BIT : 0;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void saveIndexerEnabled (boolean indexerEnabled, Element rootElement, Document doc ) {
|
||||||
|
|
||||||
|
Element indexEnabled = doc.createElement(SourceIndexer.INDEXER_ENABLED);
|
||||||
|
Boolean tempValue= new Boolean(indexerEnabled);
|
||||||
|
|
||||||
|
indexEnabled.setAttribute(SourceIndexer.INDEXER_VALUE,tempValue.toString());
|
||||||
|
rootElement.appendChild(indexEnabled);
|
||||||
|
|
||||||
|
}
|
||||||
|
private static void saveIndexerProblemsEnabled ( int problemValues, Element rootElement, Document doc ) {
|
||||||
|
|
||||||
|
Element enabled = doc.createElement(SourceIndexer.INDEXER_PROBLEMS_ENABLED);
|
||||||
|
Integer tempValue= new Integer( problemValues );
|
||||||
|
|
||||||
|
enabled.setAttribute(SourceIndexer.INDEXER_PROBLEMS_VALUE, tempValue.toString());
|
||||||
|
rootElement.appendChild(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.ui.index2.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject)
|
||||||
|
*/
|
||||||
|
public void initialize(IProject project) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
oldIndexerValue = getIndexerEnabled(project);
|
||||||
|
oldIndexerProblemsValue = getIndexerProblemsEnabled( project );
|
||||||
|
} catch (CoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Set the index enabled checkbox
|
||||||
|
setIndexerValue(oldIndexerValue);
|
||||||
|
|
||||||
|
//Set the IProblem checkboxes
|
||||||
|
setIndexerProblemValues(oldIndexerProblemsValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getIndexerEnabled(IProject project) throws CoreException {
|
||||||
|
// See if there's already one associated with the resource for this
|
||||||
|
// session
|
||||||
|
Boolean indexValue = (Boolean) project.getSessionProperty(SourceIndexer.activationKey);
|
||||||
|
|
||||||
|
// Try to load one for the project
|
||||||
|
if (indexValue == null) {
|
||||||
|
indexValue = loadIndexerEnabledFromCDescriptor(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
// There is nothing persisted for the session, or saved in a file so
|
||||||
|
// create a build info object
|
||||||
|
if (indexValue != null) {
|
||||||
|
project.setSessionProperty(SourceIndexer.activationKey, indexValue);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//Hmm, no persisted indexer value. Could be an old project - set to true and persist
|
||||||
|
indexValue = new Boolean(true);
|
||||||
|
setIndexerValue(true);
|
||||||
|
persistIndexerValues(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
return indexValue.booleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getIndexerProblemsEnabled( IProject project ) throws CoreException
|
||||||
|
{
|
||||||
|
// See if there's already one associated with the resource for this session
|
||||||
|
Integer value = (Integer) project.getSessionProperty( SourceIndexer.problemsActivationKey );
|
||||||
|
|
||||||
|
// Try to load one for the project
|
||||||
|
if (value == null) {
|
||||||
|
value = loadIndexerProblemsEnabledFromCDescriptor(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
// There is nothing persisted for the session, or saved in a file so
|
||||||
|
// create a build info object
|
||||||
|
if (value != null) {
|
||||||
|
project.setSessionProperty(SourceIndexer.problemsActivationKey, value);
|
||||||
|
} else {
|
||||||
|
//Hmm, no persisted indexer value. Could be an old project - set all to false and persist
|
||||||
|
value = new Integer( 0 );
|
||||||
|
setIndexerProblemValues( 0 );
|
||||||
|
persistIndexerValues(project);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value.intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndexerValue(boolean value){
|
||||||
|
indexerEnabled.setSelection(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIndexerProblemValues( int value ){
|
||||||
|
preprocessorProblemsEnabled.setSelection( (value & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT) != 0 );
|
||||||
|
if( syntacticProblemsEnabled != null )
|
||||||
|
syntacticProblemsEnabled.setSelection( (value & SourceIndexer.SYNTACTIC_PROBLEMS_BIT) != 0 );
|
||||||
|
semanticProblemsEnabled.setSelection( (value & SourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads dis from .cdtproject file
|
||||||
|
* @param project
|
||||||
|
* @param includes
|
||||||
|
* @param symbols
|
||||||
|
* @throws CoreException
|
||||||
|
*/
|
||||||
|
private Boolean loadIndexerEnabledFromCDescriptor(IProject project) throws CoreException {
|
||||||
|
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
||||||
|
|
||||||
|
Node child = descriptor.getProjectData(SourceIndexer.SOURCE_INDEXER).getFirstChild();
|
||||||
|
Boolean strBool = null;
|
||||||
|
|
||||||
|
while (child != null) {
|
||||||
|
if (child.getNodeName().equals(SourceIndexer.INDEXER_ENABLED))
|
||||||
|
strBool = Boolean.valueOf(((Element)child).getAttribute(SourceIndexer.INDEXER_VALUE));
|
||||||
|
|
||||||
|
|
||||||
|
child = child.getNextSibling();
|
||||||
|
}
|
||||||
|
|
||||||
|
return strBool;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer loadIndexerProblemsEnabledFromCDescriptor( IProject project ) throws CoreException
|
||||||
|
{
|
||||||
|
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
||||||
|
|
||||||
|
Node child = descriptor.getProjectData(SourceIndexer.SOURCE_INDEXER).getFirstChild();
|
||||||
|
Integer strInt = null;
|
||||||
|
|
||||||
|
while (child != null) {
|
||||||
|
if (child.getNodeName().equals(SourceIndexer.INDEXER_PROBLEMS_ENABLED)) {
|
||||||
|
String val = ((Element)child).getAttribute(SourceIndexer.INDEXER_PROBLEMS_VALUE);
|
||||||
|
try{
|
||||||
|
strInt = Integer.valueOf( val );
|
||||||
|
} catch( NumberFormatException e ){
|
||||||
|
//some old projects might have a boolean stored, translate that into just preprocessors
|
||||||
|
Boolean bool = Boolean.valueOf( val );
|
||||||
|
if( bool.booleanValue() )
|
||||||
|
strInt = new Integer( SourceIndexer.PREPROCESSOR_PROBLEMS_BIT );
|
||||||
|
else
|
||||||
|
strInt = new Integer( 0 );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
child = child.getNextSibling();
|
||||||
|
}
|
||||||
|
return strInt;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
/**********************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation 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 - Initial API and implementation
|
||||||
|
**********************************************************************/
|
||||||
|
package org.eclipse.cdt.ui.index;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Bogdan Gheorghe
|
||||||
|
*/
|
||||||
|
public abstract class AbstractIndexerPage extends AbstractCOptionPage {
|
||||||
|
|
||||||
|
|
||||||
|
protected AbstractIndexerPage() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called by BaseIndexerBlock to give the indexer page a chance to load its state from store
|
||||||
|
* @param currentProject - the project that this page is being created for
|
||||||
|
*/
|
||||||
|
abstract public void initialize(IProject currentProject);
|
||||||
|
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue