From cfcecaaeabb597c1c6e24ad5a950dbd20cab9f4b Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Wed, 11 Sep 2019 17:05:13 +0300 Subject: [PATCH] LightClassApplicabilityCheckExtensions refactoring and IdeSerializationPluginApplicabilityExtension fix --- .../parcel/IDEParcelableApplicabilityExtension.kt | 11 +++++++---- ...nnotationBasedLightClassApplicabilityExtension.kt | 12 +++++++----- .../IdeSerializationPluginApplicabilityExtension.kt | 12 +++++++++--- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/IDEParcelableApplicabilityExtension.kt b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/IDEParcelableApplicabilityExtension.kt index 6a3ce9bdc66..57426f135d8 100644 --- a/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/IDEParcelableApplicabilityExtension.kt +++ b/plugins/android-extensions/android-extensions-idea/src/org/jetbrains/kotlin/android/parcel/IDEParcelableApplicabilityExtension.kt @@ -10,18 +10,21 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.extensions.LightClassApplicabilityCheckExtension import org.jetbrains.kotlin.extensions.LightClassApplicabilityType import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.LightClass +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.UltraLightClass + class IDEParcelableApplicabilityExtension : LightClassApplicabilityCheckExtension { override fun checkApplicabilityType(declaration: KtDeclaration, descriptor: Lazy): LightClassApplicabilityType { - if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return LightClassApplicabilityType.UltraLightClass + if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return UltraLightClass - val descriptorValue = descriptor.value ?: return LightClassApplicabilityType.UltraLightClass + val descriptorValue = descriptor.value ?: return UltraLightClass val classDescriptor = (descriptorValue as? ClassDescriptor) ?: descriptorValue.containingDeclaration as? ClassDescriptor - ?: return LightClassApplicabilityType.UltraLightClass + ?: return UltraLightClass - return if (classDescriptor.isParcelize) LightClassApplicabilityType.LightClass else LightClassApplicabilityType.UltraLightClass + return if (classDescriptor.isParcelize) LightClass else UltraLightClass } } \ No newline at end of file diff --git a/plugins/annotation-based-compiler-plugins-ide-support/src/AnnotationBasedLightClassApplicabilityExtension.kt b/plugins/annotation-based-compiler-plugins-ide-support/src/AnnotationBasedLightClassApplicabilityExtension.kt index 2feb2f7e3a0..daec68b900c 100644 --- a/plugins/annotation-based-compiler-plugins-ide-support/src/AnnotationBasedLightClassApplicabilityExtension.kt +++ b/plugins/annotation-based-compiler-plugins-ide-support/src/AnnotationBasedLightClassApplicabilityExtension.kt @@ -13,6 +13,8 @@ import org.jetbrains.kotlin.extensions.LightClassApplicabilityCheckExtension import org.jetbrains.kotlin.extensions.LightClassApplicabilityType import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtModifierListOwner +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.LightClass +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.UltraLightClass abstract class AnnotationBasedLightClassApplicabilityExtension(project: Project, annotationOptionPrefix: String) : LightClassApplicabilityCheckExtension, @@ -24,18 +26,18 @@ abstract class AnnotationBasedLightClassApplicabilityExtension(project: Project, cachedAnnotationsNames.getAnnotationNames(modifierListOwner) override fun checkApplicabilityType(declaration: KtDeclaration, descriptor: Lazy): LightClassApplicabilityType { - if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return LightClassApplicabilityType.UltraLightClass + if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return UltraLightClass - if (cachedAnnotationsNames.getAnnotationNames(declaration).isEmpty()) return LightClassApplicabilityType.UltraLightClass + if (cachedAnnotationsNames.getAnnotationNames(declaration).isEmpty()) return UltraLightClass - val descriptorValue = descriptor.value ?: return LightClassApplicabilityType.UltraLightClass + val descriptorValue = descriptor.value ?: return UltraLightClass val classDescriptor = (descriptorValue as? ClassDescriptor) ?: descriptorValue.containingDeclaration as? ClassDescriptor - ?: return LightClassApplicabilityType.UltraLightClass + ?: return UltraLightClass val hasSpecialAnnotation = run { classDescriptor.hasSpecialAnnotation(declaration) } - return if (hasSpecialAnnotation) LightClassApplicabilityType.LightClass else LightClassApplicabilityType.UltraLightClass + return if (hasSpecialAnnotation) LightClass else UltraLightClass } } \ No newline at end of file diff --git a/plugins/kotlin-serialization/kotlin-serialization-ide/src/org/jetbrains/kotlinx/serialization/idea/IdeSerializationPluginApplicabilityExtension.kt b/plugins/kotlin-serialization/kotlin-serialization-ide/src/org/jetbrains/kotlinx/serialization/idea/IdeSerializationPluginApplicabilityExtension.kt index 804ef0567de..c873ebd5bfc 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-ide/src/org/jetbrains/kotlinx/serialization/idea/IdeSerializationPluginApplicabilityExtension.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-ide/src/org/jetbrains/kotlinx/serialization/idea/IdeSerializationPluginApplicabilityExtension.kt @@ -12,14 +12,20 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.extensions.LightClassApplicabilityCheckExtension import org.jetbrains.kotlin.extensions.LightClassApplicabilityType import org.jetbrains.kotlin.psi.KtDeclaration +import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationAnnotations.serializableAnnotationFqName +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.LightClass +import org.jetbrains.kotlin.extensions.LightClassApplicabilityType.UltraLightClass class IdeSerializationPluginApplicabilityExtension : LightClassApplicabilityCheckExtension { override fun checkApplicabilityType(declaration: KtDeclaration, descriptor: Lazy): LightClassApplicabilityType { - if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return LightClassApplicabilityType.UltraLightClass + if (!declaration.isOrdinaryClass || !declaration.isAnnotated) return UltraLightClass return (descriptor.value as? ClassDescriptor)?.let { - getIfEnabledOn(it) { LightClassApplicabilityType.LightClass } - } ?: LightClassApplicabilityType.UltraLightClass + getIfEnabledOn(it) { + if (it.annotations.hasAnnotation(serializableAnnotationFqName)) LightClass + else UltraLightClass + } + } ?: UltraLightClass } } \ No newline at end of file