From 9bf0d014d5fd85c945b502dfcf71f9fad500e66b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 13 Mar 2014 17:43:41 +0400 Subject: [PATCH] Sort out "isSpecialAnnotation" method logic Remove duplicate method, include all needed annotations (seems that some of them were forgotten in either of the two methods) --- .../lang/resolve/java/JvmAnnotationNames.java | 26 +++++++++++++------ .../AnnotationDescriptorDeserializer.java | 15 ++++------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnnotationNames.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnnotationNames.java index 5c056ed428a..466a7103e35 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnnotationNames.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/JvmAnnotationNames.java @@ -21,6 +21,10 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + public final class JvmAnnotationNames { public static final FqName KOTLIN_CLASS = new FqName("kotlin.jvm.internal.KotlinClass"); public static final FqName KOTLIN_PACKAGE = new FqName("kotlin.jvm.internal.KotlinPackage"); @@ -89,15 +93,21 @@ public final class JvmAnnotationNames { @Deprecated public static final FqName OLD_KOTLIN_TRAIT_IMPL = new FqName("jet.KotlinTraitImpl"); - @SuppressWarnings("deprecation") + private static final Set SPECIAL_ANNOTATIONS = new HashSet(); + static { + for (FqName fqName : Arrays.asList(KOTLIN_CLASS, KOTLIN_PACKAGE, KOTLIN_SIGNATURE, JETBRAINS_NOT_NULL_ANNOTATION, + JETBRAINS_NULLABLE_ANNOTATION)) { + SPECIAL_ANNOTATIONS.add(JvmClassName.byFqNameWithoutInnerClasses(fqName)); + } + SPECIAL_ANNOTATIONS.add(KotlinSyntheticClass.CLASS_NAME); + } + public static boolean isSpecialAnnotation(@NotNull FqName fqName) { - return fqName.asString().startsWith("jet.runtime.typeinfo.") - || fqName.equals(KOTLIN_SIGNATURE) - || fqName.equals(JETBRAINS_NOT_NULL_ANNOTATION) - || fqName.equals(OLD_KOTLIN_CLASS) - || fqName.equals(OLD_KOTLIN_PACKAGE) - || fqName.equals(KOTLIN_CLASS) - || fqName.equals(KOTLIN_PACKAGE); + return isSpecialAnnotation(JvmClassName.byFqNameWithoutInnerClasses(fqName)); + } + + public static boolean isSpecialAnnotation(@NotNull JvmClassName name) { + return SPECIAL_ANNOTATIONS.contains(name) || name.getInternalName().startsWith("jet/runtime/typeinfo/"); } private JvmAnnotationNames() { diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java index 5a92ea8cde8..ea68c5b6dd1 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/AnnotationDescriptorDeserializer.java @@ -27,7 +27,10 @@ import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptorImpl; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationsImpl; -import org.jetbrains.jet.lang.resolve.constants.*; +import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; +import org.jetbrains.jet.lang.resolve.constants.ConstantsPackage; +import org.jetbrains.jet.lang.resolve.constants.EnumValue; +import org.jetbrains.jet.lang.resolve.constants.ErrorValue; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils; @@ -107,21 +110,13 @@ public class AnnotationDescriptorDeserializer extends BaseDescriptorDeserializer return new AnnotationsImpl(result); } - private static boolean ignoreAnnotation(@NotNull JvmClassName className) { - return className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_CLASS)) - || className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.KOTLIN_PACKAGE)) - || className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.JETBRAINS_NOT_NULL_ANNOTATION)) - || className.equals(JvmClassName.byFqNameWithoutInnerClasses(JvmAnnotationNames.JETBRAINS_NULLABLE_ANNOTATION)) - || className.getInternalName().startsWith("jet/runtime/typeinfo/"); - } - @Nullable public static KotlinJvmBinaryClass.AnnotationArgumentVisitor resolveAnnotation( @NotNull JvmClassName className, @NotNull final List result, @NotNull final DependencyClassByQualifiedNameResolver classResolver ) { - if (ignoreAnnotation(className)) return null; + if (JvmAnnotationNames.isSpecialAnnotation(className)) return null; final ClassDescriptor annotationClass = resolveClass(className, classResolver); final AnnotationDescriptorImpl annotation = new AnnotationDescriptorImpl();