diff --git a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCache.java b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCache.java index 9bbbd1df58a..5f0851efd33 100644 --- a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCache.java +++ b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCache.java @@ -28,9 +28,12 @@ import org.eclipse.cdt.core.browser.IWorkingCopyProvider; import org.eclipse.cdt.core.browser.QualifiedTypeName; import org.eclipse.cdt.core.browser.TypeInfo; import org.eclipse.cdt.core.browser.TypeSearchScope; +import org.eclipse.cdt.core.index.ICDTIndexer; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.parser.ast.ASTAccessVisibility; import org.eclipse.cdt.internal.core.browser.util.ArrayUtil; +import org.eclipse.cdt.internal.core.model.CModelManager; +import org.eclipse.cdt.internal.core.search.indexing.IndexManager; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; @@ -681,25 +684,35 @@ public class TypeCache implements ITypeCache { if (deltasRemaining() == 0) return; // nothing to do - TypeCacherJob deltaJob; + TypeCacherJob deltaJob = null; + IndexManager indexManager = CModelManager.getDefault().getIndexManager(); + ICDTIndexer indexer = indexManager.getIndexerForProject( fProject ); + boolean haveIndexer = (indexer != null && indexer.isIndexEnabled( fProject )); synchronized(fDeltas) { - // grab all the remaining deltas - TypeCacheDelta[] jobDeltas = (TypeCacheDelta[]) fDeltas.toArray(new TypeCacheDelta[fDeltas.size()]); - - // create a new job - deltaJob = new TypeCacherJob(this, jobDeltas, enableIndexing); - // assign deltas to job - if (jobDeltas != null) { - for (int i = 0; i < jobDeltas.length; ++i) { - jobDeltas[i].assignToJob(deltaJob); + if( haveIndexer ){ + // grab all the remaining deltas + TypeCacheDelta[] jobDeltas = (TypeCacheDelta[]) fDeltas.toArray(new TypeCacheDelta[fDeltas.size()]); + + // create a new job + deltaJob = new TypeCacherJob(this, jobDeltas, enableIndexing); + // assign deltas to job + if (jobDeltas != null) { + for (int i = 0; i < jobDeltas.length; ++i) { + jobDeltas[i].assignToJob(deltaJob); + } } + } else { + //we don't have an indexer, don't create a job to do these deltas, throw them away + fDeltas.clear(); } } - // schedule the new job - deltaJob.addJobChangeListener(fJobChangeListener); - deltaJob.setPriority(priority); - deltaJob.schedule(delay); + if( deltaJob != null ){ + // schedule the new job + deltaJob.addJobChangeListener(fJobChangeListener); + deltaJob.setPriority(priority); + deltaJob.schedule(delay); + } } public void reconcileAndWait(boolean enableIndexing, int priority, IProgressMonitor monitor) { diff --git a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacherJob.java b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacherJob.java index 0b0ebe52187..416100d23d3 100644 --- a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacherJob.java +++ b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeCacherJob.java @@ -12,7 +12,6 @@ package org.eclipse.cdt.internal.core.browser.cache; import org.eclipse.cdt.core.browser.ITypeSearchScope; import org.eclipse.cdt.core.browser.TypeSearchScope; -import org.eclipse.cdt.core.index.ICDTIndexer; import org.eclipse.cdt.core.model.ICElement; import org.eclipse.cdt.core.model.ICElementDelta; import org.eclipse.cdt.core.search.ICSearchConstants; @@ -120,7 +119,6 @@ public class TypeCacherJob extends BasicJob { private void flush(ITypeSearchScope scope, IProgressMonitor monitor) throws InterruptedException { // flush the cache - boolean success = true; IProject project = fTypeCache.getProject(); monitor.beginTask("", 100); //$NON-NLS-1$ @@ -128,11 +126,11 @@ public class TypeCacherJob extends BasicJob { fTypeCache.flush(scope); if (!scope.encloses(project)) { if (project.exists() && project.isOpen()) { - success = doIndexerJob(new IndexerDependenciesJob(fIndexManager, fTypeCache, scope), monitor); + doIndexerJob(new IndexerDependenciesJob(fIndexManager, fTypeCache, scope), monitor); } } - if (!success || monitor.isCanceled()) { + if ( monitor.isCanceled() ) { throw new InterruptedException(); } @@ -140,23 +138,14 @@ public class TypeCacherJob extends BasicJob { } private void update(ITypeSearchScope scope, IProgressMonitor monitor) throws InterruptedException { - boolean success = true; IProject project = fTypeCache.getProject(); - //A query on the null indexer will look like a canceled or failed job, which will cause us - //to try again later, don't even try in that case. - ICDTIndexer indexer = fIndexManager.getIndexerForProject( project ); - if( indexer == null || !indexer.isIndexEnabled( project ) ){ - monitor.done(); - return; - } - monitor.beginTask("", 100); //$NON-NLS-1$ if (project.exists() && project.isOpen()) { - success = doIndexerJob(new IndexerTypesJob2(fIndexManager, fTypeCache, scope), monitor); + doIndexerJob(new IndexerTypesJob2(fIndexManager, fTypeCache, scope), monitor); } - if (!success || monitor.isCanceled()) { + if (monitor.isCanceled()) { throw new InterruptedException(); }