Use a single AnnotatedCallableKind enum item for property
This commit is contained in:
-2
@@ -19,8 +19,6 @@ package org.jetbrains.kotlin.serialization.deserialization;
|
||||
public enum AnnotatedCallableKind {
|
||||
FUNCTION,
|
||||
PROPERTY,
|
||||
PROPERTY_SYNTHETIC_FUNCTION,
|
||||
PROPERTY_FIELD,
|
||||
PROPERTY_GETTER,
|
||||
PROPERTY_SETTER
|
||||
}
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.types.JetType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface AnnotationAndConstantLoader<A, C> {
|
||||
public interface AnnotationAndConstantLoader<A, C, T> {
|
||||
@NotNull
|
||||
List<A> loadClassAnnotations(
|
||||
@NotNull ProtoBuf.Class classProto,
|
||||
@@ -31,7 +31,7 @@ public interface AnnotationAndConstantLoader<A, C> {
|
||||
);
|
||||
|
||||
@NotNull
|
||||
List<A> loadCallableAnnotations(
|
||||
List<T> loadCallableAnnotations(
|
||||
@NotNull ProtoContainer container,
|
||||
@NotNull ProtoBuf.Callable proto,
|
||||
@NotNull NameResolver nameResolver,
|
||||
|
||||
+2
-26
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.kotlin.serialization.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
@@ -48,7 +47,7 @@ public class MemberDeserializer(private val c: DeserializationContext) {
|
||||
|
||||
val property = DeserializedPropertyDescriptor(
|
||||
c.containingDeclaration, null,
|
||||
getPropertyAnnotations(proto),
|
||||
getAnnotations(proto, flags, AnnotatedCallableKind.PROPERTY),
|
||||
modality(Flags.MODALITY.get(flags)),
|
||||
visibility(Flags.VISIBILITY.get(flags)),
|
||||
Flags.CALLABLE_KIND.get(flags) == Callable.CallableKind.VAR,
|
||||
@@ -178,31 +177,13 @@ public class MemberDeserializer(private val c: DeserializationContext) {
|
||||
if (!Flags.HAS_ANNOTATIONS.get(flags)) {
|
||||
return Annotations.EMPTY
|
||||
}
|
||||
return DeserializedAnnotations(c.storageManager) {
|
||||
return DeserializedAnnotationsWithPossibleTargets(c.storageManager) {
|
||||
c.components.annotationAndConstantLoader.loadCallableAnnotations(
|
||||
c.containingDeclaration.asProtoContainer(), proto, c.nameResolver, kind
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getPropertyAnnotations(proto: Callable): Annotations {
|
||||
return DeserializedAnnotationsWithPossibleTargets(c.storageManager) {
|
||||
val annotations = arrayListOf<AnnotationWithTarget>()
|
||||
val container = c.containingDeclaration.asProtoContainer()
|
||||
|
||||
fun loadAnnotations(kind: AnnotatedCallableKind, mapper: (AnnotationDescriptor) -> AnnotationWithTarget) {
|
||||
annotations += c.components.annotationAndConstantLoader.loadCallableAnnotations(
|
||||
container, proto, c.nameResolver, kind
|
||||
).map(mapper)
|
||||
}
|
||||
|
||||
loadAnnotations(AnnotatedCallableKind.PROPERTY_SYNTHETIC_FUNCTION) { AnnotationWithTarget(it, null) }
|
||||
loadAnnotations(AnnotatedCallableKind.PROPERTY_FIELD) { AnnotationWithTarget(it, AnnotationUseSiteTarget.FIELD) }
|
||||
|
||||
annotations
|
||||
}
|
||||
}
|
||||
|
||||
private fun getReceiverParameterAnnotations(
|
||||
proto: Callable,
|
||||
kind: AnnotatedCallableKind,
|
||||
@@ -251,9 +232,4 @@ public class MemberDeserializer(private val c: DeserializationContext) {
|
||||
is DeserializedClassDescriptor -> ProtoContainer(classProto, null)
|
||||
else -> error("Only members in classes or package fragments should be serialized: $this")
|
||||
}
|
||||
|
||||
private companion object {
|
||||
val CONSTRUCTOR_PARAMETER_ANNOTATION_MAPPER =
|
||||
{ a: AnnotationDescriptor -> AnnotationWithTarget(a, AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER) }
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.serialization.deserialization
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationWithTarget
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.resolve.constants.ConstantValue
|
||||
import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
@@ -27,7 +28,7 @@ public class DeserializationComponents(
|
||||
public val storageManager: StorageManager,
|
||||
public val moduleDescriptor: ModuleDescriptor,
|
||||
public val classDataFinder: ClassDataFinder,
|
||||
public val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>>,
|
||||
public val annotationAndConstantLoader: AnnotationAndConstantLoader<AnnotationDescriptor, ConstantValue<*>, AnnotationWithTarget>,
|
||||
public val packageFragmentProvider: PackageFragmentProvider,
|
||||
public val localClassResolver: LocalClassResolver,
|
||||
public val flexibleTypeCapabilitiesDeserializer: FlexibleTypeCapabilitiesDeserializer,
|
||||
|
||||
Reference in New Issue
Block a user