ModificationTracker fro dumb mode

This commit is contained in:
Dmitry Avdeev
2015-02-24 15:47:16 +03:00
parent 259930857a
commit fcc7bb1bc6
3 changed files with 21 additions and 8 deletions
@@ -21,6 +21,7 @@ import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.openapi.util.NotNullLazyKey;
import com.intellij.openapi.util.Ref;
import com.intellij.util.messages.Topic;
@@ -50,6 +51,11 @@ public abstract class DumbService {
*/
public static final Topic<DumbModeListener> DUMB_MODE = new Topic<DumbModeListener>("dumb mode", DumbModeListener.class);
/**
* The tracker is advanced each time we enter/exit from dumb mode.
*/
public abstract ModificationTracker getModificationTracker();
/**
* @return whether IntelliJ IDEA is in dumb mode, which means that right now indices are updated in background.
* IDEA offers only limited functionality at such times, e.g. plain text file editing and version control operations.
@@ -49,10 +49,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;
public class DumbServiceImpl extends DumbService implements Disposable {
public class DumbServiceImpl extends DumbService implements Disposable, ModificationTracker {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.project.DumbServiceImpl");
private volatile boolean myDumb = false;
private final DumbModeListener myPublisher;
private long myModificationCount;
private final Queue<DumbModeTask> myUpdatesQueue = new Queue<DumbModeTask>(5);
/**
@@ -116,6 +117,11 @@ public class DumbServiceImpl extends DumbService implements Disposable {
myAlternativeResolution.set(enabled);
}
@Override
public ModificationTracker getModificationTracker() {
return null;
}
@Override
public boolean isDumb() {
return myDumb;
@@ -209,6 +215,7 @@ public class DumbServiceImpl extends DumbService implements Disposable {
@Override
public Boolean compute() {
myDumb = true;
myModificationCount++;
try {
myPublisher.enteredDumbMode();
}
@@ -236,6 +243,7 @@ public class DumbServiceImpl extends DumbService implements Disposable {
private void updateFinished() {
myDumb = false;
myModificationCount++;
if (myProject.isDisposed()) return;
if (ApplicationManager.getApplication().isInternal()) LOG.info("updateFinished");
@@ -440,6 +448,11 @@ public class DumbServiceImpl extends DumbService implements Disposable {
return result.get();
}
@Override
public long getModificationCount() {
return myModificationCount;
}
private class AppIconProgress extends ProgressIndicatorBase {
private double lastFraction;
@@ -18,7 +18,6 @@ package com.intellij.xml.impl.schema;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.FieldCache;
import com.intellij.openapi.util.ModificationTracker;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.SchemaReferencesProvider;
import com.intellij.psi.meta.PsiMetaData;
@@ -99,12 +98,7 @@ public class ComplexTypeDescriptor extends TypeDescriptor {
dependencies.add(myTag.getContainingFile());
}
if (DumbService.isDumb(myTag.getProject())) {
dependencies.add(new ModificationTracker() {
@Override
public long getModificationCount() {
return DumbService.isDumb(myTag.getProject()) ? 0 : 1;
}
});
dependencies.add(DumbService.getInstance(myTag.getProject()).getModificationTracker());
}
return Result.create(type, ArrayUtil.toObjectArray(dependencies));
}