injection in enum constants (IDEA-169875)

This commit is contained in:
Anna.Kozlova
2017-03-21 12:18:45 +01:00
parent e75f2f7860
commit cf10709f77
3 changed files with 11 additions and 8 deletions
@@ -140,7 +140,7 @@ public class ConcatenationInjector implements ConcatenationAwareInjector {
final LinkedList<PsiElement> 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;
}
@@ -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);
@@ -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;
}