blob: 4fd25603322a291be4321a3ba1e5aea37f5ffa9a [file] [log] [blame]
package com.jetbrains.python.codeInsight;
import com.intellij.lang.Language;
import com.intellij.lang.injection.MultiHostInjector;
import com.intellij.lang.injection.MultiHostRegistrar;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
/**
* @author vlan
*/
public abstract class PyInjectorBase implements MultiHostInjector {
@Override
public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement context) {
registerInjection(registrar, context);
}
@NotNull
@Override
public List<? extends Class<? extends PsiElement>> elementsToInjectIn() {
return PyInjectionUtil.ELEMENTS_TO_INJECT_IN;
}
@Nullable
public abstract Language getInjectedLanguage(@NotNull PsiElement context);
protected PyInjectionUtil.InjectionResult registerInjection(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement context) {
final Language language = getInjectedLanguage(context);
if (language != null) {
final PsiElement element = PyInjectionUtil.getLargestStringLiteral(context);
if (element != null) {
registrar.startInjecting(language);
final PyInjectionUtil.InjectionResult result = PyInjectionUtil.registerStringLiteralInjection(element, registrar);
if (result.isInjected()) {
registrar.doneInjecting();
}
return result;
}
}
return PyInjectionUtil.InjectionResult.EMPTY;
}
}