diff --git a/platform/core-api/src/com/intellij/lang/Language.java b/platform/core-api/src/com/intellij/lang/Language.java index be13e36bbb98..3619709ba28a 100644 --- a/platform/core-api/src/com/intellij/lang/Language.java +++ b/platform/core-api/src/com/intellij/lang/Language.java @@ -121,6 +121,7 @@ public abstract class Language extends UserDataHolderBase { } public static void unregisterLanguage(@NotNull Language language) { + IElementType.unregisterElementTypes(language); ReferenceProvidersRegistry.getInstance().unloadProvidersFor(language); ourRegisteredLanguages.remove(language.getClass()); ourRegisteredIDs.remove(language.getID()); diff --git a/platform/core-api/src/com/intellij/psi/tree/IElementType.java b/platform/core-api/src/com/intellij/psi/tree/IElementType.java index 46070a652ef9..9a390a82e4f4 100644 --- a/platform/core-api/src/com/intellij/psi/tree/IElementType.java +++ b/platform/core-api/src/com/intellij/psi/tree/IElementType.java @@ -71,6 +71,15 @@ public class IElementType { } } + public static void unregisterElementTypes(@NotNull Language language) { + for (int i = 0; i < ourRegistry.length; i++) { + IElementType type = ourRegistry[i]; + if (type != null && type.getLanguage().equals(language)) { + ourRegistry[i] = null; + } + } + } + private final short myIndex; @NonNls @NotNull