mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
Bug 302767: Tracing option for indexer setup.
This commit is contained in:
parent
4734a658f8
commit
3ec0429c1a
3 changed files with 53 additions and 10 deletions
|
@ -27,6 +27,9 @@ org.eclipse.cdt.core/debug/typeresolver=false
|
||||||
# Reports issues with locking the index
|
# Reports issues with locking the index
|
||||||
org.eclipse.cdt.core/debug/index/locks=false
|
org.eclipse.cdt.core/debug/index/locks=false
|
||||||
|
|
||||||
|
# Reports events related to setting up the indexer for a project
|
||||||
|
org.eclipse.cdt.core/debug/indexer/setup=false
|
||||||
|
|
||||||
# Reports sequence of files indexed
|
# Reports sequence of files indexed
|
||||||
org.eclipse.cdt.core/debug/indexer/activity=false
|
org.eclipse.cdt.core/debug/indexer/activity=false
|
||||||
|
|
||||||
|
|
|
@ -114,6 +114,8 @@ import com.ibm.icu.text.MessageFormat;
|
||||||
* stabilized.
|
* stabilized.
|
||||||
*/
|
*/
|
||||||
public class PDOMManager implements IWritableIndexManager, IListener {
|
public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
|
private static final String TRACE_INDEXER_SETUP = CCorePlugin.PLUGIN_ID + "/debug/indexer/setup"; //$NON-NLS-1$
|
||||||
|
|
||||||
private final class PCL implements IPreferenceChangeListener {
|
private final class PCL implements IPreferenceChangeListener {
|
||||||
private ICProject fProject;
|
private ICProject fProject;
|
||||||
public PCL(ICProject prj) {
|
public PCL(ICProject prj) {
|
||||||
|
@ -178,6 +180,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
private Set<ICProject> fPostponedProjects= new HashSet<ICProject>();
|
private Set<ICProject> fPostponedProjects= new HashSet<ICProject>();
|
||||||
private int fLastNotifiedState= IndexerStateEvent.STATE_IDLE;
|
private int fLastNotifiedState= IndexerStateEvent.STATE_IDLE;
|
||||||
private boolean fInShutDown;
|
private boolean fInShutDown;
|
||||||
|
|
||||||
|
boolean fTraceIndexerSetup;
|
||||||
|
|
||||||
public PDOMManager() {
|
public PDOMManager() {
|
||||||
PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$
|
PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
@ -224,6 +228,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
updatePathCanonicalizationStrategy();
|
updatePathCanonicalizationStrategy();
|
||||||
fIndexProviderManager.startup();
|
fIndexProviderManager.startup();
|
||||||
|
|
||||||
|
fTraceIndexerSetup= String.valueOf(true).equals(Platform.getDebugOption(TRACE_INDEXER_SETUP));
|
||||||
final CoreModel model = CoreModel.getDefault();
|
final CoreModel model = CoreModel.getDefault();
|
||||||
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
|
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
|
||||||
model.addElementChangedListener(fCModelListener);
|
model.addElementChangedListener(fCModelListener);
|
||||||
|
@ -528,12 +533,20 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException {
|
void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException {
|
||||||
|
final IProject prj= project.getProject();
|
||||||
|
final String name = prj.getName();
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Creation for project " + name); //$NON-NLS-1$
|
||||||
|
|
||||||
|
|
||||||
assert !Thread.holdsLock(fProjectToPDOM);
|
assert !Thread.holdsLock(fProjectToPDOM);
|
||||||
IProject prj= project.getProject();
|
|
||||||
try {
|
try {
|
||||||
synchronized (fUpdatePolicies) {
|
synchronized (fUpdatePolicies) {
|
||||||
if (fClosingProjects.contains(prj.getName()))
|
if (fClosingProjects.contains(name)) {
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Aborting setup (1) for closing project " + name + " [1]"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
WritablePDOM pdom= getOrCreatePDOM(project);
|
WritablePDOM pdom= getOrCreatePDOM(project);
|
||||||
Properties props= IndexerPreferences.getProperties(prj);
|
Properties props= IndexerPreferences.getProperties(prj);
|
||||||
|
@ -568,6 +581,9 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
pdom.releaseReadLock();
|
pdom.releaseReadLock();
|
||||||
}
|
}
|
||||||
if (resume) {
|
if (resume) {
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Resuming for project " + name); //$NON-NLS-1$
|
||||||
|
|
||||||
enqueue(new PDOMUpdateTask(indexer,
|
enqueue(new PDOMUpdateTask(indexer,
|
||||||
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH));
|
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH));
|
||||||
}
|
}
|
||||||
|
@ -581,8 +597,11 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
operation.run(pm);
|
operation.run(pm);
|
||||||
|
|
||||||
synchronized (fUpdatePolicies) {
|
synchronized (fUpdatePolicies) {
|
||||||
if (fClosingProjects.contains(prj.getName()))
|
if (fClosingProjects.contains(name)) {
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Aborting setup for closing project " + name + " [2]"); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Properties props= IndexerPreferences.getProperties(prj);
|
Properties props= IndexerPreferences.getProperties(prj);
|
||||||
IPDOMIndexer indexer = newIndexer(getIndexerId(project), props);
|
IPDOMIndexer indexer = newIndexer(getIndexerId(project), props);
|
||||||
|
@ -593,10 +612,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
|
|
||||||
IPDOMIndexerTask task= null;
|
IPDOMIndexerTask task= null;
|
||||||
if (operation.wasSuccessful()) {
|
if (operation.wasSuccessful()) {
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$
|
||||||
task= new PDOMUpdateTask(indexer,
|
task= new PDOMUpdateTask(indexer,
|
||||||
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH);
|
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH);
|
||||||
}
|
} else {
|
||||||
else {
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$
|
||||||
task= new PDOMRebuildTask(indexer);
|
task= new PDOMRebuildTask(indexer);
|
||||||
}
|
}
|
||||||
enqueue(task);
|
enqueue(task);
|
||||||
|
@ -707,8 +729,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
void addProject(final ICProject cproject) {
|
void addProject(final ICProject cproject) {
|
||||||
|
final String name = cproject.getProject().getName();
|
||||||
|
if (fTraceIndexerSetup) {
|
||||||
|
System.out.println("Indexer: Adding new project " + name); //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
|
||||||
synchronized (fUpdatePolicies) {
|
synchronized (fUpdatePolicies) {
|
||||||
fClosingProjects.remove(cproject.getProject().getName());
|
fClosingProjects.remove(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
setupProject(cproject);
|
setupProject(cproject);
|
||||||
|
@ -796,12 +823,17 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
|
|
||||||
private void preRemoveProject(ICProject cproject, final boolean delete) {
|
private void preRemoveProject(ICProject cproject, final boolean delete) {
|
||||||
assert !Thread.holdsLock(fProjectToPDOM);
|
assert !Thread.holdsLock(fProjectToPDOM);
|
||||||
|
|
||||||
IProject rproject= cproject.getProject();
|
final IProject rproject= cproject.getProject();
|
||||||
|
final String name = rproject.getName();
|
||||||
|
|
||||||
|
if (fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
|
||||||
IPDOMIndexer indexer;
|
IPDOMIndexer indexer;
|
||||||
synchronized (fUpdatePolicies) {
|
synchronized (fUpdatePolicies) {
|
||||||
// Prevent recreating the indexer
|
// Prevent recreating the indexer
|
||||||
fClosingProjects.add(rproject.getName());
|
fClosingProjects.add(name);
|
||||||
indexer= getIndexer(cproject);
|
indexer= getIndexer(cproject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,13 @@ public class PDOMSetupJob extends Job {
|
||||||
|
|
||||||
final IProject project= cproject.getProject();
|
final IProject project= cproject.getProject();
|
||||||
monitor.setTaskName(project.getName());
|
monitor.setTaskName(project.getName());
|
||||||
if (project.isOpen() && !fManager.postponeSetup(cproject)) {
|
if (!project.isOpen()) {
|
||||||
|
if (fManager.fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Project is not open: " + project.getName()); //$NON-NLS-1$
|
||||||
|
} else if (fManager.postponeSetup(cproject)) {
|
||||||
|
if (fManager.fTraceIndexerSetup)
|
||||||
|
System.out.println("Indexer: Setup is postponed: " + project.getName()); //$NON-NLS-1$
|
||||||
|
} else {
|
||||||
syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1));
|
syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1));
|
||||||
if (fManager.getIndexer(cproject) == null) {
|
if (fManager.getIndexer(cproject) == null) {
|
||||||
try {
|
try {
|
||||||
|
@ -54,6 +60,8 @@ public class PDOMSetupJob extends Job {
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
return Status.CANCEL_STATUS;
|
return Status.CANCEL_STATUS;
|
||||||
}
|
}
|
||||||
|
} else if (fManager.fTraceIndexerSetup) {
|
||||||
|
System.out.println("Indexer: No action, indexer already exists: " + project.getName()); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue