Minor. Keep substitution in CopyConfiguration instead of originalSubstitutor
This commit is contained in:
+2
-2
@@ -163,7 +163,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope
|
|||||||
|
|
||||||
val substitutionMap = HashMap<TypeConstructor, TypeProjection>()
|
val substitutionMap = HashMap<TypeConstructor, TypeProjection>()
|
||||||
for (typeParameter in original.typeParameters) {
|
for (typeParameter in original.typeParameters) {
|
||||||
val typeProjection = configuration.originalSubstitutor.substitution[typeParameter.defaultType] ?: continue
|
val typeProjection = configuration.substitution[typeParameter.defaultType] ?: continue
|
||||||
val sourceTypeParameter = original.toSourceFunctionTypeParameters!![typeParameter]!!
|
val sourceTypeParameter = original.toSourceFunctionTypeParameters!![typeParameter]!!
|
||||||
substitutionMap[sourceTypeParameter.typeConstructor] = typeProjection
|
substitutionMap[sourceTypeParameter.typeConstructor] = typeProjection
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ class SamAdapterFunctionsScope(storageManager: StorageManager) : SyntheticScope
|
|||||||
|
|
||||||
val sourceFunctionSubstitutor =
|
val sourceFunctionSubstitutor =
|
||||||
TypeConstructorSubstitution.createByConstructorsMap(
|
TypeConstructorSubstitution.createByConstructorsMap(
|
||||||
substitutionMap, configuration.originalSubstitutor.substitution.approximateCapturedTypes()).buildSubstitutor()
|
substitutionMap, configuration.substitution.approximateCapturedTypes()).buildSubstitutor()
|
||||||
|
|
||||||
descriptor.sourceFunction = original.sourceFunction.substitute(sourceFunctionSubstitutor)
|
descriptor.sourceFunction = original.sourceFunction.substitute(sourceFunctionSubstitutor)
|
||||||
|
|
||||||
|
|||||||
+10
-13
@@ -23,10 +23,7 @@ import org.jetbrains.kotlin.descriptors.*;
|
|||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations;
|
||||||
import org.jetbrains.kotlin.name.Name;
|
import org.jetbrains.kotlin.name.Name;
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory;
|
import org.jetbrains.kotlin.resolve.DescriptorFactory;
|
||||||
import org.jetbrains.kotlin.types.DescriptorSubstitutor;
|
import org.jetbrains.kotlin.types.*;
|
||||||
import org.jetbrains.kotlin.types.KotlinType;
|
|
||||||
import org.jetbrains.kotlin.types.TypeSubstitutor;
|
|
||||||
import org.jetbrains.kotlin.types.Variance;
|
|
||||||
import org.jetbrains.kotlin.utils.CollectionsKt;
|
import org.jetbrains.kotlin.utils.CollectionsKt;
|
||||||
import org.jetbrains.kotlin.utils.SmartSet;
|
import org.jetbrains.kotlin.utils.SmartSet;
|
||||||
|
|
||||||
@@ -294,7 +291,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public class CopyConfiguration implements SimpleFunctionDescriptor.CopyBuilder<FunctionDescriptor> {
|
public class CopyConfiguration implements SimpleFunctionDescriptor.CopyBuilder<FunctionDescriptor> {
|
||||||
protected @NotNull TypeSubstitutor originalSubstitutor;
|
protected @NotNull TypeSubstitution substitution;
|
||||||
protected @NotNull DeclarationDescriptor newOwner;
|
protected @NotNull DeclarationDescriptor newOwner;
|
||||||
protected @NotNull Modality newModality;
|
protected @NotNull Modality newModality;
|
||||||
protected @NotNull Visibility newVisibility;
|
protected @NotNull Visibility newVisibility;
|
||||||
@@ -312,7 +309,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
private List<TypeParameterDescriptor> newTypeParameters = null;
|
private List<TypeParameterDescriptor> newTypeParameters = null;
|
||||||
|
|
||||||
public CopyConfiguration(
|
public CopyConfiguration(
|
||||||
@NotNull TypeSubstitutor originalSubstitutor,
|
@NotNull TypeSubstitution substitution,
|
||||||
@NotNull DeclarationDescriptor newOwner,
|
@NotNull DeclarationDescriptor newOwner,
|
||||||
@NotNull Modality newModality,
|
@NotNull Modality newModality,
|
||||||
@NotNull Visibility newVisibility,
|
@NotNull Visibility newVisibility,
|
||||||
@@ -322,7 +319,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull KotlinType newReturnType,
|
@NotNull KotlinType newReturnType,
|
||||||
@Nullable Name name
|
@Nullable Name name
|
||||||
) {
|
) {
|
||||||
this.originalSubstitutor = originalSubstitutor;
|
this.substitution = substitution;
|
||||||
this.newOwner = newOwner;
|
this.newOwner = newOwner;
|
||||||
this.newModality = newModality;
|
this.newModality = newModality;
|
||||||
this.newVisibility = newVisibility;
|
this.newVisibility = newVisibility;
|
||||||
@@ -451,8 +448,8 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public TypeSubstitutor getOriginalSubstitutor() {
|
public TypeSubstitution getSubstitution() {
|
||||||
return originalSubstitutor;
|
return substitution;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -465,7 +462,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
@NotNull
|
@NotNull
|
||||||
private CopyConfiguration newCopyBuilder(@NotNull TypeSubstitutor substitutor) {
|
private CopyConfiguration newCopyBuilder(@NotNull TypeSubstitutor substitutor) {
|
||||||
return new CopyConfiguration(
|
return new CopyConfiguration(
|
||||||
substitutor,
|
substitutor.getSubstitution(),
|
||||||
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(),
|
getContainingDeclaration(), getModality(), getVisibility(), getKind(), getValueParameters(),
|
||||||
getExtensionReceiverParameterType(), getReturnType(), null);
|
getExtensionReceiverParameterType(), getReturnType(), null);
|
||||||
}
|
}
|
||||||
@@ -483,13 +480,13 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
List<TypeParameterDescriptor> originalTypeParameters = getTypeParameters();
|
List<TypeParameterDescriptor> originalTypeParameters = getTypeParameters();
|
||||||
substitutedTypeParameters = new ArrayList<TypeParameterDescriptor>(originalTypeParameters.size());
|
substitutedTypeParameters = new ArrayList<TypeParameterDescriptor>(originalTypeParameters.size());
|
||||||
substitutor = DescriptorSubstitutor.substituteTypeParameters(
|
substitutor = DescriptorSubstitutor.substituteTypeParameters(
|
||||||
originalTypeParameters, configuration.originalSubstitutor.getSubstitution(), substitutedDescriptor, substitutedTypeParameters
|
originalTypeParameters, configuration.substitution, substitutedDescriptor, substitutedTypeParameters
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// They should be already substituted
|
// They should be already substituted
|
||||||
substitutedTypeParameters = configuration.newTypeParameters;
|
substitutedTypeParameters = configuration.newTypeParameters;
|
||||||
substitutor = configuration.originalSubstitutor;
|
substitutor = configuration.substitution.buildSubstitutor();
|
||||||
}
|
}
|
||||||
|
|
||||||
KotlinType substitutedReceiverParameterType = null;
|
KotlinType substitutedReceiverParameterType = null;
|
||||||
@@ -555,7 +552,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (configuration.copyOverrides && !getOriginal().getOverriddenDescriptors().isEmpty()) {
|
if (configuration.copyOverrides && !getOriginal().getOverriddenDescriptors().isEmpty()) {
|
||||||
if (configuration.originalSubstitutor.isEmpty()) {
|
if (configuration.substitution.isEmpty()) {
|
||||||
Function0<Set<FunctionDescriptor>> overriddenFunctionsTask = lazyOverriddenFunctionsTask;
|
Function0<Set<FunctionDescriptor>> overriddenFunctionsTask = lazyOverriddenFunctionsTask;
|
||||||
if (overriddenFunctionsTask != null) {
|
if (overriddenFunctionsTask != null) {
|
||||||
substitutedDescriptor.lazyOverriddenFunctionsTask = overriddenFunctionsTask;
|
substitutedDescriptor.lazyOverriddenFunctionsTask = overriddenFunctionsTask;
|
||||||
|
|||||||
Reference in New Issue
Block a user