diff --git a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java index 8547922d2174..30725c7bd46d 100644 --- a/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java +++ b/plugins/IntelliLang/src/org/intellij/plugins/intelliLang/util/AnnotationUtilEx.java @@ -16,13 +16,16 @@ package org.intellij.plugins.intelliLang.util; import com.intellij.codeInsight.AnnotationUtil; +import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Pair; import com.intellij.psi.*; import com.intellij.psi.impl.PsiConstantEvaluationHelperImpl; import com.intellij.psi.search.searches.SuperMethodsSearch; import com.intellij.psi.util.MethodSignatureBackedByPsiMethod; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; +import gnu.trove.Equality; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -242,8 +245,14 @@ public class AnnotationUtilEx { PsiParameter parameter = (PsiParameter)listOwner; PsiElement declarationScope = parameter.getDeclarationScope(); if (declarationScope instanceof PsiMethod && parameter.getParent() == ((PsiMethod)declarationScope).getParameterList()) { - PsiMethod method = (PsiMethod)declarationScope; - final int parameterIndex = method.getParameterList().getParameterIndex(parameter); + final PsiMethod method = (PsiMethod)declarationScope; + final int byNameWorkAround = ArrayUtil.indexOf(method.getParameterList().getParameters(), parameter, new Equality() { + public boolean equals(PsiParameter o1, PsiParameter o2) { + return Comparing.equal(o1.getName(), o2.getName()); + } + }); + final int parameterIndex = byNameWorkAround > -1? byNameWorkAround : method.getParameterList().getParameterIndex(parameter); + assert parameterIndex > 0; all.addAll(Arrays.asList(modifierList.getAnnotations())); SuperMethodsSearch.search(method, null, true, true).forEach(new Processor() { public boolean process(final MethodSignatureBackedByPsiMethod superMethod) {