NPE while highlighting enum constant in annotation attribute

This commit is contained in:
Max Medvedev
2013-05-02 19:21:22 +04:00
parent 6a77a1aadd
commit b05d470c58
2 changed files with 39 additions and 3 deletions
@@ -1374,14 +1374,21 @@ public class GroovyAnnotator extends GroovyElementVisitor {
if (value instanceof GrReferenceExpression) {
PsiElement resolved = ((GrReferenceExpression)value).resolve();
if (resolved instanceof PsiClass) return false;
if (resolved instanceof PsiEnumConstant) return false;
if (resolved instanceof GrAccessorMethod) resolved = ((GrAccessorMethod)resolved).getProperty();
if (resolved instanceof PsiField) {
GrExpression initializer;
try {
initializer = resolved instanceof GrField
? ((GrField)resolved).getInitializerGroovy()
: (GrExpression)ExpressionConverter.getExpression(((PsiField)resolved).getInitializer(), GroovyFileType.GROOVY_LANGUAGE, value.getProject());
if (resolved instanceof GrField) {
initializer = ((GrField)resolved).getInitializerGroovy();
}
else {
final PsiExpression _initializer = ((PsiField)resolved).getInitializer();
initializer = _initializer != null
? (GrExpression)ExpressionConverter.getExpression(_initializer, GroovyFileType.GROOVY_LANGUAGE, value.getProject())
: null;
}
}
catch (IncorrectOperationException e) {
initializer = null;
@@ -1333,4 +1333,33 @@ class B extends A {
''')
}
void testEnumConstantAsAnnotationAttribute() {
testHighlighting('''\
enum A {CONST}
@interface I {
A foo()
}
@I(foo = A.CONST) //no error
def bar
''')
}
void testUnassignedFieldAsAnnotationAttribute() {
testHighlighting('''\
interface A {
String CONST
}
@interface I {
String foo()
}
@I(foo = <error descr="Expected 'A.CONST' to be an inline constant">A.CONST</error>)
def bar
''')
}
}