diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsAnnotationParameterListImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsAnnotationParameterListImpl.java index 0100ccc5e325..03a14f45d623 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsAnnotationParameterListImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsAnnotationParameterListImpl.java @@ -31,14 +31,20 @@ public class ClsAnnotationParameterListImpl extends ClsElementImpl implements Ps public ClsAnnotationParameterListImpl(@NotNull PsiAnnotation parent, @NotNull PsiNameValuePair[] psiAttributes) { myParent = parent; myAttributes = new ClsNameValuePairImpl[psiAttributes.length]; - for (int i = 0; i < myAttributes.length; i++) { + for (int i = 0; i < psiAttributes.length; i++) { String name = psiAttributes[i].getName(); + PsiAnnotationMemberValue value = psiAttributes[i].getValue(); if (value == null) { String anno = parent instanceof ClsAnnotationImpl ? ((ClsAnnotationImpl)parent).getStub().getText() : parent.getText(); - Logger.getInstance(getClass()).error("name=" + name + " anno=[" + anno + "]"); + Logger.getInstance(getClass()).error("name=" + name + " anno=[" + anno + "] file=" + parent.getContainingFile()); value = new ClsLiteralExpressionImpl(this, "null", PsiType.NULL, null); } + + if (psiAttributes.length == 1 && "value".equals(name)) { + name = null; // cosmetics - omit default attribute name + } + myAttributes[i] = new ClsNameValuePairImpl(this, name, value); } } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java index 8e79478dd2d6..e9531bd3516b 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/StubBuildingVisitor.java @@ -556,7 +556,7 @@ public class StubBuildingVisitor extends ClassVisitor { myBuilder.append(','); } - if (name != null && !"value".equals(name)) { + if (name != null) { myBuilder.append(name).append('='); } } diff --git a/java/java-tests/testData/psi/cls/mirror/Annotations.txt b/java/java-tests/testData/psi/cls/mirror/Annotations.txt index 9bbe384da735..58f2792d88f3 100644 --- a/java/java-tests/testData/psi/cls/mirror/Annotations.txt +++ b/java/java-tests/testData/psi/cls/mirror/Annotations.txt @@ -25,6 +25,9 @@ abstract class Annotations { @pkg.Annotations.A4(ids = {42, 84}) abstract void m4b(); + @pkg.Annotations.A5(b = true, value = java.lang.Integer.class) + abstract void m5(); + static @interface IndeterminateAnno { float f1() default -1.0f / 0.0; @@ -39,6 +42,12 @@ abstract class Annotations { double d3() default 1.0 / 0.0; } + static @interface A5 { + boolean b() default false; + + java.lang.Class value() default java.lang.Integer.class; + } + static @interface A4 { int[] ids() default {}; } diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class index 61209608ab7e..00c4747c6521 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A1.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class index 8d94afe68543..96bda0c34281 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A2.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class index 630cfd964d18..c23cb7cbb8b3 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A3.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class index 040a84c05353..e00c95b04881 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A4.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A5.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A5.class new file mode 100644 index 000000000000..b85d9d0abc49 Binary files /dev/null and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$A5.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class index d77b499c1f59..101bbd26c396 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations$IndeterminateAnno.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class index 03f1f52f42b8..a5293f04639b 100644 Binary files a/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class and b/java/java-tests/testData/psi/cls/mirror/pkg/Annotations.class differ diff --git a/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java b/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java index 5aeda680f6dd..dafd4dce2770 100644 --- a/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java +++ b/java/java-tests/testData/psi/cls/mirror/src/pkg/Annotations.java @@ -16,6 +16,11 @@ abstract class Annotations { int[] ids() default { }; } + @interface A5 { + boolean b() default false; + Class value() default Integer.class; + } + @A1 abstract void m1(); @A2() abstract void m2a(); @@ -26,6 +31,8 @@ abstract class Annotations { @A4 abstract void m4a(); @A4(ids = {42, 84}) abstract void m4b(); + @A5(b = true, value = Integer.class) abstract void m5(); + @interface IndeterminateAnno { float f1() default Float.NEGATIVE_INFINITY; float f2() default Float.NaN;