From 17d1bed7ab284366f442e229387c0def51e6aec2 Mon Sep 17 00:00:00 2001 From: Dennis Ushakov Date: Wed, 29 Jan 2020 17:22:47 +0300 Subject: [PATCH] store language id so language won't stuck in VFS GitOrigin-RevId: b762374f985e4a919f62ca5d1c96ad5f9e77aa7e --- .../src/com/intellij/psi/LanguageSubstitutors.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/platform/core-api/src/com/intellij/psi/LanguageSubstitutors.java b/platform/core-api/src/com/intellij/psi/LanguageSubstitutors.java index 003d4e173390..926656a39f45 100644 --- a/platform/core-api/src/com/intellij/psi/LanguageSubstitutors.java +++ b/platform/core-api/src/com/intellij/psi/LanguageSubstitutors.java @@ -33,7 +33,7 @@ public final class LanguageSubstitutors extends LanguageExtension> PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY = Key.create("PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY"); + private static final Key> PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY = Key.create("PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY"); private static final AtomicBoolean REQUESTS_DRAIN_NEEDED = new AtomicBoolean(true); private static final ConcurrentMap ourReparsingRequests = ContainerUtil.newConcurrentMap(); @@ -78,11 +78,11 @@ public final class LanguageSubstitutors extends LanguageExtension projectKey = getOrCreateProjectKey(project); - Language prevSubstitutedLang = projectKey.get(file); + Key projectKey = getOrCreateProjectKey(project); + Language prevSubstitutedLang = Language.findLanguageByID(projectKey.get(file)); final Language prevLang = ObjectUtils.notNull(prevSubstitutedLang, originalLang); if (!prevLang.is(substitutedLang)) { - if (file.replace(projectKey, prevSubstitutedLang, substitutedLang)) { + if (file.replace(projectKey, prevSubstitutedLang != null ? prevSubstitutedLang.getID() : null, substitutedLang.getID())) { if (prevSubstitutedLang == null) { return; // no need to reparse for the first language substitution } @@ -95,8 +95,8 @@ public final class LanguageSubstitutors extends LanguageExtension getOrCreateProjectKey(@NotNull Project project) { - Key key = PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY.get(project); + private static Key getOrCreateProjectKey(@NotNull Project project) { + Key key = PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY.get(project); if (key == null) { synchronized (PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY) { key = PROJECT_KEY_FOR_SUBSTITUTED_LANG_KEY.get(project);