From 696dce68fb34fdb10d30d611d3b7914ac9bcf193 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 17 Dec 2015 22:20:46 +0300 Subject: [PATCH] Move deserialized callable descriptors to single file, convert to Kotlin --- .../deserialization/MemberDeserializer.kt | 5 +- .../DeserializedCallableMemberDescriptor.kt | 98 +++++++++++++- .../DeserializedConstructorDescriptor.kt | 58 --------- .../DeserializedPropertyDescriptor.kt | 58 --------- .../DeserializedSimpleFunctionDescriptor.java | 121 ------------------ 5 files changed, 101 insertions(+), 239 deletions(-) delete mode 100644 core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedConstructorDescriptor.kt delete mode 100644 core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPropertyDescriptor.kt delete mode 100644 core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedSimpleFunctionDescriptor.java diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index 380756260ee..6edcb355bd6 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -139,7 +139,10 @@ public class MemberDeserializer(private val c: DeserializationContext) { val receiverAnnotations = if (proto.hasReceiver()) getReceiverParameterAnnotations(proto, AnnotatedCallableKind.FUNCTION) else Annotations.EMPTY - val function = DeserializedSimpleFunctionDescriptor.create(c.containingDeclaration, annotations, proto, c.nameResolver, c.typeTable) + val function = DeserializedSimpleFunctionDescriptor( + c.containingDeclaration, /* original = */ null, annotations, c.nameResolver.getName(proto.name), + Deserialization.memberKind(Flags.MEMBER_KIND.get(proto.flags)), proto, c.nameResolver, c.typeTable + ) val local = c.childContext(function, proto.typeParameterList) function.initialize( proto.receiverType(c.typeTable)?.let { local.typeDeserializer.type(it, receiverAnnotations) }, diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedCallableMemberDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedCallableMemberDescriptor.kt index 5bd2cdf5366..68db5756473 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedCallableMemberDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedCallableMemberDescriptor.kt @@ -17,7 +17,14 @@ package org.jetbrains.kotlin.serialization.deserialization.descriptors import com.google.protobuf.MessageLite -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.annotations.Annotations +import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl +import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl +import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl +import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.TypeTable @@ -28,3 +35,92 @@ interface DeserializedCallableMemberDescriptor : CallableMemberDescriptor { val typeTable: TypeTable } + +class DeserializedSimpleFunctionDescriptor( + containingDeclaration: DeclarationDescriptor, + original: SimpleFunctionDescriptor?, + annotations: Annotations, + name: Name, + kind: CallableMemberDescriptor.Kind, + override val proto: ProtoBuf.Function, + override val nameResolver: NameResolver, + override val typeTable: TypeTable +) : DeserializedCallableMemberDescriptor, + SimpleFunctionDescriptorImpl(containingDeclaration, original, annotations, name, kind, SourceElement.NO_SOURCE) { + + override fun createSubstitutedCopy( + newOwner: DeclarationDescriptor, + original: FunctionDescriptor?, + kind: CallableMemberDescriptor.Kind, + newName: Name?, + preserveSource: Boolean + ): FunctionDescriptorImpl { + return DeserializedSimpleFunctionDescriptor( + newOwner, original as SimpleFunctionDescriptor?, annotations, newName ?: name, kind, proto, nameResolver, typeTable + ) + } +} + +class DeserializedPropertyDescriptor( + containingDeclaration: DeclarationDescriptor, + original: PropertyDescriptor?, + annotations: Annotations, + modality: Modality, + visibility: Visibility, + isVar: Boolean, + name: Name, + kind: CallableMemberDescriptor.Kind, + isLateInit: Boolean, + isConst: Boolean, + override val proto: ProtoBuf.Property, + override val nameResolver: NameResolver, + override val typeTable: TypeTable +) : DeserializedCallableMemberDescriptor, + PropertyDescriptorImpl(containingDeclaration, original, annotations, + modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, isLateInit, isConst) { + + override fun createSubstitutedCopy( + newOwner: DeclarationDescriptor, + newModality: Modality, + newVisibility: Visibility, + original: PropertyDescriptor?, + kind: CallableMemberDescriptor.Kind + ): PropertyDescriptorImpl { + return DeserializedPropertyDescriptor( + newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, isLateInit, isConst, + proto, nameResolver, typeTable + ) + } +} + +class DeserializedConstructorDescriptor( + containingDeclaration: ClassDescriptor, + original: ConstructorDescriptor?, + annotations: Annotations, + isPrimary: Boolean, + kind: CallableMemberDescriptor.Kind, + override val proto: ProtoBuf.Constructor, + override val nameResolver: NameResolver, + override val typeTable: TypeTable +) : DeserializedCallableMemberDescriptor, + ConstructorDescriptorImpl(containingDeclaration, original, annotations, isPrimary, kind, SourceElement.NO_SOURCE) { + + override fun createSubstitutedCopy( + newOwner: DeclarationDescriptor, + original: FunctionDescriptor?, + kind: CallableMemberDescriptor.Kind, + newName: Name?, + preserveSource: Boolean + ): DeserializedConstructorDescriptor { + return DeserializedConstructorDescriptor( + newOwner as ClassDescriptor, original as ConstructorDescriptor?, annotations, isPrimary, kind, + proto, nameResolver, typeTable + ) + } + + override fun isExternal(): Boolean = false + + override fun isInline(): Boolean = false + + override fun isTailrec(): Boolean = false +} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedConstructorDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedConstructorDescriptor.kt deleted file mode 100644 index cbd2a190988..00000000000 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedConstructorDescriptor.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.serialization.deserialization.descriptors - -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.descriptors.impl.ConstructorDescriptorImpl -import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.NameResolver -import org.jetbrains.kotlin.serialization.deserialization.TypeTable - -public class DeserializedConstructorDescriptor( - containingDeclaration: ClassDescriptor, - original: ConstructorDescriptor?, - annotations: Annotations, - isPrimary: Boolean, - kind: CallableMemberDescriptor.Kind, - override val proto: ProtoBuf.Constructor, - override val nameResolver: NameResolver, - override val typeTable: TypeTable -) : ConstructorDescriptorImpl(containingDeclaration, original, annotations, isPrimary, kind, SourceElement.NO_SOURCE), - DeserializedCallableMemberDescriptor { - - override fun createSubstitutedCopy( - newOwner: DeclarationDescriptor, - original: FunctionDescriptor?, - kind: CallableMemberDescriptor.Kind, - newName: Name?, - preserveSource: Boolean - ): DeserializedConstructorDescriptor { - return DeserializedConstructorDescriptor( - newOwner as ClassDescriptor, original as ConstructorDescriptor?, - annotations, isPrimary, kind, proto, nameResolver, typeTable - ) - } - - override fun isExternal(): Boolean = false - - override fun isInline(): Boolean = false - - override fun isTailrec(): Boolean = false -} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPropertyDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPropertyDescriptor.kt deleted file mode 100644 index 6dec77ca309..00000000000 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPropertyDescriptor.kt +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.serialization.deserialization.descriptors - -import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind -import org.jetbrains.kotlin.descriptors.annotations.Annotations -import org.jetbrains.kotlin.descriptors.impl.PropertyDescriptorImpl -import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.serialization.ProtoBuf -import org.jetbrains.kotlin.serialization.deserialization.NameResolver -import org.jetbrains.kotlin.serialization.deserialization.TypeTable - -class DeserializedPropertyDescriptor( - containingDeclaration: DeclarationDescriptor, - original: PropertyDescriptor?, - annotations: Annotations, - modality: Modality, - visibility: Visibility, - isVar: Boolean, - name: Name, - kind: Kind, - lateInit: Boolean, - isConst: Boolean, - override val proto: ProtoBuf.Property, - override val nameResolver: NameResolver, - override val typeTable: TypeTable -) : DeserializedCallableMemberDescriptor, - PropertyDescriptorImpl(containingDeclaration, original, annotations, - modality, visibility, isVar, name, kind, SourceElement.NO_SOURCE, lateInit, isConst) { - - override fun createSubstitutedCopy( - newOwner: DeclarationDescriptor, - newModality: Modality, - newVisibility: Visibility, - original: PropertyDescriptor?, - kind: Kind - ): PropertyDescriptorImpl { - return DeserializedPropertyDescriptor( - newOwner, original, annotations, newModality, newVisibility, isVar, name, kind, isLateInit, isConst, - proto, nameResolver, typeTable - ) - } -} diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedSimpleFunctionDescriptor.java b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedSimpleFunctionDescriptor.java deleted file mode 100644 index 28eb5728f68..00000000000 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedSimpleFunctionDescriptor.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.serialization.deserialization.descriptors; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.descriptors.FunctionDescriptor; -import org.jetbrains.kotlin.descriptors.SimpleFunctionDescriptor; -import org.jetbrains.kotlin.descriptors.SourceElement; -import org.jetbrains.kotlin.descriptors.annotations.Annotations; -import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl; -import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl; -import org.jetbrains.kotlin.name.Name; -import org.jetbrains.kotlin.serialization.Flags; -import org.jetbrains.kotlin.serialization.ProtoBuf; -import org.jetbrains.kotlin.serialization.deserialization.Deserialization; -import org.jetbrains.kotlin.serialization.deserialization.NameResolver; -import org.jetbrains.kotlin.serialization.deserialization.TypeTable; - -public class DeserializedSimpleFunctionDescriptor extends SimpleFunctionDescriptorImpl implements DeserializedCallableMemberDescriptor { - - private final ProtoBuf.Function proto; - private final NameResolver nameResolver; - private final TypeTable typeTable; - - private DeserializedSimpleFunctionDescriptor( - @NotNull DeclarationDescriptor containingDeclaration, - @Nullable SimpleFunctionDescriptor original, - @NotNull Annotations annotations, - @NotNull Name name, - @NotNull Kind kind, - @NotNull ProtoBuf.Function proto, - @NotNull NameResolver nameResolver, - @NotNull TypeTable typeTable - ) { - super(containingDeclaration, original, annotations, name, kind, SourceElement.NO_SOURCE); - this.proto = proto; - this.nameResolver = nameResolver; - this.typeTable = typeTable; - } - - @NotNull - @Override - protected FunctionDescriptorImpl createSubstitutedCopy( - @NotNull DeclarationDescriptor newOwner, - @Nullable FunctionDescriptor original, - @NotNull Kind kind, - @Nullable Name newName, - boolean preserveSource - ) { - return new DeserializedSimpleFunctionDescriptor( - newOwner, - (DeserializedSimpleFunctionDescriptor) original, - getAnnotations(), - newName != null ? newName : getName(), - kind, - proto, - nameResolver, - typeTable - ); - } - - @NotNull - @Override - public DeserializedSimpleFunctionDescriptor getOriginal() { - return (DeserializedSimpleFunctionDescriptor) super.getOriginal(); - } - - @NotNull - @Override - public ProtoBuf.Function getProto() { - return proto; - } - - @NotNull - @Override - public NameResolver getNameResolver() { - return nameResolver; - } - - @NotNull - @Override - public TypeTable getTypeTable() { - return typeTable; - } - - @NotNull - public static DeserializedSimpleFunctionDescriptor create( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull ProtoBuf.Function proto, - @NotNull NameResolver nameResolver, - @NotNull TypeTable typeTable - ) { - return new DeserializedSimpleFunctionDescriptor( - containingDeclaration, - null, - annotations, - nameResolver.getName(proto.getName()), - Deserialization.memberKind(Flags.MEMBER_KIND.get(proto.getFlags())), - proto, - nameResolver, - typeTable - ); - } -}