From cf10709f77c627df6594f197482c2a83ed84aa9b Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Tue, 21 Mar 2017 10:43:03 +0100 Subject: [PATCH] injection in enum constants (IDEA-169875) --- .../intelliLang/inject/java/ConcatenationInjector.java | 6 +++++- .../inject/java/JavaLanguageInjectionSupport.java | 7 +++---- .../plugins/intelliLang/util/AnnotationUtilEx.java | 6 +++--- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java index cfc7bf05de91..e51edce35bb4 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/ConcatenationInjector.java @@ -140,7 +140,7 @@ public class ConcatenationInjector implements ConcatenationAwareInjector { final LinkedList places = new LinkedList<>(); places.add(firstOperand); class MyAnnoVisitor implements AnnotationUtilEx.AnnotatedElementVisitor { - public boolean visitMethodParameter(PsiExpression expression, PsiCallExpression psiCallExpression) { + public boolean visitMethodParameter(PsiExpression expression, PsiCall psiCallExpression) { final PsiExpressionList list = psiCallExpression.getArgumentList(); assert list != null; final int index = ArrayUtil.indexOf(list.getExpressions(), expression); @@ -160,6 +160,10 @@ public class ConcatenationInjector implements ConcatenationAwareInjector { final PsiJavaCodeReferenceElement classRef = ((PsiNewExpression)psiCallExpression).getClassOrAnonymousClassReference(); methodName = classRef == null ? null : classRef.getReferenceName(); } + else if (psiCallExpression instanceof PsiEnumConstant) { + PsiMethod method = psiCallExpression.resolveMethod(); + methodName = method != null ? method.getName() : null; + } else { methodName = null; } diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java index 2cc2fe48bbfe..e27b66783454 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/inject/java/JavaLanguageInjectionSupport.java @@ -18,7 +18,6 @@ package org.intellij.plugins.intelliLang.inject.java; import com.intellij.codeInsight.AnnotationUtil; import com.intellij.lang.Language; -import com.intellij.lang.injection.MultiHostRegistrar; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.Result; @@ -194,7 +193,7 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo parent instanceof PsiNameValuePair) { return doInjectInJavaMethod(project, findPsiMethod(parent), -1, host, languageId); } - else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCallExpression) { + else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCall) { return doInjectInJavaMethod(project, findPsiMethod(parent), findParameterIndex(target, (PsiExpressionList)parent), host, languageId); } else if (parent instanceof PsiAssignmentExpression) { @@ -341,8 +340,8 @@ public class JavaLanguageInjectionSupport extends AbstractLanguageInjectionSuppo } } final PsiMethod first; - if (parent.getParent() instanceof PsiCallExpression) { - first = ((PsiCallExpression)parent.getParent()).resolveMethod(); + if (parent.getParent() instanceof PsiCall) { + first = ((PsiCall)parent.getParent()).resolveMethod(); } else { first = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, false); diff --git a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java index 9460ae04a7f2..bd846135b4f0 100644 --- a/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java +++ b/plugins/IntelliLang/java-support/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java @@ -119,7 +119,7 @@ public class AnnotationUtilEx { } public interface AnnotatedElementVisitor { - boolean visitMethodParameter(PsiExpression expression, PsiCallExpression psiCallExpression); + boolean visitMethodParameter(PsiExpression expression, PsiCall psiCallExpression); boolean visitMethodReturnStatement(PsiElement source, PsiMethod method); boolean visitVariable(PsiVariable variable); boolean visitAnnotationParameter(PsiNameValuePair nameValuePair, PsiAnnotation psiAnnotation); @@ -178,8 +178,8 @@ public class AnnotationUtilEx { else if (parent instanceof PsiArrayInitializerMemberValue || parent instanceof PsiNameValuePair) { return true; } - else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCallExpression) { - return visitor.visitMethodParameter((PsiExpression)element, (PsiCallExpression)parent.getParent()); + else if (parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCall) { + return visitor.visitMethodParameter((PsiExpression)element, (PsiCall)parent.getParent()); } return true; }