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);