diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 51e27432c74..0e716e8a7fa 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -56,12 +56,8 @@ public abstract class AnnotationCodegen { this.jvmFlag = jvmFlag; } - public boolean hasAnnotation(@NotNull Annotated annotated) { - return Annotations.Companion.findAnyAnnotation(annotated.getAnnotations(), fqName) != null; - } - - public int getJvmFlag() { - return jvmFlag; + public int getJvmFlag(@Nullable Annotated annotated) { + return annotated != null && annotated.getAnnotations().hasAnnotation(fqName) ? jvmFlag : 0; } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java index 4f98deb55c3..0291e6bbee2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java @@ -225,9 +225,7 @@ public class AsmUtil { int flags = getCommonCallableFlags(functionDescriptor, state); for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.METHOD_FLAGS) { - if (flagAnnotation.hasAnnotation(functionDescriptor.getOriginal())) { - flags |= flagAnnotation.getJvmFlag(); - } + flags |= flagAnnotation.getJvmFlag(functionDescriptor.getOriginal()); } if (functionDescriptor.getOriginal().isExternal()) { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java index aef012e358f..8ce35d16cce 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PropertyCodegen.java @@ -370,9 +370,7 @@ public class PropertyCodegen { int modifiers = getDeprecatedAccessFlag(propertyDescriptor); for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) { - if (annotatedField != null && flagAnnotation.hasAnnotation(annotatedField)) { - modifiers |= flagAnnotation.getJvmFlag(); - } + modifiers |= flagAnnotation.getJvmFlag(annotatedField); } if (kind == OwnerKind.PACKAGE) { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/annotations/jvmAnnotationUtil.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/annotations/jvmAnnotationUtil.kt index 3baa8b3b973..c1d7ff180ef 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/annotations/jvmAnnotationUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/annotations/jvmAnnotationUtil.kt @@ -43,14 +43,14 @@ fun CallableMemberDescriptor.hasJvmDefaultAnnotation(): Boolean = DescriptorUtils.getDirectMember(this).annotations.hasAnnotation(JVM_DEFAULT_FQ_NAME) private fun Annotated.findJvmSyntheticAnnotation(): AnnotationDescriptor? = - DescriptorUtils.getAnnotationByFqName(annotations, JVM_SYNTHETIC_ANNOTATION_FQ_NAME) + annotations.findAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) ?: (this as? PropertyDescriptor)?.backingField?.annotations?.findAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME) fun DeclarationDescriptor.hasJvmSyntheticAnnotation(): Boolean = findJvmSyntheticAnnotation() != null fun DeclarationDescriptor.findStrictfpAnnotation(): AnnotationDescriptor? = - DescriptorUtils.getAnnotationByFqName(annotations, STRICTFP_ANNOTATION_FQ_NAME) + annotations.findAnnotation(STRICTFP_ANNOTATION_FQ_NAME) fun DeclarationDescriptor.findSynchronizedAnnotation(): AnnotationDescriptor? = - DescriptorUtils.getAnnotationByFqName(annotations, SYNCHRONIZED_ANNOTATION_FQ_NAME) + annotations.findAnnotation(SYNCHRONIZED_ANNOTATION_FQ_NAME) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt index a5adc41087c..736b8c8dfa4 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/declarationCheckers.kt @@ -122,9 +122,9 @@ class JvmStaticChecker(jvmTarget: JvmTarget, languageVersionSettings: LanguageVe class JvmNameAnnotationChecker : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { - val platformNameAnnotation = DescriptorUtils.getJvmNameAnnotation(descriptor) - if (platformNameAnnotation != null) { - checkDeclaration(descriptor, platformNameAnnotation, context.trace) + val jvmNameAnnotation = DescriptorUtils.findJvmNameAnnotation(descriptor) + if (jvmNameAnnotation != null) { + checkDeclaration(descriptor, jvmNameAnnotation, context.trace) } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt index 07baa77e14e..c58de94a06f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/Annotations.kt @@ -58,10 +58,6 @@ interface Annotations : Iterable { override fun toString() = "EMPTY" } - fun findAnyAnnotation(annotations: Annotations, fqName: FqName): AnnotationWithTarget? { - return annotations.getAllAnnotations().firstOrNull { it.annotation.fqName == fqName } - } - fun findUseSiteTargetedAnnotation(annotations: Annotations, target: AnnotationUseSiteTarget, fqName: FqName): AnnotationDescriptor? { return getUseSiteTargetedAnnotations(annotations, target).firstOrNull { it.fqName == fqName } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java index 6eb2b169687..a5eb8d315c5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorUtils.java @@ -12,8 +12,6 @@ import org.jetbrains.kotlin.builtins.UnsignedTypes; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.Annotated; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.incremental.components.LookupLocation; import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.name.FqName; @@ -538,7 +536,7 @@ public class DescriptorUtils { @Nullable public static String getJvmName(@NotNull Annotated annotated) { - return getJvmName(getJvmNameAnnotation(annotated)); + return getJvmName(findJvmNameAnnotation(annotated)); } @Nullable @@ -555,14 +553,8 @@ public class DescriptorUtils { } @Nullable - public static AnnotationDescriptor getAnnotationByFqName(@NotNull Annotations annotations, @NotNull FqName name) { - AnnotationWithTarget annotationWithTarget = Annotations.Companion.findAnyAnnotation(annotations, name); - return annotationWithTarget == null ? null : annotationWithTarget.getAnnotation(); - } - - @Nullable - public static AnnotationDescriptor getJvmNameAnnotation(@NotNull Annotated annotated) { - return getAnnotationByFqName(annotated.getAnnotations(), JVM_NAME); + public static AnnotationDescriptor findJvmNameAnnotation(@NotNull Annotated annotated) { + return annotated.getAnnotations().findAnnotation(JVM_NAME); } @NotNull diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index ea67671bae2..cb4b72e6611 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -38,7 +38,6 @@ import org.jetbrains.kotlin.asJava.toLightClass import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.idea.caches.project.implementingDescriptors import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor @@ -300,9 +299,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { ) val referenceUsed: Boolean by lazy { !ReferencesSearch.search(searchParameters).forEach(::checkReference) } - if (descriptor is FunctionDescriptor && - DescriptorUtils.getAnnotationByFqName(descriptor.annotations, JvmFileClassUtil.JVM_NAME) != null - ) { + if (descriptor is FunctionDescriptor && DescriptorUtils.findJvmNameAnnotation(descriptor) != null) { if (referenceUsed) return true } diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java index 07a0cf2e8ed..f23e06d1942 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/translate/utils/AnnotationsUtils.java @@ -22,8 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.js.PredefinedAnnotation; import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.psi.KtAnnotationEntry; @@ -111,13 +109,7 @@ public final class AnnotationsUtils { @NotNull DeclarationDescriptor descriptor, @NotNull PredefinedAnnotation annotation ) { - return getAnnotationByName(descriptor, annotation.getFqName()); - } - - @Nullable - private static AnnotationDescriptor getAnnotationByName(@NotNull DeclarationDescriptor descriptor, @NotNull FqName fqName) { - AnnotationWithTarget annotationWithTarget = Annotations.Companion.findAnyAnnotation(descriptor.getAnnotations(), (fqName)); - return annotationWithTarget != null ? annotationWithTarget.getAnnotation() : null; + return descriptor.getAnnotations().findAnnotation(annotation.getFqName()); } public static boolean isNativeObject(@NotNull DeclarationDescriptor descriptor) { @@ -159,7 +151,7 @@ public final class AnnotationsUtils { @Nullable public static AnnotationDescriptor getJsNameAnnotation(@NotNull DeclarationDescriptor descriptor) { - return getAnnotationByName(descriptor, new FqName(JS_NAME)); + return descriptor.getAnnotations().findAnnotation(new FqName(JS_NAME)); } public static boolean isPredefinedObject(@NotNull DeclarationDescriptor descriptor) { @@ -183,9 +175,8 @@ public final class AnnotationsUtils { } private static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor, @NotNull FqName fqName) { - if (getAnnotationByName(descriptor, fqName) != null) { - return true; - } + if (descriptor.getAnnotations().hasAnnotation(fqName)) return true; + ClassDescriptor containingClass = DescriptorUtils.getContainingClass(descriptor); return containingClass != null && hasAnnotationOrInsideAnnotatedClass(containingClass, fqName); }