mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
ModificationTracker fro dumb mode
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user