diff --git a/java/java-impl/src/com/intellij/psi/impl/source/PsiClassReferenceType.java b/java/java-impl/src/com/intellij/psi/impl/source/PsiClassReferenceType.java index c2a66deba4b8..be09f49c2670 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/PsiClassReferenceType.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/PsiClassReferenceType.java @@ -20,10 +20,12 @@ import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightClassReference; import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; +import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; +import java.util.List; + /** * @author max */ @@ -36,8 +38,16 @@ public class PsiClassReferenceType extends PsiClassType { } private static PsiAnnotation[] extractAnnosFromReference(PsiJavaCodeReferenceElement reference) { - PsiAnnotation[] annotations = PsiTreeUtil.getChildrenOfType(reference, PsiAnnotation.class); - return annotations == null ? PsiAnnotation.EMPTY_ARRAY : annotations; + List result = null; + for(PsiElement child = reference.getFirstChild(); child != null; child = child.getNextSibling()){ + if (child instanceof PsiAnnotation) { + if (result == null) result = new SmartList(); + result.add((PsiAnnotation)child); + } + } + + if (result == null) return PsiAnnotation.EMPTY_ARRAY; + return result.toArray(new PsiAnnotation[result.size()]); } public PsiClassReferenceType(@NotNull PsiJavaCodeReferenceElement reference, LanguageLevel languageLevel, PsiAnnotation[] annotations) {