package com.sgaop.idea.injector; import com.intellij.lang.Language; import com.intellij.lang.injection.MultiHostInjector; import com.intellij.lang.injection.MultiHostRegistrar; import com.intellij.openapi.application.ApplicationInfo; import com.intellij.psi.*; import com.sgaop.idea.NutzCons; import org.jetbrains.annotations.NotNull; import java.util.Collections; import java.util.List; /** * @author 黄川 [email protected] * @date: 2019/4/1 */ public class NutzJavaSqlMultiHostInjector implements MultiHostInjector { static final ApplicationInfo INSTANCE = ApplicationInfo.getInstance(); @Override public void getLanguagesToInject(@NotNull MultiHostRegistrar registrar, @NotNull PsiElement psiElement) { String productCode = INSTANCE.getBuild().getProductCode(); if (NutzCons.IDEA_VERSION.equals(productCode)) { //旗舰版才支持该功能 final Language SQL_LANGUAGE = Language.findLanguageByID("SQL"); if (psiElement.getParent() != null && psiElement.getParent().getParent() != null) { PsiElement parent = psiElement.getParent().getParent().getParent(); if (parent != null && parent instanceof PsiAnnotation) { String qualifiedName = ((PsiAnnotation) parent).getQualifiedName(); if (NutzCons.SQLS.contains(qualifiedName)) { registrar.startInjecting(SQL_LANGUAGE); registrar.addPlace(null, null, (PsiLanguageInjectionHost) psiElement, ElementManipulators.getValueTextRange(psiElement)); registrar.doneInjecting(); } } } } } @NotNull @Override public List<? extends Class<? extends PsiElement>> elementsToInjectIn() { return Collections.singletonList(PsiLiteralExpression.class); } }