Allow '@Serializable' on a type usage (for kotlinx.serialization/367)

This commit is contained in:
Leonid Startsev
2019-03-04 17:01:57 +03:00
parent a2465910a3
commit ccca813792
2 changed files with 5 additions and 1 deletions
@@ -113,6 +113,7 @@ fun AbstractSerialGenerator.findTypeSerializerOrContext(
): ClassDescriptor? {
if (kType.isTypeParameter()) return null
if (kType.isMarkedNullable) return findTypeSerializerOrContext(module, kType.makeNotNullable(), annotations, sourceElement)
annotations.serializableWith(module)?.let { return it.toClassDescriptor }
additionalSerializersInScopeOfCurrentFile[kType]?.let { return it }
if (kType in contextualKClassListInCurrentFile) return module.getClassFromSerializationPackage(SpecialBuiltins.contextSerializer)
return analyzeSpecialSerializers(module, annotations) ?: findTypeSerializer(module, kType) ?: throw CompilationException(
@@ -78,7 +78,10 @@ internal fun extractKSerializerArgumentFromImplementation(implementationClass: C
}
internal val DeclarationDescriptor.serializableWith: KotlinType?
get() = annotations.findAnnotationKotlinTypeValue(SerializationAnnotations.serializableAnnotationFqName, module,"with")
get() = annotations.serializableWith(module)
internal fun Annotations.serializableWith(module: ModuleDescriptor): KotlinType? =
this.findAnnotationKotlinTypeValue(SerializationAnnotations.serializableAnnotationFqName, module,"with")
internal val DeclarationDescriptor.serializerForClass: KotlinType?
get() = annotations.findAnnotationKotlinTypeValue(SerializationAnnotations.serializerAnnotationFqName, module, "forClass")