From 80bd33fc56104f7c0e90a077f856a3b5f142aa57 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Fri, 30 Jun 2017 14:38:34 +0200 Subject: [PATCH] [java] type annotation highlighting on type parameters (IDEA-174317) --- .../analysis/AnnotationsHighlightUtil.java | 19 +++++++++---------- .../annotations/typeAnnotations.java | 5 ++++- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/AnnotationsHighlightUtil.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/AnnotationsHighlightUtil.java index 8ed6b2f8b60d..e084e7921eb8 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/AnnotationsHighlightUtil.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/AnnotationsHighlightUtil.java @@ -376,9 +376,10 @@ public class AnnotationsHighlightUtil { HighlightInfo info = checkReferenceTarget(annotation, ref); if (info != null) return info; } - else if (owner instanceof PsiModifierList) { - PsiElement nextElement = PsiTreeUtil.skipSiblingsForward((PsiModifierList)owner, - PsiComment.class, PsiWhiteSpace.class, PsiTypeParameterList.class); + else if (owner instanceof PsiModifierList || owner instanceof PsiTypeElement) { + PsiElement nextElement = owner instanceof PsiTypeElement + ? (PsiTypeElement)owner + : PsiTreeUtil.skipSiblingsForward((PsiModifierList)owner, PsiComment.class, PsiWhiteSpace.class, PsiTypeParameterList.class); if (nextElement instanceof PsiTypeElement) { PsiTypeElement typeElement = (PsiTypeElement)nextElement; PsiType type = typeElement.getType(); @@ -391,13 +392,11 @@ public class AnnotationsHighlightUtil { HighlightInfo info = checkReferenceTarget(annotation, ref); if (info != null) return info; } - } - } - else if (owner instanceof PsiTypeElement) { - PsiElement context = PsiTreeUtil.skipParentsOfType((PsiTypeElement)owner, PsiTypeElement.class); - if (context instanceof PsiClassObjectAccessExpression) { - String message = JavaErrorMessages.message("annotation.not.allowed.class"); - return annotationError(annotation, message); + PsiElement context = PsiTreeUtil.skipParentsOfType(typeElement, PsiTypeElement.class); + if (context instanceof PsiClassObjectAccessExpression) { + String message = JavaErrorMessages.message("annotation.not.allowed.class"); + return annotationError(annotation, message); + } } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java index 323b369e3778..9627c8b95957 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/annotations/typeAnnotations.java @@ -51,7 +51,8 @@ class Outer { @TA StaticInner v1; @TA StaticMiddle.@TA StaticInner v2; @TA Outer.@TA StaticMiddle.@TA StaticInner v3; - List<@TA Outer.@TA StaticMiddle.@TA StaticInner> l; + List@TA StaticMiddle.@TA StaticInner> l1; + List<@TA Outer.StaticMiddle.@TA StaticInner> l2; } } } @@ -67,7 +68,9 @@ class Outer { @A Map.@TA Entry e1; @A @TA Map.@TA Entry e2; @A java.@TA util.Map.@TA Entry e3; + @A @TA java.util.Map.@TA Entry e4; @A List@TA lang.@TA String> l1; + @A List<@TA java.lang.String> l2; Object obj = "str"; @TA String str = (@TA String)obj;