From 9cb8a352753bdf4a354bf65cc5e3b8dc06965ebb Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 30 Aug 2018 12:47:42 +0300 Subject: [PATCH] Minor. Pull user-data related things to CallableDescriptor Currently, we assume user data for all non-FunctionDescriptor declarations is empty --- .../kotlin/codegen/AccessorForFunctionDescriptor.kt | 2 +- .../kotlin/codegen/coroutines/CoroutineCodegen.kt | 2 +- .../kotlin/codegen/coroutines/coroutineCodegenUtil.kt | 4 ++-- .../kotlin/contracts/ContractDeserializerImpl.kt | 3 ++- .../kotlin/resolve/FunctionDescriptorResolver.kt | 2 +- .../org/jetbrains/kotlin/resolve/calls/DslMarkerUtils.kt | 3 ++- .../backend/common/descriptors/WrappedDescriptors.kt | 8 ++++++-- .../kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt | 4 ++-- .../kotlin/contracts/description/LazyContractProvider.kt | 4 ++-- .../resolve/calls/util/FakeCallableDescriptorForObject.kt | 2 ++ .../kotlin/load/java/lazy/descriptors/LazyJavaScope.kt | 2 +- .../jetbrains/kotlin/descriptors/CallableDescriptor.java | 6 ++++++ .../jetbrains/kotlin/descriptors/FunctionDescriptor.java | 6 ------ .../impl/AbstractReceiverParameterDescriptor.java | 6 ++++++ .../kotlin/descriptors/impl/PropertyDescriptorImpl.java | 6 ++++++ .../kotlin/descriptors/impl/VariableDescriptorImpl.java | 6 ++++++ .../serialization/deserialization/ContractDeserializer.kt | 5 +++-- .../serialization/deserialization/MemberDeserializer.kt | 4 ++-- .../descriptors/DeserializedMemberDescriptor.kt | 2 +- 19 files changed, 52 insertions(+), 25 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt index ec123cbafa2..6aec2ef89dc 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt @@ -48,7 +48,7 @@ class AccessorForFunctionDescriptor( isSuspend = calleeDescriptor.isSuspend if (calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) != null) { - userDataMap = LinkedHashMap, Any>() + userDataMap = LinkedHashMap, Any>() userDataMap[INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION] = calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt index d00996a9958..39df85b2caf 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -50,7 +50,7 @@ abstract class AbstractCoroutineCodegen( element: KtElement, closureContext: ClosureContext, classBuilder: ClassBuilder, - private val userDataForDoResume: Map, *>? = null + private val userDataForDoResume: Map, *>? = null ) : ClosureCodegen( outerExpressionCodegen.state, element, null, closureContext, null, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt index c2e7c90b0f4..71ce0ec3d64 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/coroutineCodegenUtil.kt @@ -117,10 +117,10 @@ private val GET_CONTEXT_METHOD_NAME = "getContext" data class ResolvedCallWithRealDescriptor(val resolvedCall: ResolvedCall<*>, val fakeContinuationExpression: KtExpression) @JvmField -val INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION = object : FunctionDescriptor.UserDataKey {} +val INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION = object : CallableDescriptor.UserDataKey {} @JvmField -val INITIAL_SUSPEND_DESCRIPTOR_FOR_DO_RESUME = object : FunctionDescriptor.UserDataKey {} +val INITIAL_SUSPEND_DESCRIPTOR_FOR_DO_RESUME = object : CallableDescriptor.UserDataKey {} // Resolved calls to suspension function contain descriptors as they visible within coroutines: // E.g. `fun await(f: CompletableFuture): V` instead of `fun await(f: CompletableFuture, machine: Continuation): Unit` diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/ContractDeserializerImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/ContractDeserializerImpl.kt index b94c429704a..81d69692891 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/ContractDeserializerImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/ContractDeserializerImpl.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.contracts import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.contracts.description.* import org.jetbrains.kotlin.contracts.description.expressions.* +import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.Flags @@ -36,7 +37,7 @@ class ContractDeserializerImpl(private val configuration: DeserializationConfigu ownerFunction: FunctionDescriptor, typeTable: TypeTable, typeDeserializer: TypeDeserializer - ): Pair, LazyContractProvider>? { + ): Pair, LazyContractProvider>? { if (!proto.hasContract()) return null if (!configuration.readDeserializedContracts) return null diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index dd3cc902c45..6bdd100d42d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -204,7 +204,7 @@ class FunctionDescriptorResolver( ) val contractProvider = getContractProvider(functionDescriptor, trace, scope, dataFlowInfo, function) - val userData = mutableMapOf, Any>().apply { + val userData = mutableMapOf, Any>().apply { if (contractProvider != null) { put(ContractProviderKey, contractProvider) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DslMarkerUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DslMarkerUtils.kt index 7f8bb7f513b..4e914ab999b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DslMarkerUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DslMarkerUtils.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.resolve.calls +import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor @@ -20,7 +21,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs object DslMarkerUtils { - object FunctionTypeAnnotationsKey : FunctionDescriptor.UserDataKey + object FunctionTypeAnnotationsKey : CallableDescriptor.UserDataKey data class DslMarkersFromReceiver( val common: Set, diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt index c821d3ac711..fbf38fdf249 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/descriptors/WrappedDescriptors.kt @@ -80,6 +80,8 @@ abstract class WrappedCallableDescriptor( override fun acceptVoid(visitor: DeclarationDescriptorVisitor?) { TODO("not implemented") } + + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } open class WrappedValueParameterDescriptor( @@ -289,7 +291,7 @@ open class WrappedSimpleFunctionDescriptor( override fun getInitialSignatureDescriptor() = null - override fun getUserData(key: FunctionDescriptor.UserDataKey?): V? = null + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null override fun newCopyBuilder(): FunctionDescriptor.CopyBuilder { TODO("not implemented") @@ -378,7 +380,7 @@ open class WrappedClassConstructorDescriptor( override fun isSuspend() = false - override fun getUserData(key: FunctionDescriptor.UserDataKey?): V? = null + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null override fun isExternal() = owner.isExternal @@ -586,4 +588,6 @@ open class WrappedPropertyDescriptor( override fun getDelegateField(): FieldDescriptor? { TODO("not implemented") } + + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt index 00159e38375..06a95db8df2 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltinFunctionDescriptor.kt @@ -47,7 +47,7 @@ abstract class IrBuiltinOperatorDescriptorBase(containingDeclaration: Declaratio override fun getKind(): CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.SYNTHESIZED override fun getInitialSignatureDescriptor(): FunctionDescriptor? = null override fun isExternal(): Boolean = false - override fun getUserData(key: FunctionDescriptor.UserDataKey?): V? = null + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null override fun isHiddenForResolutionEverywhereBesideSupercalls(): Boolean = false override fun isHiddenToOvercomeSignatureClash(): Boolean = false override fun isInfix(): Boolean = false @@ -118,4 +118,4 @@ class IrBuiltinValueParameterDescriptorImpl( override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R { return visitor.visitValueParameterDescriptor(this, data) } -} \ No newline at end of file +} diff --git a/compiler/resolution/src/org/jetbrains/kotlin/contracts/description/LazyContractProvider.kt b/compiler/resolution/src/org/jetbrains/kotlin/contracts/description/LazyContractProvider.kt index 8b68fc5c902..b46abe53898 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/contracts/description/LazyContractProvider.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/contracts/description/LazyContractProvider.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.contracts.description -import org.jetbrains.kotlin.descriptors.FunctionDescriptor +import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.serialization.deserialization.ContractProvider /** @@ -51,4 +51,4 @@ class LazyContractProvider(private val computation: () -> Any?) : ContractProvid } // For storing into UserDataMap of FunctionDescriptor -object ContractProviderKey : FunctionDescriptor.UserDataKey +object ContractProviderKey : CallableDescriptor.UserDataKey diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/FakeCallableDescriptorForObject.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/FakeCallableDescriptorForObject.kt index 2f79cc4a3c5..78946d85878 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/FakeCallableDescriptorForObject.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/util/FakeCallableDescriptorForObject.kt @@ -76,4 +76,6 @@ open class FakeCallableDescriptorForObject( override fun getContainingDeclaration() = classDescriptor.getClassObjectReferenceTarget().containingDeclaration override fun substitute(substitutor: TypeSubstitutor) = this + + override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt index b93afe5856f..6ebca07ea1b 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaScope.kt @@ -144,7 +144,7 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS if (effectiveSignature.receiverType != null) mapOf(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER to valueParameters.descriptors.first()) else - emptyMap, ValueParameterDescriptor>() + emptyMap, ValueParameterDescriptor>() ) functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames, valueParameters.hasSynthesizedNames) diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java index 2b7cd11cff1..a9bd2d96352 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java @@ -64,4 +64,10 @@ public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, @NotNull Collection getOverriddenDescriptors(); + + interface UserDataKey {} + + // TODO: pull up userdata related members to DeclarationDescriptor and use more efficient implementation (e.g. THashMap) + @Nullable + V getUserData(UserDataKey key); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java index 84e72cc57b7..f283f98f3ac 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/FunctionDescriptor.java @@ -68,12 +68,6 @@ public interface FunctionDescriptor extends CallableMemberDescriptor { boolean isSuspend(); - interface UserDataKey {} - - // TODO: pull up userdata related members to DeclarationDescriptor and use more efficient implementation (e.g. THashMap) - @Nullable - V getUserData(UserDataKey key); - @NotNull @Override CopyBuilder newCopyBuilder(); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java index f944d053788..c7b5097419f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java @@ -135,4 +135,10 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes public SourceElement getSource() { return SourceElement.NO_SOURCE; } + + @Nullable + @Override + public V getUserData(UserDataKey key) { + return null; + } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java index 5f53c8fbc7b..1b8aceb34b5 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -546,4 +546,10 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp .setCopyOverrides(copyOverrides) .build(); } + + @Nullable + @Override + public V getUserData(UserDataKey key) { + return null; + } } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java index cce427321af..fcb022f7c1c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java @@ -107,4 +107,10 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo public boolean isConst() { return false; } + + @Nullable + @Override + public V getUserData(UserDataKey key) { + return null; + } } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ContractDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ContractDeserializer.kt index 541daeed133..b293c54e81b 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ContractDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/ContractDeserializer.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.serialization.deserialization +import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.TypeTable @@ -26,7 +27,7 @@ interface ContractDeserializer { ownerFunction: FunctionDescriptor, typeTable: TypeTable, typeDeserializer: TypeDeserializer - ): Pair, ContractProvider>? + ): Pair, ContractProvider>? companion object { val DEFAULT = object : ContractDeserializer { @@ -35,7 +36,7 @@ interface ContractDeserializer { ownerFunction: FunctionDescriptor, typeTable: TypeTable, typeDeserializer: TypeDeserializer - ): Pair, Nothing>? = null + ): Pair, Nothing>? = null } } } 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 62392308b93..43d2462c343 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -179,7 +179,7 @@ class MemberDeserializer(private val c: DeserializationContext) { unsubstitutedReturnType: KotlinType?, modality: Modality?, visibility: Visibility, - userDataMap: Map, *>, + userDataMap: Map, *>, isSuspend: Boolean ) { initialize( @@ -284,7 +284,7 @@ class MemberDeserializer(private val c: DeserializationContext) { local.typeDeserializer.type(proto.returnType(c.typeTable)), ProtoEnumFlags.modality(Flags.MODALITY.get(flags)), ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)), - emptyMap, Any?>(), + emptyMap, Any?>(), Flags.IS_SUSPEND.get(flags) ) function.isOperator = Flags.IS_OPERATOR.get(flags) diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt index 0fa3bca8856..5c1fda69e8f 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedMemberDescriptor.kt @@ -83,7 +83,7 @@ class DeserializedSimpleFunctionDescriptor( unsubstitutedReturnType: KotlinType?, modality: Modality?, visibility: Visibility, - userDataMap: Map, *>, + userDataMap: Map, *>, isExperimentalCoroutineInReleaseEnvironment: DeserializedMemberDescriptor.CoroutinesCompatibilityMode ): SimpleFunctionDescriptorImpl { return super.initialize(