diff --git a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java index 8f8bd52eb13c..750bae6c3423 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/tree/injected/MyTestInjector.java @@ -30,6 +30,8 @@ import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.lang.injection.MultiHostInjector; import com.intellij.lang.injection.MultiHostRegistrar; import com.intellij.openapi.Disposable; +import com.intellij.openapi.extensions.ExtensionPoint; +import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.ProperTextRange; @@ -194,7 +196,7 @@ public class MyTestInjector { } }); - LanguageInjector myInjector = new LanguageInjector() { + final LanguageInjector myInjector = new LanguageInjector() { public void getLanguagesToInject(@NotNull PsiLanguageInjectionHost host, @NotNull InjectedLanguagePlaces placesToInject) { if (host instanceof XmlAttributeValue) { XmlAttributeValue value = (XmlAttributeValue)host; @@ -303,7 +305,14 @@ public class MyTestInjector { } }; - psiManager.registerLanguageInjector(myInjector, parent); + final ExtensionPoint extensionPoint = Extensions.getRootArea().getExtensionPoint(LanguageInjector.EXTENSION_POINT_NAME); + extensionPoint.registerExtension(myInjector); + Disposer.register(parent, new Disposable() { + @Override + public void dispose() { + extensionPoint.unregisterExtension(myInjector); + } + }); } private static void inject(final PsiLanguageInjectionHost host, final InjectedLanguagePlaces placesToInject, final Language language) { diff --git a/platform/lang-api/src/com/intellij/psi/PsiManager.java b/platform/lang-api/src/com/intellij/psi/PsiManager.java index 59ecd301840f..f5f83ec18fde 100644 --- a/platform/lang-api/src/com/intellij/psi/PsiManager.java +++ b/platform/lang-api/src/com/intellij/psi/PsiManager.java @@ -198,11 +198,5 @@ public abstract class PsiManager extends UserDataHolderBase { T; public abstract T performActionWithFormatterDisabled(Computable r); - public abstract void registerLanguageInjector(@NotNull LanguageInjector injector); - - public abstract void registerLanguageInjector(@NotNull LanguageInjector injector, Disposable parentDisposable); - - public abstract void unregisterLanguageInjector(@NotNull LanguageInjector injector); - public abstract void dropFileCaches(@NotNull PsiFile file); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java index 360f1d26a869..fdaedb74285d 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerEx.java @@ -16,7 +16,6 @@ package com.intellij.psi.impl; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.LanguageInjector; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.psi.impl.cache.CacheManager; @@ -24,8 +23,6 @@ import com.intellij.psi.impl.file.impl.FileManager; import com.intellij.psi.impl.source.resolve.ResolveCache; import org.jetbrains.annotations.NotNull; -import java.util.List; - /** * @author peter */ @@ -63,9 +60,6 @@ public abstract class PsiManagerEx extends PsiManager { @NotNull public abstract CacheManager getCacheManager(); - @NotNull - public abstract List getLanguageInjectors(); - public abstract void beforeChange(boolean isPhysical); public abstract void afterChange(boolean isPhysical); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java index f66ed0a7a2d9..fd4a92b6d872 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiManagerImpl.java @@ -48,7 +48,6 @@ import com.intellij.psi.impl.file.impl.FileManagerImpl; import com.intellij.psi.impl.source.PostprocessReformattingAspect; import com.intellij.psi.impl.source.PsiFileImpl; import com.intellij.psi.impl.source.resolve.ResolveCache; -import com.intellij.psi.impl.source.tree.injected.InjectedLanguageManagerImpl; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; import com.intellij.psi.util.PsiModificationTracker; import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil; @@ -90,8 +89,6 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { private static final Key CACHED_PSI_FILE_COPY_IN_FILECONTENT = Key.create("CACHED_PSI_FILE_COPY_IN_FILECONTENT"); public static final Topic ANY_PSI_CHANGE_TOPIC = Topic.create("ANY_PSI_CHANGE_TOPIC",AnyPsiChangeListener.class, Topic.BroadcastDirection.TO_PARENT); - private final List myLanguageInjectors = ContainerUtil.createEmptyCOWList(); - public PsiManagerImpl(Project project, final ProjectRootManagerEx projectRootManagerEx, StartupManager startupManager, @@ -221,31 +218,6 @@ public class PsiManagerImpl extends PsiManagerEx implements ProjectComponent { }); } - @NotNull - public List getLanguageInjectors() { - return myLanguageInjectors; - } - - public void registerLanguageInjector(@NotNull LanguageInjector injector) { - myLanguageInjectors.add(injector); - InjectedLanguageManagerImpl.getInstanceImpl(myProject).psiManagerInjectorsChanged(); - } - - public void registerLanguageInjector(@NotNull final LanguageInjector injector, Disposable parentDisposable) { - registerLanguageInjector(injector); - Disposer.register(parentDisposable, new Disposable() { - public void dispose() { - unregisterLanguageInjector(injector); - } - }); - } - - public void unregisterLanguageInjector(@NotNull LanguageInjector injector) { - myLanguageInjectors.remove(injector); - InjectedLanguageManagerImpl.getInstanceImpl(myProject).psiManagerInjectorsChanged(); - } - - public void projectClosed() { } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java index e3256434114f..8463342eed93 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java @@ -37,7 +37,6 @@ import com.intellij.openapi.util.ProperTextRange; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; -import com.intellij.psi.impl.PsiManagerEx; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ConcurrentHashMap; import org.jetbrains.annotations.NonNls; @@ -95,17 +94,15 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager { } public void psiManagerInjectorsChanged() { - PsiManagerEx psiManager = (PsiManagerEx)PsiManager.getInstance(myProject); - List injectors = psiManager.getLanguageInjectors(); LanguageInjector[] extensions = Extensions.getExtensions(LanguageInjector.EXTENSION_POINT_NAME); - if (injectors.isEmpty() && extensions.length == 0) { + if (extensions.length == 0) { MultiHostInjector prev = myPsiManagerRegisteredInjectorsAdapter.getAndSet(null); if (prev != null) { unregisterMultiHostInjector(prev); } } else { - PsiManagerRegisteredInjectorsAdapter adapter = new PsiManagerRegisteredInjectorsAdapter(psiManager); + PsiManagerRegisteredInjectorsAdapter adapter = new PsiManagerRegisteredInjectorsAdapter(); if (myPsiManagerRegisteredInjectorsAdapter.compareAndSet(null, adapter)) { registerMultiHostInjector(adapter); } @@ -314,12 +311,6 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager { } private static class PsiManagerRegisteredInjectorsAdapter implements MultiHostInjector { - private final PsiManagerEx myPsiManager; - - private PsiManagerRegisteredInjectorsAdapter(PsiManagerEx psiManager) { - myPsiManager = psiManager; - } - public void getLanguagesToInject(@NotNull final MultiHostRegistrar injectionPlacesRegistrar, @NotNull PsiElement context) { final PsiLanguageInjectionHost host = (PsiLanguageInjectionHost)context; InjectedLanguagePlaces placesRegistrar = new InjectedLanguagePlaces() { @@ -331,9 +322,6 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager { .doneInjecting(); } }; - for (LanguageInjector injector : myPsiManager.getLanguageInjectors()) { - injector.getLanguagesToInject(host, placesRegistrar); - } for (LanguageInjector injector : Extensions.getExtensions(LanguageInjector.EXTENSION_POINT_NAME)) { injector.getLanguagesToInject(host, placesRegistrar); }