diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForCompanionObjectInstanceFieldDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForCompanionObjectInstanceFieldDescriptor.kt index da3d2ed1624..84cec333926 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForCompanionObjectInstanceFieldDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForCompanionObjectInstanceFieldDescriptor.kt @@ -24,7 +24,7 @@ class AccessorForCompanionObjectInstanceFieldDescriptor( init { initialize( - null, null, emptyList(), emptyList(), + null, null, emptyList(), emptyList(), emptyList(), companionObjectDescriptor.defaultType, Modality.FINAL, DescriptorVisibilities.LOCAL diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt index 081abf013b0..cef1d59166d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForConstructorDescriptor.kt @@ -57,6 +57,7 @@ class AccessorForConstructorDescriptor( initialize( calleeDescriptor.extensionReceiverParameter?.copy(this), calleeDescriptor.dispatchReceiverParameter, + calleeDescriptor.contextReceiverParameters.map { p -> p.copy(this) }, copyTypeParameters(calleeDescriptor), copyValueParameters(calleeDescriptor), calleeDescriptor.returnType, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt index 979ee55670b..e0b194ebdf2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForFunctionDescriptor.kt @@ -39,6 +39,7 @@ class AccessorForFunctionDescriptor( null else calleeDescriptor.dispatchReceiverParameter, + calleeDescriptor.contextReceiverParameters.map { p -> p.copy(this) }, copyTypeParameters(calleeDescriptor), copyValueParameters(calleeDescriptor), calleeDescriptor.returnType, diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.kt index 170f618ac40..e6705027ae4 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AccessorForPropertyDescriptor.kt @@ -98,7 +98,7 @@ open class AccessorForPropertyDescriptor private constructor( init { setType( propertyType, emptyList(), dispatchReceiverParameter, - DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverType, Annotations.EMPTY) + DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverType, Annotations.EMPTY), emptyList() // TODO: Pass context receivers ) val getterDescriptor = diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java index a8d0438151a..de4c989c4ad 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ClosureCodegen.java @@ -261,6 +261,7 @@ public class ClosureCodegen extends MemberCodegen { descriptorForBridges .initialize(erasedInterfaceFunction.getExtensionReceiverParameter(), erasedInterfaceFunction.getDispatchReceiverParameter(), + erasedInterfaceFunction.getContextReceiverParameters(), erasedInterfaceFunction.getTypeParameters(), erasedInterfaceFunction.getValueParameters(), erasedInterfaceFunction.getReturnType(), Modality.OPEN, erasedInterfaceFunction.getVisibility()); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index b5a930e127c..d4d747ef722 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -487,7 +487,7 @@ public abstract class MemberCodegen"), SYNTHESIZED, KotlinSourceElementKt.toSourceElement(element)); - clInit.initialize(null, null, Collections.emptyList(), Collections.emptyList(), + clInit.initialize(null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), DescriptorUtilsKt.getModule(descriptor).getBuiltIns().getUnitType(), Modality.FINAL, DescriptorVisibilities.PRIVATE); return clInit; 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 a578e31c662..3d07c58e086 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/coroutines/CoroutineCodegen.kt @@ -73,6 +73,7 @@ abstract class AbstractCoroutineCodegen( null, classDescriptor.thisAsReceiverParameter, emptyList(), + emptyList(), listOf( ValueParameterDescriptorImpl( this, null, 0, Annotations.EMPTY, Name.identifier(SUSPEND_CALL_RESULT_NAME), @@ -188,6 +189,7 @@ class CoroutineCodegenForLambda private constructor( it.initialize( funDescriptor.extensionReceiverParameter?.copy(it), funDescriptor.dispatchReceiverParameter, + funDescriptor.contextReceiverParameters.map { p -> p.copy(it) }, funDescriptor.typeParameters, funDescriptor.valueParameters, funDescriptor.module.getContinuationOfTypeOrAny( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/fakeDescriptorsForReferences.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/fakeDescriptorsForReferences.kt index aa16027ead3..1e26ea17ecd 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/fakeDescriptorsForReferences.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/fakeDescriptorsForReferences.kt @@ -132,7 +132,7 @@ fun createFreeFakeLocalPropertyDescriptor(descriptor: LocalVariableDescriptor, t ) property.setType( descriptor.type, descriptor.typeParameters, - descriptor.dispatchReceiverParameter, descriptor.extensionReceiverParameter + descriptor.dispatchReceiverParameter, descriptor.extensionReceiverParameter, descriptor.contextReceiverParameters ) property.initialize( diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/FictitiousArrayConstructor.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/FictitiousArrayConstructor.kt index cbb7fcf9243..185bd89931a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/FictitiousArrayConstructor.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/FictitiousArrayConstructor.kt @@ -30,7 +30,7 @@ internal class FictitiousArrayConstructor(arrayClass: ClassDescriptor) : SimpleF val arrayClass = arrayConstructor.constructedClass return FictitiousArrayConstructor(arrayClass).apply { this.initialize( - null, null, arrayConstructor.typeParameters, arrayConstructor.valueParameters, arrayClass.defaultType, + null, null, emptyList(), arrayConstructor.typeParameters, arrayConstructor.valueParameters, arrayClass.defaultType, Modality.FINAL, DescriptorVisibilities.PUBLIC ) this.isInline = true diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/JavaSingleAbstractMethodUtils.java b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/JavaSingleAbstractMethodUtils.java index a5c1fe7bb9b..510ec8858c1 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/JavaSingleAbstractMethodUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/sam/JavaSingleAbstractMethodUtils.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.load.java.sam; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl; @@ -75,8 +76,7 @@ public class JavaSingleAbstractMethodUtils { @NotNull KotlinType returnType ) { result.initialize( - null, - original.getDispatchReceiverParameter(), + null, original.getDispatchReceiverParameter(), CollectionsKt.emptyList(), typeParameters, valueParameters, returnType, diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java index 2044df9624b..2432603112d 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/kotlinSignature/SignaturesPropagationData.java @@ -88,8 +88,7 @@ public class SignaturesPropagationData { false ); autoMethodDescriptor.initialize( - null, - containingClass.getThisAsReceiverParameter(), + null, containingClass.getThisAsReceiverParameter(), CollectionsKt.emptyList(), autoTypeParameters, autoValueParameters, autoReturnType, diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt index 1e6f310bbcd..2fa54f72777 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/JavaSyntheticPropertiesScope.kt @@ -375,7 +375,7 @@ class JavaSyntheticPropertiesScope( val receiverType = typeSubstitutor.safeSubstitute(ownerClass.defaultType, Variance.INVARIANT) descriptor.setType( propertyType, typeParameters, null, - DescriptorFactory.createExtensionReceiverParameterForCallable(descriptor, receiverType, Annotations.EMPTY) + DescriptorFactory.createExtensionReceiverParameterForCallable(descriptor, receiverType, Annotations.EMPTY), emptyList() ) val getter = PropertyGetterDescriptorImpl( diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt index 52e25f96a6c..1dc0ef4eae9 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/synthetic/SamAdapterFunctionsScope.kt @@ -338,7 +338,7 @@ class SamAdapterFunctionsScope( val visibility = syntheticVisibility(sourceFunction, isUsedForExtension = false) descriptor.initialize( - null, ownerClass.thisAsReceiverParameter, typeParameters, valueParameters, returnType, + null, ownerClass.thisAsReceiverParameter, emptyList(), typeParameters, valueParameters, returnType, Modality.FINAL, visibility ) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableAccessorDescriptor.kt b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableAccessorDescriptor.kt index a15d9df9c63..6673bbb27e3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableAccessorDescriptor.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/descriptors/impl/LocalVariableAccessorDescriptor.kt @@ -42,7 +42,7 @@ sealed class LocalVariableAccessorDescriptor( val returnType = if (isGetter) correspondingVariable.type else correspondingVariable.builtIns.unitType @Suppress("LeakingThis") - initialize(null, null, emptyList(), valueParameters, returnType, Modality.FINAL, DescriptorVisibilities.LOCAL) + initialize(null, null, emptyList(), emptyList(), valueParameters, returnType, Modality.FINAL, DescriptorVisibilities.LOCAL) } private fun createValueParameter(name: Name, type: KotlinType): ValueParameterDescriptorImpl { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassDescriptorResolver.kt index 59950ce2f48..d491cd52fc0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DataClassDescriptorResolver.kt @@ -52,6 +52,7 @@ object DataClassDescriptorResolver { functionDescriptor.initialize( null, classDescriptor.thisAsReceiverParameter, + emptyList(), emptyList(), emptyList(), property.type, @@ -96,6 +97,7 @@ object DataClassDescriptorResolver { functionDescriptor.initialize( null, classDescriptor.thisAsReceiverParameter, + emptyList(), emptyList(), parameterDescriptors, classDescriptor.defaultType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java index 3ad9c7a7b91..1361240e5d2 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DescriptorResolver.java @@ -63,6 +63,8 @@ import org.jetbrains.kotlin.types.expressions.*; import org.jetbrains.kotlin.types.typeUtil.TypeUtilsKt; import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget.*; import static org.jetbrains.kotlin.diagnostics.Errors.*; @@ -927,6 +929,7 @@ public class DescriptorResolver { LexicalScope scopeForDeclarationResolutionWithTypeParameters; LexicalScope scopeForInitializerResolutionWithTypeParameters; KotlinType receiverType = null; + Stream contextReceiverTypes; { List typeParameters = variableDeclaration.getTypeParameters(); @@ -965,6 +968,8 @@ public class DescriptorResolver { for (KtTypeReference contextReceiverTypeRef: contextReceiverTypeRefs) { typeResolver.resolveType(scopeForDeclarationResolutionWithTypeParameters, contextReceiverTypeRef, trace, true); } + contextReceiverTypes = contextReceiverTypeRefs.stream() + .map((typeRef) -> typeResolver.resolveType(scopeForDeclarationResolutionWithTypeParameters, typeRef, trace, true)); } ReceiverParameterDescriptor receiverDescriptor; @@ -978,6 +983,13 @@ public class DescriptorResolver { receiverDescriptor = null; } + List contextReceiverDescriptors = contextReceiverTypes.map((type) -> { + AnnotationSplitter splitter = new AnnotationSplitter(storageManager, type.getAnnotations(), EnumSet.of(RECEIVER)); + return DescriptorFactory.createExtensionReceiverParameterForCallable( + propertyDescriptor, type, splitter.getAnnotationsForTarget(RECEIVER) + ); + }).collect(Collectors.toList()); + LexicalScope scopeForInitializer = ScopeUtils.makeScopeForPropertyInitializer(scopeForInitializerResolutionWithTypeParameters, propertyDescriptor); KotlinType propertyType = propertyInfo.getVariableType(); KotlinType typeIfKnown = propertyType != null ? propertyType : variableTypeAndInitializerResolver.resolveTypeNullable( @@ -1006,7 +1018,8 @@ public class DescriptorResolver { propertyDescriptor, scopeForInitializer, variableDeclaration, dataFlowInfo, type, inferenceSession, trace ); - propertyDescriptor.setType(type, typeParameterDescriptors, getDispatchReceiverParameterIfNeeded(container), receiverDescriptor); + propertyDescriptor.setType(type, typeParameterDescriptors, getDispatchReceiverParameterIfNeeded(container), receiverDescriptor, + contextReceiverDescriptors); PropertySetterDescriptor setter = resolvePropertySetterDescriptor( scopeForDeclarationResolutionWithTypeParameters, @@ -1304,7 +1317,8 @@ public class DescriptorResolver { false, false ); - propertyDescriptor.setType(type, Collections.emptyList(), getDispatchReceiverParameterIfNeeded(classDescriptor), null); + propertyDescriptor.setType(type, Collections.emptyList(), getDispatchReceiverParameterIfNeeded(classDescriptor), null, + CollectionsKt.emptyList()); Annotations setterAnnotations = annotationSplitter.getAnnotationsForTarget(PROPERTY_SETTER); Annotations getterAnnotations = new CompositeAnnotations(CollectionsKt.listOf( diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt index 59db49d7223..f4e0fc48f2a 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionDescriptorResolver.kt @@ -197,7 +197,7 @@ class FunctionDescriptorResolver( if (function is KtFunctionLiteral) expectedFunctionType.getReceiverType() else null } - function.contextReceiverTypeReferences.onEach { + val contextReceiverTypes = function.contextReceiverTypeReferences.map { typeResolver.resolveType(headerScope, it, trace, true) } @@ -231,10 +231,17 @@ class FunctionDescriptorResolver( functionDescriptor, it, splitter.getAnnotationsForTarget(AnnotationUseSiteTarget.RECEIVER) ) } + val contextReceivers = contextReceiverTypes.map { + val splitter = AnnotationSplitter(storageManager, it.annotations, EnumSet.of(AnnotationUseSiteTarget.RECEIVER)) + DescriptorFactory.createExtensionReceiverParameterForCallable( + functionDescriptor, it, splitter.getAnnotationsForTarget(AnnotationUseSiteTarget.RECEIVER) + ) + } functionDescriptor.initialize( extensionReceiver, getDispatchReceiverParameterIfNeeded(container), + contextReceivers, typeParameterDescriptors, valueParameterDescriptors, returnType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionsFromAny.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionsFromAny.kt index ed917bcfb34..adaae844d17 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionsFromAny.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/FunctionsFromAny.kt @@ -98,6 +98,7 @@ object FunctionsFromAny { functionDescriptor.initialize( null, classDescriptor.thisAsReceiverParameter, + emptyList(), functionFromAny.typeParameters, functionFromAny.valueParameters.map { it.copy(functionDescriptor, it.name, it.index) }, functionFromAny.returnType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt index a2db715cb67..e198ccbd104 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/InlineClassDescriptorResolver.kt @@ -70,6 +70,7 @@ object InlineClassDescriptorResolver { functionDescriptor.initialize( null, null, + emptyList(), emptyList(), createValueParametersForSpecializedEquals(functionDescriptor, owner.inlineClassRepresentation!!.underlyingType), owner.builtIns.booleanType, @@ -93,6 +94,7 @@ object InlineClassDescriptorResolver { functionDescriptor.initialize( null, if (isBoxMethod) null else owner.thisAsReceiverParameter, + emptyList(), emptyList(), if (isBoxMethod) listOf(createValueParameterForBoxing(functionDescriptor, underlyingType)) else emptyList(), if (isBoxMethod) owner.defaultType else underlyingType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt index 597c7a610c7..b65895165dd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/LocalVariableResolver.kt @@ -186,7 +186,7 @@ class LocalVariableResolver( ) val receiverParameter = (containingDeclaration as ScriptDescriptor).thisAsReceiverParameter - propertyDescriptor.setType(type, emptyList(), receiverParameter, null) + propertyDescriptor.setType(type, emptyList(), receiverParameter, null, emptyList()) initializeWithDefaultGetterSetter(propertyDescriptor) trace.record(BindingContext.VARIABLE, variable, propertyDescriptor) result = propertyDescriptor diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt index 8bceeca50c8..62470e60660 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tasks/dynamicCalls.kt @@ -105,7 +105,8 @@ class DynamicCallableDescriptors(private val storageManager: StorageManager, bui dynamicType, createTypeParameters(propertyDescriptor, call), createDynamicDispatchReceiverParameter(propertyDescriptor), - null + null, + emptyList() ) val getter = DescriptorFactory.createDefaultGetter(propertyDescriptor, Annotations.EMPTY) @@ -128,6 +129,7 @@ class DynamicCallableDescriptors(private val storageManager: StorageManager, bui functionDescriptor.initialize( null, createDynamicDispatchReceiverParameter(functionDescriptor), + emptyList(), createTypeParameters(functionDescriptor, call), createValueParameters(functionDescriptor, call), dynamicType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ForceResolveUtil.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ForceResolveUtil.java index f91d8cebe6c..1956695e330 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ForceResolveUtil.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/ForceResolveUtil.java @@ -82,6 +82,7 @@ public class ForceResolveUtil { } else if (object instanceof CallableDescriptor) { CallableDescriptor callableDescriptor = (CallableDescriptor) object; + callableDescriptor.getContextReceiverParameters().forEach(p -> forceResolveAllContents(p.getType())); ReceiverParameterDescriptor parameter = callableDescriptor.getExtensionReceiverParameter(); if (parameter != null) { forceResolveAllContents(parameter.getType()); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java index fd7644cc260..cf780fca5ad 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/descriptors/LazyClassDescriptor.java @@ -319,7 +319,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE ) { { - initialize(null, null, Collections.emptyList(), Collections.emptyList(), + initialize(null, null, CollectionsKt.emptyList(), Collections.emptyList(), Collections.emptyList(), null, Modality.FINAL, DescriptorVisibilities.PRIVATE); } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java index a91c57098fe..7e1c46f5bf8 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/ControlStructureTypingUtils.java @@ -226,6 +226,7 @@ public class ControlStructureTypingUtils { function.initialize( null, null, + Collections.emptyList(), Lists.newArrayList(typeParameter), valueParameters, returnType, diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt index 80d60c89ac8..0105bbc59f6 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt @@ -636,7 +636,7 @@ class DoubleColonExpressionResolver( ) functionDescriptor.initialize( - null, null, emptyList(), + null, null, emptyList(), emptyList(), createValueParametersForInvokeInFunctionType(functionDescriptor, type.arguments.dropLast(1)), type.arguments.last().type, Modality.FINAL, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt index f2c4d2a225c..82f70b820eb 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/intermediate/IrUtils.kt @@ -88,6 +88,7 @@ private fun copyTypesFromExtensionAccessor( null, extensionAccessorDescriptor.extensionReceiverParameter?.copy(this), emptyList(), + emptyList(), extensionAccessorDescriptor.valueParameters.map { it.copy(this, it.name, it.index) }, extensionAccessorDescriptor.returnType, accessorFunctionDescriptor.modality, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index 4798c843eb0..0ba68b4c2e5 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -133,6 +133,8 @@ abstract class IrBasedCallableDescriptor(owner: T) : Callable override fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? = null + override fun getContextReceiverParameters(): List = emptyList() + override fun getTypeParameters(): List { TODO("not implemented") } @@ -859,6 +861,10 @@ open class IrBasedPropertyDescriptor(owner: IrProperty) : override fun getExtensionReceiverParameter() = owner.getter?.extensionReceiverParameter?.toIrBasedDescriptor() as? ReceiverParameterDescriptor + override fun getContextReceiverParameters(): List { + TODO("Not yet implemented") + } + override fun isExternal() = owner.isExternal override fun accept(visitor: DeclarationDescriptorVisitor?, data: D) = @@ -1043,6 +1049,10 @@ open class IrBasedFieldDescriptor(owner: IrField) : PropertyDescriptor, IrBasedD override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? = owner.correspondingPropertySymbol?.owner?.toIrBasedDescriptor()?.extensionReceiverParameter + override fun getContextReceiverParameters(): List { + TODO("Not yet implemented") + } + override fun isExternal() = owner.isExternal override fun accept(visitor: DeclarationDescriptorVisitor?, data: D) = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltInsOverDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltInsOverDescriptors.kt index 39cf87ee935..b353a475143 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltInsOverDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBuiltInsOverDescriptors.kt @@ -155,7 +155,7 @@ class IrBuiltInsOverDescriptors( returnKotlinType = typeParameterDescriptor.typeConstructor.makeNonNullType() initialize( - null, null, listOf(typeParameterDescriptor), listOf(valueParameterDescriptor), returnKotlinType, + null, null, listOf(), listOf(typeParameterDescriptor), listOf(valueParameterDescriptor), returnKotlinType, Modality.FINAL, DescriptorVisibilities.PUBLIC ) } 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 012dc390376..9a8790fd107 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 @@ -35,6 +35,7 @@ abstract class IrBuiltinOperatorDescriptorBase(containingDeclaration: Declaratio IrBuiltinOperatorDescriptor { override fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? = null override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? = null + override fun getContextReceiverParameters(): List = emptyList() override fun getOriginal(): SimpleFunctionDescriptor = this override fun substitute(substitutor: TypeSubstitutor): FunctionDescriptor = throw UnsupportedOperationException() override fun getOverriddenDescriptors(): Collection = emptyList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt index cc4c3e6ba52..ad4958dc9dc 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrDelegateDescriptor.kt @@ -67,7 +67,7 @@ abstract class IrDelegateDescriptorBase( /* isDelegated = */ true ) { init { - setType(delegateType, emptyList(), (containingDeclaration as? ClassDescriptor)?.thisAsReceiverParameter, null) + setType(delegateType, emptyList(), (containingDeclaration as? ClassDescriptor)?.thisAsReceiverParameter, null, emptyList()) } final override fun setOutType(outType: KotlinType?) { 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 78946d85878..e4977edef72 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 @@ -39,6 +39,8 @@ open class FakeCallableDescriptorForObject( fun getReferencedObject(): ClassDescriptor = classDescriptor.getClassObjectReferenceTarget() + override fun getContextReceiverParameters(): List = emptyList() + override fun getExtensionReceiverParameter(): ReceiverParameterDescriptor? = null override fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? = null diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/CloneableClassScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/CloneableClassScope.kt index e30680b832b..ed71aa468e8 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/CloneableClassScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/builtins/jvm/CloneableClassScope.kt @@ -21,7 +21,7 @@ class CloneableClassScope( override fun computeDeclaredFunctions(): List = listOf( SimpleFunctionDescriptorImpl.create(containingClass, Annotations.EMPTY, CLONE_NAME, DECLARATION, SourceElement.NO_SOURCE).apply { initialize( - null, containingClass.thisAsReceiverParameter, emptyList(), emptyList(), containingClass.builtIns.anyType, + null, containingClass.thisAsReceiverParameter, emptyList(), emptyList(), emptyList(), containingClass.builtIns.anyType, Modality.OPEN, DescriptorVisibilities.PROTECTED ) } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaClassConstructorDescriptor.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaClassConstructorDescriptor.java index e81adc0152a..90b3098c47c 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaClassConstructorDescriptor.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaClassConstructorDescriptor.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.load.java.descriptors; import kotlin.Pair; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; @@ -132,8 +133,7 @@ public class JavaClassConstructorDescriptor extends ClassConstructorDescriptorIm ); // We do not use doSubstitute here as in JavaMethodDescriptor.enhance because type parameters of constructor belongs to class enhanced.initialize( - enhancedReceiver, - getDispatchReceiverParameter(), + enhancedReceiver, getDispatchReceiverParameter(), CollectionsKt.emptyList(), getTypeParameters(), UtilKt.copyValueParameters(enhancedValueParameterTypes, getValueParameters(), enhanced), enhancedReturnType, diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java index 9b7a994a7bd..70839664b63 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaMethodDescriptor.java @@ -93,6 +93,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement public SimpleFunctionDescriptorImpl initialize( @Nullable ReceiverParameterDescriptor extensionReceiverParameter, @Nullable ReceiverParameterDescriptor dispatchReceiverParameter, + @NotNull List contextReceiverParameters, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable KotlinType unsubstitutedReturnType, @@ -101,7 +102,7 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement @Nullable Map, ?> userData ) { SimpleFunctionDescriptorImpl descriptor = super.initialize( - extensionReceiverParameter, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters, + extensionReceiverParameter, dispatchReceiverParameter, contextReceiverParameters, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality, visibility, userData ); setOperator(OperatorChecks.INSTANCE.check(descriptor).isSuccess()); diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java index 7caf31ea1b2..1fa6f88446f 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/descriptors/JavaPropertyDescriptor.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.load.java.descriptors; import kotlin.Pair; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.builtins.KotlinBuiltIns; @@ -162,8 +163,8 @@ public class JavaPropertyDescriptor extends PropertyDescriptorImpl implements Ja enhancedReturnType, getTypeParameters(), // TODO getDispatchReceiverParameter(), - enhancedReceiver - ); + enhancedReceiver, + CollectionsKt.emptyList()); return enhanced; } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 2c9b005a893..a1749ae64c1 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -515,6 +515,7 @@ class LazyJavaClassMemberScope( getDispatchReceiverParameter(), emptyList(), emptyList(), + emptyList(), returnType, // Those functions are generated as open in bytecode // Actually, it should not be important because the class is final anyway, but leaving them open is convenient for consistency @@ -597,7 +598,7 @@ class LazyJavaClassMemberScope( propertyDescriptor.initialize(getter, null) val returnType = givenType ?: computeMethodReturnType(method, c.childForMethod(propertyDescriptor, method)) - propertyDescriptor.setType(returnType, listOf(), getDispatchReceiverParameter(), null) + propertyDescriptor.setType(returnType, listOf(), getDispatchReceiverParameter(), null, listOf()) getter.initialize(returnType) return propertyDescriptor @@ -623,7 +624,7 @@ class LazyJavaClassMemberScope( val propertyDescriptor = JavaForKotlinOverridePropertyDescriptor(ownerDescriptor, getterMethod, setterMethod, overriddenProperty) - propertyDescriptor.setType(getterMethod.returnType!!, listOf(), getDispatchReceiverParameter(), null) + propertyDescriptor.setType(getterMethod.returnType!!, listOf(), getDispatchReceiverParameter(), null, listOf()) val getter = DescriptorFactory.createGetter( propertyDescriptor, getterMethod.annotations, /* isDefault = */false, 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 c124c7dc8e7..94a15161f1e 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 @@ -174,6 +174,7 @@ abstract class LazyJavaScope( DescriptorFactory.createExtensionReceiverParameterForCallable(functionDescriptorImpl, it, Annotations.EMPTY) }, getDispatchReceiverParameter(), + emptyList(), effectiveSignature.typeParameters, effectiveSignature.valueParameters, effectiveSignature.returnType, @@ -297,7 +298,13 @@ abstract class LazyJavaScope( val propertyType = getPropertyType(field) - propertyDescriptor.setType(propertyType, listOf(), getDispatchReceiverParameter(), null) + propertyDescriptor.setType( + propertyType, + listOf(), + getDispatchReceiverParameter(), + null, + emptyList() + ) if (DescriptorUtils.shouldRecordInitializerForProperty(propertyDescriptor, propertyDescriptor.type)) { propertyDescriptor.setCompileTimeInitializer( diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt index 02ad5d39542..c6b0172eb8b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/FunctionInvokeDescriptor.kt @@ -115,7 +115,7 @@ class FunctionInvokeDescriptor private constructor( result.initialize( null, functionClass.thisAsReceiverParameter, - listOf(), + listOf(), listOf(), typeParameters.takeWhile { it.variance == Variance.IN_VARIANCE } .withIndex() .map { createValueParameter(result, it.index, it.value) }, diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java index a9bd2d96352..0ff2012259b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/CallableDescriptor.java @@ -26,6 +26,10 @@ import java.util.List; public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot, Substitutable { + @NotNull + @ReadOnly + List getContextReceiverParameters(); + @Nullable ReceiverParameterDescriptor getExtensionReceiverParameter(); 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 6a920212cd1..e8bea7bff1b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/AbstractReceiverParameterDescriptor.java @@ -65,6 +65,12 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes return visitor.visitReceiverParameterDescriptor(this, data); } + @NotNull + @Override + public List getContextReceiverParameters() { + return Collections.emptyList(); + } + @Nullable @Override public ReceiverParameterDescriptor getExtensionReceiverParameter() { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassConstructorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassConstructorDescriptorImpl.java index 133084df24f..fdc3e883c4d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassConstructorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ClassConstructorDescriptorImpl.java @@ -70,7 +70,7 @@ public class ClassConstructorDescriptorImpl extends FunctionDescriptorImpl imple @NotNull List typeParameterDescriptors ) { super.initialize( - null, calculateDispatchReceiverParameter(), + null, calculateDispatchReceiverParameter(), Collections.emptyList(), typeParameterDescriptors, unsubstitutedValueParameters, null, Modality.FINAL, visibility); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java index ced0a788e53..2a519e3dab9 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -23,6 +23,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo private List typeParameters; private List unsubstitutedValueParameters; private KotlinType unsubstitutedReturnType; + private List contextReceiverParameters; private ReceiverParameterDescriptor extensionReceiverParameter; private ReceiverParameterDescriptor dispatchReceiverParameter; private Modality modality; @@ -68,6 +69,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo public FunctionDescriptorImpl initialize( @Nullable ReceiverParameterDescriptor extensionReceiverParameter, @Nullable ReceiverParameterDescriptor dispatchReceiverParameter, + @NotNull List contextReceiverParameters, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable KotlinType unsubstitutedReturnType, @@ -81,6 +83,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.visibility = visibility; this.extensionReceiverParameter = extensionReceiverParameter; this.dispatchReceiverParameter = dispatchReceiverParameter; + this.contextReceiverParameters = contextReceiverParameters; for (int i = 0; i < typeParameters.size(); ++i) { TypeParameterDescriptor typeParameterDescriptor = typeParameters.get(i); @@ -165,6 +168,12 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo this.extensionReceiverParameter = extensionReceiverParameter; } + @NotNull + @Override + public List getContextReceiverParameters() { + return contextReceiverParameters; + } + @Nullable @Override public ReceiverParameterDescriptor getExtensionReceiverParameter() { @@ -663,9 +672,9 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return this; } + // TODO: Substitute context receivers substitutedDescriptor.initialize( - substitutedReceiverParameter, - substitutedExpectedThis, + substitutedReceiverParameter, substitutedExpectedThis, CollectionsKt.emptyList(), substitutedTypeParameters, substitutedValueParameters, substitutedReturnType, diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java index 0c7888dd1e3..02b5e9d790b 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyAccessorDescriptorImpl.java @@ -166,6 +166,12 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript return correspondingProperty; } + @NotNull + @Override + public List getContextReceiverParameters() { + return getCorrespondingProperty().getContextReceiverParameters(); + } + @Nullable @Override public ReceiverParameterDescriptor getExtensionReceiverParameter() { 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 35a65b1cd5d..004559c8c1f 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/PropertyDescriptorImpl.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.descriptors.impl; import kotlin.annotations.jvm.ReadOnly; +import kotlin.collections.CollectionsKt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.descriptors.*; @@ -47,6 +48,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp private final boolean isExternal; private final boolean isDelegated; + private List contextReceiverParameters = Collections.emptyList(); private ReceiverParameterDescriptor dispatchReceiverParameter; private ReceiverParameterDescriptor extensionReceiverParameter; private List typeParameters; @@ -121,7 +123,8 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp @NotNull KotlinType outType, @ReadOnly @NotNull List typeParameters, @Nullable ReceiverParameterDescriptor dispatchReceiverParameter, - @Nullable ReceiverParameterDescriptor extensionReceiverParameter + @Nullable ReceiverParameterDescriptor extensionReceiverParameter, + @NotNull List contextReceiverParameters ) { setOutType(outType); @@ -129,6 +132,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp this.extensionReceiverParameter = extensionReceiverParameter; this.dispatchReceiverParameter = dispatchReceiverParameter; + this.contextReceiverParameters = contextReceiverParameters; } public void initialize( @@ -169,6 +173,12 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return parameters; } + @Override + @NotNull + public List getContextReceiverParameters() { + return contextReceiverParameters; + } + @Override @Nullable public ReceiverParameterDescriptor getExtensionReceiverParameter() { @@ -427,19 +437,22 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp ReceiverParameterDescriptor substitutedExtensionReceiver; if (extensionReceiverParameter != null) { - KotlinType substitutedReceiverType = substitutor.substitute(extensionReceiverParameter.getType(), Variance.IN_VARIANCE); - if (substitutedReceiverType == null) return null; - substitutedExtensionReceiver = new ReceiverParameterDescriptorImpl( - substitutedDescriptor, - new ExtensionReceiver(substitutedDescriptor, substitutedReceiverType, extensionReceiverParameter.getValue()), - extensionReceiverParameter.getAnnotations() - ); - } - else { + substitutedExtensionReceiver = substituteParameterDescriptor(substitutor, substitutedDescriptor, extensionReceiverParameter); + } else { substitutedExtensionReceiver = null; } - substitutedDescriptor.setType(outType, substitutedTypeParameters, substitutedDispatchReceiver, substitutedExtensionReceiver); + List substitutedContextReceivers = new ArrayList(); + for (ReceiverParameterDescriptor contextReceiverParameter: contextReceiverParameters) { + ReceiverParameterDescriptor substitutedContextReceiver = substituteParameterDescriptor(substitutor, substitutedDescriptor, + contextReceiverParameter); + if (substitutedContextReceiver != null) { + substitutedContextReceivers.add(substitutedContextReceiver); + } + } + + substitutedDescriptor.setType(outType, substitutedTypeParameters, substitutedDispatchReceiver, substitutedExtensionReceiver, + substitutedContextReceivers); PropertyGetterDescriptorImpl newGetter = getter == null ? null : new PropertyGetterDescriptorImpl( substitutedDescriptor, getter.getAnnotations(), copyConfiguration.modality, normalizeVisibility(getter.getVisibility(), copyConfiguration.kind), @@ -514,6 +527,20 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp return prev; } + private static ReceiverParameterDescriptor substituteParameterDescriptor( + TypeSubstitutor substitutor, + PropertyDescriptor substitutedPropertyDescriptor, + ReceiverParameterDescriptor receiverParameterDescriptor + ) { + KotlinType substitutedType = substitutor.substitute(receiverParameterDescriptor.getType(), Variance.IN_VARIANCE); + if (substitutedType == null) return null; + return new ReceiverParameterDescriptorImpl( + substitutedPropertyDescriptor, + new ExtensionReceiver(substitutedPropertyDescriptor, substitutedType, receiverParameterDescriptor.getValue()), + receiverParameterDescriptor.getAnnotations() + ); + } + private static FunctionDescriptor getSubstitutedInitialSignatureDescriptor( @NotNull TypeSubstitutor substitutor, @NotNull PropertyAccessorDescriptor accessorDescriptor diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java index 24bb1fa080f..878e12edc53 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java @@ -55,13 +55,14 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme public SimpleFunctionDescriptorImpl initialize( @Nullable ReceiverParameterDescriptor extensionReceiverParameter, @Nullable ReceiverParameterDescriptor dispatchReceiverParameter, + @NotNull List contextReceiverParameters, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable KotlinType unsubstitutedReturnType, @Nullable Modality modality, @NotNull DescriptorVisibility visibility ) { - return initialize(extensionReceiverParameter, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters, + return initialize(extensionReceiverParameter, dispatchReceiverParameter, contextReceiverParameters, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality, visibility, null); } @@ -69,6 +70,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme public SimpleFunctionDescriptorImpl initialize( @Nullable ReceiverParameterDescriptor extensionReceiverParameter, @Nullable ReceiverParameterDescriptor dispatchReceiverParameter, + @NotNull List contextReceiverParameters, @NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, @Nullable KotlinType unsubstitutedReturnType, @@ -76,7 +78,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @NotNull DescriptorVisibility visibility, @Nullable Map, ?> userData ) { - super.initialize(extensionReceiverParameter, dispatchReceiverParameter, typeParameters, unsubstitutedValueParameters, + super.initialize(extensionReceiverParameter, dispatchReceiverParameter, contextReceiverParameters, typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, modality, visibility); if (userData != null && !userData.isEmpty()) { diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt index 1d8a16cd61e..b0ccadad7a4 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/TypeAliasConstructorDescriptor.kt @@ -83,6 +83,7 @@ class TypeAliasConstructorDescriptorImpl private constructor( typeAliasConstructor.initialize( null, underlyingConstructorDescriptor.dispatchReceiverParameter?.substitute(substitutorForUnderlyingClass), + emptyList(), typeAliasDescriptor.declaredTypeParameters, valueParameters, returnType, @@ -205,6 +206,7 @@ class TypeAliasConstructorDescriptorImpl private constructor( typeAliasConstructor.initialize( receiverParameter, null, + emptyList(), typeAliasDescriptor.declaredTypeParameters, valueParameters, returnType, 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 2bc836912e3..9c35e656504 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/VariableDescriptorImpl.java @@ -88,6 +88,12 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo return Collections.emptyList(); } + @NotNull + @Override + public List getContextReceiverParameters() { + return Collections.emptyList(); + } + @Override public ReceiverParameterDescriptor getExtensionReceiverParameter() { return null; diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java index 433ed53721b..43eb65a5ca0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/DescriptorFactory.java @@ -146,7 +146,7 @@ public class DescriptorFactory { SimpleFunctionDescriptorImpl values = SimpleFunctionDescriptorImpl.create(enumClass, Annotations.Companion.getEMPTY(), ENUM_VALUES, CallableMemberDescriptor.Kind.SYNTHESIZED, enumClass.getSource()); - return values.initialize(null, null, Collections.emptyList(), + return values.initialize(null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), getBuiltIns(enumClass).getArrayType(Variance.INVARIANT, enumClass.getDefaultType()), Modality.FINAL, DescriptorVisibilities.PUBLIC); @@ -165,7 +165,7 @@ public class DescriptorFactory { null, enumClass.getSource() ); - return valueOf.initialize(null, null, Collections.emptyList(), + return valueOf.initialize(null, null, Collections.emptyList(), Collections.emptyList(), Collections.singletonList(parameterDescriptor), enumClass.getDefaultType(), Modality.FINAL, DescriptorVisibilities.PUBLIC); } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/samConstructorUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/samConstructorUtils.kt index 4ec79cc195f..ab86efc53cb 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/samConstructorUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/sam/samConstructorUtils.kt @@ -99,6 +99,7 @@ private fun initializeSamConstructorDescriptor( samConstructor.initialize( null, null, + emptyList(), typeParameters.descriptors, listOf(parameter), returnType, Modality.FINAL, diff --git a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java index 95493caf85e..b4509afd31d 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java +++ b/core/descriptors/src/org/jetbrains/kotlin/types/ErrorUtils.java @@ -429,7 +429,8 @@ public class ErrorUtils { SourceElement.NO_SOURCE, false, false, false, false, false, false ); - descriptor.setType(ERROR_PROPERTY_TYPE, Collections.emptyList(), null, null); + descriptor.setType(ERROR_PROPERTY_TYPE, Collections.emptyList(), null, null, + Collections.emptyList()); return descriptor; } @@ -438,8 +439,7 @@ public class ErrorUtils { private static SimpleFunctionDescriptor createErrorFunction(@NotNull ErrorScope ownerScope) { ErrorSimpleFunctionDescriptorImpl function = new ErrorSimpleFunctionDescriptorImpl(ERROR_CLASS, ownerScope); function.initialize( - null, - null, + null, null, Collections.emptyList(), Collections.emptyList(), // TODO Collections.emptyList(), // TODO createErrorType(""), 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 b5ac18b7ded..6bff82234f2 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -59,7 +59,8 @@ class MemberDeserializer(private val c: DeserializationContext) { getDispatchReceiverParameter(), proto.receiverType(c.typeTable)?.let(local.typeDeserializer::type)?.let { receiverType -> DescriptorFactory.createExtensionReceiverParameterForCallable(property, receiverType, receiverAnnotations) - } + }, + emptyList() ) // Per documentation on Property.getter_flags in metadata.proto, if an accessor flags field is absent, its value should be computed @@ -161,6 +162,7 @@ class MemberDeserializer(private val c: DeserializationContext) { initialize( extensionReceiverParameter, dispatchReceiverParameter, + emptyList(), // TODO typeParameters, unsubstitutedValueParameters, unsubstitutedReturnType, diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableResolveExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableResolveExtension.kt index 94cf6a7d1c6..ed9bac8c5a8 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableResolveExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableResolveExtension.kt @@ -71,7 +71,7 @@ open class ParcelableResolveExtension : SyntheticResolveExtension { val valueParameters = parameters.mapIndexed { index, (name, type) -> functionDescriptor.makeValueParameter(name, type, index) } functionDescriptor.initialize( - null, classDescriptor.thisAsReceiverParameter, emptyList(), valueParameters, + null, classDescriptor.thisAsReceiverParameter, emptyList(), emptyList(), valueParameters, returnType, modality, DescriptorVisibilities.PUBLIC) return functionDescriptor diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt index f91b76963b6..fa8eba0f79d 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/res/syntheticDescriptorGeneration.kt @@ -49,7 +49,7 @@ internal fun genClearCacheFunction(packageFragmentDescriptor: PackageFragmentDes val unitType = packageFragmentDescriptor.builtIns.unitType return function.initialize( DescriptorFactory.createExtensionReceiverParameterForCallable(function, receiverType, Annotations.EMPTY), - null, emptyList(), emptyList(), unitType, Modality.FINAL, DescriptorVisibilities.PUBLIC + null, emptyList(), emptyList(), emptyList(), unitType, Modality.FINAL, DescriptorVisibilities.PUBLIC ) } @@ -123,7 +123,8 @@ private fun genProperty( flexibleType, emptyList(), null, - DescriptorFactory.createExtensionReceiverParameterForCallable(property, receiverType, Annotations.EMPTY) + DescriptorFactory.createExtensionReceiverParameterForCallable(property, receiverType, Annotations.EMPTY), + emptyList() ) val getter = PropertyGetterDescriptorImpl( diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/Synthetics.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/Synthetics.kt index f598d46bf2f..0f04d462abf 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/Synthetics.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/Synthetics.kt @@ -33,7 +33,7 @@ class SimpleSyntheticPropertyDescriptor( private val _backingField = FieldDescriptorImpl(Annotations.EMPTY, this) init { - super.setType(type, emptyList(), owner.thisAsReceiverParameter, null) + super.setType(type, emptyList(), owner.thisAsReceiverParameter, null, emptyList()) super.initialize(null, null, _backingField, null) } } diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/JVMCodegenUtil.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/JVMCodegenUtil.kt index 30c023253ae..cde5bf45734 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/JVMCodegenUtil.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/JVMCodegenUtil.kt @@ -625,6 +625,7 @@ internal fun createSingletonLambda( lambdaCodegen.descriptor.thisAsReceiverParameter, emptyList(), emptyList(), + emptyList(), resultSimpleType, Modality.FINAL, DescriptorVisibilities.PUBLIC @@ -647,6 +648,7 @@ internal fun createSingletonLambda( lambdaCodegen.descriptor.thisAsReceiverParameter, emptyList(), emptyList(), + emptyList(), lambdaCodegen.descriptor.builtIns.anyType, Modality.FINAL, DescriptorVisibilities.PUBLIC diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerialInfoCodegenImpl.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerialInfoCodegenImpl.kt index 6d252d27ad7..3ad8433a4a2 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerialInfoCodegenImpl.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerialInfoCodegenImpl.kt @@ -47,7 +47,7 @@ class SerialInfoCodegenImpl(val codegen: ImplementationBodyCodegen, val thisClas codegen.v.newField(OtherOrigin(codegen.myClass.psiOrParent), Opcodes.ACC_PRIVATE or Opcodes.ACC_FINAL or Opcodes.ACC_SYNTHETIC, propFieldName, propType.descriptor, null, null) val f = SimpleFunctionDescriptorImpl.create(thisClass, Annotations.EMPTY, prop.name, CallableMemberDescriptor.Kind.SYNTHESIZED, thisClass.source) - f.initialize(null, thisClass.thisAsReceiverParameter, emptyList(), emptyList(), prop.type, Modality.FINAL, DescriptorVisibilities.PUBLIC) + f.initialize(null, thisClass.thisAsReceiverParameter, emptyList(), emptyList(), emptyList(), prop.type, Modality.FINAL, DescriptorVisibilities.PUBLIC) codegen.generateMethod(f, { _, _ -> load(0, thisAsmType) getfield(thisAsmType.internalName, propFieldName, propType.descriptor) diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/KSerializerDescriptorResolver.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/KSerializerDescriptorResolver.kt index 87530e1cbb0..138f5ec9c37 100644 --- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/KSerializerDescriptorResolver.kt +++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/KSerializerDescriptorResolver.kt @@ -244,7 +244,8 @@ object KSerializerDescriptorResolver { propertyFromSerializer.type, propertyFromSerializer.typeParameters, companionDescriptor.thisAsReceiverParameter, - extensionReceiverParameter + extensionReceiverParameter, + emptyList() ) val propertyGetter = PropertyGetterDescriptorImpl( @@ -277,6 +278,7 @@ object KSerializerDescriptorResolver { functionDescriptor.initialize( null, companionDescriptor.thisAsReceiverParameter, + emptyList(), functionFromSerializer.typeParameters, functionFromSerializer.valueParameters.map { it.copy(functionDescriptor, it.name, it.index) }, functionFromSerializer.returnType, @@ -488,6 +490,7 @@ object KSerializerDescriptorResolver { f.initialize( null, thisClass.thisAsReceiverParameter, + emptyList(), listOf(), listOf(vararg), kSerializerStarType, @@ -517,7 +520,7 @@ object KSerializerDescriptorResolver { val serialReturnType = KotlinTypeFactory.simpleNotNullType(Annotations.EMPTY, serializerClass, listOf(TypeProjectionImpl(newSerializableType))) - f.initialize(null, thisClass.thisAsReceiverParameter, typeArgs, args, serialReturnType, Modality.FINAL, DescriptorVisibilities.PUBLIC) + f.initialize(null, thisClass.thisAsReceiverParameter, emptyList(), typeArgs, args, serialReturnType, Modality.FINAL, DescriptorVisibilities.PUBLIC) return f } @@ -602,6 +605,7 @@ object KSerializerDescriptorResolver { f.initialize( null, null, + emptyList(), typeArgs, args, returnType, diff --git a/plugins/noarg/noarg-cli/src/AbstractNoArgExpressionCodegenExtension.kt b/plugins/noarg/noarg-cli/src/AbstractNoArgExpressionCodegenExtension.kt index 3e584a1cefa..3df68905478 100644 --- a/plugins/noarg/noarg-cli/src/AbstractNoArgExpressionCodegenExtension.kt +++ b/plugins/noarg/noarg-cli/src/AbstractNoArgExpressionCodegenExtension.kt @@ -100,6 +100,7 @@ abstract class AbstractNoArgExpressionCodegenExtension(val invokeInitializers: B calculateDispatchReceiverParameter(), emptyList(), emptyList(), + emptyList(), containingClass.builtIns.unitType, Modality.OPEN, DescriptorVisibilities.PUBLIC diff --git a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt index 7f2634859d4..6dcd21a24b3 100644 --- a/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt +++ b/plugins/parcelize/parcelize-compiler/src/org/jetbrains/kotlin/parcelize/ParcelizeResolveExtension.kt @@ -77,7 +77,7 @@ open class ParcelizeResolveExtension : SyntheticResolveExtension { val valueParameters = parameters.mapIndexed { index, (name, type) -> functionDescriptor.makeValueParameter(name, type, index) } functionDescriptor.initialize( - null, classDescriptor.thisAsReceiverParameter, emptyList(), valueParameters, + null, classDescriptor.thisAsReceiverParameter, emptyList(), emptyList(), valueParameters, returnType, modality, DescriptorVisibilities.PUBLIC ) diff --git a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ReplResultPropertyDescriptor.kt b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ReplResultPropertyDescriptor.kt index 3d943a379f9..35cfc2986f5 100644 --- a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ReplResultPropertyDescriptor.kt +++ b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ReplResultPropertyDescriptor.kt @@ -31,7 +31,7 @@ class ReplResultPropertyDescriptor( /* isDelegated = */ false ) { init { - setType(kotlinType, emptyList(), receiver, null) + setType(kotlinType, emptyList(), receiver, null, emptyList()) initialize( null, null ) diff --git a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptProvidedPropertyDescriptor.kt b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptProvidedPropertyDescriptor.kt index 68878e47238..4a250243271 100644 --- a/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptProvidedPropertyDescriptor.kt +++ b/plugins/scripting/scripting-compiler-impl/src/org/jetbrains/kotlin/scripting/resolve/ScriptProvidedPropertyDescriptor.kt @@ -30,7 +30,7 @@ class ScriptProvidedPropertyDescriptor( /* isDelegated = */ false ) { init { - setType(typeDescriptor.defaultType, emptyList(), receiver, null) + setType(typeDescriptor.defaultType, emptyList(), receiver, null, emptyList()) // TODO: consider delegation instead initialize(null, null, null, null) }