annotations: check error elements after annotation to rise annotation not expected here instead of some unpredictable warnings (IDEA-160106)

This commit is contained in:
Anna Kozlova
2016-09-15 17:37:21 +03:00
parent 92e17eed9c
commit d4e7271498
4 changed files with 18 additions and 2 deletions

View File

@@ -61,6 +61,9 @@ public class AnnotationTargetUtil {
}
if (owner instanceof PsiModifierList) {
if (((PsiModifierList)owner).getNextSibling() instanceof PsiErrorElement) {
return TargetType.EMPTY_ARRAY;
}
PsiElement element = ((PsiModifierList)owner).getParent();
if (element instanceof PsiPackageStatement) {
return PACKAGE_TARGETS;

View File

@@ -467,8 +467,8 @@ public class PsiClassImplUtil {
@NotNull LanguageLevel languageLevel,
boolean isRaw,
@NotNull GlobalSearchScope resolveScope) {
if (last instanceof PsiTypeParameterList || last instanceof PsiModifierList) {
return true; //TypeParameterList and ModifierList do not see our declarations
if (last instanceof PsiTypeParameterList || last instanceof PsiModifierList && !(last.getNextSibling() instanceof PsiErrorElement)) {
return true;
}
if (visited != null && visited.contains(aClass)) return true;

View File

@@ -0,0 +1,12 @@
class Dummy {
public @interface Debug {
String value() default "[no comment]";
}
private static final class Constants {
private static final String INPUT = "Input";
}
<error descr="Annotations are not allowed here">@Dummy.Debug(Constants.INPUT)</error><EOLError descr="Identifier or type expected"></EOLError>
}

View File

@@ -49,6 +49,7 @@ public class AnnotationsHighlightingTest extends LightDaemonAnalyzerTestCase {
public void testRepeatable() { doTest8(); }
public void testEnumValues() { doTest8(); }
public void testReceiverParameters() { doTest8(); }
public void testAnnotationOverIncompleteCode() { doTest(); }
private void doTest() {
setLanguageLevel(LanguageLevel.JDK_1_7);