injection tests: provide more convenient variant of InjectedLanguageManager.registerMultiHostInjector

It allows us to simplify a lot of code in tests and get rid of usages of deprecated method.
This commit is contained in:
nik
2017-06-30 14:29:11 +02:00
parent d2fcb08228
commit 2bc89de9ad
3 changed files with 17 additions and 12 deletions
@@ -190,14 +190,7 @@ public class MyTestInjector {
return Arrays.asList(XmlAttributeValue.class);
}
};
InjectedLanguageManager.getInstance(psiManager.getProject()).registerMultiHostInjector(myMultiHostInjector);
Disposer.register(parent, new Disposable() {
@Override
public void dispose() {
boolean b = InjectedLanguageManager.getInstance(psiManager.getProject()).unregisterMultiHostInjector(myMultiHostInjector);
assert b;
}
});
InjectedLanguageManager.getInstance(psiManager.getProject()).registerMultiHostInjector(myMultiHostInjector, parent);
final LanguageInjector myInjector = new LanguageInjector() {
@Override
@@ -17,6 +17,7 @@
package com.intellij.lang.injection;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.extensions.ExtensionPointName;
@@ -29,6 +30,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLanguageInjectionHost;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.TestOnly;
import java.util.List;
@@ -52,15 +54,18 @@ public abstract class InjectedLanguageManager {
public abstract int injectedToHost(@NotNull PsiElement injectedContext, int injectedOffset);
/**
* Test-only method.
* @see com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME
* @deprecated use {@link com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME extension point} for production and
* {@link #registerMultiHostInjector(MultiHostInjector, Disposable)} for tests
*/
@Deprecated
public abstract void registerMultiHostInjector(@NotNull MultiHostInjector injector);
@TestOnly
public abstract void registerMultiHostInjector(@NotNull MultiHostInjector injector, @NotNull Disposable parentDisposable);
/**
* Test-only method.
* @see com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME
* @deprecated use {@link com.intellij.lang.injection.MultiHostInjector#MULTIHOST_INJECTOR_EP_NAME extension point} for production and
* {@link #registerMultiHostInjector(MultiHostInjector, Disposable)} for tests
*/
@Deprecated
public abstract boolean unregisterMultiHostInjector(@NotNull MultiHostInjector injector);
@@ -40,6 +40,7 @@ import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.Segment;
import com.intellij.openapi.util.TextRange;
@@ -251,6 +252,12 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
clearInjectorCache();
}
@Override
public void registerMultiHostInjector(@NotNull MultiHostInjector injector, @NotNull Disposable parentDisposable) {
registerMultiHostInjector(injector);
Disposer.register(parentDisposable, () -> unregisterMultiHostInjector(injector));
}
@Override
public boolean unregisterMultiHostInjector(@NotNull MultiHostInjector injector) {
try {