[FE] Pass context receiver parameters where necessary
This commit is contained in:
committed by
TeamCityServer
parent
a39fbd3822
commit
c5687e080d
@@ -97,8 +97,11 @@ open class AccessorForPropertyDescriptor private constructor(
|
|||||||
|
|
||||||
init {
|
init {
|
||||||
setType(
|
setType(
|
||||||
propertyType, emptyList<TypeParameterDescriptorImpl>(), dispatchReceiverParameter,
|
propertyType,
|
||||||
DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverType, Annotations.EMPTY), emptyList() // TODO: Pass context receivers
|
emptyList<TypeParameterDescriptorImpl>(),
|
||||||
|
dispatchReceiverParameter,
|
||||||
|
DescriptorFactory.createExtensionReceiverParameterForCallable(this, receiverType, Annotations.EMPTY),
|
||||||
|
original.contextReceiverParameters
|
||||||
)
|
)
|
||||||
|
|
||||||
val getterDescriptor =
|
val getterDescriptor =
|
||||||
|
|||||||
@@ -108,6 +108,9 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
|
|||||||
@Override
|
@Override
|
||||||
CopyBuilder<D> setReturnType(@NotNull KotlinType type);
|
CopyBuilder<D> setReturnType(@NotNull KotlinType type);
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
CopyBuilder<D> setContextReceiverParameters(@NotNull List<ReceiverParameterDescriptor> contextReceiverParameters);
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
CopyBuilder<D> setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter);
|
CopyBuilder<D> setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter);
|
||||||
|
|
||||||
|
|||||||
+34
-5
@@ -370,6 +370,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
protected @Nullable FunctionDescriptor original = null;
|
protected @Nullable FunctionDescriptor original = null;
|
||||||
protected @NotNull Kind kind;
|
protected @NotNull Kind kind;
|
||||||
protected @NotNull List<ValueParameterDescriptor> newValueParameterDescriptors;
|
protected @NotNull List<ValueParameterDescriptor> newValueParameterDescriptors;
|
||||||
|
protected @NotNull List<ReceiverParameterDescriptor> newContextReceiverParameters;
|
||||||
protected @Nullable ReceiverParameterDescriptor newExtensionReceiverParameter;
|
protected @Nullable ReceiverParameterDescriptor newExtensionReceiverParameter;
|
||||||
protected @Nullable ReceiverParameterDescriptor dispatchReceiverParameter = FunctionDescriptorImpl.this.dispatchReceiverParameter;
|
protected @Nullable ReceiverParameterDescriptor dispatchReceiverParameter = FunctionDescriptorImpl.this.dispatchReceiverParameter;
|
||||||
protected @NotNull KotlinType newReturnType;
|
protected @NotNull KotlinType newReturnType;
|
||||||
@@ -393,6 +394,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull DescriptorVisibility newVisibility,
|
@NotNull DescriptorVisibility newVisibility,
|
||||||
@NotNull Kind kind,
|
@NotNull Kind kind,
|
||||||
@NotNull List<ValueParameterDescriptor> newValueParameterDescriptors,
|
@NotNull List<ValueParameterDescriptor> newValueParameterDescriptors,
|
||||||
|
@NotNull List<ReceiverParameterDescriptor> newContextReceiverParameters,
|
||||||
@Nullable ReceiverParameterDescriptor newExtensionReceiverParameter,
|
@Nullable ReceiverParameterDescriptor newExtensionReceiverParameter,
|
||||||
@NotNull KotlinType newReturnType,
|
@NotNull KotlinType newReturnType,
|
||||||
@Nullable Name name
|
@Nullable Name name
|
||||||
@@ -403,6 +405,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
this.newVisibility = newVisibility;
|
this.newVisibility = newVisibility;
|
||||||
this.kind = kind;
|
this.kind = kind;
|
||||||
this.newValueParameterDescriptors = newValueParameterDescriptors;
|
this.newValueParameterDescriptors = newValueParameterDescriptors;
|
||||||
|
this.newContextReceiverParameters = newContextReceiverParameters;
|
||||||
this.newExtensionReceiverParameter = newExtensionReceiverParameter;
|
this.newExtensionReceiverParameter = newExtensionReceiverParameter;
|
||||||
this.newReturnType = newReturnType;
|
this.newReturnType = newReturnType;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@@ -471,6 +474,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public CopyBuilder<FunctionDescriptor> setContextReceiverParameters(@NotNull List<ReceiverParameterDescriptor> contextReceiverParameters) {
|
||||||
|
this.newContextReceiverParameters = contextReceiverParameters;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public CopyConfiguration setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter) {
|
public CopyConfiguration setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter) {
|
||||||
@@ -586,9 +596,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
protected CopyConfiguration newCopyBuilder(@NotNull TypeSubstitutor substitutor) {
|
protected CopyConfiguration newCopyBuilder(@NotNull TypeSubstitutor substitutor) {
|
||||||
return new CopyConfiguration(
|
return new CopyConfiguration(
|
||||||
substitutor.getSubstitution(),
|
substitutor.getSubstitution(),
|
||||||
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(),
|
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(), getContextReceiverParameters(),
|
||||||
getExtensionReceiverParameter(), getReturnType(), null
|
getExtensionReceiverParameter(), getReturnType(), null);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -615,6 +624,27 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
);
|
);
|
||||||
if (substitutor == null) return null;
|
if (substitutor == null) return null;
|
||||||
|
|
||||||
|
List<ReceiverParameterDescriptor> substitutedContextReceiverParameters = new ArrayList<ReceiverParameterDescriptor>();
|
||||||
|
if (!configuration.newContextReceiverParameters.isEmpty()) {
|
||||||
|
for (ReceiverParameterDescriptor newContextReceiverParameter : configuration.newContextReceiverParameters) {
|
||||||
|
KotlinType substitutedContextReceiverType =
|
||||||
|
substitutor.substitute(newContextReceiverParameter.getType(), Variance.IN_VARIANCE);
|
||||||
|
if (substitutedContextReceiverType == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
ReceiverParameterDescriptor substitutedContextReceiverParameter = new ReceiverParameterDescriptorImpl(
|
||||||
|
substitutedDescriptor,
|
||||||
|
new ExtensionReceiver(
|
||||||
|
substitutedDescriptor, substitutedContextReceiverType, newContextReceiverParameter.getValue()
|
||||||
|
),
|
||||||
|
newContextReceiverParameter.getAnnotations()
|
||||||
|
);
|
||||||
|
substitutedContextReceiverParameters.add(substitutedContextReceiverParameter);
|
||||||
|
|
||||||
|
wereChanges[0] |= substitutedContextReceiverType != newContextReceiverParameter.getType();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ReceiverParameterDescriptor substitutedReceiverParameter = null;
|
ReceiverParameterDescriptor substitutedReceiverParameter = null;
|
||||||
if (configuration.newExtensionReceiverParameter != null) {
|
if (configuration.newExtensionReceiverParameter != null) {
|
||||||
KotlinType substitutedExtensionReceiverType =
|
KotlinType substitutedExtensionReceiverType =
|
||||||
@@ -672,9 +702,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Substitute context receivers
|
|
||||||
substitutedDescriptor.initialize(
|
substitutedDescriptor.initialize(
|
||||||
substitutedReceiverParameter, substitutedExpectedThis, CollectionsKt.<ReceiverParameterDescriptor>emptyList(),
|
substitutedReceiverParameter, substitutedExpectedThis, substitutedContextReceiverParameters,
|
||||||
substitutedTypeParameters,
|
substitutedTypeParameters,
|
||||||
substitutedValueParameters,
|
substitutedValueParameters,
|
||||||
substitutedReturnType,
|
substitutedReturnType,
|
||||||
|
|||||||
+6
@@ -121,6 +121,12 @@ public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorI
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public CopyBuilder<SimpleFunctionDescriptor> setContextReceiverParameters(@NotNull List<ReceiverParameterDescriptor> contextReceiverParameters) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
public CopyBuilder<SimpleFunctionDescriptor> setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter) {
|
public CopyBuilder<SimpleFunctionDescriptor> setExtensionReceiverParameter(@Nullable ReceiverParameterDescriptor extensionReceiverParameter) {
|
||||||
|
|||||||
Reference in New Issue
Block a user