mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-23 22:52:11 +02:00
Fix for 99536 : Remove Original Source Indexer
Refactored DOM Indexer Fix for 93571 : Indexer causes deadlock in org.eclipse.cdt.ui.tests AutomatedSuite
This commit is contained in:
parent
953acd1eef
commit
35cc111224
58 changed files with 1072 additions and 2448 deletions
|
@ -23,22 +23,27 @@ import junit.framework.TestCase;
|
|||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICDescriptorOperation;
|
||||
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.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.core.tests.FailingTest;
|
||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexerRunner;
|
||||
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.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
@ -46,12 +51,12 @@ import org.eclipse.core.runtime.Path;
|
|||
/**
|
||||
* @author bgheorgh
|
||||
*/
|
||||
public class SourceIndexerTests extends TestCase implements IIndexChangeListener {
|
||||
public class DOMSourceIndexerTests extends TestCase implements IIndexChangeListener {
|
||||
IFile file;
|
||||
IProject testProject;
|
||||
NullProgressMonitor monitor;
|
||||
IndexManager indexManager;
|
||||
SourceIndexer sourceIndexer;
|
||||
DOMSourceIndexer sourceIndexer;
|
||||
boolean fileIndexed;
|
||||
|
||||
static final String sourceIndexerID = "org.eclipse.cdt.core.originalsourceindexer"; //$NON-NLS-1$
|
||||
|
@ -60,7 +65,7 @@ public class SourceIndexerTests extends TestCase implements IIndexChangeListener
|
|||
* Constructor for IndexManagerTest.
|
||||
* @param name
|
||||
*/
|
||||
public SourceIndexerTests(String name) {
|
||||
public DOMSourceIndexerTests(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
|
@ -68,6 +73,22 @@ public class SourceIndexerTests extends TestCase implements IIndexChangeListener
|
|||
fileIndexed = false;
|
||||
}
|
||||
|
||||
public void resetIndexer(final String indexerId){
|
||||
if ( testProject != null) {
|
||||
ICDescriptorOperation op = new ICDescriptorOperation() {
|
||||
|
||||
public void execute(ICDescriptor descriptor, IProgressMonitor monitor) throws CoreException {
|
||||
descriptor.remove(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
descriptor.create(CCorePlugin.INDEXER_UNIQ_ID,indexerId);
|
||||
}
|
||||
};
|
||||
try {
|
||||
CCorePlugin.getDefault().getCDescriptorManager().runDescriptorOperation(testProject, op, new NullProgressMonitor());
|
||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexerChangeNotification(testProject);
|
||||
} catch (CoreException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
public void waitForIndex(int maxSec) throws Exception {
|
||||
int delay = 0;
|
||||
while (fileIndexed != true && delay < (maxSec * 1000))
|
||||
|
@ -95,21 +116,21 @@ public class SourceIndexerTests extends TestCase implements IIndexChangeListener
|
|||
File indexFile = new File(pathLoc.append("3915980774.index").toOSString()); //$NON-NLS-1$
|
||||
if (indexFile.exists())
|
||||
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);
|
||||
|
||||
//Enable indexing on test project
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
|
||||
if (testProject==null)
|
||||
fail("Unable to create project"); //$NON-NLS-1$
|
||||
|
||||
resetIndexer(CCorePlugin.DEFAULT_INDEXER_UNIQ_ID);
|
||||
//The DOM Source Indexer checks to see if a file has any scanner info
|
||||
//set prior to indexing it in order to increase efficiency. We need to let it know
|
||||
//that it is running in test mode in order to allow for this scanner info test to be skipped
|
||||
DOMSourceIndexerRunner.setSkipScannerInfoTest(true);
|
||||
|
||||
|
||||
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
//indexManager.reset();
|
||||
//Get the indexer used for the test project
|
||||
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||
sourceIndexer = (DOMSourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||
sourceIndexer.addIndexChangeListener(this);
|
||||
}
|
||||
/*
|
||||
|
@ -147,18 +168,19 @@ public class SourceIndexerTests extends TestCase implements IIndexChangeListener
|
|||
}
|
||||
|
||||
public static Test suite() {
|
||||
TestSuite suite = new TestSuite(SourceIndexerTests.class.getName());
|
||||
TestSuite suite = new TestSuite(DOMSourceIndexerTests.class.getName());
|
||||
|
||||
suite.addTest(new SourceIndexerTests("testAddNewFileToIndex")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testForwardDeclarations")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testIndexAll")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testIndexContents")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testMacros")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testRefs")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testExactDeclarations")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testRemoveFileFromIndex")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testRemoveProjectFromIndex")); //$NON-NLS-1$
|
||||
suite.addTest(new SourceIndexerTests("testIndexShutdown")); //$NON-NLS-1$
|
||||
suite.addTest(new DOMSourceIndexerTests("testAddNewFileToIndex")); //$NON-NLS-1$
|
||||
suite.addTest(new DOMSourceIndexerTests("testForwardDeclarations")); //$NON-NLS-1$
|
||||
suite.addTest(new FailingTest(new DOMSourceIndexerTests("testIndexAll"))); //$NON-NLS-1$
|
||||
suite.addTest(new FailingTest(new DOMSourceIndexerTests("testIndexContents"))); //$NON-NLS-1$
|
||||
suite.addTest(new DOMSourceIndexerTests("testMacros")); //$NON-NLS-1$
|
||||
suite.addTest(new FailingTest(new DOMSourceIndexerTests("testRefs"))); //$NON-NLS-1$
|
||||
suite.addTest(new FailingTest(new DOMSourceIndexerTests("testExactDeclarations"))); //$NON-NLS-1$
|
||||
suite.addTest(new FailingTest(new DOMSourceIndexerTests("testRemoveFileFromIndex"))); //$NON-NLS-1$
|
||||
suite.addTest(new DOMSourceIndexerTests("testRemoveProjectFromIndex")); //$NON-NLS-1$
|
||||
suite.addTest(new DOMSourceIndexerTests("testIndexShutdown")); //$NON-NLS-1$
|
||||
|
||||
|
||||
return suite;
|
||||
|
|
@ -20,6 +20,8 @@ import junit.framework.TestCase;
|
|||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICDescriptorOperation;
|
||||
import org.eclipse.cdt.core.index.IIndexChangeListener;
|
||||
import org.eclipse.cdt.core.index.IIndexDelta;
|
||||
import org.eclipse.cdt.core.index.IndexChangeEvent;
|
||||
|
@ -33,8 +35,10 @@ import org.eclipse.cdt.core.search.IMatch;
|
|||
import org.eclipse.cdt.core.search.SearchEngine;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.core.tests.FailingTest;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.search.PathCollector;
|
||||
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
|
@ -49,6 +53,7 @@ import org.eclipse.core.resources.IWorkspace;
|
|||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
@ -66,7 +71,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
BasicSearchResultCollector resultCollector;
|
||||
SearchEngine searchEngine;
|
||||
ICSearchScope scope;
|
||||
SourceIndexer sourceIndexer;
|
||||
DOMSourceIndexer sourceIndexer;
|
||||
boolean fileIndexed;
|
||||
public static final int TIMEOUT = 50;
|
||||
|
||||
|
@ -77,9 +82,9 @@ import org.eclipse.core.runtime.Platform;
|
|||
//suite.addTest(new DependencyTests("testDepTable"));
|
||||
suite.addTest(new DependencyTests("testDepSourceChangeTree"));
|
||||
suite.addTest(new DependencyTests("testDepHeaderChangeTree"));
|
||||
suite.addTest(new DependencyTests("testDepHeaderChangeReindex"));
|
||||
suite.addTest(new DependencyTests("testDepSourceChangeTable"));
|
||||
suite.addTest(new DependencyTests("testDepHeaderChangeTable"));
|
||||
suite.addTest(new FailingTest(new DependencyTests("testDepHeaderChangeReindex")));
|
||||
suite.addTest(new FailingTest(new DependencyTests("testDepSourceChangeTable")));
|
||||
suite.addTest(new FailingTest(new DependencyTests("testDepHeaderChangeTable")));
|
||||
suite.addTest(new DependencyTests("testUpdateDependancyNPE"));
|
||||
return suite;
|
||||
}
|
||||
|
@ -103,15 +108,15 @@ import org.eclipse.core.runtime.Platform;
|
|||
if (indexFile.exists())
|
||||
indexFile.delete();
|
||||
|
||||
testProject.setSessionProperty(IndexManager.indexerIDKey, SourceIndexerTests.sourceIndexerID);
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
if (testProject==null)
|
||||
fail("Unable to create project");
|
||||
|
||||
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
//indexManager.reset();
|
||||
|
||||
resetIndexer(CCorePlugin.DEFAULT_INDEXER_UNIQ_ID);
|
||||
//The DOM Source Indexer checks to see if a file has any scanner info
|
||||
//set prior to indexing it in order to increase efficiency. We need to let it know
|
||||
//that it is running in test mode in order to allow for this scanner info test to be skipped
|
||||
DOMSourceIndexerRunner.setSkipScannerInfoTest(true);
|
||||
|
||||
TypeCacheManager typeCacheManager = TypeCacheManager.getInstance();
|
||||
typeCacheManager.setProcessTypeCacheEvents(false);
|
||||
|
||||
|
@ -123,7 +128,8 @@ import org.eclipse.core.runtime.Platform;
|
|||
|
||||
searchEngine = new SearchEngine();
|
||||
|
||||
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||
indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
sourceIndexer = (DOMSourceIndexer) indexManager.getIndexerForProject(testProject);
|
||||
sourceIndexer.addIndexChangeListener(this);
|
||||
}
|
||||
/*
|
||||
|
@ -236,7 +242,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
|
||||
IFile depTest2H = importFile("DepTest2.h","resources/dependency/DepTest2.h");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
PathCollector pathCollector = new PathCollector();
|
||||
getTableRefs(dH, pathCollector);
|
||||
|
@ -283,7 +289,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTestH = importFile("DepTest.h","resources/dependency/DepTest.h");
|
||||
IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest.cpp"};
|
||||
|
||||
|
@ -380,7 +386,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTestC = importFile("DepTest.cpp","resources/dependency/DepTest.cpp");
|
||||
IFile depTest2C = importFile("DepTest2.cpp","resources/dependency/DepTest2.cpp");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
|
||||
|
@ -449,7 +455,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
|
||||
|
@ -518,7 +524,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
|
||||
String[] beforeModel = {Path.SEPARATOR + "DepTestProject" + IPath.SEPARATOR + "DepTest3.cpp"};
|
||||
|
@ -590,7 +596,7 @@ import org.eclipse.core.runtime.Platform;
|
|||
IFile depTest3H = importFile("DepTest3.h","resources/dependency/DepTest3.h");
|
||||
IFile depTest3C = importFile("DepTest3.cpp","resources/dependency/DepTest3.cpp");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "Z", ICSearchConstants.TYPE, ICSearchConstants.DEFINITIONS, true );
|
||||
|
||||
|
@ -755,4 +761,20 @@ import org.eclipse.core.runtime.Platform;
|
|||
fileIndexed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void resetIndexer(final String indexerId){
|
||||
if ( testProject != null) {
|
||||
ICDescriptorOperation op = new ICDescriptorOperation() {
|
||||
|
||||
public void execute(ICDescriptor descriptor, IProgressMonitor monitor) throws CoreException {
|
||||
descriptor.remove(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
descriptor.create(CCorePlugin.INDEXER_UNIQ_ID,indexerId);
|
||||
}
|
||||
};
|
||||
try {
|
||||
CCorePlugin.getDefault().getCDescriptorManager().runDescriptorOperation(testProject, op, new NullProgressMonitor());
|
||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexerChangeNotification(testProject);
|
||||
} catch (CoreException e) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -70,7 +70,7 @@ import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
|||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.parser.Parser;
|
||||
import org.eclipse.cdt.internal.core.parser.ParserException;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
@ -105,7 +105,7 @@ public class FileBasePluginTest extends TestCase {
|
|||
cPrj = CProjectHelper.createCCProject("ParserTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
project = cPrj.getProject();
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(false));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(false));
|
||||
|
||||
// ugly
|
||||
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.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IFolder;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
@ -56,7 +56,7 @@ public class DOMFileBasePluginTest extends TestCase {
|
|||
cPrj = CProjectHelper.createCCProject("ParserTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
project = cPrj.getProject();
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(false));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(false));
|
||||
|
||||
// ugly
|
||||
if (className == null || !className.equals(aClassName)) {
|
||||
|
|
|
@ -23,6 +23,8 @@ import junit.framework.Test;
|
|||
import junit.framework.TestSuite;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICDescriptorOperation;
|
||||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||
import org.eclipse.cdt.core.index.IIndexChangeListener;
|
||||
import org.eclipse.cdt.core.index.IIndexDelta;
|
||||
|
@ -38,10 +40,12 @@ import org.eclipse.cdt.core.search.IOffsetLocatable;
|
|||
import org.eclipse.cdt.core.search.SearchEngine;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
|
@ -81,6 +85,13 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
|||
} catch ( CoreException e ) { //boo
|
||||
}
|
||||
|
||||
resetIndexer(CCorePlugin.DEFAULT_INDEXER_UNIQ_ID);
|
||||
//The DOM Source Indexer checks to see if a file has any scanner info
|
||||
//set prior to indexing it in order to increase efficiency. We need to let it know
|
||||
//that it is running in test mode in order to allow for this scanner info test to be skipped
|
||||
DOMSourceIndexerRunner.setSkipScannerInfoTest(true);
|
||||
|
||||
|
||||
TypeCacheManager typeCacheManager = TypeCacheManager.getInstance();
|
||||
typeCacheManager.setProcessTypeCacheEvents(false);
|
||||
|
||||
|
@ -88,8 +99,8 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
|||
indexDisabled=false;
|
||||
|
||||
ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(project);
|
||||
if (indexer instanceof SourceIndexer){
|
||||
((SourceIndexer)indexer).addIndexChangeListener( this );
|
||||
if (indexer instanceof DOMSourceIndexer){
|
||||
((DOMSourceIndexer)indexer).addIndexChangeListener( this );
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -101,7 +112,7 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
|||
IndexManager indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
//sourceIndexer.removeIndexChangeListener( this );
|
||||
try{
|
||||
project.setSessionProperty( SourceIndexer.activationKey, new Boolean( false ) );
|
||||
project.setSessionProperty( DOMSourceIndexer.activationKey, new Boolean( false ) );
|
||||
project.delete(true,true,new NullProgressMonitor());
|
||||
project = null;
|
||||
} catch ( CoreException e ) { //boo
|
||||
|
@ -160,6 +171,22 @@ public class SearchRegressionTests extends BaseTestFramework implements ICSearch
|
|||
fail( "Match at offset " + offset + " in \"" + file.getLocation() + "\" not found." ); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$
|
||||
}
|
||||
|
||||
public void resetIndexer(final String indexerId){
|
||||
if ( project != null) {
|
||||
ICDescriptorOperation op = new ICDescriptorOperation() {
|
||||
|
||||
public void execute(ICDescriptor descriptor, IProgressMonitor monitor) throws CoreException {
|
||||
descriptor.remove(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
descriptor.create(CCorePlugin.INDEXER_UNIQ_ID,indexerId);
|
||||
}
|
||||
};
|
||||
try {
|
||||
CCorePlugin.getDefault().getCDescriptorManager().runDescriptorOperation(project, op, new NullProgressMonitor());
|
||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexerChangeNotification(project);
|
||||
} catch (CoreException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
public static Test suite(){
|
||||
return suite( true );
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ import org.eclipse.cdt.core.parser.ast.IASTOffsetableNamedElement;
|
|||
import org.eclipse.cdt.core.parser.tests.CompleteParseBaseTest.FullParseCallback;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.browser.cache.TypeCacheManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
|
@ -112,7 +112,7 @@ public class SelectionRegressionTest extends BaseTestFramework {
|
|||
return;
|
||||
|
||||
try{
|
||||
project.setSessionProperty( SourceIndexer.activationKey, new Boolean( false ) );
|
||||
project.setSessionProperty( DOMSourceIndexer.activationKey, new Boolean( false ) );
|
||||
project.delete(true,true,new NullProgressMonitor());
|
||||
project = null;
|
||||
} catch ( CoreException e ) { //boo
|
||||
|
|
|
@ -18,6 +18,8 @@ import java.io.FileInputStream;
|
|||
import junit.framework.TestCase;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICDescriptorOperation;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.search.BasicSearchResultCollector;
|
||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||
|
@ -29,12 +31,14 @@ import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
|||
import org.eclipse.cdt.core.testplugin.CTestPlugin;
|
||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.Index;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexerRunner;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IWorkspace;
|
||||
import org.eclipse.core.resources.ResourcesPlugin;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
|
@ -55,7 +59,7 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
|||
static protected SearchEngine searchEngine;
|
||||
static protected FileManager fileManager;
|
||||
static final String sourceIndexerID = "org.eclipse.cdt.core.originalsourceindexer"; //$NON-NLS-1$
|
||||
static protected SourceIndexer sourceIndexer;
|
||||
static protected DOMSourceIndexer sourceIndexer;
|
||||
{
|
||||
|
||||
//(CCorePlugin.getDefault().getCoreModel().getIndexManager()).reset();
|
||||
|
@ -68,15 +72,19 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
|||
//Create temp project
|
||||
testProject = createProject("SearchTestProject");
|
||||
|
||||
testProject.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
testProject.setSessionProperty(DOMSourceIndexer.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);
|
||||
sourceIndexer = (SourceIndexer) CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(testProject);
|
||||
int x=0;
|
||||
sourceIndexer = (DOMSourceIndexer) CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(testProject);
|
||||
} catch (CoreException e) {}
|
||||
|
||||
resetIndexer(CCorePlugin.DEFAULT_INDEXER_UNIQ_ID);
|
||||
//The DOM Source Indexer checks to see if a file has any scanner info
|
||||
//set prior to indexing it in order to increase efficiency. We need to let it know
|
||||
//that it is running in test mode in order to allow for this scanner info test to be skipped
|
||||
DOMSourceIndexerRunner.setSkipScannerInfoTest(true);
|
||||
|
||||
|
||||
if (testProject == null)
|
||||
|
@ -110,6 +118,7 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
|||
}
|
||||
|
||||
protected void setUp() throws Exception {
|
||||
|
||||
}
|
||||
|
||||
protected void tearDown() {
|
||||
|
@ -150,4 +159,20 @@ public class BaseSearchTest extends TestCase implements ICSearchConstants {
|
|||
}
|
||||
}
|
||||
|
||||
public void resetIndexer(final String indexerId){
|
||||
if ( testProject != null) {
|
||||
ICDescriptorOperation op = new ICDescriptorOperation() {
|
||||
|
||||
public void execute(ICDescriptor descriptor, IProgressMonitor monitor) throws CoreException {
|
||||
descriptor.remove(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
descriptor.create(CCorePlugin.INDEXER_UNIQ_ID,indexerId);
|
||||
}
|
||||
};
|
||||
try {
|
||||
CCorePlugin.getDefault().getCDescriptorManager().runDescriptorOperation(testProject, op, new NullProgressMonitor());
|
||||
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexerChangeNotification(testProject);
|
||||
} catch (CoreException e) {}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -144,7 +144,7 @@ public class OtherPatternTests extends BaseSearchTest {
|
|||
assertTrue( match.getParentName().equals( "" ) ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testParameterDeclaration(){
|
||||
/*public void testParameterDeclaration(){
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "index", VAR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
|
@ -153,8 +153,7 @@ public class OtherPatternTests extends BaseSearchTest {
|
|||
assertEquals( 5, matches.size());
|
||||
}
|
||||
|
||||
//FIXME: BOG PUT BACK IN
|
||||
/* public void testOrPattern(){
|
||||
public void testOrPattern(){
|
||||
OrPattern orPattern = new OrPattern();
|
||||
orPattern.addPattern( SearchEngine.createSearchPattern( "::NS::B::e", ENUM, REFERENCES, true ) ); //$NON-NLS-1$
|
||||
orPattern.addPattern( SearchEngine.createSearchPattern( "Hea*", CLASS, DECLARATIONS, true ) ); //$NON-NLS-1$
|
||||
|
@ -205,7 +204,7 @@ public class OtherPatternTests extends BaseSearchTest {
|
|||
}
|
||||
|
||||
public void testEnumerators(){
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "One", ENUMTOR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "One", ENUMTOR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
|
||||
|
@ -214,7 +213,7 @@ public class OtherPatternTests extends BaseSearchTest {
|
|||
IMatch match = (IMatch) matches.iterator().next();
|
||||
assertTrue( match.getName().equals( "One" ) ); //$NON-NLS-1$
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "NS::B::Two", ENUMTOR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
pattern = SearchEngine.createSearchPattern( "NS::B::Two", ENUMTOR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
|
||||
|
@ -236,52 +235,32 @@ public class OtherPatternTests extends BaseSearchTest {
|
|||
assertTrue( match.getName().equals( "One" ) ); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
public void testParameterReferences(){
|
||||
/*public void testParameterReferences(){
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "index", VAR, REFERENCES, true ); //$NON-NLS-1$
|
||||
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
|
||||
Set matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 3 );
|
||||
}
|
||||
}*/
|
||||
|
||||
//FIXME: BOG PUT BACK IN
|
||||
|
||||
/*public void testBug43129(){
|
||||
ICSearchPattern pattern = SearchEngine.createSearchPattern( "externalInt", VAR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
Set matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 1 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externalInt", VAR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 0 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externalIntWithInitializer", VAR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 1 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externalIntWithInitializer", VAR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 1 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externCInt", VAR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 1 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externCInt", VAR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 0 );
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externCIntWithInitializer", VAR, DECLARATIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
assertEquals( matches.size(), 1 );
|
||||
|
||||
|
||||
pattern = SearchEngine.createSearchPattern( "externCIntWithInitializer", VAR, DEFINITIONS, true ); //$NON-NLS-1$
|
||||
search( workspace, pattern, scope, resultCollector );
|
||||
matches = resultCollector.getSearchResults();
|
||||
|
|
|
@ -11,7 +11,7 @@ import junit.framework.TestSuite;
|
|||
|
||||
import org.eclipse.cdt.core.cdescriptor.tests.CDescriptorTests;
|
||||
import org.eclipse.cdt.core.indexer.tests.DependencyTests;
|
||||
import org.eclipse.cdt.core.indexer.tests.SourceIndexerTests;
|
||||
import org.eclipse.cdt.core.indexer.tests.DOMSourceIndexerTests;
|
||||
import org.eclipse.cdt.core.model.tests.AllCoreTests;
|
||||
import org.eclipse.cdt.core.model.tests.BinaryTests;
|
||||
import org.eclipse.cdt.core.model.tests.ElementDeltaTests;
|
||||
|
@ -61,7 +61,7 @@ public class AutomatedIntegrationSuite extends TestSuite {
|
|||
suite.addTest(RegressionTestSuite.suite());
|
||||
//Indexer Tests need to be run after any indexer client tests
|
||||
//as the last test shuts down the indexing thread
|
||||
suite.addTest(SourceIndexerTests.suite());
|
||||
suite.addTest(DOMSourceIndexerTests.suite());
|
||||
// Last test to trigger report generation
|
||||
|
||||
// Add all failed tests
|
||||
|
|
|
@ -15,7 +15,7 @@ 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.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
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;
|
||||
|
@ -32,7 +32,7 @@ public abstract class IndexerJob implements IIndexJob {
|
|||
private IndexManager fIndexManager;
|
||||
private IProject fProject;
|
||||
private IIndex fProjectIndex = null;
|
||||
private SourceIndexer fSourceIndexer = null;
|
||||
private DOMSourceIndexer fSourceIndexer = null;
|
||||
|
||||
public static final String FAMILY= "BasicTypeIndexerJob"; //$NON-NLS-1$
|
||||
|
||||
|
@ -42,8 +42,8 @@ public abstract class IndexerJob implements IIndexJob {
|
|||
//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;
|
||||
if (indexer instanceof DOMSourceIndexer)
|
||||
fSourceIndexer = (DOMSourceIndexer) indexer;
|
||||
}
|
||||
|
||||
public boolean belongsTo(String family) {
|
||||
|
|
|
@ -22,7 +22,7 @@ import org.eclipse.cdt.internal.core.index.cindexstorage.IncludeEntry;
|
|||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.io.BlocksIndexInput;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.io.IndexInput;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
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.ReadWriteMonitor;
|
||||
|
@ -41,12 +41,12 @@ public class DependencyQueryJob implements IIndexJob {
|
|||
IProject project;
|
||||
IFile file;
|
||||
ArrayList includeFiles;
|
||||
SourceIndexer indexer;
|
||||
DOMSourceIndexer indexer;
|
||||
IndexManager indexManager;
|
||||
protected IndexSelector indexSelector;
|
||||
protected long executionTime = 0;
|
||||
|
||||
public DependencyQueryJob(IProject project, IFile file, SourceIndexer indexer, List includeFiles) {
|
||||
public DependencyQueryJob(IProject project, IFile file, DOMSourceIndexer indexer, List includeFiles) {
|
||||
this.project = project;
|
||||
this.file = file;
|
||||
this.indexer = indexer;
|
||||
|
@ -123,11 +123,11 @@ public class DependencyQueryJob implements IIndexJob {
|
|||
return COMPLETE;
|
||||
|
||||
|
||||
if (!(indexer instanceof SourceIndexer))
|
||||
if (!(indexer instanceof DOMSourceIndexer))
|
||||
return FAILED;
|
||||
|
||||
|
||||
SourceIndexer sourceIndexer = (SourceIndexer)indexer;
|
||||
DOMSourceIndexer sourceIndexer = (DOMSourceIndexer)indexer;
|
||||
|
||||
ReadWriteMonitor monitor = sourceIndexer.getMonitorFor(index);
|
||||
if (monitor == null)
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
|||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||
import org.eclipse.cdt.core.search.SearchEngine;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.PathCollector;
|
||||
import org.eclipse.cdt.internal.core.search.PatternSearchJob;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
|
@ -42,12 +42,12 @@ import org.eclipse.core.runtime.Path;
|
|||
public class UpdateDependency implements IIndexJob {
|
||||
PathCollector pathCollector;
|
||||
IFile resource=null;
|
||||
SourceIndexer indexer;
|
||||
DOMSourceIndexer indexer;
|
||||
|
||||
/**
|
||||
* @param resource
|
||||
*/
|
||||
public UpdateDependency(IResource resource, SourceIndexer indexer) {
|
||||
public UpdateDependency(IResource resource, DOMSourceIndexer indexer) {
|
||||
if (resource instanceof IFile)
|
||||
this.resource = (IFile) resource;
|
||||
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
package org.eclipse.cdt.core.index;
|
||||
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
@ -30,7 +29,7 @@ import org.eclipse.core.runtime.IPath;
|
|||
* Warning: This interface is still under development - API may change.
|
||||
* @since 3.0
|
||||
*/
|
||||
public interface ICDTIndexer extends IIndexer {
|
||||
public interface ICDTIndexer {
|
||||
|
||||
/**
|
||||
* Indexer Support bit flags
|
||||
|
|
|
@ -80,7 +80,7 @@ public interface IIndex {
|
|||
/**
|
||||
* Adds the given file to the index.
|
||||
*/
|
||||
void add(IFile file, IIndexer indexer) throws IOException;
|
||||
void add(IFile file, IIndexerRunner indexer) throws IOException;
|
||||
/**
|
||||
* Empties the index.
|
||||
*/
|
||||
|
|
|
@ -17,7 +17,7 @@ import org.eclipse.core.resources.IFile;
|
|||
* the words references to an IIndex. Each IIndexer can index certain types of document, and should
|
||||
* not index the other files.
|
||||
*/
|
||||
public interface IIndexer {
|
||||
public interface IIndexerRunner {
|
||||
/**
|
||||
* Indexes the given file, adding the file name and the word references
|
||||
* to this document to the given <code>IIndex</code>.The caller should use
|
|
@ -0,0 +1,27 @@
|
|||
package org.eclipse.cdt.internal.core.index;
|
||||
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
public abstract class IndexRequest implements IIndexJob {
|
||||
|
||||
protected boolean isCancelled = false;
|
||||
protected IPath indexPath = null;
|
||||
|
||||
public IndexRequest(IPath indexPath) {
|
||||
this.indexPath = indexPath;
|
||||
}
|
||||
|
||||
public boolean belongsTo(String projectName) {
|
||||
return projectName.equals(this.indexPath.segment(0));
|
||||
}
|
||||
|
||||
protected Integer updatedIndexState() {
|
||||
return CIndexStorage.UPDATING_STATE;
|
||||
}
|
||||
|
||||
public IPath getIndexPath(){
|
||||
return indexPath;
|
||||
}
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
**********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.cindexstorage;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
|
@ -21,7 +21,8 @@ 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.cindexstorage.Index;
|
||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMIndexRequest;
|
||||
import org.eclipse.cdt.internal.core.search.CWorkspaceScope;
|
||||
import org.eclipse.cdt.internal.core.search.IndexSelector;
|
||||
import org.eclipse.cdt.internal.core.search.SimpleLookupTable;
|
||||
|
@ -79,7 +80,7 @@ public class CIndexStorage implements IIndexStorage {
|
|||
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
}
|
||||
|
||||
public synchronized void aboutToUpdateIndex(IPath path, Integer newIndexState) {
|
||||
public 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);
|
||||
|
@ -231,7 +232,7 @@ public class CIndexStorage implements IIndexStorage {
|
|||
JobManager.verbose("-> request to rebuild index: "+indexName+" path: "+path.toOSString()); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
updateIndexState(indexName, REBUILDING_STATE);
|
||||
IndexRequest request = null;
|
||||
DOMIndexRequest request = null;
|
||||
if (target instanceof IProject) {
|
||||
IProject p = (IProject) target;
|
||||
if( p.exists() && indexer.isIndexEnabled( p ) )
|
||||
|
@ -305,8 +306,8 @@ public class CIndexStorage implements IIndexStorage {
|
|||
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;
|
||||
if (job instanceof DOMIndexRequest)
|
||||
if (((IndexRequest) job).getIndexPath().equals(indexPath)) return;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -24,7 +24,7 @@ import org.eclipse.cdt.core.search.ICSearchConstants;
|
|||
import org.eclipse.cdt.internal.core.CharOperation;
|
||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.io.BlocksIndexInput;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.io.BlocksIndexOutput;
|
||||
|
@ -98,7 +98,7 @@ public class Index implements IIndex, ICIndexStorageConstants, ICSearchConstants
|
|||
* If the document already exists in the index, it overrides the previous one. The changes will be
|
||||
* taken into account after a merge.
|
||||
*/
|
||||
public void add(IFile file, IIndexer indexer) throws IOException {
|
||||
public void add(IFile file, IIndexerRunner indexer) throws IOException {
|
||||
if (timeToMerge()) {
|
||||
merge();
|
||||
}
|
||||
|
@ -551,24 +551,22 @@ public class Index implements IIndex, ICIndexStorageConstants, ICSearchConstants
|
|||
|
||||
return bestPrefix( prefix, (char)0, fieldName, containingTypes, matchMode, isCaseSensitive );
|
||||
}
|
||||
|
||||
|
||||
public static final char[] bestEnumeratorPrefix( LimitTo limitTo, char[] enumeratorName,char[][] containingTypes, int matchMode, boolean isCaseSensitive) {
|
||||
char [] prefix = null;
|
||||
if( limitTo == REFERENCES ){
|
||||
prefix = encodeEntry(IIndex.ENUMTOR, ANY, REFERENCE);
|
||||
} else if( limitTo == DECLARATIONS ){
|
||||
prefix = encodeEntry(IIndex.ENUMTOR, ANY, DECLARATION);
|
||||
} else if ( limitTo == DEFINITIONS ) {
|
||||
prefix = encodeEntry(IIndex.ENUMTOR, ANY, DEFINITION);
|
||||
} else if (limitTo == ALL_OCCURRENCES){
|
||||
return encodeEntry(IIndex.ENUMTOR, ANY, ANY);
|
||||
}
|
||||
else {
|
||||
//Definitions
|
||||
return "noEnumtorDefs".toCharArray(); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
return bestPrefix( prefix, (char)0, enumeratorName, containingTypes, matchMode, isCaseSensitive );
|
||||
}
|
||||
|
||||
|
||||
public static final char[] bestMethodPrefix( LimitTo limitTo, char[] methodName,char[][] containingTypes, int matchMode, boolean isCaseSensitive) {
|
||||
char [] prefix = null;
|
||||
if( limitTo == REFERENCES ){
|
||||
|
|
|
@ -16,7 +16,7 @@ import org.eclipse.cdt.internal.core.index.IIndexEntry;
|
|||
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||
import org.eclipse.cdt.internal.core.index.INamedEntry;
|
||||
import org.eclipse.cdt.internal.core.index.ITypeEntry;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.AbstractIndexerRunner;
|
||||
|
||||
/**
|
||||
* An indexerOutput is used by an indexer to add files and word references to
|
||||
|
@ -151,8 +151,8 @@ public class IndexerOutput implements ICIndexStorageConstants, IIndexerOutput {
|
|||
pos+=tempName.length;
|
||||
}
|
||||
|
||||
if (AbstractIndexer.VERBOSE)
|
||||
AbstractIndexer.verbose(new String(result));
|
||||
if (AbstractIndexerRunner.VERBOSE)
|
||||
AbstractIndexerRunner.verbose(new String(result));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -185,8 +185,8 @@ public class IndexerOutput implements ICIndexStorageConstants, IIndexerOutput {
|
|||
pos+=tempName.length;
|
||||
}
|
||||
|
||||
if (AbstractIndexer.VERBOSE)
|
||||
AbstractIndexer.verbose(new String(result));
|
||||
if (AbstractIndexerRunner.VERBOSE)
|
||||
AbstractIndexerRunner.verbose(new String(result));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ import java.util.List;
|
|||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
@ -122,7 +122,7 @@ public class CTagsFileReader {
|
|||
} catch (IOException e){}
|
||||
}
|
||||
|
||||
class MiniIndexer implements IIndexer {
|
||||
class MiniIndexer implements IIndexerRunner {
|
||||
|
||||
IIndexerOutput output;
|
||||
IPath currentFile; //currentFile.getFullPath()
|
||||
|
|
|
@ -23,8 +23,8 @@ import org.eclipse.cdt.core.model.ICModelMarker;
|
|||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IIncludeReference;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.AbstractIndexerRunner;
|
||||
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;
|
||||
|
@ -88,7 +88,7 @@ class CTagsIndexAll extends CTagsIndexRequest {
|
|||
|
||||
|
||||
if (useInternalCTagsFile()){
|
||||
if (AbstractIndexer.TIMING)
|
||||
if (AbstractIndexerRunner.TIMING)
|
||||
startTime = System.currentTimeMillis();
|
||||
|
||||
|
||||
|
@ -96,7 +96,7 @@ class CTagsIndexAll extends CTagsIndexRequest {
|
|||
success = runCTags(project.getLocation());
|
||||
ctagsFileToUse=ctagsFile;
|
||||
|
||||
if (AbstractIndexer.TIMING){
|
||||
if (AbstractIndexerRunner.TIMING){
|
||||
cTagsEndTime = System.currentTimeMillis();
|
||||
System.out.println("CTags Run: " + (cTagsEndTime - startTime)); //$NON-NLS-1$
|
||||
System.out.flush();
|
||||
|
@ -114,7 +114,7 @@ class CTagsIndexAll extends CTagsIndexRequest {
|
|||
// request to save index when all cus have been indexed
|
||||
indexer.request(new CTagsSaveIndex(this.indexPath, indexer));
|
||||
|
||||
if (AbstractIndexer.TIMING){
|
||||
if (AbstractIndexerRunner.TIMING){
|
||||
endTime = System.currentTimeMillis();
|
||||
System.out.println("CTags Encoding Time: " + (endTime - cTagsEndTime)); //$NON-NLS-1$
|
||||
System.out.println("CTagsIndexer Total Time: " + (endTime - startTime)); //$NON-NLS-1$
|
||||
|
|
|
@ -14,29 +14,24 @@ import java.io.IOException;
|
|||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
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.runtime.IPath;
|
||||
|
||||
/**
|
||||
* @author Bogdan Gheorghe
|
||||
*/
|
||||
public abstract class CTagsIndexRequest implements IIndexJob {
|
||||
|
||||
protected boolean isCancelled = false;
|
||||
protected IPath indexPath = null;
|
||||
public abstract class CTagsIndexRequest extends IndexRequest {
|
||||
|
||||
protected CTagsIndexer indexer = null;
|
||||
|
||||
public CTagsIndexRequest(IPath indexPath, CTagsIndexer indexer) {
|
||||
this.indexPath = indexPath;
|
||||
super(indexPath);
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
||||
public boolean belongsTo(String projectName) {
|
||||
return projectName.equals(this.indexPath.segment(0));
|
||||
}
|
||||
|
||||
|
||||
public void cancel() {
|
||||
this.indexer.jobFinishedNotification( this );
|
||||
|
@ -76,4 +71,4 @@ public abstract class CTagsIndexRequest implements IIndexJob {
|
|||
public IPath getIndexPath(){
|
||||
return indexPath;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,9 +31,8 @@ import org.eclipse.cdt.core.model.ICModelMarker;
|
|||
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
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;
|
||||
|
@ -204,23 +203,6 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer {
|
|||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.index.IIndexer#index(org.eclipse.cdt.internal.core.index.IDocument, org.eclipse.cdt.internal.core.index.IIndexerOutput)
|
||||
*/
|
||||
public void index(IFile document, IIndexerOutput output)
|
||||
throws IOException {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.index.IIndexer#shouldIndex(org.eclipse.core.resources.IFile)
|
||||
*/
|
||||
public boolean shouldIndex(IFile file) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param path
|
||||
* @param reuseIndexFile
|
||||
|
@ -282,7 +264,13 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer {
|
|||
* @param integer
|
||||
*/
|
||||
public void aboutToUpdateIndex(IPath indexPath, Integer indexState) {
|
||||
indexStorage.aboutToUpdateIndex(indexPath, indexState);
|
||||
storageMonitor.enterRead();
|
||||
try{
|
||||
indexStorage.aboutToUpdateIndex(indexPath, indexState);
|
||||
}
|
||||
finally {
|
||||
storageMonitor.exitRead();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,7 +20,7 @@ import org.eclipse.cdt.core.model.ICModelMarker;
|
|||
import org.eclipse.cdt.core.resources.IConsole;
|
||||
import org.eclipse.cdt.internal.core.ConsoleOutputSniffer;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.AbstractIndexerRunner;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
|
@ -31,7 +31,7 @@ import org.eclipse.core.runtime.Path;
|
|||
/**
|
||||
* @author Bogdan Gheorghe
|
||||
*/
|
||||
public class CTagsIndexerRunner extends AbstractIndexer {
|
||||
public class CTagsIndexerRunner extends AbstractIndexerRunner {
|
||||
private CTagsIndexer indexer;
|
||||
/**
|
||||
* @param resource
|
||||
|
@ -76,7 +76,7 @@ public class CTagsIndexerRunner extends AbstractIndexer {
|
|||
} catch (CoreException e) {}
|
||||
|
||||
long startTime=0;
|
||||
if (AbstractIndexer.TIMING)
|
||||
if (AbstractIndexerRunner.TIMING)
|
||||
startTime = System.currentTimeMillis();
|
||||
|
||||
CTagsConsoleParser parser = new CTagsConsoleParser(this);
|
||||
|
@ -107,7 +107,7 @@ public class CTagsIndexerRunner extends AbstractIndexer {
|
|||
consoleErr.close();
|
||||
cos.close();
|
||||
|
||||
if (AbstractIndexer.TIMING){
|
||||
if (AbstractIndexerRunner.TIMING){
|
||||
System.out.println("CTagsIndexer Total Time: " + (System.currentTimeMillis() - startTime)); //$NON-NLS-1$
|
||||
System.out.flush();
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
@ -22,7 +22,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
|||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexerOutput;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
|
@ -36,7 +36,7 @@ import org.eclipse.core.runtime.Status;
|
|||
import org.eclipse.core.runtime.content.IContentType;
|
||||
import org.eclipse.core.runtime.jobs.Job;
|
||||
|
||||
public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
|
||||
public abstract class AbstractIndexerRunner implements IIndexerRunner, ICSearchConstants {
|
||||
|
||||
public static boolean VERBOSE = false;
|
||||
public static boolean TIMING = false;
|
||||
|
@ -51,7 +51,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
|
|||
private static final String INDEXER_MARKER_PROCESSING = Util.bind( "indexerMarker.processing" ); //$NON-NLS-1$
|
||||
protected IFile resourceFile;
|
||||
|
||||
public AbstractIndexer() {
|
||||
public AbstractIndexerRunner() {
|
||||
super();
|
||||
}
|
||||
|
||||
|
@ -69,7 +69,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
|
|||
}
|
||||
|
||||
/**
|
||||
* @see IIndexer#index(IFile document, IIndexerOutput output)
|
||||
* @see IIndexerRunner#index(IFile document, IIndexerOutput output)
|
||||
*/
|
||||
public void index(IFile file, IIndexerOutput output) throws IOException {
|
||||
this.output = output;
|
||||
|
@ -80,7 +80,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
|
|||
|
||||
/**
|
||||
* @param fileToBeIndexed
|
||||
* @see IIndexer#shouldIndex(IFile file)
|
||||
* @see IIndexerRunner#shouldIndex(IFile file)
|
||||
*/
|
||||
public boolean shouldIndex(IFile fileToBeIndexed) {
|
||||
if (fileToBeIndexed != null){
|
|
@ -4,7 +4,7 @@
|
|||
* TODO To change the template for this generated file go to
|
||||
* Window - Preferences - Java - Code Style - Code Templates
|
||||
*/
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
@ -17,9 +17,9 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
|||
*/
|
||||
public class CleanEncounteredHeaders implements IIndexJob {
|
||||
|
||||
SourceIndexer indexer = null;
|
||||
DOMSourceIndexer indexer = null;
|
||||
|
||||
public CleanEncounteredHeaders(SourceIndexer indexer){
|
||||
public CleanEncounteredHeaders(DOMSourceIndexer indexer){
|
||||
this.indexer = indexer;
|
||||
}
|
||||
/* (non-Javadoc)
|
|
@ -1,33 +1,29 @@
|
|||
/***********************************************************************
|
||||
* Copyright (c) 2004 IBM Corporation and others.
|
||||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2004 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* 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/epl-v10.html
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
***********************************************************************/
|
||||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AddCompilationUnitToIndex;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
public class DOMAddCompilationUnitToIndex extends AddCompilationUnitToIndex {
|
||||
public class DOMAddCompilationUnitToIndex extends DOMAddFileToIndex {
|
||||
protected char[] contents;
|
||||
|
||||
public DOMAddCompilationUnitToIndex(IFile resource, IPath indexedContainer,
|
||||
SourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||
super(resource, indexedContainer, indexer, checkEncounteredHeaders);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.index.sourceindexer.AddCompilationUnitToIndex#indexDocument(org.eclipse.cdt.internal.core.index.IIndex)
|
||||
*/
|
||||
public DOMAddCompilationUnitToIndex(IFile resource, IPath indexedContainer, DOMSourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||
super(resource, indexedContainer, indexer, checkEncounteredHeaders);
|
||||
}
|
||||
|
||||
protected boolean indexDocument(IIndex index) throws IOException {
|
||||
if (!initializeContents()) return false;
|
||||
index.add(resource, new DOMSourceIndexerRunner(resource, indexer));
|
||||
|
@ -35,4 +31,15 @@ public class DOMAddCompilationUnitToIndex extends AddCompilationUnitToIndex {
|
|||
return true;
|
||||
}
|
||||
|
||||
public boolean initializeContents() {
|
||||
if (this.contents == null) {
|
||||
try {
|
||||
IPath location = resource.getLocation();
|
||||
if (location != null)
|
||||
this.contents = org.eclipse.cdt.internal.core.Util.getFileCharContent(location.toFile(), null);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
return this.contents != null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
* Contributors:
|
||||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -24,17 +24,17 @@ import org.eclipse.core.resources.IResource;
|
|||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
public abstract class AddFileToIndex extends IndexRequest {
|
||||
public abstract class DOMAddFileToIndex extends DOMIndexRequest {
|
||||
protected IFile resource;
|
||||
private boolean checkEncounteredHeaders;
|
||||
|
||||
public AddFileToIndex(IFile resource, IPath indexPath, SourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||
public DOMAddFileToIndex(IFile resource, IPath indexPath, DOMSourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||
super(indexPath, indexer);
|
||||
this.resource = resource;
|
||||
this.checkEncounteredHeaders = checkEncounteredHeaders;
|
||||
}
|
||||
|
||||
public AddFileToIndex(IFile resource, IPath indexPath, SourceIndexer indexer) {
|
||||
public DOMAddFileToIndex(IFile resource, IPath indexPath, DOMSourceIndexer indexer) {
|
||||
this(resource,indexPath,indexer,false);
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -28,7 +28,7 @@ import org.eclipse.core.runtime.CoreException;
|
|||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
public class AddFolderToIndex extends IndexRequest {
|
||||
public class DOMAddFolderToIndex extends DOMIndexRequest {
|
||||
IPath folderPath;
|
||||
IProject project;
|
||||
char[][] exclusionPattern;
|
||||
|
@ -36,7 +36,7 @@ public class AddFolderToIndex extends IndexRequest {
|
|||
ArrayList headerFilesToIndex;
|
||||
boolean cleanEncouteredHeaders;
|
||||
|
||||
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, SourceIndexer indexer) {
|
||||
public DOMAddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, DOMSourceIndexer indexer) {
|
||||
super(project.getFullPath(), indexer);
|
||||
this.folderPath = folderPath;
|
||||
this.project = project;
|
||||
|
@ -46,7 +46,7 @@ public class AddFolderToIndex extends IndexRequest {
|
|||
this.cleanEncouteredHeaders = false;
|
||||
}
|
||||
|
||||
public AddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, SourceIndexer indexer, boolean cleanEncounteredHeaders) {
|
||||
public DOMAddFolderToIndex(IPath folderPath, IProject project, char[][] exclusionPattern, DOMSourceIndexer indexer, boolean cleanEncounteredHeaders) {
|
||||
super(project.getFullPath(), indexer);
|
||||
this.folderPath = folderPath;
|
||||
this.project = project;
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -18,6 +18,7 @@ import org.eclipse.cdt.core.model.ISourceEntry;
|
|||
import org.eclipse.cdt.core.model.ISourceRoot;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IQueryResult;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.model.CModel;
|
||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
||||
|
@ -30,17 +31,17 @@ import org.eclipse.core.runtime.CoreException;
|
|||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
|
||||
public class IndexAllProject extends IndexRequest {
|
||||
public class DOMIndexAllProject extends DOMIndexRequest {
|
||||
IProject project;
|
||||
|
||||
public IndexAllProject(IProject project, SourceIndexer indexer) {
|
||||
public DOMIndexAllProject(IProject project, DOMSourceIndexer indexer) {
|
||||
super(project.getFullPath(), indexer);
|
||||
this.project = project;
|
||||
}
|
||||
|
||||
public boolean equals(Object o) {
|
||||
if (o instanceof IndexAllProject)
|
||||
return this.project.equals(((IndexAllProject) o).project);
|
||||
if (o instanceof DOMIndexAllProject)
|
||||
return this.project.equals(((DOMIndexAllProject) o).project);
|
||||
return false;
|
||||
}
|
||||
/**
|
||||
|
@ -61,7 +62,7 @@ public class IndexAllProject extends IndexRequest {
|
|||
if (monitor == null) return true; // index got deleted since acquired
|
||||
|
||||
try {
|
||||
if (AbstractIndexer.TIMING)
|
||||
if (AbstractIndexerRunner.TIMING)
|
||||
//reset the total index timer
|
||||
indexer.setTotalIndexTime(0);
|
||||
|
||||
|
@ -92,14 +93,14 @@ public class IndexAllProject extends IndexRequest {
|
|||
ISourceEntry tempEntry = ((SourceRoot) sourceRoot[i]).getSourceEntry();
|
||||
|
||||
if ((i+1) != sourceRoot.length)
|
||||
indexer.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), indexer));
|
||||
indexer.request(new DOMAddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(), indexer));
|
||||
else
|
||||
indexer.request(new AddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(),indexer,true));
|
||||
indexer.request(new DOMAddFolderToIndex(sourceRoot[i].getPath(), project, tempEntry.fullExclusionPatternChars(),indexer,true));
|
||||
}
|
||||
}
|
||||
|
||||
// request to save index when all cus have been indexed
|
||||
indexer.request(new SaveIndex(this.indexPath, indexer));
|
||||
indexer.request(new DOMSaveIndex(this.indexPath, indexer));
|
||||
} catch (CoreException e) {
|
||||
if (IndexManager.VERBOSE) {
|
||||
JobManager.verbose("-> failed to index " + this.project + " because of the following exception:"); //$NON-NLS-1$ //$NON-NLS-2$
|
|
@ -0,0 +1,63 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.ReadWriteMonitor;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
public abstract class DOMIndexRequest extends IndexRequest {
|
||||
|
||||
protected DOMSourceIndexer indexer = null;
|
||||
|
||||
public DOMIndexRequest(IPath indexPath, DOMSourceIndexer indexer) {
|
||||
super(indexPath);
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
indexer.jobFinishedNotification( this );
|
||||
indexer.jobWasCancelled(this.indexPath);
|
||||
this.isCancelled = true;
|
||||
}
|
||||
|
||||
public boolean isReadyToRun() {
|
||||
IProject project = CCorePlugin.getWorkspace().getRoot().getProject(indexPath.segment(0));
|
||||
if ( !project.isAccessible() || !this.indexer.isIndexEnabled( project ) )
|
||||
return false;
|
||||
|
||||
// tag the index as inconsistent
|
||||
indexer.aboutToUpdateIndex(indexPath, updatedIndexState());
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* This code is assumed to be invoked while monitor has read lock
|
||||
*/
|
||||
protected void saveIfNecessary(IIndex index, ReadWriteMonitor monitor) throws IOException {
|
||||
/* if index has changed, commit these before querying */
|
||||
if (index.hasChanged()) {
|
||||
try {
|
||||
monitor.exitRead(); // free read lock
|
||||
monitor.enterWrite(); // ask permission to write
|
||||
indexer.saveIndex(index);
|
||||
} finally {
|
||||
monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -24,12 +24,12 @@ import org.eclipse.core.runtime.IPath;
|
|||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
public class RemoveFolderFromIndex extends IndexRequest {
|
||||
public class DOMRemoveFolderFromIndex extends DOMIndexRequest {
|
||||
IPath folderPath;
|
||||
char[][] exclusionPatterns;
|
||||
IProject project;
|
||||
|
||||
public RemoveFolderFromIndex(IPath folderPath, char[][] exclusionPatterns, IProject project, SourceIndexer indexer) {
|
||||
public DOMRemoveFolderFromIndex(IPath folderPath, char[][] exclusionPatterns, IProject project, DOMSourceIndexer indexer) {
|
||||
super(project.getFullPath(), indexer);
|
||||
this.folderPath = folderPath;
|
||||
this.exclusionPatterns = exclusionPatterns;
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -20,10 +20,10 @@ import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
|||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
||||
public class RemoveFromIndex extends IndexRequest {
|
||||
public class DOMRemoveFromIndex extends DOMIndexRequest {
|
||||
String resourceName;
|
||||
|
||||
public RemoveFromIndex(String resourceName, IPath indexPath, SourceIndexer indexer) {
|
||||
public DOMRemoveFromIndex(String resourceName, IPath indexPath, DOMSourceIndexer indexer) {
|
||||
super(indexPath, indexer);
|
||||
this.resourceName = resourceName;
|
||||
}
|
|
@ -9,7 +9,7 @@
|
|||
* IBM Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
@ -23,8 +23,8 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
|||
/*
|
||||
* Save the index of a project.
|
||||
*/
|
||||
public class SaveIndex extends IndexRequest {
|
||||
public SaveIndex(IPath indexPath, SourceIndexer indexer) {
|
||||
public class DOMSaveIndex extends DOMIndexRequest {
|
||||
public DOMSaveIndex(IPath indexPath, DOMSourceIndexer indexer) {
|
||||
super(indexPath, indexer);
|
||||
}
|
||||
|
|
@ -1,62 +1,649 @@
|
|||
/***********************************************************************
|
||||
* Copyright (c) 2004 IBM Corporation and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
/**********************************************************************
|
||||
* 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/epl-v10.html
|
||||
* http://www.eclipse.org/legal/cpl-v10.html
|
||||
*
|
||||
* Contributors:
|
||||
* IBM - Initial API and implementation
|
||||
***********************************************************************/
|
||||
**********************************************************************/
|
||||
package org.eclipse.cdt.internal.core.index.domsourceindexer;
|
||||
|
||||
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.AbstractCExtension;
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICExtensionReference;
|
||||
import org.eclipse.cdt.core.ICLogConstants;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
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.parser.util.ObjectSet;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
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.IFolder;
|
||||
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;
|
||||
|
||||
public class DOMSourceIndexer extends SourceIndexer {
|
||||
/**
|
||||
* @author Bogdan Gheorghe
|
||||
*/
|
||||
public class DOMSourceIndexer extends AbstractCExtension 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 int PREPROCESSOR_PROBLEMS_BIT = 1;
|
||||
public static final int SEMANTIC_PROBLEMS_BIT = 1 << 1;
|
||||
public static final int SYNTACTIC_PROBLEMS_BIT = 1 << 2;
|
||||
public static final int INCLUSION_PROBLEMS_BIT = 1 << 3;
|
||||
|
||||
public static final String SOURCE_INDEXER_ID = "originalsourceindexer"; //$NON-NLS-1$
|
||||
public static final String SOURCE_INDEXER_UNIQUE_ID = CCorePlugin.PLUGIN_ID + "." + SOURCE_INDEXER_ID; //$NON-NLS-1$;
|
||||
|
||||
|
||||
private CIndexStorage indexStorage = null;
|
||||
protected ReadWriteMonitor storageMonitor = null;
|
||||
protected IndexManager indexManager = null;
|
||||
|
||||
protected HashSet jobSet = null;
|
||||
|
||||
protected long totalIndexTime = 0;
|
||||
|
||||
public static String ID = CCorePlugin.PLUGIN_ID + ".domsourceindexer"; //$NON-NLS-1$
|
||||
|
||||
public DOMSourceIndexer() {
|
||||
super();
|
||||
public DOMSourceIndexer(){
|
||||
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
this.indexStorage = (CIndexStorage) indexManager.getIndexStorageForIndexer(this);
|
||||
this.jobSet = new HashSet();
|
||||
this.storageMonitor = new ReadWriteMonitor();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public 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){
|
||||
DOMAddCompilationUnitToIndex job = new DOMAddCompilationUnitToIndex(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);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Warning: Does not check whether index is consistent (not being used)
|
||||
*/
|
||||
public static int trimed = 0;
|
||||
public static int added = 0;
|
||||
|
||||
public synchronized boolean haveEncounteredHeader(IPath projectPath, IPath filePath, boolean add) {
|
||||
SimpleLookupTable headerTable = 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())) {
|
||||
trimed++;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (add) {
|
||||
headers.put(filePath.toOSString());
|
||||
added++;
|
||||
}
|
||||
|
||||
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
|
||||
DOMIndexRequest request = new DOMIndexAllProject(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;
|
||||
|
||||
return true;
|
||||
/*Boolean indexValue = null;
|
||||
|
||||
try {
|
||||
indexValue = (Boolean) project.getSessionProperty(activationKey);
|
||||
} catch (CoreException e) {}
|
||||
|
||||
if (indexValue != null)
|
||||
return indexValue.booleanValue();
|
||||
|
||||
try {
|
||||
ICDescriptor cdesc = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||
if (cdesc == null)
|
||||
return false;
|
||||
|
||||
ICExtensionReference[] cext = cdesc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
if (cext.length > 0) {
|
||||
//initializeIndexerId();
|
||||
for (int i = 0; i < cext.length; i++) {
|
||||
String id = cext[i].getID();
|
||||
String orig = cext[i].getExtensionData("indexenabled"); //$NON-NLS-1$
|
||||
if (orig != null){
|
||||
Boolean tempBool = new Boolean(orig);
|
||||
indexEnabled = tempBool.booleanValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (CoreException e) {}
|
||||
|
||||
return indexEnabled;*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int indexProblemsEnabled(IProject project) {
|
||||
|
||||
if( project == null || !project.exists() || !project.isOpen() )
|
||||
return 0;
|
||||
|
||||
int indexProblemsEnabled = 0;
|
||||
try {
|
||||
ICDescriptor cdesc = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||
if (cdesc == null)
|
||||
return 0;
|
||||
|
||||
ICExtensionReference[] cext = cdesc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
if (cext.length > 0) {
|
||||
//initializeIndexerId();
|
||||
for (int i = 0; i < cext.length; i++) {
|
||||
String orig = cext[i].getExtensionData("indexmarkers"); //$NON-NLS-1$
|
||||
if (orig != null){
|
||||
Integer tempInt = new Integer(orig);
|
||||
indexProblemsEnabled = tempInt.intValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (CoreException e) {}
|
||||
|
||||
return indexProblemsEnabled;
|
||||
}
|
||||
/**
|
||||
* 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
|
||||
DOMIndexRequest request = new DOMIndexAllProject(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 DOMAddFolderToIndex(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 DOMRemoveFromIndex(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
|
||||
DOMIndexRequest request = new DOMIndexAllProject(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 DOMRemoveFolderFromIndex(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);
|
||||
|
||||
}
|
||||
|
||||
public void removeIndexerProblems( IResource resource){
|
||||
indexManager.removeIndexerProblems(resource);
|
||||
}
|
||||
|
||||
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 && indexStorage.getNeedToSave())
|
||||
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#addRequest(org.eclipse.cdt.core.model.ICElement, org.eclipse.core.resources.IResourceDelta, org.eclipse.core.resources.IResourceChangeEvent)
|
||||
*/
|
||||
public void addRequest(IProject project, IResourceDelta delta, int kind) {
|
||||
|
||||
switch (kind) {
|
||||
case ICDTIndexer.PROJECT :
|
||||
this.indexAll(project);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.FOLDER :
|
||||
this.indexSourceFolder(project,delta.getFullPath(),null);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.COMPILATION_UNIT:
|
||||
IFile file = (IFile) delta.getResource();
|
||||
this.addSource(file, project.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(IProject project, IResourceDelta delta, int kind) {
|
||||
switch (kind) {
|
||||
case ICDTIndexer.PROJECT :
|
||||
IPath fullPath = project.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 ICDTIndexer.FOLDER :
|
||||
this.removeSourceFolderFromIndex(project,delta.getFullPath(),null);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.COMPILATION_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) {
|
||||
indexStorage.setNeedToSave(true);
|
||||
|
||||
if (job instanceof DOMAddCompilationUnitToIndex){
|
||||
DOMAddCompilationUnitToIndex tempJob = (DOMAddCompilationUnitToIndex) 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.getMonitorForIndex();
|
||||
}
|
||||
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) {
|
||||
storageMonitor.enterRead();
|
||||
try{
|
||||
indexStorage.aboutToUpdateIndex(indexPath, indexState);
|
||||
}
|
||||
finally {
|
||||
storageMonitor.exitRead();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @return Returns the totalIndexTime.
|
||||
*/
|
||||
public long getTotalIndexTime() {
|
||||
return totalIndexTime;
|
||||
}
|
||||
/**
|
||||
* @param totalIndexTime The totalIndexTime to set.
|
||||
*/
|
||||
public void setTotalIndexTime(long totalIndexTime) {
|
||||
this.totalIndexTime = totalIndexTime;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer#addSource(org.eclipse.core.resources.IFile, org.eclipse.core.runtime.IPath, boolean)
|
||||
* @see org.eclipse.cdt.core.index.ICDTIndexer#notifyIndexerChange()
|
||||
*/
|
||||
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){
|
||||
DOMAddCompilationUnitToIndex job = new DOMAddCompilationUnitToIndex(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 notifyIndexerChange(IProject project) {
|
||||
this.indexAll(project);
|
||||
}
|
||||
|
||||
public void indexerRemoved(IProject project) {
|
||||
removeIndexerProblems(project);
|
||||
}
|
||||
|
||||
public void addResource(IProject project, IResource resource) {
|
||||
|
||||
if (resource instanceof IProject){
|
||||
this.indexAll(project);
|
||||
}
|
||||
else if (resource instanceof IFolder){
|
||||
this.indexSourceFolder(project,resource.getFullPath(),null);
|
||||
}
|
||||
else if (resource instanceof IFile){
|
||||
IFile file = (IFile) resource;
|
||||
this.addSource(file, project.getFullPath());
|
||||
}
|
||||
}
|
||||
|
||||
public void removeResource(IProject project, IResource resource) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
public void addResourceByPath(IProject project, IPath path, int resourceType) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -43,8 +43,6 @@ import org.eclipse.cdt.internal.core.index.IIndex;
|
|||
import org.eclipse.cdt.internal.core.index.NamedEntry;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexerOutput;
|
||||
import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
|
@ -57,17 +55,21 @@ import org.eclipse.core.runtime.Path;
|
|||
*
|
||||
* @author vhirsl
|
||||
*/
|
||||
public class DOMSourceIndexerRunner extends AbstractIndexer {
|
||||
public class DOMSourceIndexerRunner extends AbstractIndexerRunner {
|
||||
|
||||
private SourceIndexer indexer;
|
||||
private DOMSourceIndexer indexer;
|
||||
|
||||
// for running JUnit tests
|
||||
private static boolean skipScannerInfoTest=false;
|
||||
|
||||
|
||||
// timing & errors
|
||||
static int totalParseTime = 0;
|
||||
static int totalVisitTime = 0;
|
||||
static int errorCount = 0;
|
||||
static Map errors = new HashMap();
|
||||
|
||||
public DOMSourceIndexerRunner(IFile resource, SourceIndexer indexer) {
|
||||
public DOMSourceIndexerRunner(IFile resource, DOMSourceIndexer indexer) {
|
||||
this.resourceFile = resource;
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
@ -75,7 +77,7 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
/**
|
||||
* @return Returns the indexer.
|
||||
*/
|
||||
public SourceIndexer getIndexer() {
|
||||
public DOMSourceIndexer getIndexer() {
|
||||
return indexer;
|
||||
}
|
||||
|
||||
|
@ -86,12 +88,12 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
protected void indexFile(IFile file) throws IOException {
|
||||
int problems = indexer.indexProblemsEnabled(resourceFile.getProject());
|
||||
// enable inclusion problem markers
|
||||
problems |= SourceIndexer.INCLUSION_PROBLEMS_BIT;
|
||||
problems |= DOMSourceIndexer.INCLUSION_PROBLEMS_BIT;
|
||||
setProblemMarkersEnabled(problems);
|
||||
requestRemoveMarkers(resourceFile, null);
|
||||
|
||||
// do not index the file if there is no scanner info
|
||||
if (isScannerInfoEmpty(resourceFile)) {
|
||||
if (!skipScannerInfoTest && isScannerInfoEmpty(resourceFile)) {
|
||||
// generate info marker - file is not indexed
|
||||
addInfoMarker(resourceFile, CCorePlugin.getResourceString("DOMIndexerMarker.EmptyScannerInfo")); //$NON-NLS-1$
|
||||
if (areProblemMarkersEnabled()) {
|
||||
|
@ -110,13 +112,13 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
long startTime = 0, parseTime = 0, endTime = 0;
|
||||
String error = null;
|
||||
try {
|
||||
if (AbstractIndexer.TIMING)
|
||||
if (AbstractIndexerRunner.TIMING)
|
||||
startTime = System.currentTimeMillis();
|
||||
|
||||
tu = CDOM.getInstance().getASTService().getTranslationUnit(resourceFile,
|
||||
CDOM.getInstance().getCodeReaderFactory(CDOM.PARSE_SAVED_RESOURCES));
|
||||
|
||||
if (AbstractIndexer.TIMING)
|
||||
if (AbstractIndexerRunner.TIMING)
|
||||
parseTime = System.currentTimeMillis();
|
||||
|
||||
ASTVisitor visitor = null;
|
||||
|
@ -153,7 +155,7 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
throw (IOException) ex;
|
||||
}
|
||||
finally {
|
||||
if (AbstractIndexer.TIMING) {
|
||||
if (AbstractIndexerRunner.TIMING) {
|
||||
endTime = System.currentTimeMillis();
|
||||
if (error != null) {
|
||||
errorCount++;
|
||||
|
@ -172,12 +174,12 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
long tempTotaltime = indexer.getTotalIndexTime() + currentTime;
|
||||
indexer.setTotalIndexTime(tempTotaltime);
|
||||
System.out.println(" \t\tOverall " + tempTotaltime + "=" + totalParseTime + "+" + totalVisitTime + " " + errorCount + " errors "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
|
||||
System.out.println( "Attempted Entries " + IndexerOutput.entryCount + " Trimed " + SourceIndexer.trimed + " Added " + SourceIndexer.added); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
||||
System.out.println( "Attempted Entries " + IndexerOutput.entryCount + " Trimed " + DOMSourceIndexer.trimed + " Added " + DOMSourceIndexer.added); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
|
||||
|
||||
System.out.flush();
|
||||
}
|
||||
if (AbstractIndexer.VERBOSE){
|
||||
AbstractIndexer.verbose("DOM AST TRAVERSAL FINISHED " + resourceFile.getName().toString()); //$NON-NLS-1$
|
||||
if (AbstractIndexerRunner.VERBOSE){
|
||||
AbstractIndexerRunner.verbose("DOM AST TRAVERSAL FINISHED " + resourceFile.getName().toString()); //$NON-NLS-1$
|
||||
}
|
||||
// if the user disable problem reporting since we last checked, don't report the collected problems
|
||||
if (areProblemMarkersEnabled()) {
|
||||
|
@ -405,9 +407,9 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
}
|
||||
|
||||
public boolean shouldRecordProblem(IASTProblem problem) {
|
||||
boolean preprocessor = (getProblemMarkersEnabled() & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT ) != 0;
|
||||
boolean semantics = (getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT ) != 0;
|
||||
boolean syntax = (getProblemMarkersEnabled() & SourceIndexer.SYNTACTIC_PROBLEMS_BIT ) != 0;
|
||||
boolean preprocessor = (getProblemMarkersEnabled() & DOMSourceIndexer.PREPROCESSOR_PROBLEMS_BIT ) != 0;
|
||||
boolean semantics = (getProblemMarkersEnabled() & DOMSourceIndexer.SEMANTIC_PROBLEMS_BIT ) != 0;
|
||||
boolean syntax = (getProblemMarkersEnabled() & DOMSourceIndexer.SYNTACTIC_PROBLEMS_BIT ) != 0;
|
||||
|
||||
if (problem.checkCategory(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND)) {
|
||||
return true;
|
||||
|
@ -428,14 +430,14 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
* @return
|
||||
*/
|
||||
public boolean shouldRecordProblem(IProblemBinding problem) {
|
||||
return (getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0;
|
||||
return (getProblemMarkersEnabled() & DOMSourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static void printErrors() {
|
||||
if (AbstractIndexer.TIMING) {
|
||||
if (AbstractIndexerRunner.TIMING) {
|
||||
totalParseTime = 0;
|
||||
totalVisitTime = 0;
|
||||
System.out.println("Errors during indexing"); //$NON-NLS-1$
|
||||
|
@ -445,5 +447,10 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void setSkipScannerInfoTest(boolean skipScannerInfoTest) {
|
||||
DOMSourceIndexerRunner.skipScannerInfoTest = skipScannerInfoTest;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@ import org.eclipse.cdt.core.CCorePlugin;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
@ -81,7 +80,7 @@ public class IndexEncoderUtil {
|
|||
? true : false;
|
||||
}
|
||||
|
||||
public static boolean nodeInVisitedExternalHeader(IASTNode node, SourceIndexer indexer) {
|
||||
public static boolean nodeInVisitedExternalHeader(IASTNode node, DOMSourceIndexer indexer) {
|
||||
String fileName = node.getContainingFilename();
|
||||
IPath filePath = new Path(fileName);
|
||||
IPath projectPath = indexer.getProject().getFullPath();
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
|
||||
public class AddCompilationUnitToIndex extends AddFileToIndex {
|
||||
protected char[] contents;
|
||||
|
||||
public AddCompilationUnitToIndex(IFile resource, IPath indexedContainer, SourceIndexer indexer, boolean checkEncounteredHeaders) {
|
||||
super(resource, indexedContainer, indexer, checkEncounteredHeaders);
|
||||
}
|
||||
protected boolean indexDocument(IIndex index) throws IOException {
|
||||
if (!initializeContents()) return false;
|
||||
index.add(resource, new SourceIndexerRunner(resource, indexer));
|
||||
|
||||
return true;
|
||||
}
|
||||
public boolean initializeContents() {
|
||||
if (this.contents == null) {
|
||||
try {
|
||||
IPath location = resource.getLocation();
|
||||
if (location != null)
|
||||
this.contents = org.eclipse.cdt.internal.core.Util.getFileCharContent(location.toFile(), null);
|
||||
} catch (IOException e) {
|
||||
}
|
||||
}
|
||||
return this.contents != null;
|
||||
}
|
||||
}
|
|
@ -1,75 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 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
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
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.runtime.IPath;
|
||||
|
||||
public abstract class IndexRequest implements IIndexJob {
|
||||
protected boolean isCancelled = false;
|
||||
protected IPath indexPath = null;
|
||||
protected SourceIndexer indexer = null;
|
||||
|
||||
public IndexRequest(IPath indexPath, SourceIndexer indexer) {
|
||||
this.indexPath = indexPath;
|
||||
this.indexer = indexer;
|
||||
}
|
||||
|
||||
public boolean belongsTo(String projectName) {
|
||||
return projectName.equals(this.indexPath.segment(0));
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
this.indexer.jobFinishedNotification( this );
|
||||
this.indexer.jobWasCancelled(this.indexPath);
|
||||
this.isCancelled = true;
|
||||
}
|
||||
|
||||
public boolean isReadyToRun() {
|
||||
IProject project = CCorePlugin.getWorkspace().getRoot().getProject(indexPath.segment(0));
|
||||
if ( !project.isAccessible() || !this.indexer.isIndexEnabled( project ) )
|
||||
return false;
|
||||
|
||||
// tag the index as inconsistent
|
||||
indexer.aboutToUpdateIndex(indexPath, updatedIndexState());
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
* This code is assumed to be invoked while monitor has read lock
|
||||
*/
|
||||
protected void saveIfNecessary(IIndex index, ReadWriteMonitor monitor) throws IOException {
|
||||
/* if index has changed, commit these before querying */
|
||||
if (index.hasChanged()) {
|
||||
try {
|
||||
monitor.exitRead(); // free read lock
|
||||
monitor.enterWrite(); // ask permission to write
|
||||
indexer.saveIndex(index);
|
||||
} finally {
|
||||
monitor.exitWriteEnterRead(); // finished writing and reacquire read permission
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected Integer updatedIndexState() {
|
||||
return CIndexStorage.UPDATING_STATE;
|
||||
}
|
||||
|
||||
public IPath getIndexPath(){
|
||||
return indexPath;
|
||||
}
|
||||
}
|
|
@ -1,663 +0,0 @@
|
|||
/**********************************************************************
|
||||
* 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.AbstractCExtension;
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICExtensionReference;
|
||||
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.parser.util.ObjectSet;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
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.IFolder;
|
||||
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;
|
||||
|
||||
/**
|
||||
* @author Bogdan Gheorghe
|
||||
*/
|
||||
public class SourceIndexer extends AbstractCExtension 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 int PREPROCESSOR_PROBLEMS_BIT = 1;
|
||||
public static final int SEMANTIC_PROBLEMS_BIT = 1 << 1;
|
||||
public static final int SYNTACTIC_PROBLEMS_BIT = 1 << 2;
|
||||
public static final int INCLUSION_PROBLEMS_BIT = 1 << 3;
|
||||
|
||||
public static final String SOURCE_INDEXER_ID = "originalsourceindexer"; //$NON-NLS-1$
|
||||
public static final String SOURCE_INDEXER_UNIQUE_ID = CCorePlugin.PLUGIN_ID + "." + SOURCE_INDEXER_ID; //$NON-NLS-1$;
|
||||
|
||||
|
||||
private CIndexStorage indexStorage = null;
|
||||
protected ReadWriteMonitor storageMonitor = null;
|
||||
protected IndexManager indexManager = null;
|
||||
|
||||
protected HashSet jobSet = null;
|
||||
|
||||
protected long totalIndexTime = 0;
|
||||
|
||||
public SourceIndexer(){
|
||||
this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
|
||||
this.indexStorage = (CIndexStorage) indexManager.getIndexStorageForIndexer(this);
|
||||
this.jobSet = new HashSet();
|
||||
this.storageMonitor = new ReadWriteMonitor();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
public 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);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
* Warning: Does not check whether index is consistent (not being used)
|
||||
*/
|
||||
public static int trimed = 0;
|
||||
public static int added = 0;
|
||||
|
||||
public synchronized boolean haveEncounteredHeader(IPath projectPath, IPath filePath, boolean add) {
|
||||
SimpleLookupTable headerTable = 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())) {
|
||||
trimed++;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (add) {
|
||||
headers.put(filePath.toOSString());
|
||||
added++;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
return true;
|
||||
/*Boolean indexValue = null;
|
||||
|
||||
try {
|
||||
indexValue = (Boolean) project.getSessionProperty(activationKey);
|
||||
} catch (CoreException e) {}
|
||||
|
||||
if (indexValue != null)
|
||||
return indexValue.booleanValue();
|
||||
|
||||
try {
|
||||
ICDescriptor cdesc = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||
if (cdesc == null)
|
||||
return false;
|
||||
|
||||
ICExtensionReference[] cext = cdesc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
if (cext.length > 0) {
|
||||
//initializeIndexerId();
|
||||
for (int i = 0; i < cext.length; i++) {
|
||||
String id = cext[i].getID();
|
||||
String orig = cext[i].getExtensionData("indexenabled"); //$NON-NLS-1$
|
||||
if (orig != null){
|
||||
Boolean tempBool = new Boolean(orig);
|
||||
indexEnabled = tempBool.booleanValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (CoreException e) {}
|
||||
|
||||
return indexEnabled;*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
public int indexProblemsEnabled(IProject project) {
|
||||
|
||||
if( project == null || !project.exists() || !project.isOpen() )
|
||||
return 0;
|
||||
|
||||
int indexProblemsEnabled = 0;
|
||||
try {
|
||||
ICDescriptor cdesc = CCorePlugin.getDefault().getCProjectDescription(project, false);
|
||||
if (cdesc == null)
|
||||
return 0;
|
||||
|
||||
ICExtensionReference[] cext = cdesc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
||||
if (cext.length > 0) {
|
||||
//initializeIndexerId();
|
||||
for (int i = 0; i < cext.length; i++) {
|
||||
String orig = cext[i].getExtensionData("indexmarkers"); //$NON-NLS-1$
|
||||
if (orig != null){
|
||||
Integer tempInt = new Integer(orig);
|
||||
indexProblemsEnabled = tempInt.intValue();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} catch (CoreException e) {}
|
||||
|
||||
return indexProblemsEnabled;
|
||||
}
|
||||
/**
|
||||
* 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);
|
||||
|
||||
}
|
||||
|
||||
public void removeIndexerProblems( IResource resource){
|
||||
indexManager.removeIndexerProblems(resource);
|
||||
}
|
||||
|
||||
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 && indexStorage.getNeedToSave())
|
||||
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(IFile 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(IProject project, IResourceDelta delta, int kind) {
|
||||
|
||||
switch (kind) {
|
||||
case ICDTIndexer.PROJECT :
|
||||
this.indexAll(project);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.FOLDER :
|
||||
this.indexSourceFolder(project,delta.getFullPath(),null);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.COMPILATION_UNIT:
|
||||
IFile file = (IFile) delta.getResource();
|
||||
this.addSource(file, project.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(IProject project, IResourceDelta delta, int kind) {
|
||||
switch (kind) {
|
||||
case ICDTIndexer.PROJECT :
|
||||
IPath fullPath = project.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 ICDTIndexer.FOLDER :
|
||||
this.removeSourceFolderFromIndex(project,delta.getFullPath(),null);
|
||||
break;
|
||||
|
||||
case ICDTIndexer.COMPILATION_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) {
|
||||
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.getMonitorForIndex();
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @return Returns the totalIndexTime.
|
||||
*/
|
||||
public long getTotalIndexTime() {
|
||||
return totalIndexTime;
|
||||
}
|
||||
/**
|
||||
* @param totalIndexTime The totalIndexTime to set.
|
||||
*/
|
||||
public void setTotalIndexTime(long totalIndexTime) {
|
||||
this.totalIndexTime = totalIndexTime;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.index.ICDTIndexer#notifyIndexerChange()
|
||||
*/
|
||||
public void notifyIndexerChange(IProject project) {
|
||||
this.indexAll(project);
|
||||
}
|
||||
|
||||
public void indexerRemoved(IProject project) {
|
||||
removeIndexerProblems(project);
|
||||
}
|
||||
|
||||
public void addResource(IProject project, IResource resource) {
|
||||
|
||||
if (resource instanceof IProject){
|
||||
this.indexAll(project);
|
||||
}
|
||||
else if (resource instanceof IFolder){
|
||||
this.indexSourceFolder(project,resource.getFullPath(),null);
|
||||
}
|
||||
else if (resource instanceof IFile){
|
||||
IFile file = (IFile) resource;
|
||||
this.addSource(file, project.getFullPath());
|
||||
}
|
||||
}
|
||||
|
||||
public void removeResource(IProject project, IResource resource) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
public void addResourceByPath(IProject project, IPath path, int resourceType) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -1,484 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 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 Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
|
||||
/**
|
||||
* @author bgheorgh
|
||||
*/
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCodeScope;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumeratorReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameterReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexProblemHandler;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.IPath;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||
import org.eclipse.core.runtime.Path;
|
||||
|
||||
/**
|
||||
* @author bgheorgh
|
||||
*
|
||||
* To change the template for this generated type comment go to
|
||||
* Window>Preferences>Java>Code Generation>Code and Comments
|
||||
*/
|
||||
public class SourceIndexerRequestor implements ISourceElementRequestor {
|
||||
|
||||
SourceIndexerRunner indexer;
|
||||
IFile resourceFile;
|
||||
|
||||
char[] packageName;
|
||||
char[][] enclosingTypeNames = new char[5][];
|
||||
int depth = 0;
|
||||
int methodDepth = 0;
|
||||
|
||||
private IASTInclusion currentInclude = null;
|
||||
private LinkedList includeStack = new LinkedList();
|
||||
|
||||
private IProgressMonitor pm = new NullProgressMonitor();
|
||||
|
||||
private ArrayList filesTraversed = null;
|
||||
private IParser parser;
|
||||
|
||||
public SourceIndexerRequestor(SourceIndexerRunner indexer, IFile resourceFile) {
|
||||
super();
|
||||
this.indexer = indexer;
|
||||
this.resourceFile = resourceFile;
|
||||
this.filesTraversed = new ArrayList(15);
|
||||
this.filesTraversed.add(resourceFile.getLocation().toOSString());
|
||||
}
|
||||
|
||||
public boolean acceptProblem(IProblem problem) {
|
||||
if( indexer.areProblemMarkersEnabled() && shouldRecordProblem( problem ) ){
|
||||
IASTInclusion include = peekInclude();
|
||||
IFile tempFile = resourceFile;
|
||||
|
||||
//If we are in an include file, get the include file
|
||||
if (include != null){
|
||||
IPath newPath = new Path(include.getFullFileName());
|
||||
tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(newPath);
|
||||
}
|
||||
|
||||
if( tempFile != null ){
|
||||
indexer.generateMarkerProblem(tempFile, resourceFile, problem);
|
||||
}
|
||||
}
|
||||
|
||||
return IndexProblemHandler.ruleOnProblem( problem, ParserMode.COMPLETE_PARSE );
|
||||
}
|
||||
|
||||
public void acceptMacro(IASTMacro macro) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addMacro(macro, indexFlag);
|
||||
}
|
||||
|
||||
public void acceptVariable(IASTVariable variable) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addVariable(variable, indexFlag);
|
||||
}
|
||||
|
||||
public void acceptFunctionDeclaration(IASTFunction function) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addFunctionDeclaration(function, indexFlag);
|
||||
}
|
||||
|
||||
public void acceptUsingDirective(IASTUsingDirective usageDirective) {}
|
||||
public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) {}
|
||||
public void acceptASMDefinition(IASTASMDefinition asmDefinition) {}
|
||||
|
||||
public void acceptTypedefDeclaration(IASTTypedefDeclaration typedef) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addTypedefDeclaration(typedef,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addEnumerationSpecifier(enumeration,indexFlag);
|
||||
}
|
||||
|
||||
public void enterFunctionBody(IASTFunction function) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addFunctionDefinition(function,indexFlag);
|
||||
|
||||
}
|
||||
|
||||
public void exitFunctionBody(IASTFunction function) {}
|
||||
public void enterCompilationUnit(IASTCompilationUnit compilationUnit) {}
|
||||
|
||||
public void enterInclusion(IASTInclusion inclusion) {
|
||||
if( indexer.areProblemMarkersEnabled() ){
|
||||
IPath newPath = new Path(inclusion.getFullFileName());
|
||||
IFile tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(newPath);
|
||||
if (tempFile !=null){
|
||||
indexer.requestRemoveMarkers(tempFile, resourceFile);
|
||||
} else{
|
||||
//File is out of workspace
|
||||
}
|
||||
}
|
||||
|
||||
IASTInclusion parent = peekInclude();
|
||||
indexer.addInclude(inclusion, parent,indexer.output.getIndexedFile(resourceFile.getFullPath().toString()).getFileID());
|
||||
//Push on stack
|
||||
pushInclude(inclusion);
|
||||
//Add to traversed files
|
||||
this.filesTraversed.add(inclusion.getFullFileName());
|
||||
|
||||
IProject resourceProject = resourceFile.getProject();
|
||||
/* Check to see if this is a header file */
|
||||
boolean isHeader = CoreModel.isValidHeaderUnitName(resourceProject,
|
||||
inclusion.getFullFileName());
|
||||
|
||||
/* See if this file has been encountered before */
|
||||
if (isHeader)
|
||||
indexer.haveEncounteredHeader(resourceProject.getFullPath(),new Path(inclusion.getFullFileName()));
|
||||
|
||||
}
|
||||
|
||||
public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addNamespaceDefinition(namespaceDefinition, indexFlag);
|
||||
}
|
||||
|
||||
public void enterClassSpecifier(IASTClassSpecifier classSpecification) {}
|
||||
public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) {}
|
||||
public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) {}
|
||||
public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) {}
|
||||
public void enterTemplateInstantiation(IASTTemplateInstantiation instantiation) {}
|
||||
|
||||
public void acceptMethodDeclaration(IASTMethod method) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addMethodDeclaration(method, indexFlag);
|
||||
}
|
||||
|
||||
public void enterMethodBody(IASTMethod method) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addMethodDefinition(method, indexFlag);
|
||||
}
|
||||
|
||||
public void exitMethodBody(IASTMethod method) {}
|
||||
|
||||
public void acceptField(IASTField field) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addFieldDeclaration(field, indexFlag);
|
||||
}
|
||||
|
||||
public void acceptClassReference(IASTClassReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTClassSpecifier)
|
||||
indexer.addClassReference(reference, indexFlag);
|
||||
else if (reference.getReferencedElement() instanceof IASTElaboratedTypeSpecifier)
|
||||
{
|
||||
indexer.addForwardClassReference(reference, indexFlag);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
private int calculateIndexFlags() {
|
||||
int fileNum= 0;
|
||||
|
||||
//Initialize the file number to be the file number for the file that triggerd
|
||||
//the indexing. Note that we should always be able to get a number for this as
|
||||
//the first step in the Source Indexer is to add the file being indexed to the index
|
||||
//which actually creates an entry for the file in the index.
|
||||
|
||||
IndexedFileEntry mainIndexFile = indexer.output.getIndexedFile(resourceFile.getFullPath().toString());
|
||||
if (mainIndexFile != null)
|
||||
fileNum = mainIndexFile.getFileID();
|
||||
|
||||
IASTInclusion include = peekInclude();
|
||||
if (include != null){
|
||||
//We are not in the file that has triggered the index. Thus, we need to find the
|
||||
//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.
|
||||
IFile tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(include.getFullFileName()));
|
||||
String filePath = ""; //$NON-NLS-1$
|
||||
if (tempFile != null){
|
||||
//File is local to workspace
|
||||
filePath = tempFile.getFullPath().toString();
|
||||
}
|
||||
else{
|
||||
//File is external to workspace
|
||||
filePath = include.getFullFileName();
|
||||
}
|
||||
|
||||
IndexedFileEntry indFile = indexer.output.getIndexedFile(filePath);
|
||||
if (indFile != null){
|
||||
//File has already been added to the output; it already has a number
|
||||
fileNum = indFile.getFileID();
|
||||
}
|
||||
else {
|
||||
//Need to add file to index and get a fileNumber
|
||||
if (tempFile != null){
|
||||
indFile = indexer.output.addIndexedFile(tempFile.getFullPath().toString());
|
||||
if (indFile != null)
|
||||
fileNum = indFile.getFileID();
|
||||
}
|
||||
else {
|
||||
indFile = indexer.output.addIndexedFile(include.getFullFileName());
|
||||
if (indFile != null)
|
||||
fileNum = indFile.getFileID();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return fileNum;
|
||||
}
|
||||
|
||||
public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) {}
|
||||
public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) {}
|
||||
public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) {}
|
||||
public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) {}
|
||||
|
||||
public void exitClassSpecifier(IASTClassSpecifier classSpecification) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addClassSpecifier(classSpecification, indexFlag);
|
||||
}
|
||||
|
||||
public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) {}
|
||||
|
||||
public void exitInclusion(IASTInclusion inclusion) {
|
||||
// TODO Auto-generated method stub
|
||||
popInclude();
|
||||
}
|
||||
|
||||
public void exitCompilationUnit(IASTCompilationUnit compilationUnit) {}
|
||||
|
||||
public void acceptAbstractTypeSpecDeclaration(IASTAbstractTypeSpecifierDeclaration abstractDeclaration) {}
|
||||
|
||||
public void acceptTypedefReference(IASTTypedefReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if( reference.getReferencedElement() instanceof IASTTypedefDeclaration )
|
||||
indexer.addTypedefReference( reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptNamespaceReference(IASTNamespaceReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTNamespaceDefinition)
|
||||
indexer.addNamespaceReference(reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptEnumerationReference(IASTEnumerationReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTEnumerationSpecifier)
|
||||
indexer.addEnumerationReference(reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptVariableReference(IASTVariableReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTVariable)
|
||||
indexer.addVariableReference(reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptFunctionReference(IASTFunctionReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTFunction)
|
||||
indexer.addFunctionReference(reference, indexFlag);
|
||||
}
|
||||
|
||||
public void acceptFieldReference(IASTFieldReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTField)
|
||||
indexer.addFieldReference(reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptMethodReference(IASTMethodReference reference) {
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if (reference.getReferencedElement() instanceof IASTMethod)
|
||||
indexer.addMethodReference(reference,indexFlag);
|
||||
}
|
||||
|
||||
public void acceptElaboratedForewardDeclaration(IASTElaboratedTypeSpecifier elaboratedType){
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
indexer.addElaboratedForwardDeclaration(elaboratedType, indexFlag);
|
||||
}
|
||||
|
||||
public void enterCodeBlock(IASTCodeScope scope) {}
|
||||
public void exitCodeBlock(IASTCodeScope scope) {}
|
||||
public void acceptEnumeratorReference(IASTEnumeratorReference reference){
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if( reference.getReferencedElement() instanceof IASTEnumerator )
|
||||
indexer.addEnumeratorReference( reference, indexFlag);
|
||||
|
||||
}
|
||||
|
||||
public void acceptParameterReference(IASTParameterReference reference){
|
||||
//Check to see if this reference actually occurs in the file being indexed
|
||||
//or if it occurs in another file
|
||||
int indexFlag = calculateIndexFlags();
|
||||
|
||||
if( reference.getReferencedElement() instanceof IASTParameterDeclaration )
|
||||
indexer.addParameterReference( reference, indexFlag);
|
||||
|
||||
}
|
||||
|
||||
public void acceptTemplateParameterReference( IASTTemplateParameterReference reference ){}
|
||||
public void acceptFriendDeclaration(IASTDeclaration declaration) {}
|
||||
|
||||
private void pushInclude( IASTInclusion inclusion ){
|
||||
includeStack.addFirst( currentInclude );
|
||||
currentInclude = inclusion;
|
||||
}
|
||||
|
||||
private IASTInclusion popInclude(){
|
||||
IASTInclusion oldInclude = currentInclude;
|
||||
currentInclude = (includeStack.size() > 0 ) ? (IASTInclusion) includeStack.removeFirst() : null;
|
||||
return oldInclude;
|
||||
}
|
||||
|
||||
private IASTInclusion peekInclude(){
|
||||
return currentInclude;
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
|
||||
*/
|
||||
public CodeReader createReader(String finalPath, Iterator workingCopies) {
|
||||
return ParserUtil.createReader(finalPath,workingCopies);
|
||||
}
|
||||
|
||||
public boolean shouldRecordProblem( IProblem problem ){
|
||||
if( problem.getSourceLineNumber() == -1 )
|
||||
return false;
|
||||
|
||||
boolean preprocessor = ( indexer.getProblemMarkersEnabled() & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT ) != 0;
|
||||
boolean semantics = ( indexer.getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT ) != 0;
|
||||
boolean syntax = ( indexer.getProblemMarkersEnabled() & SourceIndexer.SYNTACTIC_PROBLEMS_BIT ) != 0;
|
||||
|
||||
if( problem.checkCategory( IProblem.PREPROCESSOR_RELATED ) || problem.checkCategory( IProblem.SCANNER_RELATED ) )
|
||||
return preprocessor && problem.getID() != IProblem.PREPROCESSOR_CIRCULAR_INCLUSION;
|
||||
else if( problem.checkCategory( IProblem.SEMANTICS_RELATED ) )
|
||||
return semantics;
|
||||
else if( problem.checkCategory( IProblem.SYNTAX_RELATED ) )
|
||||
return syntax;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns the filesTraversed.
|
||||
*/
|
||||
public ArrayList getFilesTraversed() {
|
||||
return filesTraversed;
|
||||
}
|
||||
}
|
|
@ -1,830 +0,0 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 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 Corporation - initial API and implementation
|
||||
*******************************************************************************/
|
||||
|
||||
package org.eclipse.cdt.internal.core.index.sourceindexer;
|
||||
|
||||
/**
|
||||
* @author bgheorgh
|
||||
*/
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import javax.naming.Name;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.core.ICLogConstants;
|
||||
import org.eclipse.cdt.core.index.IIndexDelta;
|
||||
import org.eclipse.cdt.core.model.CoreModel;
|
||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
import org.eclipse.cdt.core.parser.CodeReader;
|
||||
import org.eclipse.cdt.core.parser.IParser;
|
||||
import org.eclipse.cdt.core.parser.IProblem;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||
import org.eclipse.cdt.core.parser.ParserFactory;
|
||||
import org.eclipse.cdt.core.parser.ParserFactoryError;
|
||||
import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||
import org.eclipse.cdt.core.parser.ParserMode;
|
||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTClassKind;
|
||||
import org.eclipse.cdt.core.parser.ast.ASTNotImplementedException;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTBaseSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTElaboratedTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumerator;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTEnumeratorReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTField;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFieldReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunction;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTFunctionReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTInitializerClause;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMacro;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethod;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTMethodReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTNamespaceReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTParameterReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypeSpecifier;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariable;
|
||||
import org.eclipse.cdt.core.parser.ast.IASTVariableReference;
|
||||
import org.eclipse.cdt.internal.core.index.FunctionEntry;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.NamedEntry;
|
||||
import org.eclipse.cdt.internal.core.index.TypeEntry;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.IndexedFileEntry;
|
||||
import org.eclipse.cdt.internal.core.index.impl.IndexDelta;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IMarker;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
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:
|
||||
* Declarations:
|
||||
* - Classes
|
||||
* - Structs
|
||||
* - Unions
|
||||
* References:
|
||||
* - Classes
|
||||
* - Structs
|
||||
* - Unions
|
||||
*/
|
||||
public class SourceIndexerRunner extends AbstractIndexer {
|
||||
private SourceIndexer indexer;
|
||||
|
||||
/**
|
||||
* @param resource
|
||||
* @param out
|
||||
*/
|
||||
public SourceIndexerRunner(IFile resource, SourceIndexer indexer) {
|
||||
this.indexer = indexer;
|
||||
this.resourceFile = resource;
|
||||
}
|
||||
|
||||
protected void indexFile(IFile file) throws IOException {
|
||||
// Add the name of the file to the index
|
||||
IndexedFileEntry indFile =output.addIndexedFile(file.getFullPath().toString());
|
||||
|
||||
// Create a new Parser
|
||||
SourceIndexerRequestor requestor = new SourceIndexerRequestor(this, resourceFile);
|
||||
|
||||
int problems = indexer.indexProblemsEnabled( resourceFile.getProject() );
|
||||
setProblemMarkersEnabled( problems );
|
||||
requestRemoveMarkers( resourceFile, null );
|
||||
|
||||
//Get the scanner info
|
||||
IProject currentProject = resourceFile.getProject();
|
||||
IScannerInfo scanInfo = new ScannerInfo();
|
||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(currentProject);
|
||||
if (provider != null){
|
||||
IScannerInfo buildScanInfo = provider.getScannerInformation(resourceFile);
|
||||
if (buildScanInfo != null){
|
||||
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
|
||||
}
|
||||
}
|
||||
|
||||
//C or CPP?
|
||||
ParserLanguage language = CoreModel.hasCCNature(currentProject) ? ParserLanguage.CPP : ParserLanguage.C;
|
||||
|
||||
IParser parser = null;
|
||||
|
||||
InputStream contents = null;
|
||||
try {
|
||||
contents = resourceFile.getContents();
|
||||
CodeReader reader = new CodeReader(resourceFile.getLocation().toOSString(), resourceFile.getCharset(), contents);
|
||||
parser = ParserFactory.createParser(
|
||||
ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
|
||||
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
|
||||
} catch( ParserFactoryError pfe ){
|
||||
} catch (CoreException e) {
|
||||
} finally {
|
||||
if (contents != null) {
|
||||
contents.close();
|
||||
}
|
||||
}
|
||||
|
||||
try{
|
||||
long startTime = 0;
|
||||
|
||||
if (AbstractIndexer.TIMING)
|
||||
startTime = System.currentTimeMillis();
|
||||
|
||||
boolean retVal = parser.parse();
|
||||
|
||||
if (AbstractIndexer.TIMING){
|
||||
long currentTime = System.currentTimeMillis() - startTime;
|
||||
System.out.println("Source Indexer - Index Time for " + resourceFile.getName() + ": " + currentTime + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||
long tempTotaltime = indexer.getTotalIndexTime() + currentTime;
|
||||
indexer.setTotalIndexTime(tempTotaltime);
|
||||
System.out.println("Source Indexer - Total Index Time: " + tempTotaltime + " ms"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
}
|
||||
|
||||
if (AbstractIndexer.VERBOSE){
|
||||
if (!retVal)
|
||||
AbstractIndexer.verbose("PARSE FAILED " + resourceFile.getName().toString()); //$NON-NLS-1$
|
||||
else
|
||||
AbstractIndexer.verbose("PARSE SUCCEEDED " + resourceFile.getName().toString()); //$NON-NLS-1$
|
||||
}
|
||||
}
|
||||
catch ( VirtualMachineError vmErr){
|
||||
if (vmErr instanceof OutOfMemoryError){
|
||||
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 ( Exception ex ){
|
||||
if (ex instanceof IOException)
|
||||
throw (IOException) ex;
|
||||
}
|
||||
finally{
|
||||
//if the user disable problem reporting since we last checked, don't report the collected problems
|
||||
if( indexer.indexProblemsEnabled( resourceFile.getProject() ) != 0 )
|
||||
reportProblems();
|
||||
|
||||
//Report events
|
||||
ArrayList filesTrav = requestor.getFilesTraversed();
|
||||
IndexDelta indexDelta = new IndexDelta(resourceFile.getProject(),filesTrav, IIndexDelta.INDEX_FINISHED_DELTA);
|
||||
indexer.notifyListeners(indexDelta);
|
||||
//Release all resources
|
||||
parser=null;
|
||||
currentProject = null;
|
||||
requestor = null;
|
||||
provider = null;
|
||||
scanInfo=null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param fullPath
|
||||
* @param path
|
||||
*/
|
||||
public boolean haveEncounteredHeader(IPath fullPath, Path path) {
|
||||
return indexer.haveEncounteredHeader(fullPath, path, true);
|
||||
}
|
||||
|
||||
protected class AddMarkerProblem extends Problem {
|
||||
private IProblem problem;
|
||||
public AddMarkerProblem(IResource file, IResource orig, IProblem problem) {
|
||||
super(file, orig);
|
||||
this.problem = problem;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
try {
|
||||
//we only ever add index markers on the file, so DEPTH_ZERO is far enough
|
||||
IMarker[] markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO);
|
||||
|
||||
boolean newProblem = true;
|
||||
|
||||
if (markers.length > 0) {
|
||||
IMarker tempMarker = null;
|
||||
Integer tempInt = null;
|
||||
String tempMsgString = null;
|
||||
|
||||
for (int i=0; i<markers.length; i++) {
|
||||
tempMarker = markers[i];
|
||||
tempInt = (Integer) tempMarker.getAttribute(IMarker.LINE_NUMBER);
|
||||
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
|
||||
if (tempInt != null && tempInt.intValue() == problem.getSourceLineNumber() &&
|
||||
tempMsgString.equalsIgnoreCase( INDEXER_MARKER_PREFIX + problem.getMessage()))
|
||||
{
|
||||
newProblem = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (newProblem) {
|
||||
IMarker marker = resource.createMarker(ICModelMarker.INDEXER_MARKER);
|
||||
int start = problem.getSourceStart();
|
||||
int end = problem.getSourceEnd();
|
||||
if (end <= start)
|
||||
end = start + 1;
|
||||
marker.setAttribute(IMarker.LOCATION, problem.getSourceLineNumber());
|
||||
marker.setAttribute(IMarker.MESSAGE, INDEXER_MARKER_PREFIX + problem.getMessage());
|
||||
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
|
||||
marker.setAttribute(IMarker.LINE_NUMBER, problem.getSourceLineNumber());
|
||||
marker.setAttribute(IMarker.CHAR_START, start);
|
||||
marker.setAttribute(IMarker.CHAR_END, end);
|
||||
marker.setAttribute(INDEXER_MARKER_ORIGINATOR, originator.getFullPath().toString() );
|
||||
}
|
||||
} catch (CoreException e) {
|
||||
// You need to handle the cases where attribute value is rejected
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addClassSpecifier(IASTClassSpecifier classSpecification, int fileNumber){
|
||||
|
||||
if (classSpecification.getClassKind().equals(ASTClassKind.CLASS))
|
||||
{
|
||||
//Get base clauses
|
||||
Iterator baseClauses = classSpecification.getBaseClauses();
|
||||
while (baseClauses.hasNext()){
|
||||
IASTBaseSpecifier baseSpec = (IASTBaseSpecifier) baseClauses.next();
|
||||
try {
|
||||
IASTTypeSpecifier typeSpec = baseSpec.getParentClassSpecifier();
|
||||
if (typeSpec instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier baseClassSpec = (IASTClassSpecifier) typeSpec;
|
||||
char[][] baseFullyQualifiedName = baseClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = baseClassSpec.getNameOffset();
|
||||
int offsetLength = baseClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_DERIVED ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
} catch (ASTNotImplementedException e) {}
|
||||
}
|
||||
|
||||
//Get friends
|
||||
Iterator friends = classSpecification.getFriends();
|
||||
while (friends.hasNext()){
|
||||
Object decl = friends.next();
|
||||
if (decl instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier friendClassSpec = (IASTClassSpecifier) decl;
|
||||
char[][] baseFullyQualifiedName = friendClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = friendClassSpec.getNameOffset();
|
||||
int offsetLength = friendClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_FRIEND ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset,offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (decl instanceof IASTElaboratedTypeSpecifier){
|
||||
IASTElaboratedTypeSpecifier friendClassSpec = (IASTElaboratedTypeSpecifier) decl;
|
||||
char[][] baseFullyQualifiedName = friendClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = friendClassSpec.getNameOffset();
|
||||
int offsetLength = friendClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_FRIEND ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset,offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (decl instanceof IASTFunction){
|
||||
|
||||
}
|
||||
else if (decl instanceof IASTMethod){
|
||||
//
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int offset = classSpecification.getNameOffset();
|
||||
int offsetLength = classSpecification.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_CLASS,IIndex.DEFINITION, classSpecification.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classSpecification.getClassKind().equals(ASTClassKind.STRUCT))
|
||||
{
|
||||
//Get base clauses
|
||||
Iterator i = classSpecification.getBaseClauses();
|
||||
while (i.hasNext()){
|
||||
IASTBaseSpecifier baseSpec = (IASTBaseSpecifier) i.next();
|
||||
try {
|
||||
IASTTypeSpecifier typeSpec = baseSpec.getParentClassSpecifier();
|
||||
if (typeSpec instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier baseClassSpec = (IASTClassSpecifier) typeSpec;
|
||||
char[][] baseFullyQualifiedName = baseClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = baseClassSpec.getNameOffset();
|
||||
int offsetLength = baseClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_DERIVED ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
} catch (ASTNotImplementedException e) {}
|
||||
}
|
||||
|
||||
// Get friends
|
||||
Iterator friends = classSpecification.getFriends();
|
||||
while (friends.hasNext()){
|
||||
Object decl = friends.next();
|
||||
if (decl instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier friendClassSpec = (IASTClassSpecifier) decl;
|
||||
char[][] baseFullyQualifiedName = friendClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = friendClassSpec.getNameOffset();
|
||||
int offsetLength = friendClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_FRIEND ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset,offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (decl instanceof IASTElaboratedTypeSpecifier){
|
||||
IASTElaboratedTypeSpecifier friendClassSpec = (IASTElaboratedTypeSpecifier) decl;
|
||||
char[][] baseFullyQualifiedName = friendClassSpec.getFullyQualifiedNameCharArrays();
|
||||
int offset = friendClassSpec.getNameOffset();
|
||||
int offsetLength = friendClassSpec.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_FRIEND ,IIndex.DECLARATION, baseFullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset,offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (decl instanceof IASTFunction){
|
||||
|
||||
}
|
||||
else if (decl instanceof IASTMethod){
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
int offset = classSpecification.getNameOffset();
|
||||
int offsetLength = classSpecification.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_STRUCT,IIndex.DEFINITION, classSpecification.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classSpecification.getClassKind().equals(ASTClassKind.UNION))
|
||||
{
|
||||
int offset = classSpecification.getNameOffset();
|
||||
int offsetLength = classSpecification.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_UNION,IIndex.DEFINITION, classSpecification.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset,offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
public void addEnumerationSpecifier(IASTEnumerationSpecifier enumeration, int fileNumber) {
|
||||
|
||||
int offset = enumeration.getNameOffset();
|
||||
int offsetLength = enumeration.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_ENUM ,IIndex.DECLARATION, enumeration.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
|
||||
Iterator i = enumeration.getEnumerators();
|
||||
while (i.hasNext())
|
||||
{
|
||||
IASTEnumerator en = (IASTEnumerator) i.next();
|
||||
char[][] enumeratorFullName =
|
||||
createEnumeratorFullyQualifiedName(en);
|
||||
|
||||
offset = en.getNameOffset();
|
||||
offsetLength = en.getNameEndOffset() - offset;
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.ENUMTOR, IIndex.DECLARATION, enumeratorFullName, 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
protected char[][] createEnumeratorFullyQualifiedName(IASTEnumerator en) {
|
||||
char[] name = en.getNameCharArray();
|
||||
IASTEnumerationSpecifier parent = en.getOwnerEnumerationSpecifier();
|
||||
char[][] parentName = parent.getFullyQualifiedNameCharArrays();
|
||||
|
||||
//See spec 7.2-10, the the scope of the enumerator is the same level as the enumeration
|
||||
char[][] enumeratorFullName = new char[parentName.length][];
|
||||
|
||||
System.arraycopy( parentName, 0, enumeratorFullName, 0, parentName.length);
|
||||
enumeratorFullName[ parentName.length - 1 ] = name;
|
||||
return enumeratorFullName;
|
||||
}
|
||||
|
||||
public void addEnumeratorReference(IASTEnumeratorReference reference, int fileNumber) {
|
||||
IASTEnumerator enumerator = (IASTEnumerator)reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = enumerator.getNameEndOffset() - enumerator.getNameOffset();
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.ENUMTOR, IIndex.REFERENCE, createEnumeratorFullyQualifiedName(enumerator), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addMacro(IASTMacro macro, int fileNumber) {
|
||||
char[][] macroName = new char[][] { macro.getNameCharArray() };
|
||||
int offset = macro.getNameOffset();
|
||||
int offsetLength = macro.getNameEndOffset() - offset;
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.MACRO, IIndex.DECLARATION, macroName, 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addEnumerationReference(IASTEnumerationReference reference, int fileNumber) {
|
||||
IASTEnumerationSpecifier enumeration = (IASTEnumerationSpecifier) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = enumeration.getNameEndOffset() - enumeration.getNameOffset();
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_ENUM ,IIndex.REFERENCE, enumeration.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
public void addVariable(IASTVariable variable, int fileNumber) {
|
||||
int offset = variable.getNameOffset();
|
||||
int offsetLength = variable.getNameEndOffset() - offset;
|
||||
|
||||
IASTInitializerClause initClause = variable.getInitializerClause();
|
||||
TypeEntry typeEntry;
|
||||
if ((variable.isExtern() && initClause == null )||
|
||||
variable.isStatic()){
|
||||
typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DECLARATION, variable.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
} else {
|
||||
typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DEFINITION, variable.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
}
|
||||
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addVariableReference(IASTVariableReference reference, int fileNumber) {
|
||||
IASTVariable variable = (IASTVariable)reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = variable.getNameEndOffset() - variable.getNameOffset();
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.REFERENCE, variable.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addParameterReference( IASTParameterReference reference, int fileNumber ){
|
||||
IASTParameterDeclaration parameter = (IASTParameterDeclaration) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = parameter.getNameEndOffset() - parameter.getNameOffset();
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.REFERENCE, new char[][]{parameter.getNameCharArray()}, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addTypedefDeclaration(IASTTypedefDeclaration typedef, int fileNumber) {
|
||||
int offset = typedef.getNameOffset();
|
||||
int offsetLength = typedef.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_TYPEDEF, IIndex.DECLARATION, typedef.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addFieldDeclaration(IASTField field, int fileNumber) {
|
||||
int offset = field.getNameOffset();
|
||||
int offsetLength = field.getNameEndOffset() - offset;
|
||||
|
||||
if (field.isStatic()){
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.FIELD, IIndex.DECLARATION, field.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
} else {
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.FIELD, IIndex.DEFINITION, field.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
public void addFieldReference(IASTFieldReference reference, int fileNumber) {
|
||||
IASTField field=(IASTField) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = field.getNameEndOffset() - field.getNameOffset();
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.FIELD, IIndex.REFERENCE, field.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
|
||||
}
|
||||
|
||||
public void addMethodDeclaration(IASTMethod method, int fileNumber) {
|
||||
int offset = method.getNameOffset();
|
||||
int offsetLength = method.getNameEndOffset() - offset;
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.METHOD, IIndex.DECLARATION, method.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
|
||||
Iterator i=method.getParameters();
|
||||
while (i.hasNext()){
|
||||
Object parm = i.next();
|
||||
if (parm instanceof IASTParameterDeclaration){
|
||||
IASTParameterDeclaration parmDecl = (IASTParameterDeclaration) parm;
|
||||
offset = parmDecl.getNameOffset();
|
||||
offsetLength = parmDecl.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DECLARATION, new char[][]{parmDecl.getNameCharArray()}, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addMethodDefinition(IASTMethod method, int fileNumber) {
|
||||
int offset = method.getNameOffset();
|
||||
int offsetLength = method.getNameEndOffset() - offset;
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.METHOD, IIndex.DEFINITION, method.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
|
||||
Iterator i=method.getParameters();
|
||||
while (i.hasNext()){
|
||||
Object parm = i.next();
|
||||
if (parm instanceof IASTParameterDeclaration){
|
||||
IASTParameterDeclaration parmDecl = (IASTParameterDeclaration) parm;
|
||||
offset = parmDecl.getNameOffset();
|
||||
offsetLength = parmDecl.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DECLARATION, new char[][]{parmDecl.getNameCharArray()}, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addMethodReference(IASTMethodReference reference, int fileNumber) {
|
||||
IASTMethod method = (IASTMethod) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = method.getNameEndOffset() - method.getNameOffset();
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.METHOD, IIndex.REFERENCE, method.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addElaboratedForwardDeclaration(IASTElaboratedTypeSpecifier elaboratedType, int fileNumber) {
|
||||
int offset = elaboratedType.getNameOffset();
|
||||
int offsetLength = elaboratedType.getNameEndOffset() - offset;
|
||||
|
||||
if (elaboratedType.getClassKind().equals(ASTClassKind.CLASS))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_CLASS ,IIndex.DECLARATION, elaboratedType.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (elaboratedType.getClassKind().equals(ASTClassKind.STRUCT))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_STRUCT ,IIndex.DECLARATION, elaboratedType.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (elaboratedType.getClassKind().equals(ASTClassKind.UNION))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_UNION,IIndex.DECLARATION, elaboratedType.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
public void addConstructorDeclaration(){
|
||||
|
||||
}
|
||||
public void addConstructorReference(){
|
||||
|
||||
}
|
||||
|
||||
public void addMemberDeclaration(){
|
||||
|
||||
}
|
||||
public void addMemberReference(){
|
||||
|
||||
}
|
||||
|
||||
public void addFunctionDeclaration(IASTFunction function, int fileNumber){
|
||||
int offset = function.getNameOffset();
|
||||
int offsetLength = function.getNameEndOffset() - offset;
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.FUNCTION, IIndex.DECLARATION, function.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
|
||||
Iterator i=function.getParameters();
|
||||
while (i.hasNext()){
|
||||
Object parm = i.next();
|
||||
if (parm instanceof IASTParameterDeclaration){
|
||||
IASTParameterDeclaration parmDecl = (IASTParameterDeclaration) parm;
|
||||
offset = parmDecl.getNameOffset();
|
||||
offsetLength = parmDecl.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DECLARATION, new char[][]{parmDecl.getNameCharArray()}, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addFunctionDefinition(IASTFunction function, int fileNumber){
|
||||
int offset = function.getNameOffset();
|
||||
int offsetLength = function.getNameEndOffset() - offset;
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.FUNCTION, IIndex.DEFINITION, function.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
|
||||
/*Iterator i=function.getParameters();
|
||||
while (i.hasNext()){
|
||||
Object parm = i.next();
|
||||
if (parm instanceof IASTParameterDeclaration){
|
||||
IASTParameterDeclaration parmDecl = (IASTParameterDeclaration) parm;
|
||||
offset = parmDecl.getNameOffset();
|
||||
offsetLength = parmDecl.getNameEndOffset() - offset;
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_VAR ,IIndex.DECLARATION, new char[][]{parmDecl.getNameCharArray()}, 0 getModifiers(), fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
public void addFunctionReference(IASTFunctionReference reference, int fileNumber){
|
||||
IASTFunction function=(IASTFunction) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = function.getNameEndOffset() - function.getNameOffset();
|
||||
|
||||
FunctionEntry functionEntry = new FunctionEntry(IIndex.FUNCTION, IIndex.REFERENCE, function.getFullyQualifiedNameCharArrays(),0 /*getModifiers()*/, fileNumber);
|
||||
//funEntry.setSignature(getFunctionSignature());
|
||||
functionEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
functionEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addNameReference(){
|
||||
|
||||
}
|
||||
|
||||
public void addNamespaceDefinition(IASTNamespaceDefinition namespace, int fileNumber){
|
||||
int offset = namespace.getNameOffset();
|
||||
int offsetLength = namespace.getNameEndOffset() - offset;
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.NAMESPACE, IIndex.DEFINITION, namespace.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addNamespaceReference(IASTNamespaceReference reference, int fileNumber) {
|
||||
IASTNamespaceDefinition namespace = (IASTNamespaceDefinition)reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = namespace.getNameEndOffset() - namespace.getNameOffset();
|
||||
|
||||
NamedEntry namedEntry = new NamedEntry(IIndex.NAMESPACE, IIndex.REFERENCE, namespace.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
namedEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
namedEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addTypedefReference( IASTTypedefReference reference, int fileNumber ){
|
||||
IASTTypedefDeclaration typedef = (IASTTypedefDeclaration) reference.getReferencedElement();
|
||||
int offset = reference.getOffset();
|
||||
int offsetLength = typedef.getNameEndOffset() - typedef.getNameOffset();
|
||||
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_TYPEDEF, IIndex.REFERENCE, typedef.getFullyQualifiedNameCharArrays(), 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
|
||||
public void addClassReference(IASTClassReference reference, int fileNumber){
|
||||
char[][] fullyQualifiedName = null;
|
||||
ASTClassKind classKind = null;
|
||||
int offset=0;
|
||||
int offsetLength=1;
|
||||
Object referenceObject = reference.getReferencedElement();
|
||||
if (referenceObject instanceof IASTClassSpecifier){
|
||||
IASTClassSpecifier classRef = (IASTClassSpecifier) referenceObject;
|
||||
fullyQualifiedName = classRef.getFullyQualifiedNameCharArrays();
|
||||
classKind = classRef.getClassKind();
|
||||
offset=reference.getOffset();
|
||||
offsetLength=classRef.getNameEndOffset()-classRef.getNameOffset();
|
||||
}
|
||||
else if (referenceObject instanceof IASTElaboratedTypeSpecifier){
|
||||
IASTElaboratedTypeSpecifier typeRef = (IASTElaboratedTypeSpecifier) reference;
|
||||
fullyQualifiedName = typeRef.getFullyQualifiedNameCharArrays();
|
||||
classKind = typeRef.getClassKind();
|
||||
offset=reference.getOffset();
|
||||
offsetLength=typeRef.getNameEndOffset()-typeRef.getNameOffset();
|
||||
}
|
||||
|
||||
if (classKind.equals(ASTClassKind.CLASS))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_CLASS,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classKind.equals(ASTClassKind.STRUCT))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_STRUCT,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classKind.equals(ASTClassKind.UNION))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_UNION,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
//typeEntry.setBaseTypes(getInherits());
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
public void addForwardClassReference(IASTClassReference reference, int fileNumber){
|
||||
char[][] fullyQualifiedName = null;
|
||||
ASTClassKind classKind = null;
|
||||
int offset=0;
|
||||
int offsetLength=1;
|
||||
Object referencedObject = reference.getReferencedElement();
|
||||
if (referencedObject instanceof IASTElaboratedTypeSpecifier){
|
||||
IASTElaboratedTypeSpecifier typeRef = (IASTElaboratedTypeSpecifier) referencedObject;
|
||||
fullyQualifiedName = typeRef.getFullyQualifiedNameCharArrays();
|
||||
classKind = typeRef.getClassKind();
|
||||
offset=reference.getOffset();
|
||||
offsetLength=typeRef.getNameEndOffset()-typeRef.getNameOffset();
|
||||
}
|
||||
|
||||
if (classKind == null)
|
||||
return;
|
||||
|
||||
if (classKind.equals(ASTClassKind.CLASS))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_CLASS ,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classKind.equals(ASTClassKind.STRUCT))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_STRUCT ,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
else if (classKind.equals(ASTClassKind.UNION))
|
||||
{
|
||||
TypeEntry typeEntry = new TypeEntry(IIndex.TYPE_UNION ,IIndex.REFERENCE, fullyQualifiedName, 0 /*getModifiers()*/, fileNumber);
|
||||
typeEntry.setNameOffset(offset, offsetLength, IIndex.OFFSET);
|
||||
typeEntry.serialize(output);
|
||||
}
|
||||
}
|
||||
|
||||
public void addInclude(IASTInclusion inclusion, IASTInclusion parent, int fileNumber){
|
||||
this.output.addIncludeRef(fileNumber, inclusion.getFullFileName());
|
||||
this.output.addRelatives(fileNumber, inclusion.getFullFileName(),(parent != null ) ? parent.getFullFileName() : null);
|
||||
|
||||
//Add Dep Table entry
|
||||
char[][] incName = new char[1][];
|
||||
incName[0] = inclusion.getFullFileName().toCharArray();
|
||||
//TODO: Kludge! Get rid of BOGUS entry - need to restructure Dep Tree to use reference indexes
|
||||
int BOGUS_ENTRY = 1;
|
||||
this.output.addIncludeRef(fileNumber, incName,1,1, IIndex.OFFSET);
|
||||
}
|
||||
|
||||
public void generateMarkerProblem(IFile tempFile, IFile originator, IProblem problem) {
|
||||
Problem tempProblem = new AddMarkerProblem(tempFile, originator, problem);
|
||||
if (getProblemsMap().containsKey(tempFile)) {
|
||||
List list = (List) getProblemsMap().get(tempFile);
|
||||
list.add(tempProblem);
|
||||
} else {
|
||||
List list = new ArrayList();
|
||||
list.add(new RemoveMarkerProblem(tempFile, originator)); //remove existing markers
|
||||
list.add(tempProblem);
|
||||
getProblemsMap().put(tempFile, list);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,10 +20,9 @@ import org.eclipse.cdt.core.ICExtensionReference;
|
|||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||
import org.eclipse.cdt.core.index.IIndexStorage;
|
||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
|
||||
import org.eclipse.cdt.internal.core.search.processing.JobManager;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
@ -84,6 +83,7 @@ public class IndexManager extends JobManager{
|
|||
*
|
||||
*/
|
||||
protected void jobFinishedNotification(IIndexJob job) {
|
||||
|
||||
if (job instanceof IndexRequest ){
|
||||
IndexRequest indexRequest = (IndexRequest) job;
|
||||
IPath path = indexRequest.getIndexPath();
|
||||
|
@ -93,17 +93,6 @@ public class IndexManager extends JobManager{
|
|||
if (indexer != null)
|
||||
indexer.indexJobFinishedNotification(job);
|
||||
}
|
||||
|
||||
//TODO: Standardize on jobs
|
||||
if (job instanceof CTagsIndexRequest){
|
||||
CTagsIndexRequest indexRequest = (CTagsIndexRequest) job;
|
||||
IPath path = indexRequest.getIndexPath();
|
||||
IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(path.toOSString());
|
||||
ICDTIndexer indexer = getIndexerForProject(project);
|
||||
|
||||
if (indexer != null)
|
||||
indexer.indexJobFinishedNotification(job);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @param project
|
||||
|
@ -264,8 +253,8 @@ public class IndexManager extends JobManager{
|
|||
*/
|
||||
public void updateDependencies(IProject project, IResource resource) {
|
||||
ICDTIndexer indexer = getIndexerForProject(project);
|
||||
if (indexer instanceof SourceIndexer)
|
||||
((SourceIndexer) indexer).updateDependencies(resource);
|
||||
if (indexer instanceof DOMSourceIndexer)
|
||||
((DOMSourceIndexer) indexer).updateDependencies(resource);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ import org.eclipse.cdt.core.model.ElementChangedEvent;
|
|||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.model.SourceRoot;
|
||||
import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
|
@ -59,10 +59,10 @@ public class IndexerModelListener implements IElementChangedListener {
|
|||
IProject project = element.getCProject().getProject();
|
||||
ICDTIndexer indexer = indexManager.getIndexerForProject(project);
|
||||
|
||||
if (!(indexer instanceof SourceIndexer))
|
||||
if (!(indexer instanceof DOMSourceIndexer))
|
||||
return;
|
||||
|
||||
SourceIndexer sourceIndexer = (SourceIndexer) indexer;
|
||||
DOMSourceIndexer sourceIndexer = (DOMSourceIndexer) indexer;
|
||||
|
||||
switch(kind){
|
||||
case ICElementDelta.CHANGED:
|
||||
|
|
|
@ -580,16 +580,6 @@
|
|||
</run>
|
||||
</cextension>
|
||||
</extension>
|
||||
<extension
|
||||
name="%CDTIndexer.originalsourceindexer"
|
||||
id="originalsourceindexer"
|
||||
point="org.eclipse.cdt.core.CIndexer">
|
||||
<cextension>
|
||||
<run
|
||||
class="org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer">
|
||||
</run>
|
||||
</cextension>
|
||||
</extension>
|
||||
<extension
|
||||
point="org.eclipse.core.variables.dynamicVariables">
|
||||
<variable
|
||||
|
|
|
@ -20,8 +20,8 @@ import org.eclipse.cdt.core.index.IIndexStorage;
|
|||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.Index;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
|
||||
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.matching.CSearchPattern;
|
||||
|
|
|
@ -15,7 +15,7 @@ package org.eclipse.cdt.internal.core.search.processing;
|
|||
|
||||
import org.eclipse.cdt.core.ICLogConstants;
|
||||
import org.eclipse.cdt.internal.core.Util;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMIndexRequest;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.OperationCanceledException;
|
||||
|
@ -205,7 +205,7 @@ public abstract class JobManager implements Runnable {
|
|||
if( indexJob != null ){
|
||||
String progressString = null;
|
||||
IIndexJob job = currentJob();
|
||||
if( job instanceof IndexRequest ){
|
||||
if( job instanceof DOMIndexRequest ){
|
||||
progressString = " ("; //$NON-NLS-1$
|
||||
progressString += job.toString();
|
||||
progressString += ")"; //$NON-NLS-1$
|
||||
|
|
|
@ -27,7 +27,7 @@ import org.eclipse.cdt.core.search.SearchEngine;
|
|||
import org.eclipse.cdt.internal.core.CDTLogWriter;
|
||||
import org.eclipse.cdt.internal.core.CDescriptorManager;
|
||||
import org.eclipse.cdt.internal.core.PathEntryVariableManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.AbstractIndexerRunner;
|
||||
import org.eclipse.cdt.internal.core.model.BufferManager;
|
||||
import org.eclipse.cdt.internal.core.model.CModelManager;
|
||||
import org.eclipse.cdt.internal.core.model.DeltaProcessor;
|
||||
|
@ -79,7 +79,7 @@ public class CCorePlugin extends Plugin {
|
|||
public static final String INDEXER_SIMPLE_ID = "CIndexer"; //$NON-NLS-1$
|
||||
public static final String INDEXER_UNIQ_ID = PLUGIN_ID + "." + INDEXER_SIMPLE_ID; //$NON-NLS-1$
|
||||
public final static String PREF_INDEXER = "indexer"; //$NON-NLS-1$
|
||||
public final static String DEFAULT_INDEXER_SIMPLE_ID = "originalsourceindexer"; //$NON-NLS-1$
|
||||
public final static String DEFAULT_INDEXER_SIMPLE_ID = "domsourceindexer"; //$NON-NLS-1$
|
||||
public final static String NULL_INDEXER_SIMPLE_ID = "nullindexer"; //$NON-NLS-1$
|
||||
public final static String NULL_INDEXER_UNIQUE_ID = PLUGIN_ID + "." + NULL_INDEXER_SIMPLE_ID ; //$NON-NLS-1$
|
||||
public final static String DEFAULT_INDEXER_UNIQ_ID = PLUGIN_ID + "." + DEFAULT_INDEXER_SIMPLE_ID; //$NON-NLS-1$
|
||||
|
@ -918,10 +918,10 @@ public class CCorePlugin extends Plugin {
|
|||
} //$NON-NLS-1$
|
||||
|
||||
option = Platform.getDebugOption(INDEXER);
|
||||
if(option != null) AbstractIndexer.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
||||
if(option != null) AbstractIndexerRunner.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
||||
|
||||
option = Platform.getDebugOption(INDEXER_TIMES);
|
||||
if (option != null) AbstractIndexer.TIMING = option.equalsIgnoreCase("true"); //$NON-NLS-1$
|
||||
if (option != null) AbstractIndexerRunner.TIMING = option.equalsIgnoreCase("true"); //$NON-NLS-1$
|
||||
|
||||
option = Platform.getDebugOption(SEARCH);
|
||||
if(option != null) SearchEngine.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
|
||||
|
|
|
@ -15,7 +15,6 @@ import java.io.IOException;
|
|||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.IEntryResult;
|
||||
import org.eclipse.cdt.internal.core.index.IIndex;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.ui.testplugin.CTestPlugin;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.core.runtime.IProgressMonitor;
|
||||
|
@ -81,7 +80,7 @@ public class IndexerView extends ViewPart {
|
|||
protected Action sortAction;
|
||||
protected Action displayFullNameAction;
|
||||
protected Action displayStatsAction;
|
||||
protected IIndexer[] indexers = new IIndexer[DEFAULT_INDEXER_SIZE]; // support 1 indexer for now new IIndexer[CTestPlugin.getWorkspace().getRoot().getProjects().length];
|
||||
protected ICDTIndexer[] indexers = new ICDTIndexer[DEFAULT_INDEXER_SIZE]; // support 1 indexer for now new IIndexer[CTestPlugin.getWorkspace().getRoot().getProjects().length];
|
||||
protected IProject project = null;
|
||||
|
||||
protected static ViewContentProvider.StartInitializingIndexerView initializeIndexerViewJob = null;
|
||||
|
@ -524,7 +523,7 @@ public class IndexerView extends ViewPart {
|
|||
}
|
||||
}
|
||||
|
||||
public void appendIndexer(IIndexer indexer) {
|
||||
public void appendIndexer(ICDTIndexer indexer) {
|
||||
// indexers = (IIndexer[])ArrayUtil.append(IIndexer.class, indexers, indexer);
|
||||
// only support 1 indexer for now
|
||||
indexers[0] = indexer;
|
||||
|
@ -532,7 +531,7 @@ public class IndexerView extends ViewPart {
|
|||
|
||||
public void clearIndexers() {
|
||||
// for now only support 1 indexer at a time
|
||||
indexers = new IIndexer[1];
|
||||
indexers = new ICDTIndexer[1];
|
||||
}
|
||||
|
||||
public void setContentProvider(ViewContentProvider provider) {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package org.eclipse.cdt.ui.tests.IndexerView;
|
||||
|
||||
import org.eclipse.cdt.core.CCorePlugin;
|
||||
import org.eclipse.cdt.internal.core.index.IIndexer;
|
||||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||
import org.eclipse.cdt.internal.core.model.CProject;
|
||||
import org.eclipse.core.resources.IProject;
|
||||
import org.eclipse.jface.action.IAction;
|
||||
|
@ -53,7 +53,7 @@ public class OpenIndexerViewAction implements IViewActionDelegate,
|
|||
if (tempView != null) {
|
||||
if (tempView instanceof IndexerView) {
|
||||
((IndexerView)tempView).clearIndexers();
|
||||
IIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(proj);
|
||||
ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(proj);
|
||||
((IndexerView)tempView).appendIndexer(indexer);
|
||||
((IndexerView)tempView).setContentProvider(((IndexerView)tempView).new ViewContentProvider());
|
||||
}
|
||||
|
|
|
@ -29,7 +29,7 @@ import org.eclipse.cdt.core.model.ITranslationUnit;
|
|||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.ui.CHelpProviderManager;
|
||||
import org.eclipse.cdt.internal.ui.text.CHelpBookDescriptor;
|
||||
import org.eclipse.cdt.internal.ui.text.contentassist.CCompletionProcessor;
|
||||
|
@ -64,7 +64,7 @@ public class ContentAssistTests extends TestCase {
|
|||
cPrj = CProjectHelper.createCCProject("ContentAssistTestProject", "bin"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||
|
||||
project = cPrj.getProject();
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(false));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(false));
|
||||
} catch ( CoreException e ) {
|
||||
/*boo*/
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
|
||||
|
@ -74,7 +74,7 @@ public class CPPSelectionTestsCTagsIndexer extends BaseSelectionTestsIndexer
|
|||
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||
|
||||
//Enable indexing on test project
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
if (project==null) fail("Unable to create project"); //$NON-NLS-1$
|
||||
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
|
||||
|
|
|
@ -26,7 +26,7 @@ import org.eclipse.cdt.core.index.IIndexChangeListener;
|
|||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
|
||||
|
@ -49,7 +49,7 @@ public class CPPSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer imple
|
|||
IFile file;
|
||||
NullProgressMonitor monitor;
|
||||
IndexManager indexManager;
|
||||
SourceIndexer sourceIndexer;
|
||||
DOMSourceIndexer sourceIndexer;
|
||||
|
||||
static final String sourceIndexerID = "org.eclipse.cdt.core.domsourceindexer"; //$NON-NLS-1$
|
||||
|
||||
|
@ -73,7 +73,7 @@ public class CPPSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer imple
|
|||
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||
|
||||
//Enable indexing on test project
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
if (project==null) fail("Unable to create project"); //$NON-NLS-1$
|
||||
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
|
||||
|
@ -88,7 +88,7 @@ public class CPPSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer imple
|
|||
|
||||
//indexManager.reset();
|
||||
//Get the indexer used for the test project
|
||||
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(project);
|
||||
sourceIndexer = (DOMSourceIndexer) indexManager.getIndexerForProject(project);
|
||||
sourceIndexer.addIndexChangeListener(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ import org.eclipse.cdt.core.model.ICProject;
|
|||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
|
||||
|
@ -76,7 +76,7 @@ public class CSelectionTestsCTagsIndexer extends BaseSelectionTestsIndexer
|
|||
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||
|
||||
//Enable indexing on test project
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
if (project==null) fail("Unable to create project"); //$NON-NLS-1$
|
||||
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
|
||||
|
|
|
@ -23,7 +23,7 @@ import org.eclipse.cdt.core.index.IIndexChangeListener;
|
|||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
|
||||
import org.eclipse.cdt.make.core.MakeProjectNature;
|
||||
import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigNature;
|
||||
|
@ -46,7 +46,7 @@ public class CSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer impleme
|
|||
IFile file;
|
||||
NullProgressMonitor monitor;
|
||||
IndexManager indexManager;
|
||||
SourceIndexer sourceIndexer;
|
||||
DOMSourceIndexer sourceIndexer;
|
||||
|
||||
static final String sourceIndexerID = "org.eclipse.cdt.core.domsourceindexer"; //$NON-NLS-1$
|
||||
|
||||
|
@ -70,7 +70,7 @@ public class CSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer impleme
|
|||
project.setSessionProperty(IndexManager.indexerIDKey, sourceIndexerID);
|
||||
|
||||
//Enable indexing on test project
|
||||
project.setSessionProperty(SourceIndexer.activationKey,new Boolean(true));
|
||||
project.setSessionProperty(DOMSourceIndexer.activationKey,new Boolean(true));
|
||||
|
||||
if (project==null) fail("Unable to create project"); //$NON-NLS-1$
|
||||
IProjectDescription description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName());
|
||||
|
@ -84,7 +84,7 @@ public class CSelectionTestsDOMIndexer extends BaseSelectionTestsIndexer impleme
|
|||
|
||||
//indexManager.reset();
|
||||
//Get the indexer used for the test project
|
||||
sourceIndexer = (SourceIndexer) indexManager.getIndexerForProject(project);
|
||||
sourceIndexer = (DOMSourceIndexer) indexManager.getIndexerForProject(project);
|
||||
sourceIndexer.addIndexChangeListener(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -317,7 +317,6 @@ completionContributors=Code Assist Completion Contributor
|
|||
indexerPrefName=Indexer
|
||||
|
||||
# indexer names
|
||||
CDTIndexer.originalsourceindexer=Original C/C++ Indexer
|
||||
CDTIndexer.domsourceindexer=Full C/C++ Indexer (declarations and cross references)
|
||||
CDTIndexer.ctagsindexer=CTags Indexer (declarations only)
|
||||
CDTIndexer.nullindexer=No Indexer (search-based features will not work correctly)
|
||||
|
|
|
@ -1340,7 +1340,7 @@
|
|||
<extension
|
||||
point="org.eclipse.cdt.ui.IndexerPage">
|
||||
<indexerUI
|
||||
class="org.eclipse.cdt.ui.dialogs.SourceIndexerBlock"
|
||||
class="org.eclipse.cdt.ui.dialogs.DOMSourceIndexerBlock"
|
||||
id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI"
|
||||
indexerID="org.eclipse.cdt.core.domsourceindexer"
|
||||
name="%CDTIndexer.domsourceindexer"/>
|
||||
|
@ -1354,11 +1354,6 @@
|
|||
indexerID="org.eclipse.cdt.core.nullindexer"
|
||||
name="%CDTIndexer.nullindexer"
|
||||
id="org.eclipse.cdt.ui.nullindexerUI"/>
|
||||
<indexerUI
|
||||
class="org.eclipse.cdt.ui.dialogs.SourceIndexerBlock"
|
||||
indexerID="org.eclipse.cdt.core.originalsourceindexer"
|
||||
name="%CDTIndexer.originalsourceindexer"
|
||||
id="org.eclipse.cdt.ui.originalSourceIndexerUI"/>
|
||||
<!--TODO reverse this <indexerUI
|
||||
class="org.eclipse.cdt.ui.dialogs.NullIndexerBlock"
|
||||
id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI"
|
||||
|
|
|
@ -15,7 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
|||
import org.eclipse.cdt.core.ICDescriptor;
|
||||
import org.eclipse.cdt.core.ICExtensionReference;
|
||||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.index.AbstractIndexerPage;
|
||||
|
@ -30,7 +30,7 @@ import org.eclipse.swt.widgets.Composite;
|
|||
import org.eclipse.swt.widgets.Group;
|
||||
|
||||
|
||||
public class SourceIndexerBlock extends AbstractIndexerPage {
|
||||
public class DOMSourceIndexerBlock extends AbstractIndexerPage {
|
||||
|
||||
public final static String PREF_INDEX_MARKERS = CUIPlugin.PLUGIN_ID + ".indexmarkers"; //$NON-NLS-1$
|
||||
|
||||
|
@ -96,8 +96,8 @@ public class SourceIndexerBlock extends AbstractIndexerPage {
|
|||
|
||||
int indexMarkersInt = Integer.parseInt(indexMarkers);
|
||||
if (indexMarkersInt != oldIndexerProblemsValue && indexMarkersInt == 0)
|
||||
if (indexer instanceof SourceIndexer)
|
||||
((SourceIndexer) indexer).removeIndexerProblems(currentProject);
|
||||
if (indexer instanceof DOMSourceIndexer)
|
||||
((DOMSourceIndexer) indexer).removeIndexerProblems(currentProject);
|
||||
|
||||
}
|
||||
/* (non-Javadoc)
|
||||
|
@ -130,10 +130,10 @@ public class SourceIndexerBlock extends AbstractIndexerPage {
|
|||
|
||||
public String getIndexerProblemsValuesString(){
|
||||
int result = 0;
|
||||
result |= preprocessorProblemsEnabled.getSelection() ? SourceIndexer.PREPROCESSOR_PROBLEMS_BIT : 0;
|
||||
result |= preprocessorProblemsEnabled.getSelection() ? DOMSourceIndexer.PREPROCESSOR_PROBLEMS_BIT : 0;
|
||||
if( syntacticProblemsEnabled != null )
|
||||
result |= syntacticProblemsEnabled.getSelection() ? SourceIndexer.SYNTACTIC_PROBLEMS_BIT : 0;
|
||||
result |= semanticProblemsEnabled.getSelection() ? SourceIndexer.SEMANTIC_PROBLEMS_BIT : 0;
|
||||
result |= syntacticProblemsEnabled.getSelection() ? DOMSourceIndexer.SYNTACTIC_PROBLEMS_BIT : 0;
|
||||
result |= semanticProblemsEnabled.getSelection() ? DOMSourceIndexer.SEMANTIC_PROBLEMS_BIT : 0;
|
||||
Integer tempInt = new Integer(result);
|
||||
|
||||
return tempInt.toString();
|
||||
|
@ -172,10 +172,10 @@ public class SourceIndexerBlock extends AbstractIndexerPage {
|
|||
}
|
||||
|
||||
public void setIndexerProblemValues( int value ){
|
||||
preprocessorProblemsEnabled.setSelection( (value & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT) != 0 );
|
||||
preprocessorProblemsEnabled.setSelection( (value & DOMSourceIndexer.PREPROCESSOR_PROBLEMS_BIT) != 0 );
|
||||
if( syntacticProblemsEnabled != null )
|
||||
syntacticProblemsEnabled.setSelection( (value & SourceIndexer.SYNTACTIC_PROBLEMS_BIT) != 0 );
|
||||
semanticProblemsEnabled.setSelection( (value & SourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0 );
|
||||
syntacticProblemsEnabled.setSelection( (value & DOMSourceIndexer.SYNTACTIC_PROBLEMS_BIT) != 0 );
|
||||
semanticProblemsEnabled.setSelection( (value & DOMSourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0 );
|
||||
}
|
||||
|
||||
public void loadPreferences() {
|
Loading…
Add table
Reference in a new issue