remove language injection API from PsiManager

This commit is contained in:
Dmitry Jemerov
2011-08-23 16:27:59 +02:00
parent 4577a1c695
commit 48b097e8f8
5 changed files with 13 additions and 56 deletions
@@ -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<LanguageInjector> 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) {
@@ -198,11 +198,5 @@ public abstract class PsiManager extends UserDataHolderBase {
T;
public abstract <T> T performActionWithFormatterDisabled(Computable<T> 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);
}
@@ -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<? extends LanguageInjector> getLanguageInjectors();
public abstract void beforeChange(boolean isPhysical);
public abstract void afterChange(boolean isPhysical);
@@ -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<PsiFile> CACHED_PSI_FILE_COPY_IN_FILECONTENT = Key.create("CACHED_PSI_FILE_COPY_IN_FILECONTENT");
public static final Topic<AnyPsiChangeListener> ANY_PSI_CHANGE_TOPIC = Topic.create("ANY_PSI_CHANGE_TOPIC",AnyPsiChangeListener.class, Topic.BroadcastDirection.TO_PARENT);
private final List<LanguageInjector> 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<? extends LanguageInjector> 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() {
}
@@ -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<? extends LanguageInjector> 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);
}