Refactor: extract AnnotationDescriptor.annotationClass utility

This commit is contained in:
Pavel V. Talanov
2017-04-28 18:41:48 +03:00
parent 7ef18fe5ba
commit 55a0e138fc
19 changed files with 55 additions and 33 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.resolve.AdditionalAnnotationChecker
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
object JsQualifierChecker : AdditionalAnnotationChecker {
@@ -29,7 +30,7 @@ object JsQualifierChecker : AdditionalAnnotationChecker {
val bindingContext = trace.bindingContext
for (entry in entries) {
val annotation = bindingContext[BindingContext.ANNOTATION, entry] ?: continue
if (annotation.type.constructor.declarationDescriptor?.fqNameSafe != AnnotationsUtils.JS_QUALIFIER_ANNOTATION) continue
if (annotation.annotationClass?.fqNameSafe != AnnotationsUtils.JS_QUALIFIER_ANNOTATION) continue
val argument = annotation.allValueArguments.values.singleOrNull()?.value as? String ?: continue
if (!validateQualifier(argument)) {
val argumentPsi = entry.valueArgumentList!!.arguments[0]
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.checkers.SimpleDeclarationChecker
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.getAnnotationRetention
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
@@ -36,7 +37,7 @@ object JsRuntimeAnnotationChecker : SimpleDeclarationChecker {
bindingContext: BindingContext
) {
for ((annotationDescriptor, _) in descriptor.annotations.getAllAnnotations()) {
val annotationClass = annotationDescriptor.type.constructor.declarationDescriptor as? ClassDescriptor ?: continue
val annotationClass = annotationDescriptor.annotationClass ?: continue
if (annotationClass.getAnnotationRetention() != KotlinRetention.RUNTIME) continue
val annotationPsi = (annotationDescriptor.source as? PsiSourceElement)?.psi ?: declaration
@@ -38,6 +38,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt.getAnnotationClass;
public final class AnnotationsUtils {
private static final String JS_NAME = "kotlin.js.JsName";
public static final FqName JS_MODULE_ANNOTATION = new FqName("kotlin.js.JsModule");
@@ -218,10 +220,10 @@ public final class AnnotationsUtils {
@NotNull FqName annotationFqName
) {
for (AnnotationDescriptor annotation : getContainingFileAnnotations(bindingContext, declaration)) {
DeclarationDescriptor annotationType = annotation.getType().getConstructor().getDeclarationDescriptor();
DeclarationDescriptor annotationType = getAnnotationClass(annotation);
if (annotationType == null) continue;
FqNameUnsafe fqName = DescriptorUtils.getFqName(annotation.getType().getConstructor().getDeclarationDescriptor());
FqNameUnsafe fqName = DescriptorUtils.getFqName(annotationType);
if (fqName.equals(annotationFqName.toUnsafe())) {
return extractSingleStringArgument(annotation);
}
@@ -235,10 +237,10 @@ public final class AnnotationsUtils {
public static boolean isFromNonModuleFile(@NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor declaration) {
for (AnnotationDescriptor annotation : getContainingFileAnnotations(bindingContext, declaration)) {
DeclarationDescriptor annotationType = annotation.getType().getConstructor().getDeclarationDescriptor();
DeclarationDescriptor annotationType = getAnnotationClass(annotation);
if (annotationType == null) continue;
DeclarationDescriptor annotationTypeDescriptor = annotation.getType().getConstructor().getDeclarationDescriptor();
DeclarationDescriptor annotationTypeDescriptor = getAnnotationClass(annotation);
assert annotationTypeDescriptor != null : "Annotation type should have descriptor: " + annotation.getType();
FqNameUnsafe fqName = DescriptorUtils.getFqName(annotationTypeDescriptor);