mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
remove language injection API from PsiManager
This commit is contained in:
@@ -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() {
|
||||
}
|
||||
|
||||
|
||||
+2
-14
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user