Skip to content

Commit 34c033b

Browse files
committed
Take ReceiverParameterDescriptor in FunctionDescriptorImpl.initialize
Instead of just KotlinType. This will allow to pass annotations on the receiver at call sites
1 parent 6fb3978 commit 34c033b

File tree

39 files changed

+200
-107
lines changed

39 files changed

+200
-107
lines changed

compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.codegen
1818

1919
import org.jetbrains.kotlin.descriptors.*
2020
import org.jetbrains.kotlin.name.Name
21-
import org.jetbrains.kotlin.resolve.DescriptorUtils
2221
import org.jetbrains.kotlin.types.KotlinType
2322
import org.jetbrains.kotlin.types.TypeSubstitutor
2423

@@ -56,7 +55,7 @@ class AccessorForConstructorDescriptor(
5655

5756
init {
5857
initialize(
59-
DescriptorUtils.getReceiverParameterType(extensionReceiverParameter),
58+
calleeDescriptor.extensionReceiverParameter?.copy(this),
6059
calleeDescriptor.dispatchReceiverParameter,
6160
copyTypeParameters(calleeDescriptor),
6261
copyValueParameters(calleeDescriptor),

compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616

1717
package org.jetbrains.kotlin.codegen
1818

19-
import org.jetbrains.kotlin.codegen.coroutines.*
19+
import org.jetbrains.kotlin.codegen.coroutines.INITIAL_DESCRIPTOR_FOR_SUSPEND_FUNCTION
2020
import org.jetbrains.kotlin.descriptors.*
2121
import org.jetbrains.kotlin.descriptors.annotations.Annotations
2222
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl
2323
import org.jetbrains.kotlin.name.Name
24-
import org.jetbrains.kotlin.resolve.DescriptorUtils
25-
26-
import java.util.LinkedHashMap
24+
import java.util.*
2725

2826
class AccessorForFunctionDescriptor(
2927
override val calleeDescriptor: FunctionDescriptor,
@@ -36,7 +34,7 @@ class AccessorForFunctionDescriptor(
3634

3735
init {
3836
initialize(
39-
DescriptorUtils.getReceiverParameterType(calleeDescriptor.extensionReceiverParameter),
37+
calleeDescriptor.extensionReceiverParameter?.copy(this),
4038
if (calleeDescriptor is ConstructorDescriptor || calleeDescriptor.isJvmStaticInObjectOrClassOrInterface())
4139
null
4240
else

compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ class CoroutineCodegenForLambda private constructor(
185185
funDescriptor.source
186186
).also {
187187
it.initialize(
188-
funDescriptor.extensionReceiverParameter?.type,
188+
funDescriptor.extensionReceiverParameter?.copy(it),
189189
funDescriptor.dispatchReceiverParameter,
190190
funDescriptor.typeParameters,
191191
funDescriptor.valueParameters,

compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import org.jetbrains.annotations.Nullable;
2323
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
2424
import org.jetbrains.kotlin.descriptors.*;
25-
import org.jetbrains.kotlin.descriptors.annotations.*;
25+
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor;
26+
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
2627
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl;
2728
import org.jetbrains.kotlin.incremental.components.NoLookupLocation;
2829
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor;
@@ -90,7 +91,7 @@ private static JavaMethodDescriptor createAutoMethodDescriptor(
9091
SourceElement.NO_SOURCE
9192
);
9293
autoMethodDescriptor.initialize(
93-
/* receiverParameterType = */ null,
94+
null,
9495
containingClass.getThisAsReceiverParameter(),
9596
autoTypeParameters,
9697
autoValueParameters,

compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -930,8 +930,15 @@ scopeForDeclarationResolution, container, false, new TraceBasedLocalRedeclaratio
930930
}
931931
}
932932

933-
ReceiverParameterDescriptor receiverDescriptor =
934-
DescriptorFactory.createExtensionReceiverParameterForCallable(propertyDescriptor, receiverType);
933+
ReceiverParameterDescriptor receiverDescriptor;
934+
if (receiverType != null) {
935+
receiverDescriptor = DescriptorFactory.createExtensionReceiverParameterForCallable(
936+
propertyDescriptor, receiverType, Annotations.Companion.getEMPTY()
937+
);
938+
}
939+
else {
940+
receiverDescriptor = null;
941+
}
935942

936943
LexicalScope scopeForInitializer = ScopeUtils.makeScopeForPropertyInitializer(scopeForInitializerResolutionWithTypeParameters, propertyDescriptor);
937944
KotlinType propertyType = propertyInfo.getVariableType();

compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,9 @@ class FunctionDescriptorResolver(
210210
}
211211

212212
functionDescriptor.initialize(
213-
receiverType,
213+
receiverType?.let {
214+
DescriptorFactory.createExtensionReceiverParameterForCallable(functionDescriptor, it, Annotations.EMPTY)
215+
},
214216
getDispatchReceiverParameterIfNeeded(container),
215217
typeParameterDescriptors,
216218
valueParameterDescriptors,

compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ class DynamicCallableDescriptors(storageManager: StorageManager, builtIns: Kotli
138138
}
139139

140140
private fun createDynamicDispatchReceiverParameter(owner: CallableDescriptor): ReceiverParameterDescriptorImpl {
141-
return ReceiverParameterDescriptorImpl(owner, TransientReceiver(dynamicType))
141+
return ReceiverParameterDescriptorImpl(owner, TransientReceiver(dynamicType), Annotations.EMPTY)
142142
}
143143

144144
private fun createTypeParameters(owner: DeclarationDescriptor, call: Call): List<TypeParameterDescriptor> =

compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,19 +159,19 @@ class ResolvedAtomCompleter(
159159
trace.recordType(ktArgumentExpression, substitutedFunctionalType)
160160

161161
// Mainly this is needed for builder-like inference, when we have type `SomeType<K, V>.() -> Unit` and now we want to update those K, V
162-
val extensionReceiverParameter = functionDescriptor.extensionReceiverParameter
163-
if (extensionReceiverParameter != null) {
164-
require(extensionReceiverParameter is ReceiverParameterDescriptorImpl) {
165-
"Extension receiver for anonymous function ($extensionReceiverParameter) should be ReceiverParameterDescriptorImpl"
162+
val receiver = functionDescriptor.extensionReceiverParameter
163+
if (receiver != null) {
164+
require(receiver is ReceiverParameterDescriptorImpl) {
165+
"Extension receiver for anonymous function ($receiver) should be ReceiverParameterDescriptorImpl"
166166
}
167167

168-
val valueType = extensionReceiverParameter.value.type.unwrap()
168+
val valueType = receiver.value.type.unwrap()
169169
val newValueType = resultSubstitutor.substituteKeepAnnotations(valueType)
170170

171-
val newReceiverValue = extensionReceiverParameter.value.replaceType(newValueType)
171+
val newReceiverValue = receiver.value.replaceType(newValueType)
172172

173173
functionDescriptor.setExtensionReceiverParameter(
174-
ReceiverParameterDescriptorImpl(extensionReceiverParameter.containingDeclaration, newReceiverValue)
174+
ReceiverParameterDescriptorImpl(receiver.containingDeclaration, newReceiverValue, receiver.annotations)
175175
)
176176
}
177177
}

compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/DefaultArgumentStubGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ private fun IrFunction.generateDefaultsFunction(context: CommonBackendContext):
396396
} + syntheticParameters
397397

398398
descriptor.initialize(
399-
/* receiverParameterType = */ extensionReceiverParameter?.type,
399+
/* receiverParameterType = */ extensionReceiverParameter,
400400
/* dispatchReceiverParameter = */ dispatchReceiverParameter,
401401
/* typeParameters = */ typeParameters.map {
402402
TypeParameterDescriptorImpl.createForFurtherModification(

compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/LocalDeclarationsLowering.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ class LocalDeclarationsLowering(
520520
val newValueParameters = createTransformedValueParameters(localFunctionContext, capturedValues)
521521

522522
newDescriptor.initialize(
523-
oldDescriptor.extensionReceiverParameter?.type,
523+
oldDescriptor.extensionReceiverParameter?.copy(newDescriptor),
524524
newDispatchReceiverParameter,
525525
newTypeParameters,
526526
newValueParameters.map { it.descriptor as ValueParameterDescriptor },

0 commit comments

Comments
 (0)