Minor. Keep substitution in CopyConfiguration instead of originalSubstitutor

This commit is contained in:
Denis Zharkov
2016-04-06 15:55:09 +03:00
parent 128dd43dbd
commit f104be16cf
2 changed files with 12 additions and 15 deletions
@@ -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)
@@ -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;