python injectors: perform cheap checks first

This commit is contained in:
peter
2018-09-06 17:12:24 +02:00
parent 8445f6cf92
commit 285ff5cfcf
3 changed files with 11 additions and 6 deletions

View File

@@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.jetbrains.python.codeInsight.PyInjectionUtil;
import com.jetbrains.python.codeInsight.PyInjectorBase;
import com.jetbrains.python.psi.PyElement;
import org.intellij.plugins.intelliLang.Configuration;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
import org.intellij.plugins.intelliLang.inject.InjectorUtils;
@@ -35,6 +36,7 @@ import org.jetbrains.annotations.Nullable;
public class PyConfigurationInjector extends PyInjectorBase {
@Override
public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement context) {
if (!(context instanceof PyElement)) return;
final PyInjectionUtil.InjectionResult result = registerInjection(registrar, context);
if (!result.isStrict()) {
InjectorUtils.putInjectedFileUserData(context, getInjectedLanguage(context), InjectedLanguageUtil.FRANKENSTEIN_INJECTION, Boolean.TRUE);

View File

@@ -23,6 +23,7 @@ import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.jetbrains.python.codeInsight.PyInjectionUtil;
import com.jetbrains.python.codeInsight.PyInjectorBase;
import com.jetbrains.python.psi.PyElement;
import org.intellij.plugins.intelliLang.inject.InjectedLanguage;
import org.intellij.plugins.intelliLang.inject.InjectorUtils;
import org.intellij.plugins.intelliLang.inject.TemporaryPlacesRegistry;
@@ -48,10 +49,10 @@ public class PyTemporaryInjector extends PyInjectorBase {
@Nullable
@Override
public Language getInjectedLanguage(@NotNull PsiElement context) {
final TemporaryPlacesRegistry registry = TemporaryPlacesRegistry.getInstance(context.getProject());
if (context instanceof PsiLanguageInjectionHost) {
final PsiFile file = context.getContainingFile();
final InjectedLanguage injectedLanguage = registry.getLanguageFor((PsiLanguageInjectionHost)context, file);
if (context instanceof PsiLanguageInjectionHost && context instanceof PyElement) {
PsiFile file = context.getContainingFile();
InjectedLanguage injectedLanguage = TemporaryPlacesRegistry.getInstance(file.getProject())
.getLanguageFor((PsiLanguageInjectionHost)context, file);
if (injectedLanguage != null) {
return injectedLanguage.getLanguage();
}

View File

@@ -48,8 +48,10 @@ public class PyTypingAnnotationInjector extends PyInjectorBase {
// Handles only string literals containing quoted types
final PyInjectionUtil.InjectionResult result = super.registerInjection(registrar, context);
if (result == PyInjectionUtil.InjectionResult.EMPTY && context.getContainingFile() instanceof PyFile &&
context instanceof PsiComment && context instanceof PsiLanguageInjectionHost) {
if (result == PyInjectionUtil.InjectionResult.EMPTY &&
context instanceof PsiComment &&
context instanceof PsiLanguageInjectionHost &&
context.getContainingFile() instanceof PyFile) {
return registerCommentInjection(registrar, (PsiLanguageInjectionHost)context);
}
return result;