IDEA-219943 language counters corner case (PR #1188)

Change-Id: I73e8de3a733b2a8243bd43e2f66910cdfdd0fb4e

GitOrigin-RevId: 78337efb82a40bc6a9918f7648d2012bef28d33f
This commit is contained in:
Matthew Gharrity
2019-08-22 01:50:10 +03:00
committed by intellij-monorepo-bot
parent 8453c3d691
commit 44a0af231f
@@ -32,7 +32,8 @@ public class PsiModificationTrackerImpl implements PsiModificationTracker, PsiTr
private final SimpleModificationTracker myModificationCount = new SimpleModificationTracker();
private final Map<Language, ModificationTracker> myLanguageTrackers =
private final SimpleModificationTracker myAllLanguagesTracker = new SimpleModificationTracker();
private final Map<Language, SimpleModificationTracker> myLanguageTrackers =
ConcurrentFactoryMap.createMap(language -> new SimpleModificationTracker());
private final Listener myPublisher;
@@ -94,15 +95,12 @@ public class PsiModificationTrackerImpl implements PsiModificationTracker, PsiTr
private void incLanguageCounters(@NotNull PsiTreeChangeEventImpl event) {
PsiTreeChangeEventImpl.PsiEventType code = event.getCode();
String propertyName = event.getPropertyName();
boolean allLanguages =
code == PROPERTY_CHANGED && (propertyName == PsiTreeChangeEvent.PROP_UNLOADED_PSI ||
propertyName == PsiTreeChangeEvent.PROP_ROOTS ||
propertyName == PsiTreeChangeEvent.PROP_FILE_TYPES);
if (allLanguages) {
for (ModificationTracker tracker : myLanguageTrackers.values()) {
((SimpleModificationTracker)tracker).incModificationCount();
}
if (code == PROPERTY_CHANGED &&
(propertyName == PsiTreeChangeEvent.PROP_UNLOADED_PSI ||
propertyName == PsiTreeChangeEvent.PROP_ROOTS ||
propertyName == PsiTreeChangeEvent.PROP_FILE_TYPES)) {
myAllLanguagesTracker.incModificationCount();
return;
}
PsiElement[] elements = {
@@ -160,20 +158,22 @@ public class PsiModificationTrackerImpl implements PsiModificationTracker, PsiTr
@ApiStatus.Experimental
public void incLanguageModificationCount(@Nullable Language language) {
if (language == null) return;
((SimpleModificationTracker)myLanguageTrackers.get(language)).incModificationCount();
myLanguageTrackers.get(language).incModificationCount();
}
@ApiStatus.Experimental
@NotNull
public ModificationTracker forLanguage(@NotNull Language language) {
return myLanguageTrackers.get(language);
SimpleModificationTracker languageTracker = myLanguageTrackers.get(language);
return () -> languageTracker.getModificationCount() +
myAllLanguagesTracker.getModificationCount();
}
@ApiStatus.Experimental
@NotNull
public ModificationTracker forLanguages(@NotNull Condition<? super Language> condition) {
return () -> {
long result = 0;
long result = myAllLanguagesTracker.getModificationCount();
for (Language l : myLanguageTrackers.keySet()) {
if (!condition.value(l)) continue;
result += myLanguageTrackers.get(l).getModificationCount();