diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java index c53d97faf065..6495d9c973ae 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiSubstitutorImpl.java @@ -21,6 +21,8 @@ import com.intellij.openapi.util.RecursionGuard; import com.intellij.openapi.util.RecursionManager; import com.intellij.psi.*; import com.intellij.psi.impl.light.LightTypeParameter; +import com.intellij.psi.impl.source.PsiClassReferenceType; +import com.intellij.psi.impl.source.PsiImmediateClassType; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.ArrayUtil; @@ -231,13 +233,20 @@ public class PsiSubstitutorImpl implements PsiSubstitutor { final PsiType result = substituteTypeParameter(typeParameter); if (result != null) { PsiUtil.ensureValidType(result); - return result.annotate(new TypeAnnotationProvider() { - @NotNull - @Override - public PsiAnnotation[] getAnnotations() { - return ArrayUtil.mergeArrays(result.getAnnotations(), classType.getAnnotations()); - } - }); + if (result instanceof PsiImmediateClassType || + result instanceof PsiClassReferenceType || + result instanceof TypeCorrector.PsiCorrectedClassType || + result instanceof PsiArrayType || + result instanceof PsiWildcardType || + result instanceof PsiCapturedWildcardType) { + return result.annotate(new TypeAnnotationProvider() { + @NotNull + @Override + public PsiAnnotation[] getAnnotations() { + return ArrayUtil.mergeArrays(result.getAnnotations(), classType.getAnnotations()); + } + }); + } } return null; } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/TypeCorrector.java b/java/java-psi-impl/src/com/intellij/psi/impl/TypeCorrector.java index 8987c71f85fc..9dc6e81832f6 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/TypeCorrector.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/TypeCorrector.java @@ -19,7 +19,6 @@ import com.intellij.openapi.roots.FileIndexFacade; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; -import com.intellij.psi.impl.source.PsiClassReferenceType; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.Function; @@ -161,20 +160,20 @@ class TypeCorrector extends PsiTypeMapper { return mappedSubstitutor; } - private class PsiCorrectedClassType extends PsiClassType.Stub { + public class PsiCorrectedClassType extends PsiClassType.Stub { private final PsiClassType myDelegate; private final CorrectedResolveResult myResolveResult; - public PsiCorrectedClassType(LanguageLevel languageLevel, - PsiClassType delegate, - CorrectedResolveResult resolveResult) { + private PsiCorrectedClassType(LanguageLevel languageLevel, + PsiClassType delegate, + CorrectedResolveResult resolveResult) { this(languageLevel, delegate, resolveResult, delegate.getAnnotationProvider()); } - public PsiCorrectedClassType(LanguageLevel languageLevel, - PsiClassType delegate, - CorrectedResolveResult resolveResult, - TypeAnnotationProvider delegateAnnotationProvider) { + private PsiCorrectedClassType(LanguageLevel languageLevel, + PsiClassType delegate, + CorrectedResolveResult resolveResult, + TypeAnnotationProvider delegateAnnotationProvider) { super(languageLevel, delegateAnnotationProvider); myDelegate = delegate; myResolveResult = resolveResult;