Translate attributes in TypeDeserializer

This commit is contained in:
Irene Dea
2021-10-19 12:46:25 -07:00
committed by Dmitriy Novozhilov
parent d444978ebf
commit 2e2e70fede
8 changed files with 45 additions and 22 deletions
@@ -7,12 +7,12 @@ package org.jetbrains.kotlin.types
import org.jetbrains.kotlin.descriptors.annotations.Annotations
interface TypeAttributesTranslator {
interface TypeAttributeTranslator {
fun toAttributes(annotations: Annotations): TypeAttributes
fun toAnnotations(attributes: TypeAttributes): Annotations
}
object DefaultTypeAttributesTranslator : TypeAttributesTranslator {
object DefaultTypeAttributeTranslator : TypeAttributeTranslator {
override fun toAnnotations(attributes: TypeAttributes): Annotations {
return attributes.customAnnotations
}
@@ -114,9 +114,9 @@ class TypeAttributes private constructor(attributes: List<TypeAttribute<*>>) : A
}
fun TypeAttributes.toDefaultAnnotations(): Annotations =
DefaultTypeAttributesTranslator.toAnnotations(this)
DefaultTypeAttributeTranslator.toAnnotations(this)
fun Annotations.toDefaultAttributes(): TypeAttributes = DefaultTypeAttributesTranslator.toAttributes(this)
fun Annotations.toDefaultAttributes(): TypeAttributes = DefaultTypeAttributeTranslator.toAttributes(this)
fun TypeAttributes.replaceAnnotations(newAnnotations: Annotations): TypeAttributes {
val withoutCustom = (custom?.let { this.remove(it) } ?: this)
@@ -534,7 +534,7 @@ interface ClassicTypeSystemContext : TypeSystemInferenceExtensionContext, TypeSy
@Suppress("UNCHECKED_CAST")
return KotlinTypeFactory.simpleType(
DefaultTypeAttributesTranslator.toAttributes(resultingAnnotations),
DefaultTypeAttributeTranslator.toAttributes(resultingAnnotations),
constructor,
arguments as List<TypeProjection>,
nullable
@@ -10,11 +10,12 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.types.*
interface TypeAttributeTranslatorExtension : TypeAttributesTranslator
interface TypeAttributeTranslatorExtension : TypeAttributeTranslator
class TypeAttributeTranslators private constructor(val translators: List<TypeAttributeTranslator>) {
constructor(project: Project) : this(getInstances(project) + DefaultTypeAttributeTranslator)
class TypeAttributeTranslators(project: Project) {
val translators: List<TypeAttributesTranslator> =
getInstances(project) + DefaultTypeAttributesTranslator
fun toAttributes(annotations: Annotations): TypeAttributes {
val translated = translators.map { translator ->
@@ -34,5 +35,7 @@ class TypeAttributeTranslators(project: Project) {
ProjectExtensionDescriptor<TypeAttributeTranslatorExtension>(
"org.jetbrains.kotlin.extensions.typeAttribute",
TypeAttributeTranslatorExtension::class.java
)
) {
val Default = TypeAttributeTranslators(listOf(DefaultTypeAttributeTranslator))
}
}