mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Hooked up the Fast indexer so it should work now. Also changed a few interfaces so that they use ICProject instead of IProject. We should be sticking to the CModel as much as possible so we can leverage CDTisms like source folders and path entry info.
This commit is contained in:
parent
2ff46eeeab
commit
44c81e1db6
30 changed files with 482 additions and 623 deletions
|
@ -13,9 +13,6 @@ package org.eclipse.cdt.core.model;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.IStorage;
|
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,25 +63,8 @@ public interface ILanguage extends IAdaptable {
|
||||||
* @param style
|
* @param style
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public IASTTranslationUnit getTranslationUnit(IFile file, int style);
|
public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style);
|
||||||
|
|
||||||
/**
|
|
||||||
* Create the AST for the given external file with the given style.
|
|
||||||
*
|
|
||||||
* @param file
|
|
||||||
* @param style
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the ASt for the given working copy
|
|
||||||
* @param workingCopy
|
|
||||||
* @param style
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the AST Completion Node for the given working copy at the given
|
* Return the AST Completion Node for the given working copy at the given
|
||||||
* offset.
|
* offset.
|
||||||
|
|
|
@ -1136,12 +1136,6 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
|
||||||
public void deleting(IProject project) {
|
public void deleting(IProject project) {
|
||||||
// discard all indexing jobs for this project
|
// discard all indexing jobs for this project
|
||||||
this.getIndexManager().discardJobs(project.getName());
|
this.getIndexManager().discardJobs(project.getName());
|
||||||
// delete the PDOM for this project
|
|
||||||
try {
|
|
||||||
CCorePlugin.getPDOMManager().deletePDOM(project);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
|
||||||
// stop the binary runner for this project
|
// stop the binary runner for this project
|
||||||
removeBinaryRunner(project);
|
removeBinaryRunner(project);
|
||||||
}
|
}
|
||||||
|
|
|
@ -697,7 +697,7 @@ public class CProject extends Openable implements ICProject {
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPDOM getIndex() {
|
public IPDOM getIndex() {
|
||||||
return CCorePlugin.getPDOMManager().getPDOM(getProject());
|
return CCorePlugin.getPDOMManager().getPDOM(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,4 +35,7 @@ public interface IPDOM extends IAdaptable {
|
||||||
|
|
||||||
public ICodeReaderFactory getCodeReaderFactory(IWorkingCopy root);
|
public ICodeReaderFactory getCodeReaderFactory(IWorkingCopy root);
|
||||||
|
|
||||||
|
public IPDOMIndexer getIndexer();
|
||||||
|
public void setIndexer(IPDOMIndexer indexer) throws CoreException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,16 +11,20 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.core.dom;
|
package org.eclipse.cdt.core.dom;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public interface IPDOMIndexer extends IElementChangedListener {
|
public interface IPDOMIndexer {
|
||||||
|
|
||||||
public void setPDOM(IPDOM pdom);
|
public void setPDOM(IPDOM pdom);
|
||||||
|
|
||||||
|
public void handleDelta(ICElementDelta delta);
|
||||||
|
|
||||||
public void reindex();
|
public void reindex() throws CoreException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.core.dom;
|
package org.eclipse.cdt.core.dom;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -21,13 +21,14 @@ import org.eclipse.core.runtime.CoreException;
|
||||||
public interface IPDOMManager {
|
public interface IPDOMManager {
|
||||||
|
|
||||||
// Getting and deleting a PDOM for a project
|
// Getting and deleting a PDOM for a project
|
||||||
public IPDOM getPDOM(IProject project);
|
public IPDOM getPDOM(ICProject project);
|
||||||
public void deletePDOM(IProject project) throws CoreException;
|
public void deletePDOM(ICProject project) throws CoreException;
|
||||||
|
|
||||||
// Getting and setting indexer Ids
|
// Getting and setting indexer Ids
|
||||||
public String getDefaultIndexerId();
|
public String getDefaultIndexerId();
|
||||||
public void setDefaultIndexerId(String indexerId);
|
public void setDefaultIndexerId(String indexerId);
|
||||||
|
|
||||||
public String getIndexerId(IProject project);
|
public String getIndexerId(ICProject project) throws CoreException;
|
||||||
public void setIndexerId(IProject project, String indexerId);
|
public void setIndexerId(ICProject project, String indexerId) throws CoreException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
@ -42,7 +43,6 @@ import org.eclipse.cdt.internal.core.pdom.dom.c.PDOMCLinkageFactory;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IStorage;
|
|
||||||
import org.eclipse.core.runtime.PlatformObject;
|
import org.eclipse.core.runtime.PlatformObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -66,26 +66,15 @@ public class GCCLanguage extends PlatformObject implements ILanguage {
|
||||||
return super.getAdapter(adapter);
|
return super.getAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style) {
|
public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style) {
|
||||||
return getTranslationUnit(file.getFullPath().toOSString(), project, project, style, null);
|
IResource resource = file.getResource();
|
||||||
}
|
ICProject project = file.getCProject();
|
||||||
|
IProject rproject = project.getProject();
|
||||||
public IASTTranslationUnit getTranslationUnit(IFile file, int style) {
|
|
||||||
return getTranslationUnit(file.getLocation().toOSString(), file.getProject(), file, style, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style) {
|
|
||||||
IFile file = (IFile)workingCopy.getResource();
|
|
||||||
String path = file.getLocation().toOSString();
|
|
||||||
CodeReader reader = new CodeReader(path, workingCopy.getContents());
|
|
||||||
return getTranslationUnit(path, file.getProject(), file, style, reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IASTTranslationUnit getTranslationUnit(String path, IProject project, IResource infoResource, int style,
|
|
||||||
CodeReader reader) {
|
|
||||||
IScannerInfo scanInfo = null;
|
IScannerInfo scanInfo = null;
|
||||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
|
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject);
|
||||||
if (provider != null){
|
if (provider != null){
|
||||||
|
IResource infoResource = resource != null ? resource : rproject;
|
||||||
IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource);
|
IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource);
|
||||||
if (buildScanInfo != null)
|
if (buildScanInfo != null)
|
||||||
scanInfo = buildScanInfo;
|
scanInfo = buildScanInfo;
|
||||||
|
@ -102,12 +91,19 @@ public class GCCLanguage extends PlatformObject implements ILanguage {
|
||||||
else
|
else
|
||||||
fileCreator = SavedCodeReaderFactory.getInstance();
|
fileCreator = SavedCodeReaderFactory.getInstance();
|
||||||
|
|
||||||
if (reader == null) {
|
CodeReader reader;
|
||||||
|
if (file instanceof IWorkingCopy) {
|
||||||
|
// get the working copy contents
|
||||||
|
IFile rfile = (IFile)file.getResource();
|
||||||
|
reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents());
|
||||||
|
} else {
|
||||||
|
String path = file.getPath().toOSString();
|
||||||
reader = fileCreator.createCodeReaderForTranslationUnit(path);
|
reader = fileCreator.createCodeReaderForTranslationUnit(path);
|
||||||
if( reader == null )
|
if (reader == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
IScannerExtensionConfiguration scannerExtensionConfiguration =
|
IScannerExtensionConfiguration scannerExtensionConfiguration =
|
||||||
scannerExtensionConfiguration = C_GNU_SCANNER_EXTENSION;
|
scannerExtensionConfiguration = C_GNU_SCANNER_EXTENSION;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
import org.eclipse.cdt.core.dom.ast.ASTCompletionNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
@ -42,7 +43,6 @@ import org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkageFactory;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.IStorage;
|
|
||||||
import org.eclipse.core.runtime.PlatformObject;
|
import org.eclipse.core.runtime.PlatformObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -65,26 +65,15 @@ public class GPPLanguage extends PlatformObject implements ILanguage {
|
||||||
return super.getAdapter(adapter);
|
return super.getAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IStorage file, IProject project, int style) {
|
public IASTTranslationUnit getASTTranslationUnit(ITranslationUnit file, int style) {
|
||||||
return getTranslationUnit(file.getFullPath().toOSString(), project, project, style, null);
|
IResource resource = file.getResource();
|
||||||
}
|
ICProject project = file.getCProject();
|
||||||
|
IProject rproject = project.getProject();
|
||||||
public IASTTranslationUnit getTranslationUnit(IFile file, int style) {
|
|
||||||
return getTranslationUnit(file.getLocation().toOSString(), file.getProject(), file, style, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IASTTranslationUnit getTranslationUnit(IWorkingCopy workingCopy, int style) {
|
|
||||||
IFile file = (IFile)workingCopy.getResource();
|
|
||||||
String path = file.getLocation().toOSString();
|
|
||||||
CodeReader reader = new CodeReader(path, workingCopy.getContents());
|
|
||||||
return getTranslationUnit(path, file.getProject(), file, style, reader);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IASTTranslationUnit getTranslationUnit(String path, IProject project, IResource infoResource, int style,
|
|
||||||
CodeReader reader) {
|
|
||||||
IScannerInfo scanInfo = null;
|
IScannerInfo scanInfo = null;
|
||||||
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(project);
|
IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(rproject);
|
||||||
if (provider != null){
|
if (provider != null){
|
||||||
|
IResource infoResource = resource != null ? resource : rproject;
|
||||||
IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource);
|
IScannerInfo buildScanInfo = provider.getScannerInformation(infoResource);
|
||||||
if (buildScanInfo != null)
|
if (buildScanInfo != null)
|
||||||
scanInfo = buildScanInfo;
|
scanInfo = buildScanInfo;
|
||||||
|
@ -100,17 +89,28 @@ public class GPPLanguage extends PlatformObject implements ILanguage {
|
||||||
fileCreator = new PDOMCodeReaderFactory(pdom);
|
fileCreator = new PDOMCodeReaderFactory(pdom);
|
||||||
else
|
else
|
||||||
fileCreator = SavedCodeReaderFactory.getInstance();
|
fileCreator = SavedCodeReaderFactory.getInstance();
|
||||||
|
|
||||||
if (reader == null) {
|
IFile rfile = (IFile)file.getResource();
|
||||||
|
CodeReader reader;
|
||||||
|
if (file instanceof IWorkingCopy) {
|
||||||
|
// get the working copy contents
|
||||||
|
reader = new CodeReader(rfile.getLocation().toOSString(), file.getContents());
|
||||||
|
} else {
|
||||||
|
String path
|
||||||
|
= rfile != null
|
||||||
|
? rfile.getLocation().toOSString()
|
||||||
|
: file.getPath().toOSString();
|
||||||
reader = fileCreator.createCodeReaderForTranslationUnit(path);
|
reader = fileCreator.createCodeReaderForTranslationUnit(path);
|
||||||
if( reader == null )
|
if (reader == null)
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
IScannerExtensionConfiguration scannerExtensionConfiguration = CPP_GNU_SCANNER_EXTENSION;
|
IScannerExtensionConfiguration scannerExtensionConfiguration =
|
||||||
|
scannerExtensionConfiguration = CPP_GNU_SCANNER_EXTENSION;
|
||||||
|
|
||||||
IScanner scanner = new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE,
|
IScanner scanner = new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE,
|
||||||
ParserLanguage.CPP, ParserFactory.createDefaultLogService(), scannerExtensionConfiguration, fileCreator );
|
ParserLanguage.CPP, ParserFactory.createDefaultLogService(), scannerExtensionConfiguration, fileCreator );
|
||||||
|
//assume GCC
|
||||||
ISourceCodeParser parser = new GNUCPPSourceParser( scanner, ParserMode.COMPLETE_PARSE, ParserUtil.getParserLogService(),
|
ISourceCodeParser parser = new GNUCPPSourceParser( scanner, ParserMode.COMPLETE_PARSE, ParserUtil.getParserLogService(),
|
||||||
new GPPParserExtensionConfiguration() );
|
new GPPParserExtensionConfiguration() );
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ public class GPPLanguage extends PlatformObject implements ILanguage {
|
||||||
|
|
||||||
if ((style & AST_USE_INDEX) != 0)
|
if ((style & AST_USE_INDEX) != 0)
|
||||||
ast.setIndex(pdom);
|
ast.setIndex(pdom);
|
||||||
|
|
||||||
return ast;
|
return ast;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
|
@ -50,7 +51,7 @@ import org.eclipse.core.runtime.jobs.Job;
|
||||||
*/
|
*/
|
||||||
public class PDOM extends PlatformObject implements IPDOM {
|
public class PDOM extends PlatformObject implements IPDOM {
|
||||||
|
|
||||||
private final IProject project;
|
private final ICProject project;
|
||||||
private IPDOMIndexer indexer;
|
private IPDOMIndexer indexer;
|
||||||
|
|
||||||
private final IPath dbPath;
|
private final IPath dbPath;
|
||||||
|
@ -66,16 +67,18 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
private static final QualifiedName dbNameProperty
|
private static final QualifiedName dbNameProperty
|
||||||
= new QualifiedName(CCorePlugin.PLUGIN_ID, "dbName"); //$NON-NLS-1$
|
= new QualifiedName(CCorePlugin.PLUGIN_ID, "dbName"); //$NON-NLS-1$
|
||||||
|
|
||||||
public PDOM(IProject project, IPDOMIndexer indexer) throws CoreException {
|
public PDOM(ICProject project, IPDOMIndexer indexer) throws CoreException {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
this.indexer = indexer;
|
this.indexer = indexer;
|
||||||
|
indexer.setPDOM(this);
|
||||||
|
|
||||||
// Load up the database
|
// Load up the database
|
||||||
String dbName = project.getPersistentProperty(dbNameProperty);
|
IProject rproject = project.getProject();
|
||||||
|
String dbName = rproject.getPersistentProperty(dbNameProperty);
|
||||||
if (dbName == null) {
|
if (dbName == null) {
|
||||||
dbName = project.getName() + "_"
|
dbName = project.getElementName() + "_"
|
||||||
+ System.currentTimeMillis() + ".pdom";
|
+ System.currentTimeMillis() + ".pdom";
|
||||||
project.setPersistentProperty(dbNameProperty, dbName);
|
rproject.setPersistentProperty(dbNameProperty, dbName);
|
||||||
}
|
}
|
||||||
dbPath = CCorePlugin.getDefault().getStateLocation().append(dbName);
|
dbPath = CCorePlugin.getDefault().getStateLocation().append(dbName);
|
||||||
db = new Database(dbPath.toOSString(), VERSION);
|
db = new Database(dbPath.toOSString(), VERSION);
|
||||||
|
@ -90,7 +93,7 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
return super.getAdapter(adapter);
|
return super.getAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IProject getProject() {
|
public ICProject getProject() {
|
||||||
return project;
|
return project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +101,16 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
return indexer;
|
return indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setIndexer(IPDOMIndexer indexer) throws CoreException {
|
||||||
|
// Force a reindex if indexer changes
|
||||||
|
boolean reindex = indexer != null && this.indexer != indexer;
|
||||||
|
this.indexer = indexer;
|
||||||
|
indexer.setPDOM(this);
|
||||||
|
|
||||||
|
if (reindex)
|
||||||
|
indexer.reindex();
|
||||||
|
}
|
||||||
|
|
||||||
public static interface IListener {
|
public static interface IListener {
|
||||||
public void handleChange(PDOM pdom);
|
public void handleChange(PDOM pdom);
|
||||||
}
|
}
|
||||||
|
@ -149,7 +162,7 @@ public class PDOM extends PlatformObject implements IPDOM {
|
||||||
if (linkage == null)
|
if (linkage == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(),
|
IASTTranslationUnit ast = language.getASTTranslationUnit(tu,
|
||||||
ILanguage.AST_USE_INDEX |
|
ILanguage.AST_USE_INDEX |
|
||||||
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
||||||
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
||||||
|
|
|
@ -18,6 +18,9 @@ import org.eclipse.cdt.core.dom.IPDOMIndexer;
|
||||||
import org.eclipse.cdt.core.dom.IPDOMManager;
|
import org.eclipse.cdt.core.dom.IPDOMManager;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.ProjectScope;
|
import org.eclipse.core.resources.ProjectScope;
|
||||||
|
@ -28,8 +31,6 @@ import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.QualifiedName;
|
import org.eclipse.core.runtime.QualifiedName;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
|
|
||||||
import org.eclipse.core.runtime.jobs.IJobChangeListener;
|
|
||||||
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
|
||||||
import org.eclipse.core.runtime.preferences.IPreferencesService;
|
import org.eclipse.core.runtime.preferences.IPreferencesService;
|
||||||
import org.eclipse.core.runtime.preferences.InstanceScope;
|
import org.eclipse.core.runtime.preferences.InstanceScope;
|
||||||
|
@ -42,20 +43,19 @@ import org.osgi.service.prefs.BackingStoreException;
|
||||||
*
|
*
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*/
|
*/
|
||||||
public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobChangeListener {
|
public class PDOMManager implements IPDOMManager, IElementChangedListener {
|
||||||
|
|
||||||
private PDOMUpdator currJob;
|
|
||||||
|
|
||||||
private static final QualifiedName pdomProperty
|
private static final QualifiedName pdomProperty
|
||||||
= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$
|
= new QualifiedName(CCorePlugin.PLUGIN_ID, "pdom"); //$NON-NLS-1$
|
||||||
|
|
||||||
public IPDOM getPDOM(IProject project) {
|
public IPDOM getPDOM(ICProject project) {
|
||||||
try {
|
try {
|
||||||
IPDOM pdom = (IPDOM)project.getSessionProperty(pdomProperty);
|
IProject rproject = project.getProject();
|
||||||
|
IPDOM pdom = (IPDOM)rproject.getSessionProperty(pdomProperty);
|
||||||
|
|
||||||
if (pdom == null) {
|
if (pdom == null) {
|
||||||
pdom = new PDOM(project, createIndexer(project));
|
pdom = new PDOM(project, createIndexer(getIndexerId(project)));
|
||||||
project.setSessionProperty(pdomProperty, pdom);
|
rproject.setSessionProperty(pdomProperty, pdom);
|
||||||
}
|
}
|
||||||
|
|
||||||
return pdom;
|
return pdom;
|
||||||
|
@ -70,36 +70,31 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC
|
||||||
if (event.getType() != ElementChangedEvent.POST_CHANGE)
|
if (event.getType() != ElementChangedEvent.POST_CHANGE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// TODO turn off indexing for now.
|
// Walk the delta sending the subtrees to the appropriate indexers
|
||||||
return;
|
processDelta(event.getDelta());
|
||||||
// currJob = new PDOMUpdator(event.getDelta(), currJob);
|
|
||||||
// currJob.addJobChangeListener(this);
|
|
||||||
// currJob.schedule();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void aboutToRun(IJobChangeEvent event) {
|
private void processDelta(ICElementDelta delta) {
|
||||||
|
int type = delta.getElement().getElementType();
|
||||||
|
switch (type) {
|
||||||
|
case ICElement.C_MODEL:
|
||||||
|
// Loop through the children
|
||||||
|
ICElementDelta[] children = delta.getAffectedChildren();
|
||||||
|
for (int i = 0; i < children.length; ++i)
|
||||||
|
processDelta(children[i]);
|
||||||
|
break;
|
||||||
|
case ICElement.C_PROJECT:
|
||||||
|
// Find the appropriate indexer and pass the delta on
|
||||||
|
ICProject project = (ICProject)delta.getElement();
|
||||||
|
IPDOM pdom = getPDOM(project);
|
||||||
|
pdom.getIndexer().handleDelta(delta);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void awake(IJobChangeEvent event) {
|
public void deletePDOM(ICProject project) throws CoreException {
|
||||||
}
|
IProject rproject = project.getProject();
|
||||||
|
IPDOM pdom = (IPDOM)rproject.getSessionProperty(pdomProperty);
|
||||||
public synchronized void done(IJobChangeEvent event) {
|
rproject.setSessionProperty(pdomProperty, null);
|
||||||
if (currJob == event.getJob())
|
|
||||||
currJob = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void running(IJobChangeEvent event) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void scheduled(IJobChangeEvent event) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sleeping(IJobChangeEvent event) {
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deletePDOM(IProject project) throws CoreException {
|
|
||||||
IPDOM pdom = (IPDOM)project.getSessionProperty(pdomProperty);
|
|
||||||
project.setSessionProperty(pdomProperty, null);
|
|
||||||
pdom.delete();
|
pdom.delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,8 +122,8 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getIndexerId(IProject project) {
|
public String getIndexerId(ICProject project) throws CoreException {
|
||||||
IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID);
|
IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID);
|
||||||
if (prefs == null)
|
if (prefs == null)
|
||||||
return getDefaultIndexerId();
|
return getDefaultIndexerId();
|
||||||
|
|
||||||
|
@ -136,7 +131,7 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC
|
||||||
if (indexerId == null) {
|
if (indexerId == null) {
|
||||||
// See if it is in the ICDescriptor
|
// See if it is in the ICDescriptor
|
||||||
try {
|
try {
|
||||||
ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project, true);
|
ICDescriptor desc = CCorePlugin.getDefault().getCProjectDescription(project.getProject(), true);
|
||||||
ICExtensionReference[] ref = desc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
ICExtensionReference[] ref = desc.get(CCorePlugin.INDEXER_UNIQ_ID);
|
||||||
if (ref != null && ref.length > 0) {
|
if (ref != null && ref.length > 0) {
|
||||||
indexerId = ref[0].getID();
|
indexerId = ref[0].getID();
|
||||||
|
@ -153,8 +148,8 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC
|
||||||
return indexerId;
|
return indexerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIndexerId(IProject project, String indexerId) {
|
public void setIndexerId(ICProject project, String indexerId) throws CoreException {
|
||||||
IEclipsePreferences prefs = new ProjectScope(project).getNode(CCorePlugin.PLUGIN_ID);
|
IEclipsePreferences prefs = new ProjectScope(project.getProject()).getNode(CCorePlugin.PLUGIN_ID);
|
||||||
if (prefs == null)
|
if (prefs == null)
|
||||||
return; // TODO why would this be null?
|
return; // TODO why would this be null?
|
||||||
|
|
||||||
|
@ -163,11 +158,12 @@ public class PDOMManager implements IPDOMManager, IElementChangedListener, IJobC
|
||||||
prefs.flush();
|
prefs.flush();
|
||||||
} catch (BackingStoreException e) {
|
} catch (BackingStoreException e) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IPDOM pdom = getPDOM(project);
|
||||||
|
pdom.setIndexer(createIndexer(indexerId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private IPDOMIndexer createIndexer(IProject project) throws CoreException {
|
private IPDOMIndexer createIndexer(String indexerId) throws CoreException {
|
||||||
String indexerId = getIndexerId(project);
|
|
||||||
|
|
||||||
// Look up in extension point
|
// Look up in extension point
|
||||||
IExtension indexerExt = Platform.getExtensionRegistry()
|
IExtension indexerExt = Platform.getExtensionRegistry()
|
||||||
.getExtension(CCorePlugin.INDEXER_UNIQ_ID, indexerId);
|
.getExtension(CCorePlugin.INDEXER_UNIQ_ID, indexerId);
|
||||||
|
|
|
@ -1,244 +0,0 @@
|
||||||
/*******************************************************************************
|
|
||||||
* Copyright (c) 2005 QNX Software Systems and others.
|
|
||||||
* All rights reserved. This program and the accompanying materials
|
|
||||||
* are made available under the terms of the Eclipse Public License v1.0
|
|
||||||
* which accompanies this distribution, and is available at
|
|
||||||
* http://www.eclipse.org/legal/epl-v10.html
|
|
||||||
*
|
|
||||||
* Contributors:
|
|
||||||
* QNX - Initial API and implementation
|
|
||||||
*******************************************************************************/
|
|
||||||
package org.eclipse.cdt.internal.core.pdom;
|
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.dom.IPDOM;
|
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
|
||||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.resources.IResourceProxy;
|
|
||||||
import org.eclipse.core.resources.IResourceProxyVisitor;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.core.runtime.content.IContentType;
|
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author Doug Schaefer
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class PDOMUpdator extends Job {
|
|
||||||
|
|
||||||
private PDOMUpdator prevJob;
|
|
||||||
private ICElementDelta delta;
|
|
||||||
private ICProject project;
|
|
||||||
private List addedTUs;
|
|
||||||
private List changedTUs;
|
|
||||||
private List removedTUs;
|
|
||||||
|
|
||||||
public PDOMUpdator(ICElementDelta delta, PDOMUpdator prevJob) {
|
|
||||||
super("PDOM Updator");
|
|
||||||
this.prevJob = prevJob;
|
|
||||||
this.delta = delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PDOMUpdator(ICProject project, PDOMUpdator prevJob) {
|
|
||||||
super("PDOM Project Updator");
|
|
||||||
this.prevJob = prevJob;
|
|
||||||
this.project = project;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
|
||||||
if (prevJob != null)
|
|
||||||
try {
|
|
||||||
prevJob.join();
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
|
|
||||||
String taskName = null;
|
|
||||||
if (delta != null) {
|
|
||||||
processDelta(delta);
|
|
||||||
taskName = "Update PDOM";
|
|
||||||
}
|
|
||||||
if (project != null) {
|
|
||||||
processNewProject(project);
|
|
||||||
taskName = "Rebuild PDOM";
|
|
||||||
}
|
|
||||||
|
|
||||||
int count
|
|
||||||
= (addedTUs != null ? addedTUs.size() : 0)
|
|
||||||
+ (changedTUs != null ? changedTUs.size() : 0)
|
|
||||||
+ (removedTUs != null ? removedTUs.size() : 0);
|
|
||||||
|
|
||||||
if (taskName == null || count == 0)
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
|
|
||||||
monitor.beginTask(taskName, count);
|
|
||||||
|
|
||||||
if (addedTUs != null)
|
|
||||||
for (Iterator i = addedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
processAddedTU(tu);
|
|
||||||
monitor.worked(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changedTUs != null)
|
|
||||||
for (Iterator i = changedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
processChangedTU(tu);
|
|
||||||
monitor.worked(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removedTUs != null)
|
|
||||||
for (Iterator i = removedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
processRemovedTU(tu);
|
|
||||||
monitor.worked(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$
|
|
||||||
if (showTimings!= null)
|
|
||||||
if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$
|
|
||||||
System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
|
|
||||||
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
return e.getStatus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processDelta(ICElementDelta delta) {
|
|
||||||
// First make sure this project is PDOMable
|
|
||||||
ICElement element = delta.getElement();
|
|
||||||
if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// process the children first
|
|
||||||
ICElementDelta[] children = delta.getAffectedChildren();
|
|
||||||
for (int i = 0; i < children.length; ++i)
|
|
||||||
processDelta(children[i]);
|
|
||||||
|
|
||||||
// what have we got
|
|
||||||
if (element.getElementType() == ICElement.C_PROJECT) {
|
|
||||||
switch (delta.getKind()) {
|
|
||||||
case ICElementDelta.ADDED:
|
|
||||||
processNewProject((ICProject)element);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (element.getElementType() == ICElement.C_UNIT) {
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)element;
|
|
||||||
if (tu.isWorkingCopy())
|
|
||||||
// Don't care about working copies either
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (delta.getKind()) {
|
|
||||||
case ICElementDelta.ADDED:
|
|
||||||
if (addedTUs == null)
|
|
||||||
addedTUs = new LinkedList();
|
|
||||||
addedTUs.add(element);
|
|
||||||
break;
|
|
||||||
case ICElementDelta.CHANGED:
|
|
||||||
if (changedTUs == null)
|
|
||||||
changedTUs = new LinkedList();
|
|
||||||
changedTUs.add(element);
|
|
||||||
break;
|
|
||||||
case ICElementDelta.REMOVED:
|
|
||||||
if (removedTUs == null)
|
|
||||||
removedTUs = new LinkedList();
|
|
||||||
removedTUs.add(element);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processNewProject(final ICProject project) {
|
|
||||||
try {
|
|
||||||
project.getProject().accept(new IResourceProxyVisitor() {
|
|
||||||
public boolean visit(IResourceProxy proxy) throws CoreException {
|
|
||||||
if (proxy.getType() == IResource.FILE) {
|
|
||||||
String fileName = proxy.getName();
|
|
||||||
IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName);
|
|
||||||
if (contentType == null)
|
|
||||||
return true;
|
|
||||||
String contentTypeId = contentType.getId();
|
|
||||||
|
|
||||||
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId)
|
|
||||||
|| CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) {
|
|
||||||
if (addedTUs == null)
|
|
||||||
addedTUs = new LinkedList();
|
|
||||||
addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource()));
|
|
||||||
}
|
|
||||||
// TODO handle header files
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processAddedTU(ITranslationUnit tu) throws CoreException {
|
|
||||||
IPDOM pdom = tu.getCProject().getIndex();
|
|
||||||
if (pdom == null || !(pdom instanceof PDOM))
|
|
||||||
return;
|
|
||||||
|
|
||||||
PDOM mypdom = (PDOM)pdom;
|
|
||||||
mypdom.addSymbols(tu);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processRemovedTU(ITranslationUnit tu) throws CoreException {
|
|
||||||
IProject project = tu.getCProject().getProject();
|
|
||||||
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project);
|
|
||||||
if (pdom == null || !(pdom instanceof PDOM))
|
|
||||||
return;
|
|
||||||
|
|
||||||
PDOM mypdom = (PDOM)pdom;
|
|
||||||
mypdom.removeSymbols(tu);
|
|
||||||
// TODO delete the file itself from the database
|
|
||||||
// the removeSymbols only removes the names in the file
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processChangedTU(ITranslationUnit tu) throws CoreException {
|
|
||||||
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(tu.getCProject().getProject());
|
|
||||||
if (pdom == null || !(pdom instanceof PDOM))
|
|
||||||
return;
|
|
||||||
PDOM mypdom = (PDOM)pdom;
|
|
||||||
|
|
||||||
mypdom.removeSymbols(tu);
|
|
||||||
mypdom.addSymbols(tu);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -35,7 +35,7 @@ public class PDOMBindingAdapterFactory implements IAdapterFactory {
|
||||||
IBinding binding = (IBinding)adaptableObject;
|
IBinding binding = (IBinding)adaptableObject;
|
||||||
ICProject[] projects = CoreModel.getDefault().getCModel().getCProjects();
|
ICProject[] projects = CoreModel.getDefault().getCModel().getCProjects();
|
||||||
for (int i = 0; i < projects.length; ++i) {
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(projects[i].getProject());
|
IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(projects[i]);
|
||||||
|
|
||||||
if (ipdom == null || !(ipdom instanceof PDOM))
|
if (ipdom == null || !(ipdom instanceof PDOM))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -11,12 +11,10 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.IPDOM;
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
@ -32,32 +30,35 @@ public class PDOMFastAddTU extends Job {
|
||||||
private final ITranslationUnit tu;
|
private final ITranslationUnit tu;
|
||||||
private final PDOM pdom;
|
private final PDOM pdom;
|
||||||
|
|
||||||
public PDOMFastAddTU(IPDOM pdom, ITranslationUnit tu) {
|
public PDOMFastAddTU(PDOM pdom, ITranslationUnit tu, IProgressMonitor group) {
|
||||||
super("PDOM Fast Add TU");
|
super("PDOM Fast Add: " + tu.getElementName());
|
||||||
this.pdom = (pdom instanceof PDOM) ? (PDOM)pdom : null;
|
this.pdom = pdom;
|
||||||
this.tu = tu;
|
this.tu = tu;
|
||||||
setPriority(PDOM.WRITER_PRIORITY);
|
setPriority(PDOM.WRITER_PRIORITY);
|
||||||
|
setProgressGroup(group, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
if (pdom == null)
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ILanguage language = tu.getLanguage();
|
ILanguage language = tu.getLanguage();
|
||||||
if (language == null)
|
if (language == null)
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
|
|
||||||
|
// begin the rule before the parse so that we are only parsing once at a time
|
||||||
|
// maybe we can do more than one some day
|
||||||
|
getJobManager().beginRule(pdom.getWriterLockRule(), monitor);
|
||||||
|
monitor.beginTask("Adding: " + tu.getElementName(), 1);
|
||||||
|
|
||||||
// get the AST in a "Fast" way
|
// get the AST in a "Fast" way
|
||||||
IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(),
|
IASTTranslationUnit ast = language.getASTTranslationUnit(tu,
|
||||||
ILanguage.AST_USE_INDEX |
|
ILanguage.AST_USE_INDEX |
|
||||||
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
||||||
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
||||||
if (ast == null)
|
if (ast == null)
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
|
|
||||||
getJobManager().beginRule(pdom.getWriterLockRule(), monitor);
|
|
||||||
pdom.addSymbols(language, ast);
|
pdom.addSymbols(language, ast);
|
||||||
|
monitor.done();
|
||||||
getJobManager().endRule(pdom.getWriterLockRule());
|
getJobManager().endRule(pdom.getWriterLockRule());
|
||||||
return Status.OK_STATUS;
|
return Status.OK_STATUS;
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
|
@ -16,7 +16,6 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
@ -46,15 +45,16 @@ public class PDOMFastChangeTU extends Job {
|
||||||
if (language == null)
|
if (language == null)
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
|
|
||||||
|
getJobManager().beginRule(pdom.getWriterLockRule(), monitor);
|
||||||
|
|
||||||
// get the AST in a "Fast" way
|
// get the AST in a "Fast" way
|
||||||
IASTTranslationUnit ast = language.getTranslationUnit((IFile)tu.getResource(),
|
IASTTranslationUnit ast = language.getASTTranslationUnit(tu,
|
||||||
ILanguage.AST_USE_INDEX |
|
ILanguage.AST_USE_INDEX |
|
||||||
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
ILanguage.AST_SKIP_INDEXED_HEADERS |
|
||||||
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
ILanguage.AST_SKIP_IF_NO_BUILD_INFO);
|
||||||
if (ast == null)
|
if (ast == null)
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
|
|
||||||
getJobManager().beginRule(pdom.getWriterLockRule(), monitor);
|
|
||||||
pdom.removeSymbols(tu);
|
pdom.removeSymbols(tu);
|
||||||
pdom.addSymbols(language, ast);
|
pdom.addSymbols(language, ast);
|
||||||
getJobManager().endRule(pdom.getWriterLockRule());
|
getJobManager().endRule(pdom.getWriterLockRule());
|
||||||
|
|
|
@ -0,0 +1,189 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2006 QNX Software Systems and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.LinkedList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceProxy;
|
||||||
|
import org.eclipse.core.resources.IResourceProxyVisitor;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
|
||||||
|
class PDOMFastHandleDelta extends Job {
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private final PDOM pdom;
|
||||||
|
private final ICElementDelta delta;
|
||||||
|
private final IProgressMonitor group;
|
||||||
|
|
||||||
|
private List addedTUs;
|
||||||
|
private List changedTUs;
|
||||||
|
private List removedTUs;
|
||||||
|
|
||||||
|
public PDOMFastHandleDelta(PDOM pdom, ICElementDelta delta, IProgressMonitor group) {
|
||||||
|
super("Delta Handler");
|
||||||
|
this.pdom = pdom;
|
||||||
|
this.delta = delta;
|
||||||
|
this.group = group;
|
||||||
|
setProgressGroup(group, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
|
monitor.subTask("Delta");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
processDelta(delta);
|
||||||
|
|
||||||
|
int count
|
||||||
|
= (addedTUs != null ? addedTUs.size() : 0)
|
||||||
|
+ (changedTUs != null ? changedTUs.size() : 0)
|
||||||
|
+ (removedTUs != null ? removedTUs.size() : 0);
|
||||||
|
|
||||||
|
if (count == 0) {
|
||||||
|
monitor.done();
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (addedTUs != null)
|
||||||
|
for (Iterator i = addedTUs.iterator(); i.hasNext();) {
|
||||||
|
if (monitor.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
ITranslationUnit tu = (ITranslationUnit)i.next();
|
||||||
|
monitor.subTask(String.valueOf(count--)
|
||||||
|
+" files remaining - "
|
||||||
|
+ tu.getPath().toString());
|
||||||
|
new PDOMFastAddTU(pdom, tu, group).schedule();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changedTUs != null)
|
||||||
|
for (Iterator i = changedTUs.iterator(); i.hasNext();) {
|
||||||
|
if (monitor.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
ITranslationUnit tu = (ITranslationUnit)i.next();
|
||||||
|
monitor.subTask(String.valueOf(count--)
|
||||||
|
+" files remaining - "
|
||||||
|
+ tu.getPath().toString());
|
||||||
|
new PDOMFastChangeTU(pdom, tu).schedule();
|
||||||
|
monitor.worked(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (removedTUs != null)
|
||||||
|
for (Iterator i = removedTUs.iterator(); i.hasNext();) {
|
||||||
|
if (monitor.isCanceled())
|
||||||
|
return Status.CANCEL_STATUS;
|
||||||
|
ITranslationUnit tu = (ITranslationUnit)i.next();
|
||||||
|
monitor.subTask(String.valueOf(count--)
|
||||||
|
+" files remaining - "
|
||||||
|
+ tu.getPath().toString());
|
||||||
|
new PDOMFastRemoveTU(pdom, tu).schedule();
|
||||||
|
monitor.worked(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$
|
||||||
|
if (showTimings!= null)
|
||||||
|
if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$
|
||||||
|
System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
|
||||||
|
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processDelta(ICElementDelta delta) {
|
||||||
|
// First make sure this project is PDOMable
|
||||||
|
ICElement element = delta.getElement();
|
||||||
|
if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM((ICProject)element) == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// process the children first
|
||||||
|
ICElementDelta[] children = delta.getAffectedChildren();
|
||||||
|
for (int i = 0; i < children.length; ++i)
|
||||||
|
processDelta(children[i]);
|
||||||
|
|
||||||
|
// what have we got
|
||||||
|
if (element.getElementType() == ICElement.C_PROJECT) {
|
||||||
|
switch (delta.getKind()) {
|
||||||
|
case ICElementDelta.ADDED:
|
||||||
|
processNewProject((ICProject)element);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (element.getElementType() == ICElement.C_UNIT) {
|
||||||
|
ITranslationUnit tu = (ITranslationUnit)element;
|
||||||
|
if (tu.isWorkingCopy())
|
||||||
|
// Don't care about working copies either
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (delta.getKind()) {
|
||||||
|
case ICElementDelta.ADDED:
|
||||||
|
if (addedTUs == null)
|
||||||
|
addedTUs = new LinkedList();
|
||||||
|
addedTUs.add(element);
|
||||||
|
break;
|
||||||
|
case ICElementDelta.CHANGED:
|
||||||
|
if (changedTUs == null)
|
||||||
|
changedTUs = new LinkedList();
|
||||||
|
changedTUs.add(element);
|
||||||
|
break;
|
||||||
|
case ICElementDelta.REMOVED:
|
||||||
|
if (removedTUs == null)
|
||||||
|
removedTUs = new LinkedList();
|
||||||
|
removedTUs.add(element);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void processNewProject(final ICProject project) {
|
||||||
|
try {
|
||||||
|
project.getProject().accept(new IResourceProxyVisitor() {
|
||||||
|
public boolean visit(IResourceProxy proxy) throws CoreException {
|
||||||
|
if (proxy.getType() == IResource.FILE) {
|
||||||
|
String fileName = proxy.getName();
|
||||||
|
IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName);
|
||||||
|
if (contentType == null)
|
||||||
|
return true;
|
||||||
|
String contentTypeId = contentType.getId();
|
||||||
|
|
||||||
|
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId)
|
||||||
|
|| CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) {
|
||||||
|
if (addedTUs == null)
|
||||||
|
addedTUs = new LinkedList();
|
||||||
|
addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource()));
|
||||||
|
}
|
||||||
|
// TODO handle header files
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CCorePlugin.log(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,31 +11,14 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
||||||
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
|
||||||
import org.eclipse.cdt.core.dom.IPDOM;
|
import org.eclipse.cdt.core.dom.IPDOM;
|
||||||
import org.eclipse.cdt.core.dom.IPDOMIndexer;
|
import org.eclipse.cdt.core.dom.IPDOMIndexer;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
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.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.core.resources.IFile;
|
|
||||||
import org.eclipse.core.resources.IResource;
|
|
||||||
import org.eclipse.core.resources.IResourceProxy;
|
|
||||||
import org.eclipse.core.resources.IResourceProxyVisitor;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.Status;
|
|
||||||
import org.eclipse.core.runtime.content.IContentType;
|
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
|
@ -50,170 +33,15 @@ public class PDOMFastIndexer implements IPDOMIndexer {
|
||||||
this.pdom = (PDOM)pdom;
|
this.pdom = (PDOM)pdom;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IProgressMonitor progressGroup;
|
public void handleDelta(ICElementDelta delta) {
|
||||||
|
IProgressMonitor group = Platform.getJobManager().createProgressGroup();
|
||||||
private IProgressMonitor getProgressGroup() {
|
new PDOMFastHandleDelta(pdom, delta, group).schedule();
|
||||||
if (progressGroup == null)
|
|
||||||
progressGroup = Platform.getJobManager().createProgressGroup();
|
|
||||||
return progressGroup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ChangeHandler extends Job {
|
public void reindex() throws CoreException {
|
||||||
private final ICElementDelta delta;
|
IProgressMonitor group = Platform.getJobManager().createProgressGroup();
|
||||||
private List addedTUs;
|
group.beginTask("Reindexing", 100);
|
||||||
private List changedTUs;
|
new PDOMFastReindex(pdom, group).schedule();
|
||||||
private List removedTUs;
|
|
||||||
|
|
||||||
public ChangeHandler(ElementChangedEvent event) {
|
|
||||||
super("Change Handler");
|
|
||||||
delta = event.getDelta();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected IStatus run(IProgressMonitor monitor) {
|
|
||||||
long start = System.currentTimeMillis();
|
|
||||||
|
|
||||||
String taskName = null;
|
|
||||||
processDelta(delta);
|
|
||||||
taskName = "Update PDOM";
|
|
||||||
|
|
||||||
// if (project != null) {
|
|
||||||
// processNewProject(project);
|
|
||||||
// taskName = "Rebuild PDOM";
|
|
||||||
// }
|
|
||||||
|
|
||||||
int count
|
|
||||||
= (addedTUs != null ? addedTUs.size() : 0)
|
|
||||||
+ (changedTUs != null ? changedTUs.size() : 0)
|
|
||||||
+ (removedTUs != null ? removedTUs.size() : 0);
|
|
||||||
|
|
||||||
if (taskName == null || count == 0)
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
|
|
||||||
monitor.beginTask(taskName, count);
|
|
||||||
|
|
||||||
if (addedTUs != null)
|
|
||||||
for (Iterator i = addedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
new PDOMFastAddTU(pdom, tu).schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changedTUs != null)
|
|
||||||
for (Iterator i = changedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
new PDOMFastChangeTU(pdom, tu).schedule();
|
|
||||||
monitor.worked(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removedTUs != null)
|
|
||||||
for (Iterator i = removedTUs.iterator(); i.hasNext();) {
|
|
||||||
if (monitor.isCanceled())
|
|
||||||
return Status.CANCEL_STATUS;
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)i.next();
|
|
||||||
monitor.subTask(String.valueOf(count--)
|
|
||||||
+" files remaining - "
|
|
||||||
+ tu.getPath().toString());
|
|
||||||
new PDOMFastRemoveTU(pdom, tu).schedule();
|
|
||||||
monitor.worked(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
String showTimings = Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/pdomtimings"); //$NON-NLS-1$
|
|
||||||
if (showTimings!= null)
|
|
||||||
if (showTimings.equalsIgnoreCase("true")) //$NON-NLS-1$
|
|
||||||
System.out.println("Updator Time: " + (System.currentTimeMillis() - start)); //$NON-NLS-1$
|
|
||||||
|
|
||||||
return Status.OK_STATUS;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processDelta(ICElementDelta delta) {
|
|
||||||
// First make sure this project is PDOMable
|
|
||||||
ICElement element = delta.getElement();
|
|
||||||
if (element instanceof ICProject && CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject()) == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// process the children first
|
|
||||||
ICElementDelta[] children = delta.getAffectedChildren();
|
|
||||||
for (int i = 0; i < children.length; ++i)
|
|
||||||
processDelta(children[i]);
|
|
||||||
|
|
||||||
// what have we got
|
|
||||||
if (element.getElementType() == ICElement.C_PROJECT) {
|
|
||||||
switch (delta.getKind()) {
|
|
||||||
case ICElementDelta.ADDED:
|
|
||||||
processNewProject((ICProject)element);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (element.getElementType() == ICElement.C_UNIT) {
|
|
||||||
ITranslationUnit tu = (ITranslationUnit)element;
|
|
||||||
if (tu.isWorkingCopy())
|
|
||||||
// Don't care about working copies either
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (delta.getKind()) {
|
|
||||||
case ICElementDelta.ADDED:
|
|
||||||
if (addedTUs == null)
|
|
||||||
addedTUs = new LinkedList();
|
|
||||||
addedTUs.add(element);
|
|
||||||
break;
|
|
||||||
case ICElementDelta.CHANGED:
|
|
||||||
if (changedTUs == null)
|
|
||||||
changedTUs = new LinkedList();
|
|
||||||
changedTUs.add(element);
|
|
||||||
break;
|
|
||||||
case ICElementDelta.REMOVED:
|
|
||||||
if (removedTUs == null)
|
|
||||||
removedTUs = new LinkedList();
|
|
||||||
removedTUs.add(element);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processNewProject(final ICProject project) {
|
|
||||||
try {
|
|
||||||
project.getProject().accept(new IResourceProxyVisitor() {
|
|
||||||
public boolean visit(IResourceProxy proxy) throws CoreException {
|
|
||||||
if (proxy.getType() == IResource.FILE) {
|
|
||||||
String fileName = proxy.getName();
|
|
||||||
IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName);
|
|
||||||
if (contentType == null)
|
|
||||||
return true;
|
|
||||||
String contentTypeId = contentType.getId();
|
|
||||||
|
|
||||||
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId)
|
|
||||||
|| CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) {
|
|
||||||
if (addedTUs == null)
|
|
||||||
addedTUs = new LinkedList();
|
|
||||||
addedTUs.add(CoreModel.getDefault().create((IFile)proxy.requestResource()));
|
|
||||||
}
|
|
||||||
// TODO handle header files
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 0);
|
|
||||||
} catch (CoreException e) {
|
|
||||||
CCorePlugin.log(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void elementChanged(ElementChangedEvent event) {
|
|
||||||
new ChangeHandler(event).schedule();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void reindex() {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,79 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2006 QNX Software Systems and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Eclipse Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/epl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* QNX - Initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
package org.eclipse.cdt.internal.core.pdom.indexer.fast;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceProxy;
|
||||||
|
import org.eclipse.core.resources.IResourceProxyVisitor;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.Platform;
|
||||||
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.core.runtime.content.IContentType;
|
||||||
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Doug Schaefer
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PDOMFastReindex extends Job {
|
||||||
|
|
||||||
|
private final PDOM pdom;
|
||||||
|
private final IProgressMonitor group;
|
||||||
|
|
||||||
|
public PDOMFastReindex(PDOM pdom, IProgressMonitor group) {
|
||||||
|
super("Reindex");
|
||||||
|
this.pdom = pdom;
|
||||||
|
this.group = group;
|
||||||
|
setProgressGroup(group, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IStatus run(IProgressMonitor monitor) {
|
||||||
|
try {
|
||||||
|
// First clear out the DB
|
||||||
|
pdom.delete();
|
||||||
|
|
||||||
|
// Now repopulate it
|
||||||
|
pdom.getProject().getProject().accept(new IResourceProxyVisitor() {
|
||||||
|
public boolean visit(IResourceProxy proxy) throws CoreException {
|
||||||
|
if (proxy.getType() == IResource.FILE) {
|
||||||
|
String fileName = proxy.getName();
|
||||||
|
IContentType contentType = Platform.getContentTypeManager().findContentTypeFor(fileName);
|
||||||
|
if (contentType == null)
|
||||||
|
return true;
|
||||||
|
String contentTypeId = contentType.getId();
|
||||||
|
|
||||||
|
if (CCorePlugin.CONTENT_TYPE_CXXSOURCE.equals(contentTypeId)
|
||||||
|
|| CCorePlugin.CONTENT_TYPE_CSOURCE.equals(contentTypeId)) {
|
||||||
|
new PDOMFastAddTU(pdom, (ITranslationUnit)CoreModel.getDefault().create((IFile)proxy.requestResource()), group).schedule();
|
||||||
|
}
|
||||||
|
// TODO handle header files
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 0);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CCorePlugin.log(e);
|
||||||
|
}
|
||||||
|
monitor.done();
|
||||||
|
return Status.OK_STATUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -13,21 +13,30 @@ package org.eclipse.cdt.internal.core.pdom.indexer.nulli;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.IPDOM;
|
import org.eclipse.cdt.core.dom.IPDOM;
|
||||||
import org.eclipse.cdt.core.dom.IPDOMIndexer;
|
import org.eclipse.cdt.core.dom.IPDOMIndexer;
|
||||||
import org.eclipse.cdt.core.model.ElementChangedEvent;
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*
|
*
|
||||||
|
* The Null Indexer which does nothing.
|
||||||
*/
|
*/
|
||||||
public class PDOMNullIndexer implements IPDOMIndexer {
|
public class PDOMNullIndexer implements IPDOMIndexer {
|
||||||
|
|
||||||
|
private IPDOM pdom;
|
||||||
|
|
||||||
public void setPDOM(IPDOM pdom) {
|
public void setPDOM(IPDOM pdom) {
|
||||||
|
this.pdom = pdom;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reindex() {
|
public void handleDelta(ICElementDelta delta) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void elementChanged(ElementChangedEvent event) {
|
public void reindex() throws CoreException {
|
||||||
|
// Just clear out the old index
|
||||||
|
pdom.delete();
|
||||||
|
((PDOM)pdom).fireChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
package org.eclipse.cdt.internal.ui.actions;
|
package org.eclipse.cdt.internal.ui.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.dom.IPDOM;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOMUpdator;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
|
@ -34,11 +34,10 @@ public class PDOMUpdateProjectAction implements IObjectActionDelegate {
|
||||||
if (!(objs[i] instanceof ICProject))
|
if (!(objs[i] instanceof ICProject))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ICProject cproject = (ICProject)objs[i];
|
ICProject project = (ICProject)objs[i];
|
||||||
|
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project);
|
||||||
try {
|
try {
|
||||||
CCorePlugin.getPDOMManager().deletePDOM(cproject.getProject());
|
pdom.getIndexer().reindex();
|
||||||
PDOMUpdator job = new PDOMUpdator(cproject, null);
|
|
||||||
job.schedule();
|
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CUIPlugin.getDefault().log(e);
|
CUIPlugin.getDefault().log(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -263,7 +263,7 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
public Object[] getChildren(Object parentElement) {
|
public Object[] getChildren(Object parentElement) {
|
||||||
if (parentElement instanceof ICProject) {
|
if (parentElement instanceof ICProject) {
|
||||||
try {
|
try {
|
||||||
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(((ICProject)parentElement).getProject());
|
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM((ICProject)parentElement);
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage())
|
for (PDOMLinkage linkage = pdom.getFirstLinkage(); linkage != null; linkage = linkage.getNextLinkage())
|
||||||
++n;
|
++n;
|
||||||
|
@ -325,7 +325,7 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
|
|
||||||
public boolean hasChildren(Object element) {
|
public boolean hasChildren(Object element) {
|
||||||
if (element instanceof ICProject) {
|
if (element instanceof ICProject) {
|
||||||
IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM(((ICProject)element).getProject());
|
IPDOM ipdom = CCorePlugin.getPDOMManager().getPDOM((ICProject)element);
|
||||||
if (ipdom == null || !(ipdom instanceof PDOM))
|
if (ipdom == null || !(ipdom instanceof PDOM))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -429,10 +429,10 @@ public class IndexView extends ViewPart implements PDOM.IListener {
|
||||||
ICModel model = CoreModel.getDefault().getCModel();
|
ICModel model = CoreModel.getDefault().getCModel();
|
||||||
viewer.setInput(model);
|
viewer.setInput(model);
|
||||||
try {
|
try {
|
||||||
ICProject[] cprojects = model.getCProjects();
|
ICProject[] projects = model.getCProjects();
|
||||||
int n = 0;
|
int n = 0;
|
||||||
for (int i = 0; i < cprojects.length; ++i) {
|
for (int i = 0; i < projects.length; ++i) {
|
||||||
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(cprojects[i].getProject());
|
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(projects[i]);
|
||||||
if (pdom != null) {
|
if (pdom != null) {
|
||||||
++n;
|
++n;
|
||||||
pdom.addListener(this);
|
pdom.addListener(this);
|
||||||
|
|
|
@ -12,15 +12,14 @@
|
||||||
package org.eclipse.cdt.internal.ui.indexview;
|
package org.eclipse.cdt.internal.ui.indexview;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.dom.IPDOM;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOMUpdator;
|
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.jface.viewers.TreeViewer;
|
import org.eclipse.jface.viewers.TreeViewer;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Doug Schaefer
|
* @author Doug Schaefer
|
||||||
*
|
*
|
||||||
|
@ -41,11 +40,10 @@ public class RebuildIndexAction extends IndexAction {
|
||||||
if (!(objs[i] instanceof ICProject))
|
if (!(objs[i] instanceof ICProject))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ICProject cproject = (ICProject)objs[i];
|
ICProject project = (ICProject)objs[i];
|
||||||
|
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project);
|
||||||
try {
|
try {
|
||||||
CCorePlugin.getPDOMManager().deletePDOM(cproject.getProject());
|
pdom.getIndexer().reindex();
|
||||||
PDOMUpdator job = new PDOMUpdator(cproject, null);
|
|
||||||
job.schedule();
|
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
CUIPlugin.getDefault().log(e);
|
CUIPlugin.getDefault().log(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -93,7 +94,8 @@ public class PDOMSearchPatternQuery extends PDOMSearchQuery {
|
||||||
// Not a CDT project
|
// Not a CDT project
|
||||||
return;
|
return;
|
||||||
|
|
||||||
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(project);
|
ICProject cproject = CoreModel.getDefault().create(project);
|
||||||
|
PDOM pdom = (PDOM)CCorePlugin.getPDOMManager().getPDOM(cproject);
|
||||||
PDOMBinding[] bindings = pdom.findBindings(pattern);
|
PDOMBinding[] bindings = pdom.findBindings(pattern);
|
||||||
|
|
||||||
for (int i = 0; i < bindings.length; ++i) {
|
for (int i = 0; i < bindings.length; ++i) {
|
||||||
|
|
|
@ -127,12 +127,12 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
IWorkingCopy workingCopy = (IWorkingCopy)fEditor.getInputCElement();
|
IWorkingCopy workingCopy = (IWorkingCopy)fEditor.getInputCElement();
|
||||||
IFile resourceFile = (IFile)workingCopy.getResource();
|
IFile resourceFile = (IFile)workingCopy.getResource();
|
||||||
project = new CProject(null, resourceFile.getProject());
|
project = new CProject(null, resourceFile.getProject());
|
||||||
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(resourceFile.getProject());
|
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject());
|
||||||
try {
|
try {
|
||||||
if (pdom != null) {
|
if (pdom != null) {
|
||||||
try {
|
try {
|
||||||
ILanguage language = workingCopy.getLanguage();
|
ILanguage language = workingCopy.getLanguage();
|
||||||
tu = language.getTranslationUnit(workingCopy,
|
tu = language.getASTTranslationUnit(workingCopy,
|
||||||
ILanguage.AST_USE_INDEX |
|
ILanguage.AST_USE_INDEX |
|
||||||
ILanguage.AST_SKIP_INDEXED_HEADERS);
|
ILanguage.AST_SKIP_INDEXED_HEADERS);
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
|
@ -82,8 +82,7 @@ public class CCompletionProcessor2 implements IContentAssistProcessor {
|
||||||
|
|
||||||
IFile file = (IFile)workingCopy.getResource();
|
IFile file = (IFile)workingCopy.getResource();
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
IProject project = file.getProject();
|
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject());
|
||||||
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project);
|
|
||||||
ICodeReaderFactory readerFactory;
|
ICodeReaderFactory readerFactory;
|
||||||
if (pdom != null)
|
if (pdom != null)
|
||||||
readerFactory = pdom.getCodeReaderFactory(workingCopy);
|
readerFactory = pdom.getCodeReaderFactory(workingCopy);
|
||||||
|
@ -93,7 +92,7 @@ public class CCompletionProcessor2 implements IContentAssistProcessor {
|
||||||
} else if (editor.getEditorInput() instanceof ExternalEditorInput) {
|
} else if (editor.getEditorInput() instanceof ExternalEditorInput) {
|
||||||
IStorage storage = ((ExternalEditorInput)(editor.getEditorInput())).getStorage();
|
IStorage storage = ((ExternalEditorInput)(editor.getEditorInput())).getStorage();
|
||||||
IProject project = workingCopy.getCProject().getProject();
|
IProject project = workingCopy.getCProject().getProject();
|
||||||
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(project);
|
IPDOM pdom = CCorePlugin.getPDOMManager().getPDOM(workingCopy.getCProject());
|
||||||
ICodeReaderFactory readerFactory;
|
ICodeReaderFactory readerFactory;
|
||||||
if (pdom != null)
|
if (pdom != null)
|
||||||
readerFactory = pdom.getCodeReaderFactory(workingCopy);
|
readerFactory = pdom.getCodeReaderFactory(workingCopy);
|
||||||
|
|
|
@ -13,7 +13,7 @@ package org.eclipse.cdt.ui.dialogs;
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICDescriptor;
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
import org.eclipse.cdt.core.ICExtensionReference;
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexer;
|
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||||
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
import org.eclipse.cdt.internal.ui.util.SWTUtil;
|
||||||
|
@ -64,11 +64,11 @@ public class CTagsIndexerBlock extends AbstractIndexerPage {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.ui.index.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject)
|
* @see org.eclipse.cdt.ui.index.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject)
|
||||||
*/
|
*/
|
||||||
public void initialize(IProject project) {
|
public void initialize(ICProject project) {
|
||||||
|
|
||||||
this.currentProject = project;
|
this.currentProject = project;
|
||||||
try {
|
try {
|
||||||
loadPersistedValues(project);
|
loadPersistedValues(project.getProject());
|
||||||
} catch (CoreException e) {}
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,7 @@ public class CTagsIndexerBlock extends AbstractIndexerPage {
|
||||||
proj = container.getProject();
|
proj = container.getProject();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
proj = currentProject;
|
proj = currentProject.getProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proj != null) {
|
if (proj != null) {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.eclipse.cdt.core.CCorePlugin;
|
||||||
import org.eclipse.cdt.core.ICDescriptor;
|
import org.eclipse.cdt.core.ICDescriptor;
|
||||||
import org.eclipse.cdt.core.ICExtensionReference;
|
import org.eclipse.cdt.core.ICExtensionReference;
|
||||||
import org.eclipse.cdt.core.index.ICDTIndexer;
|
import org.eclipse.cdt.core.index.ICDTIndexer;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
import org.eclipse.cdt.internal.core.index.domsourceindexer.DOMSourceIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
@ -64,7 +65,7 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage {
|
||||||
proj = container.getProject();
|
proj = container.getProject();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
proj = currentProject;
|
proj = currentProject.getProject();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (proj != null) {
|
if (proj != null) {
|
||||||
|
@ -92,12 +93,12 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage {
|
||||||
if (currentProject == null)
|
if (currentProject == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(currentProject);
|
ICDTIndexer indexer = CCorePlugin.getDefault().getCoreModel().getIndexManager().getIndexerForProject(currentProject.getProject());
|
||||||
|
|
||||||
int indexMarkersInt = Integer.parseInt(indexMarkers);
|
int indexMarkersInt = Integer.parseInt(indexMarkers);
|
||||||
if (indexMarkersInt != oldIndexerProblemsValue && indexMarkersInt == 0)
|
if (indexMarkersInt != oldIndexerProblemsValue && indexMarkersInt == 0)
|
||||||
if (indexer instanceof DOMSourceIndexer)
|
if (indexer instanceof DOMSourceIndexer)
|
||||||
((DOMSourceIndexer) indexer).removeIndexerProblems(currentProject);
|
((DOMSourceIndexer) indexer).removeIndexerProblems(currentProject.getProject());
|
||||||
|
|
||||||
}
|
}
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -142,10 +143,10 @@ public class DOMSourceIndexerBlock extends AbstractIndexerPage {
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.ui.index2.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject)
|
* @see org.eclipse.cdt.ui.index2.AbstractIndexerPage#initialize(org.eclipse.core.resources.IProject)
|
||||||
*/
|
*/
|
||||||
public void initialize(IProject project) {
|
public void initialize(ICProject project) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
loadPersistedValues(project);
|
loadPersistedValues(project.getProject());
|
||||||
this.currentProject = project;
|
this.currentProject = project;
|
||||||
} catch (CoreException e) {}
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.core.index.nullindexer.NullIndexer;
|
import org.eclipse.cdt.internal.core.index.nullindexer.NullIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.CUIMessages;
|
import org.eclipse.cdt.internal.ui.CUIMessages;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
@ -340,7 +342,8 @@ public class IndexerBlock extends AbstractCOptionPage {
|
||||||
: ((AbstractIndexerPage) currentPage).getCurrentProject();
|
: ((AbstractIndexerPage) currentPage).getCurrentProject();
|
||||||
|
|
||||||
if ( project != null) {
|
if ( project != null) {
|
||||||
CCorePlugin.getPDOMManager().setIndexerId(project, indexerID);
|
ICProject cproject = CoreModel.getDefault().create(project);
|
||||||
|
CCorePlugin.getPDOMManager().setIndexerId(cproject, indexerID);
|
||||||
if (currentPage != null && currentPage.getControl() != null) {
|
if (currentPage != null && currentPage.getControl() != null) {
|
||||||
currentPage.performApply(new SubProgressMonitor(monitor, 1));
|
currentPage.performApply(new SubProgressMonitor(monitor, 1));
|
||||||
}
|
}
|
||||||
|
@ -377,14 +380,14 @@ public class IndexerBlock extends AbstractCOptionPage {
|
||||||
* This is needed since we need to pass in the project if we are trying to save changes made to the
|
* This is needed since we need to pass in the project if we are trying to save changes made to the
|
||||||
* property page.
|
* property page.
|
||||||
*/
|
*/
|
||||||
public void persistIndexerSettings(IProject project, IProgressMonitor monitor) throws CoreException{
|
public void persistIndexerSettings(ICProject project, IProgressMonitor monitor) throws CoreException{
|
||||||
if (currentPage instanceof AbstractIndexerPage)
|
if (currentPage instanceof AbstractIndexerPage)
|
||||||
((AbstractIndexerPage)currentPage).setCurrentProject(project);
|
((AbstractIndexerPage)currentPage).setCurrentProject(project);
|
||||||
|
|
||||||
this.performApply(monitor);
|
this.performApply(monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetIndexerPageSettings(IProject project){
|
public void resetIndexerPageSettings(ICProject project){
|
||||||
if (currentPage instanceof AbstractIndexerPage)
|
if (currentPage instanceof AbstractIndexerPage)
|
||||||
((AbstractIndexerPage)currentPage).setCurrentProject(project);
|
((AbstractIndexerPage)currentPage).setCurrentProject(project);
|
||||||
|
|
||||||
|
@ -411,7 +414,7 @@ public class IndexerBlock extends AbstractCOptionPage {
|
||||||
* @param oldIndexerID
|
* @param oldIndexerID
|
||||||
* @param project
|
* @param project
|
||||||
*/
|
*/
|
||||||
public void setIndexerID(String indexerID, IProject project) {
|
public void setIndexerID(String indexerID, ICProject project) {
|
||||||
//Get the corresponding text for the given indexer id
|
//Get the corresponding text for the given indexer id
|
||||||
selectedIndexerId = getIndexerPageName(indexerID);
|
selectedIndexerId = getIndexerPageName(indexerID);
|
||||||
//Store the currently selected indexer id
|
//Store the currently selected indexer id
|
||||||
|
|
|
@ -12,7 +12,10 @@
|
||||||
package org.eclipse.cdt.ui.dialogs;
|
package org.eclipse.cdt.ui.dialogs;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
import org.eclipse.cdt.internal.ui.ICHelpContextIds;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.NullProgressMonitor;
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
|
@ -45,18 +48,22 @@ public class IndexerOptionPropertyPage extends PropertyPage {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void performDefaults() {
|
protected void performDefaults() {
|
||||||
IProject tempProject = getProject();
|
ICProject tempProject = CoreModel.getDefault().create(getProject());
|
||||||
optionPage.resetIndexerPageSettings(tempProject);
|
optionPage.resetIndexerPageSettings(tempProject);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initialize(){
|
private void initialize(){
|
||||||
IProject project = getProject();
|
ICProject project = CoreModel.getDefault().create(getProject());
|
||||||
oldIndexerID = CCorePlugin.getPDOMManager().getIndexerId(project);
|
try {
|
||||||
optionPage.setIndexerID(oldIndexerID, project);
|
oldIndexerID = CCorePlugin.getPDOMManager().getIndexerId(project);
|
||||||
|
optionPage.setIndexerID(oldIndexerID, project);
|
||||||
|
} catch (CoreException e) {
|
||||||
|
CUIPlugin.getDefault().log(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean performOk() {
|
public boolean performOk() {
|
||||||
IProject tempProject = getProject();
|
ICProject tempProject = CoreModel.getDefault().create(getProject());
|
||||||
try {
|
try {
|
||||||
optionPage.persistIndexerSettings(tempProject, new NullProgressMonitor());
|
optionPage.persistIndexerSettings(tempProject, new NullProgressMonitor());
|
||||||
} catch (CoreException e) {}
|
} catch (CoreException e) {}
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.ui.dialogs;
|
package org.eclipse.cdt.ui.dialogs;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.ui.index.AbstractIndexerPage;
|
import org.eclipse.cdt.ui.index.AbstractIndexerPage;
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
|
@ -22,8 +22,7 @@ import org.eclipse.swt.widgets.Composite;
|
||||||
*/
|
*/
|
||||||
public class NullIndexerBlock extends AbstractIndexerPage {
|
public class NullIndexerBlock extends AbstractIndexerPage {
|
||||||
|
|
||||||
|
public void initialize(ICProject currentProject) {}
|
||||||
public void initialize(IProject currentProject) {}
|
|
||||||
|
|
||||||
public void performApply(IProgressMonitor monitor) throws CoreException {}
|
public void performApply(IProgressMonitor monitor) throws CoreException {}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.ui.index;
|
package org.eclipse.cdt.ui.index;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
|
import org.eclipse.cdt.ui.dialogs.AbstractCOptionPage;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
@ -20,7 +21,7 @@ import org.eclipse.jface.preference.IPreferenceStore;
|
||||||
*/
|
*/
|
||||||
public abstract class AbstractIndexerPage extends AbstractCOptionPage {
|
public abstract class AbstractIndexerPage extends AbstractCOptionPage {
|
||||||
|
|
||||||
protected IProject currentProject;
|
protected ICProject currentProject;
|
||||||
protected IPreferenceStore prefStore=CUIPlugin.getDefault().getPreferenceStore();
|
protected IPreferenceStore prefStore=CUIPlugin.getDefault().getPreferenceStore();
|
||||||
|
|
||||||
protected AbstractIndexerPage() {
|
protected AbstractIndexerPage() {
|
||||||
|
@ -31,7 +32,7 @@ public abstract class AbstractIndexerPage extends AbstractCOptionPage {
|
||||||
* Called by BaseIndexerBlock to give the indexer page a chance to load its state from store
|
* Called by BaseIndexerBlock to give the indexer page a chance to load its state from store
|
||||||
* @param currentProject - the project that this page is being created for
|
* @param currentProject - the project that this page is being created for
|
||||||
*/
|
*/
|
||||||
abstract public void initialize(IProject currentProject);
|
abstract public void initialize(ICProject currentProject);
|
||||||
/**
|
/**
|
||||||
* Called by the indexer block to give the indexer page an opportunity to
|
* Called by the indexer block to give the indexer page an opportunity to
|
||||||
* load any preferecnes previously set
|
* load any preferecnes previously set
|
||||||
|
@ -44,9 +45,10 @@ public abstract class AbstractIndexerPage extends AbstractCOptionPage {
|
||||||
abstract public void removePreferences();
|
abstract public void removePreferences();
|
||||||
|
|
||||||
public IProject getCurrentProject() {
|
public IProject getCurrentProject() {
|
||||||
return currentProject;
|
return currentProject.getProject();
|
||||||
}
|
}
|
||||||
public void setCurrentProject(IProject currentProject) {
|
|
||||||
|
public void setCurrentProject(ICProject currentProject) {
|
||||||
this.currentProject = currentProject;
|
this.currentProject = currentProject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue