From fcc7bb1bc6cd903296e1f408652c9cf9e3684182 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Tue, 24 Feb 2015 15:43:33 +0300 Subject: [PATCH] ModificationTracker fro dumb mode --- .../com/intellij/openapi/project/DumbService.java | 6 ++++++ .../intellij/openapi/project/DumbServiceImpl.java | 15 ++++++++++++++- .../xml/impl/schema/ComplexTypeDescriptor.java | 8 +------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/platform/core-api/src/com/intellij/openapi/project/DumbService.java b/platform/core-api/src/com/intellij/openapi/project/DumbService.java index 68ca99133e46..0bd0ab7176f4 100644 --- a/platform/core-api/src/com/intellij/openapi/project/DumbService.java +++ b/platform/core-api/src/com/intellij/openapi/project/DumbService.java @@ -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 DUMB_MODE = new Topic("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. diff --git a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java index 4932c584a1e5..6b9b702ad443 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/DumbServiceImpl.java @@ -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 myUpdatesQueue = new Queue(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; diff --git a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/ComplexTypeDescriptor.java b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/ComplexTypeDescriptor.java index d246a0e8616f..c18db0fec59d 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/ComplexTypeDescriptor.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/impl/schema/ComplexTypeDescriptor.java @@ -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)); }