Minor. Pull user-data related things to CallableDescriptor
Currently, we assume user data for all non-FunctionDescriptor declarations is empty
This commit is contained in:
@@ -48,7 +48,7 @@ class AccessorForFunctionDescriptor(
|
|||||||
|
|
||||||
isSuspend = calleeDescriptor.isSuspend
|
isSuspend = calleeDescriptor.isSuspend
|
||||||
if (calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) != null) {
|
if (calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION) != null) {
|
||||||
userDataMap = LinkedHashMap<FunctionDescriptor.UserDataKey<*>, Any>()
|
userDataMap = LinkedHashMap<CallableDescriptor.UserDataKey<*>, Any>()
|
||||||
userDataMap[INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION] =
|
userDataMap[INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION] =
|
||||||
calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION)
|
calleeDescriptor.getUserData(INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ abstract class AbstractCoroutineCodegen(
|
|||||||
element: KtElement,
|
element: KtElement,
|
||||||
closureContext: ClosureContext,
|
closureContext: ClosureContext,
|
||||||
classBuilder: ClassBuilder,
|
classBuilder: ClassBuilder,
|
||||||
private val userDataForDoResume: Map<out FunctionDescriptor.UserDataKey<*>, *>? = null
|
private val userDataForDoResume: Map<out CallableDescriptor.UserDataKey<*>, *>? = null
|
||||||
) : ClosureCodegen(
|
) : ClosureCodegen(
|
||||||
outerExpressionCodegen.state,
|
outerExpressionCodegen.state,
|
||||||
element, null, closureContext, null,
|
element, null, closureContext, null,
|
||||||
|
|||||||
+2
-2
@@ -117,10 +117,10 @@ private val GET_CONTEXT_METHOD_NAME = "getContext"
|
|||||||
data class ResolvedCallWithRealDescriptor(val resolvedCall: ResolvedCall<*>, val fakeContinuationExpression: KtExpression)
|
data class ResolvedCallWithRealDescriptor(val resolvedCall: ResolvedCall<*>, val fakeContinuationExpression: KtExpression)
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
val INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION = object : FunctionDescriptor.UserDataKey<FunctionDescriptor> {}
|
val INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION = object : CallableDescriptor.UserDataKey<FunctionDescriptor> {}
|
||||||
|
|
||||||
@JvmField
|
@JvmField
|
||||||
val INITIAL_SUSPEND_DESCRIPTOR_FOR_DO_RESUME = object : FunctionDescriptor.UserDataKey<FunctionDescriptor> {}
|
val INITIAL_SUSPEND_DESCRIPTOR_FOR_DO_RESUME = object : CallableDescriptor.UserDataKey<FunctionDescriptor> {}
|
||||||
|
|
||||||
// Resolved calls to suspension function contain descriptors as they visible within coroutines:
|
// Resolved calls to suspension function contain descriptors as they visible within coroutines:
|
||||||
// E.g. `fun <V> await(f: CompletableFuture<V>): V` instead of `fun <V> await(f: CompletableFuture<V>, machine: Continuation<V>): Unit`
|
// E.g. `fun <V> await(f: CompletableFuture<V>): V` instead of `fun <V> await(f: CompletableFuture<V>, machine: Continuation<V>): Unit`
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.contracts
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.contracts.description.*
|
import org.jetbrains.kotlin.contracts.description.*
|
||||||
import org.jetbrains.kotlin.contracts.description.expressions.*
|
import org.jetbrains.kotlin.contracts.description.expressions.*
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
import org.jetbrains.kotlin.metadata.deserialization.Flags
|
||||||
@@ -36,7 +37,7 @@ class ContractDeserializerImpl(private val configuration: DeserializationConfigu
|
|||||||
ownerFunction: FunctionDescriptor,
|
ownerFunction: FunctionDescriptor,
|
||||||
typeTable: TypeTable,
|
typeTable: TypeTable,
|
||||||
typeDeserializer: TypeDeserializer
|
typeDeserializer: TypeDeserializer
|
||||||
): Pair<FunctionDescriptor.UserDataKey<*>, LazyContractProvider>? {
|
): Pair<CallableDescriptor.UserDataKey<*>, LazyContractProvider>? {
|
||||||
if (!proto.hasContract()) return null
|
if (!proto.hasContract()) return null
|
||||||
|
|
||||||
if (!configuration.readDeserializedContracts) return null
|
if (!configuration.readDeserializedContracts) return null
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ class FunctionDescriptorResolver(
|
|||||||
)
|
)
|
||||||
|
|
||||||
val contractProvider = getContractProvider(functionDescriptor, trace, scope, dataFlowInfo, function)
|
val contractProvider = getContractProvider(functionDescriptor, trace, scope, dataFlowInfo, function)
|
||||||
val userData = mutableMapOf<FunctionDescriptor.UserDataKey<*>, Any>().apply {
|
val userData = mutableMapOf<CallableDescriptor.UserDataKey<*>, Any>().apply {
|
||||||
if (contractProvider != null) {
|
if (contractProvider != null) {
|
||||||
put(ContractProviderKey, contractProvider)
|
put(ContractProviderKey, contractProvider)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.calls
|
package org.jetbrains.kotlin.resolve.calls
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
@@ -20,7 +21,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|||||||
|
|
||||||
object DslMarkerUtils {
|
object DslMarkerUtils {
|
||||||
|
|
||||||
object FunctionTypeAnnotationsKey : FunctionDescriptor.UserDataKey<Annotations>
|
object FunctionTypeAnnotationsKey : CallableDescriptor.UserDataKey<Annotations>
|
||||||
|
|
||||||
data class DslMarkersFromReceiver(
|
data class DslMarkersFromReceiver(
|
||||||
val common: Set<FqName>,
|
val common: Set<FqName>,
|
||||||
|
|||||||
+6
-2
@@ -80,6 +80,8 @@ abstract class WrappedCallableDescriptor<T : IrDeclaration>(
|
|||||||
override fun acceptVoid(visitor: DeclarationDescriptorVisitor<Void, Void>?) {
|
override fun acceptVoid(visitor: DeclarationDescriptorVisitor<Void, Void>?) {
|
||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
}
|
}
|
||||||
|
|
||||||
open class WrappedValueParameterDescriptor(
|
open class WrappedValueParameterDescriptor(
|
||||||
@@ -289,7 +291,7 @@ open class WrappedSimpleFunctionDescriptor(
|
|||||||
|
|
||||||
override fun getInitialSignatureDescriptor() = null
|
override fun getInitialSignatureDescriptor() = null
|
||||||
|
|
||||||
override fun <V : Any?> getUserData(key: FunctionDescriptor.UserDataKey<V>?): V? = null
|
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
|
|
||||||
override fun newCopyBuilder(): FunctionDescriptor.CopyBuilder<out SimpleFunctionDescriptor> {
|
override fun newCopyBuilder(): FunctionDescriptor.CopyBuilder<out SimpleFunctionDescriptor> {
|
||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
@@ -378,7 +380,7 @@ open class WrappedClassConstructorDescriptor(
|
|||||||
|
|
||||||
override fun isSuspend() = false
|
override fun isSuspend() = false
|
||||||
|
|
||||||
override fun <V : Any?> getUserData(key: FunctionDescriptor.UserDataKey<V>?): V? = null
|
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
|
|
||||||
override fun isExternal() = owner.isExternal
|
override fun isExternal() = owner.isExternal
|
||||||
|
|
||||||
@@ -586,4 +588,6 @@ open class WrappedPropertyDescriptor(
|
|||||||
override fun getDelegateField(): FieldDescriptor? {
|
override fun getDelegateField(): FieldDescriptor? {
|
||||||
TODO("not implemented")
|
TODO("not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun <V : Any?> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -47,7 +47,7 @@ abstract class IrBuiltinOperatorDescriptorBase(containingDeclaration: Declaratio
|
|||||||
override fun getKind(): CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.SYNTHESIZED
|
override fun getKind(): CallableMemberDescriptor.Kind = CallableMemberDescriptor.Kind.SYNTHESIZED
|
||||||
override fun getInitialSignatureDescriptor(): FunctionDescriptor? = null
|
override fun getInitialSignatureDescriptor(): FunctionDescriptor? = null
|
||||||
override fun isExternal(): Boolean = false
|
override fun isExternal(): Boolean = false
|
||||||
override fun <V : Any> getUserData(key: FunctionDescriptor.UserDataKey<V>?): V? = null
|
override fun <V : Any> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
override fun isHiddenForResolutionEverywhereBesideSupercalls(): Boolean = false
|
override fun isHiddenForResolutionEverywhereBesideSupercalls(): Boolean = false
|
||||||
override fun isHiddenToOvercomeSignatureClash(): Boolean = false
|
override fun isHiddenToOvercomeSignatureClash(): Boolean = false
|
||||||
override fun isInfix(): Boolean = false
|
override fun isInfix(): Boolean = false
|
||||||
|
|||||||
+2
-2
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.contracts.description
|
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
|
import org.jetbrains.kotlin.serialization.deserialization.ContractProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -51,4 +51,4 @@ class LazyContractProvider(private val computation: () -> Any?) : ContractProvid
|
|||||||
}
|
}
|
||||||
|
|
||||||
// For storing into UserDataMap of FunctionDescriptor
|
// For storing into UserDataMap of FunctionDescriptor
|
||||||
object ContractProviderKey : FunctionDescriptor.UserDataKey<LazyContractProvider?>
|
object ContractProviderKey : CallableDescriptor.UserDataKey<LazyContractProvider?>
|
||||||
|
|||||||
+2
@@ -76,4 +76,6 @@ open class FakeCallableDescriptorForObject(
|
|||||||
override fun getContainingDeclaration() = classDescriptor.getClassObjectReferenceTarget().containingDeclaration
|
override fun getContainingDeclaration() = classDescriptor.getClassObjectReferenceTarget().containingDeclaration
|
||||||
|
|
||||||
override fun substitute(substitutor: TypeSubstitutor) = this
|
override fun substitute(substitutor: TypeSubstitutor) = this
|
||||||
|
|
||||||
|
override fun <V> getUserData(key: CallableDescriptor.UserDataKey<V>?): V? = null
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -144,7 +144,7 @@ abstract class LazyJavaScope(protected val c: LazyJavaResolverContext) : MemberS
|
|||||||
if (effectiveSignature.receiverType != null)
|
if (effectiveSignature.receiverType != null)
|
||||||
mapOf(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER to valueParameters.descriptors.first())
|
mapOf(JavaMethodDescriptor.ORIGINAL_VALUE_PARAMETER_FOR_EXTENSION_RECEIVER to valueParameters.descriptors.first())
|
||||||
else
|
else
|
||||||
emptyMap<FunctionDescriptor.UserDataKey<ValueParameterDescriptor>, ValueParameterDescriptor>()
|
emptyMap<CallableDescriptor.UserDataKey<ValueParameterDescriptor>, ValueParameterDescriptor>()
|
||||||
)
|
)
|
||||||
|
|
||||||
functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames, valueParameters.hasSynthesizedNames)
|
functionDescriptorImpl.setParameterNamesStatus(effectiveSignature.hasStableParameterNames, valueParameters.hasSynthesizedNames)
|
||||||
|
|||||||
@@ -64,4 +64,10 @@ public interface CallableDescriptor extends DeclarationDescriptorWithVisibility,
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
Collection<? extends CallableDescriptor> getOverriddenDescriptors();
|
Collection<? extends CallableDescriptor> getOverriddenDescriptors();
|
||||||
|
|
||||||
|
interface UserDataKey<V> {}
|
||||||
|
|
||||||
|
// TODO: pull up userdata related members to DeclarationDescriptor and use more efficient implementation (e.g. THashMap)
|
||||||
|
@Nullable
|
||||||
|
<V> V getUserData(UserDataKey<V> key);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,12 +68,6 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
|
|||||||
|
|
||||||
boolean isSuspend();
|
boolean isSuspend();
|
||||||
|
|
||||||
interface UserDataKey<V> {}
|
|
||||||
|
|
||||||
// TODO: pull up userdata related members to DeclarationDescriptor and use more efficient implementation (e.g. THashMap)
|
|
||||||
@Nullable
|
|
||||||
<V> V getUserData(UserDataKey<V> key);
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
CopyBuilder<? extends FunctionDescriptor> newCopyBuilder();
|
CopyBuilder<? extends FunctionDescriptor> newCopyBuilder();
|
||||||
|
|||||||
+6
@@ -135,4 +135,10 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes
|
|||||||
public SourceElement getSource() {
|
public SourceElement getSource() {
|
||||||
return SourceElement.NO_SOURCE;
|
return SourceElement.NO_SOURCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <V> V getUserData(UserDataKey<V> key) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -546,4 +546,10 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
|
|||||||
.setCopyOverrides(copyOverrides)
|
.setCopyOverrides(copyOverrides)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <V> V getUserData(UserDataKey<V> key) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,4 +107,10 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
public boolean isConst() {
|
public boolean isConst() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public <V> V getUserData(UserDataKey<V> key) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.serialization.deserialization
|
package org.jetbrains.kotlin.serialization.deserialization
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
import org.jetbrains.kotlin.metadata.deserialization.TypeTable
|
||||||
@@ -26,7 +27,7 @@ interface ContractDeserializer {
|
|||||||
ownerFunction: FunctionDescriptor,
|
ownerFunction: FunctionDescriptor,
|
||||||
typeTable: TypeTable,
|
typeTable: TypeTable,
|
||||||
typeDeserializer: TypeDeserializer
|
typeDeserializer: TypeDeserializer
|
||||||
): Pair<FunctionDescriptor.UserDataKey<*>, ContractProvider>?
|
): Pair<CallableDescriptor.UserDataKey<*>, ContractProvider>?
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val DEFAULT = object : ContractDeserializer {
|
val DEFAULT = object : ContractDeserializer {
|
||||||
@@ -35,7 +36,7 @@ interface ContractDeserializer {
|
|||||||
ownerFunction: FunctionDescriptor,
|
ownerFunction: FunctionDescriptor,
|
||||||
typeTable: TypeTable,
|
typeTable: TypeTable,
|
||||||
typeDeserializer: TypeDeserializer
|
typeDeserializer: TypeDeserializer
|
||||||
): Pair<FunctionDescriptor.UserDataKey<*>, Nothing>? = null
|
): Pair<CallableDescriptor.UserDataKey<*>, Nothing>? = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -179,7 +179,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
|||||||
unsubstitutedReturnType: KotlinType?,
|
unsubstitutedReturnType: KotlinType?,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
userDataMap: Map<out FunctionDescriptor.UserDataKey<*>, *>,
|
userDataMap: Map<out CallableDescriptor.UserDataKey<*>, *>,
|
||||||
isSuspend: Boolean
|
isSuspend: Boolean
|
||||||
) {
|
) {
|
||||||
initialize(
|
initialize(
|
||||||
@@ -284,7 +284,7 @@ class MemberDeserializer(private val c: DeserializationContext) {
|
|||||||
local.typeDeserializer.type(proto.returnType(c.typeTable)),
|
local.typeDeserializer.type(proto.returnType(c.typeTable)),
|
||||||
ProtoEnumFlags.modality(Flags.MODALITY.get(flags)),
|
ProtoEnumFlags.modality(Flags.MODALITY.get(flags)),
|
||||||
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
ProtoEnumFlags.visibility(Flags.VISIBILITY.get(flags)),
|
||||||
emptyMap<FunctionDescriptor.UserDataKey<*>, Any?>(),
|
emptyMap<CallableDescriptor.UserDataKey<*>, Any?>(),
|
||||||
Flags.IS_SUSPEND.get(flags)
|
Flags.IS_SUSPEND.get(flags)
|
||||||
)
|
)
|
||||||
function.isOperator = Flags.IS_OPERATOR.get(flags)
|
function.isOperator = Flags.IS_OPERATOR.get(flags)
|
||||||
|
|||||||
+1
-1
@@ -83,7 +83,7 @@ class DeserializedSimpleFunctionDescriptor(
|
|||||||
unsubstitutedReturnType: KotlinType?,
|
unsubstitutedReturnType: KotlinType?,
|
||||||
modality: Modality?,
|
modality: Modality?,
|
||||||
visibility: Visibility,
|
visibility: Visibility,
|
||||||
userDataMap: Map<out FunctionDescriptor.UserDataKey<*>, *>,
|
userDataMap: Map<out CallableDescriptor.UserDataKey<*>, *>,
|
||||||
isExperimentalCoroutineInReleaseEnvironment: DeserializedMemberDescriptor.CoroutinesCompatibilityMode
|
isExperimentalCoroutineInReleaseEnvironment: DeserializedMemberDescriptor.CoroutinesCompatibilityMode
|
||||||
): SimpleFunctionDescriptorImpl {
|
): SimpleFunctionDescriptorImpl {
|
||||||
return super.initialize(
|
return super.initialize(
|
||||||
|
|||||||
Reference in New Issue
Block a user