Use a single AnnotatedCallableKind enum item for property

This commit is contained in:
Yan Zhulanow
2015-08-27 18:15:14 +03:00
parent 97e4c097ba
commit e7703df0b6
14 changed files with 130 additions and 118 deletions
@@ -19,8 +19,6 @@ package org.jetbrains.kotlin.serialization.deserialization;
public enum AnnotatedCallableKind {
FUNCTION,
PROPERTY,
PROPERTY_SYNTHETIC_FUNCTION,
PROPERTY_FIELD,
PROPERTY_GETTER,
PROPERTY_SETTER
}
@@ -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,
@@ -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) }
}
}
@@ -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,