mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
One more attempt to implement correct cache clearing when extensions for meta-languages are (un)registered (IDEA-238508)
GitOrigin-RevId: 37149a92a3b7e5a52ac07f96441f03bab61c2671
This commit is contained in:
committed by
intellij-monorepo-bot
parent
ae1adf66c6
commit
6f69a1fe7f
@@ -63,15 +63,28 @@ public class LanguageExtension<T> extends KeyedExtensionCollector<T, Language> {
|
||||
protected void clearCacheForDerivedLanguages(@NotNull Language language) {
|
||||
Set<Language> languages = LanguageUtil.getAllDerivedLanguages(language); // includes language itself
|
||||
for (Language derivedLanguage : languages) {
|
||||
derivedLanguage.putUserData(myCacheKey, null);
|
||||
derivedLanguage.putUserData(myAllCacheKey, null);
|
||||
clearCacheForLanguage(derivedLanguage);
|
||||
|
||||
Collection<MetaLanguage> metaLanguages = matchingMetaLanguages(derivedLanguage);
|
||||
for (MetaLanguage metaLanguage : metaLanguages) {
|
||||
metaLanguage.putUserData(myCacheKey, null);
|
||||
metaLanguage.putUserData(myAllCacheKey, null);
|
||||
clearCacheForLanguage(metaLanguage);
|
||||
}
|
||||
}
|
||||
if (language instanceof MetaLanguage) {
|
||||
Collection<Language> matchingLanguages = ((MetaLanguage)language).getMatchingLanguages();
|
||||
for (Language matchingLanguage : matchingLanguages) {
|
||||
Set<Language> matchingDerivedLanguages = LanguageUtil.getAllDerivedLanguages(matchingLanguage); // includes language itself
|
||||
for (Language derivedLanguage : matchingDerivedLanguages) {
|
||||
clearCacheForLanguage(derivedLanguage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void clearCacheForLanguage(Language language) {
|
||||
language.putUserData(myCacheKey, null);
|
||||
language.putUserData(myAllCacheKey, null);
|
||||
super.invalidateCacheForExtension(language.getID());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -162,15 +175,13 @@ public class LanguageExtension<T> extends KeyedExtensionCollector<T, Language> {
|
||||
|
||||
@Override
|
||||
public void addExplicitExtension(@NotNull Language key, @NotNull T t) {
|
||||
key.putUserData(myCacheKey, null);
|
||||
key.putUserData(myAllCacheKey, null);
|
||||
clearCacheForLanguage(key);
|
||||
super.addExplicitExtension(key, t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeExplicitExtension(@NotNull Language key, @NotNull T t) {
|
||||
key.putUserData(myCacheKey, null);
|
||||
key.putUserData(myAllCacheKey, null);
|
||||
clearCacheForLanguage(key);
|
||||
super.removeExplicitExtension(key, t);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user