Drop Annotations.findAnyAnnotation, DescriptorUtils.getAnnotationByFqName

This commit is contained in:
Alexander Udalov
2018-08-14 17:26:09 +02:00
parent 9d1baaeb56
commit 7271995ff0
9 changed files with 18 additions and 50 deletions
@@ -56,12 +56,8 @@ public abstract class AnnotationCodegen {
this.jvmFlag = jvmFlag; this.jvmFlag = jvmFlag;
} }
public boolean hasAnnotation(@NotNull Annotated annotated) { public int getJvmFlag(@Nullable Annotated annotated) {
return Annotations.Companion.findAnyAnnotation(annotated.getAnnotations(), fqName) != null; return annotated != null && annotated.getAnnotations().hasAnnotation(fqName) ? jvmFlag : 0;
}
public int getJvmFlag() {
return jvmFlag;
} }
} }
@@ -225,9 +225,7 @@ public class AsmUtil {
int flags = getCommonCallableFlags(functionDescriptor, state); int flags = getCommonCallableFlags(functionDescriptor, state);
for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.METHOD_FLAGS) { for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.METHOD_FLAGS) {
if (flagAnnotation.hasAnnotation(functionDescriptor.getOriginal())) { flags |= flagAnnotation.getJvmFlag(functionDescriptor.getOriginal());
flags |= flagAnnotation.getJvmFlag();
}
} }
if (functionDescriptor.getOriginal().isExternal()) { if (functionDescriptor.getOriginal().isExternal()) {
@@ -370,9 +370,7 @@ public class PropertyCodegen {
int modifiers = getDeprecatedAccessFlag(propertyDescriptor); int modifiers = getDeprecatedAccessFlag(propertyDescriptor);
for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) { for (AnnotationCodegen.JvmFlagAnnotation flagAnnotation : AnnotationCodegen.FIELD_FLAGS) {
if (annotatedField != null && flagAnnotation.hasAnnotation(annotatedField)) { modifiers |= flagAnnotation.getJvmFlag(annotatedField);
modifiers |= flagAnnotation.getJvmFlag();
}
} }
if (kind == OwnerKind.PACKAGE) { if (kind == OwnerKind.PACKAGE) {
@@ -43,14 +43,14 @@ fun CallableMemberDescriptor.hasJvmDefaultAnnotation(): Boolean =
DescriptorUtils.getDirectMember(this).annotations.hasAnnotation(JVM_DEFAULT_FQ_NAME) DescriptorUtils.getDirectMember(this).annotations.hasAnnotation(JVM_DEFAULT_FQ_NAME)
private fun Annotated.findJvmSyntheticAnnotation(): AnnotationDescriptor? = 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) ?: (this as? PropertyDescriptor)?.backingField?.annotations?.findAnnotation(JVM_SYNTHETIC_ANNOTATION_FQ_NAME)
fun DeclarationDescriptor.hasJvmSyntheticAnnotation(): Boolean = fun DeclarationDescriptor.hasJvmSyntheticAnnotation(): Boolean =
findJvmSyntheticAnnotation() != null findJvmSyntheticAnnotation() != null
fun DeclarationDescriptor.findStrictfpAnnotation(): AnnotationDescriptor? = fun DeclarationDescriptor.findStrictfpAnnotation(): AnnotationDescriptor? =
DescriptorUtils.getAnnotationByFqName(annotations, STRICTFP_ANNOTATION_FQ_NAME) annotations.findAnnotation(STRICTFP_ANNOTATION_FQ_NAME)
fun DeclarationDescriptor.findSynchronizedAnnotation(): AnnotationDescriptor? = fun DeclarationDescriptor.findSynchronizedAnnotation(): AnnotationDescriptor? =
DescriptorUtils.getAnnotationByFqName(annotations, SYNCHRONIZED_ANNOTATION_FQ_NAME) annotations.findAnnotation(SYNCHRONIZED_ANNOTATION_FQ_NAME)
@@ -122,9 +122,9 @@ class JvmStaticChecker(jvmTarget: JvmTarget, languageVersionSettings: LanguageVe
class JvmNameAnnotationChecker : DeclarationChecker { class JvmNameAnnotationChecker : DeclarationChecker {
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
val platformNameAnnotation = DescriptorUtils.getJvmNameAnnotation(descriptor) val jvmNameAnnotation = DescriptorUtils.findJvmNameAnnotation(descriptor)
if (platformNameAnnotation != null) { if (jvmNameAnnotation != null) {
checkDeclaration(descriptor, platformNameAnnotation, context.trace) checkDeclaration(descriptor, jvmNameAnnotation, context.trace)
} }
} }
@@ -58,10 +58,6 @@ interface Annotations : Iterable<AnnotationDescriptor> {
override fun toString() = "EMPTY" 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? { fun findUseSiteTargetedAnnotation(annotations: Annotations, target: AnnotationUseSiteTarget, fqName: FqName): AnnotationDescriptor? {
return getUseSiteTargetedAnnotations(annotations, target).firstOrNull { it.fqName == fqName } return getUseSiteTargetedAnnotations(annotations, target).firstOrNull { it.fqName == fqName }
} }
@@ -12,8 +12,6 @@ import org.jetbrains.kotlin.builtins.UnsignedTypes;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotated; import org.jetbrains.kotlin.descriptors.annotations.Annotated;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; 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.LookupLocation;
import org.jetbrains.kotlin.incremental.components.NoLookupLocation; import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqName;
@@ -538,7 +536,7 @@ public class DescriptorUtils {
@Nullable @Nullable
public static String getJvmName(@NotNull Annotated annotated) { public static String getJvmName(@NotNull Annotated annotated) {
return getJvmName(getJvmNameAnnotation(annotated)); return getJvmName(findJvmNameAnnotation(annotated));
} }
@Nullable @Nullable
@@ -555,14 +553,8 @@ public class DescriptorUtils {
} }
@Nullable @Nullable
public static AnnotationDescriptor getAnnotationByFqName(@NotNull Annotations annotations, @NotNull FqName name) { public static AnnotationDescriptor findJvmNameAnnotation(@NotNull Annotated annotated) {
AnnotationWithTarget annotationWithTarget = Annotations.Companion.findAnyAnnotation(annotations, name); return annotated.getAnnotations().findAnnotation(JVM_NAME);
return annotationWithTarget == null ? null : annotationWithTarget.getAnnotation();
}
@Nullable
public static AnnotationDescriptor getJvmNameAnnotation(@NotNull Annotated annotated) {
return getAnnotationByFqName(annotated.getAnnotations(), JVM_NAME);
} }
@NotNull @NotNull
@@ -38,7 +38,6 @@ import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.AnalysisFlag
import org.jetbrains.kotlin.descriptors.* 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.project.implementingDescriptors
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.findModuleDescriptor 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) } val referenceUsed: Boolean by lazy { !ReferencesSearch.search(searchParameters).forEach(::checkReference) }
if (descriptor is FunctionDescriptor && if (descriptor is FunctionDescriptor && DescriptorUtils.findJvmNameAnnotation(descriptor) != null) {
DescriptorUtils.getAnnotationByFqName(descriptor.annotations, JvmFileClassUtil.JVM_NAME) != null
) {
if (referenceUsed) return true if (referenceUsed) return true
} }
@@ -22,8 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor; 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.js.PredefinedAnnotation;
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.name.FqName;
import org.jetbrains.kotlin.psi.KtAnnotationEntry; import org.jetbrains.kotlin.psi.KtAnnotationEntry;
@@ -111,13 +109,7 @@ public final class AnnotationsUtils {
@NotNull DeclarationDescriptor descriptor, @NotNull DeclarationDescriptor descriptor,
@NotNull PredefinedAnnotation annotation @NotNull PredefinedAnnotation annotation
) { ) {
return getAnnotationByName(descriptor, annotation.getFqName()); return descriptor.getAnnotations().findAnnotation(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;
} }
public static boolean isNativeObject(@NotNull DeclarationDescriptor descriptor) { public static boolean isNativeObject(@NotNull DeclarationDescriptor descriptor) {
@@ -159,7 +151,7 @@ public final class AnnotationsUtils {
@Nullable @Nullable
public static AnnotationDescriptor getJsNameAnnotation(@NotNull DeclarationDescriptor descriptor) { 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) { 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) { private static boolean hasAnnotationOrInsideAnnotatedClass(@NotNull DeclarationDescriptor descriptor, @NotNull FqName fqName) {
if (getAnnotationByName(descriptor, fqName) != null) { if (descriptor.getAnnotations().hasAnnotation(fqName)) return true;
return true;
}
ClassDescriptor containingClass = DescriptorUtils.getContainingClass(descriptor); ClassDescriptor containingClass = DescriptorUtils.getContainingClass(descriptor);
return containingClass != null && hasAnnotationOrInsideAnnotatedClass(containingClass, fqName); return containingClass != null && hasAnnotationOrInsideAnnotatedClass(containingClass, fqName);
} }