diff options
Diffstat (limited to 'java/java-psi-impl/src')
3 files changed, 31 insertions, 18 deletions
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java index c1db5cd259a7..9105641fbf40 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/PsiImplUtil.java @@ -319,11 +319,11 @@ public class PsiImplUtil { } @Nullable - public static PsiAnnotation findAnnotation(@NotNull PsiAnnotationOwner annotationOwner, @NotNull String qualifiedName) { + public static PsiAnnotation findAnnotation(@Nullable PsiAnnotationOwner annotationOwner, @NotNull String qualifiedName) { + if (annotationOwner == null) return null; + PsiAnnotation[] annotations = annotationOwner.getAnnotations(); - if (annotations.length == 0) { - return null; - } + if (annotations.length == 0) return null; String shortName = StringUtil.getShortName(qualifiedName); for (PsiAnnotation annotation : annotations) { @@ -376,7 +376,7 @@ public class PsiImplUtil { if (!annotationType.isAnnotationType()) return null; PsiModifierList modifierList = annotationType.getModifierList(); if (modifierList == null) return null; - PsiAnnotation target = modifierList.findAnnotation(CommonClassNames.TARGET_ANNOTATION_FQ_NAME); + PsiAnnotation target = modifierList.findAnnotation(CommonClassNames.JAVA_LANG_ANNOTATION_TARGET); if (target == null) return DEFAULT_TARGETS; // if omitted it is applicable to all but Java 8 TYPE_USE/TYPE_PARAMETERS targets PsiAnnotationMemberValue value = target.findAttributeValue(null); 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 f8877b9a787b..cfe21ba80764 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 @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -304,10 +304,6 @@ public class StubBuildingVisitor<T> extends ClassVisitor { } @Override - public void visitAttribute(final Attribute attr) { - } - - @Override public void visitInnerClass(final String name, final String outerName, final String innerName, final int access) { if ((access & Opcodes.ACC_SYNTHETIC) != 0) return; if (!isCorrectName(innerName)) return; @@ -339,13 +335,15 @@ public class StubBuildingVisitor<T> extends ClassVisitor { @Override @Nullable - public FieldVisitor visitField(final int access, final String name, final String desc, final String signature, final Object value) { + public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { if ((access & Opcodes.ACC_SYNTHETIC) != 0) return null; if (!isCorrectName(name)) return null; - final byte flags = PsiFieldStubImpl.packFlags((access & Opcodes.ACC_ENUM) != 0, (access & Opcodes.ACC_DEPRECATED) != 0, false); - final PsiFieldStub stub = new PsiFieldStubImpl(myResult, name, fieldType(desc, signature), constToString(value), flags); - final PsiModifierListStub modList = new PsiModifierListStubImpl(stub, packFieldFlags(access)); + byte flags = PsiFieldStubImpl.packFlags((access & Opcodes.ACC_ENUM) != 0, (access & Opcodes.ACC_DEPRECATED) != 0, false); + TypeInfo type = fieldType(desc, signature); + String initializer = constToString(value, "boolean".equals(type.text.getString())); + PsiFieldStub stub = new PsiFieldStubImpl(myResult, name, type, initializer, flags); + PsiModifierListStub modList = new PsiModifierListStubImpl(stub, packFieldFlags(access)); return new AnnotationCollectingVisitor(modList); } @@ -358,7 +356,8 @@ public class StubBuildingVisitor<T> extends ClassVisitor { catch (ClsFormatException e) { return fieldTypeViaDescription(desc); } - } else { + } + else { return fieldTypeViaDescription(desc); } } @@ -536,7 +535,7 @@ public class StubBuildingVisitor<T> extends ClassVisitor { @Override public void visit(final String name, final Object value) { valuePairPrefix(name); - myBuilder.append(constToString(value)); + myBuilder.append(constToString(value, false)); } @Override @@ -696,13 +695,21 @@ public class StubBuildingVisitor<T> extends ClassVisitor { } @Nullable - private static String constToString(@Nullable Object value) { + private static String constToString(@Nullable Object value, boolean isBoolean) { if (value == null) return null; if (value instanceof String) return "\"" + StringUtil.escapeStringCharacters((String)value) + "\""; - if (value instanceof Integer || value instanceof Boolean) return value.toString(); + if (value instanceof Boolean) return value.toString(); if (value instanceof Long) return value.toString() + "L"; + if (value instanceof Integer) { + if (isBoolean) { + if (value.equals(0)) return "false"; + if (value.equals(1)) return "true"; + } + return value.toString(); + } + if (value instanceof Double) { final double d = ((Double)value).doubleValue(); if (Double.isInfinite(d)) { diff --git a/java/java-psi-impl/src/messages/JavaErrorMessages.properties b/java/java-psi-impl/src/messages/JavaErrorMessages.properties index 34f8b81fe84b..9e084fc2a1ae 100644 --- a/java/java-psi-impl/src/messages/JavaErrorMessages.properties +++ b/java/java-psi-impl/src/messages/JavaErrorMessages.properties @@ -20,6 +20,12 @@ annotation.not.allowed.ref=Annotation not applicable to this kind of reference annotation.not.allowed.static=Static member qualifying type may not be annotated annotation.not.allowed.void='void' type may not be annotated annotation.not.allowed.class=Class literal type may not be annotated +annotation.container.no.value=Invalid containing annotation ''{0}'': no ''value'' method declared +annotation.container.bad.type=Invalid containing annotation ''{0}'': ''value'' method should have type ''{1}'' +annotation.container.low.retention=Containing annotation ''{0}'' has shorter retention (''{1}'') than the contained annotation +annotation.duplicate.explained=Duplicate annotation. {0} +annotation.non.repeatable=The declaration of ''{0}'' does not have a valid java.lang.annotation.Repeatable annotation +annotation.collector.wrong.place=Containing annotation ''{0}'' must not be present at the same time as the element it contains # These aren't unused. # suppress inspection "UnusedProperty" |