From b2944a1bd1f154029b7dda3078383846f420ede3 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 6 Feb 2012 20:38:35 +0400 Subject: [PATCH] Revert "properly rewrite *Descriptor owner in FunctionDescriptorImpl.copy()" This reverts commit d6907848c54f8fce42c261b9e02a8b26be9209cf. --- .../descriptors/ConstructorDescriptorImpl.java | 7 +++---- .../descriptors/FunctionDescriptorImpl.java | 13 ++++--------- .../NamedFunctionDescriptorImpl.java | 17 +++++++++++++---- .../VariableAsFunctionDescriptor.java | 4 ++-- .../calls/ExpressionAsFunctionDescriptor.java | 2 +- .../error/NamedFunctionDescriptorErrorImpl.java | 2 +- 6 files changed, 24 insertions(+), 21 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java index 8d82db88eff..014da666a95 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/ConstructorDescriptorImpl.java @@ -23,8 +23,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements this.isPrimary = isPrimary; } - public ConstructorDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull ConstructorDescriptor original, @NotNull List annotations, boolean isPrimary) { - super(containingDeclaration, original, annotations, ""); + public ConstructorDescriptorImpl(@NotNull ConstructorDescriptor original, @NotNull List annotations, boolean isPrimary) { + super(original.getContainingDeclaration(), original, annotations, ""); this.isPrimary = isPrimary; } @@ -85,9 +85,8 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements } @Override - protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner) { + protected FunctionDescriptorImpl createSubstitutedCopy() { return new ConstructorDescriptorImpl( - (ClassDescriptor) newOwner, this, Collections.emptyList(), // TODO isPrimary); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java index 671e99bdd38..6f2129a2d7b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/FunctionDescriptorImpl.java @@ -135,12 +135,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i if (originalSubstitutor.isEmpty()) { return this; } - return doSubstitute(originalSubstitutor, getContainingDeclaration(), modality); - } - - protected FunctionDescriptor doSubstitute(TypeSubstitutor originalSubstitutor, - DeclarationDescriptor newOwner, Modality newModality) { - FunctionDescriptorImpl substitutedDescriptor = createSubstitutedCopy(newOwner); + FunctionDescriptorImpl substitutedDescriptor = createSubstitutedCopy(); List substitutedTypeParameters = Lists.newArrayList(); TypeSubstitutor substitutor = DescriptorSubstitutor.substituteTypeParameters(getTypeParameters(), originalSubstitutor, substitutedDescriptor, substitutedTypeParameters); @@ -152,7 +147,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i return null; } } - + ReceiverDescriptor substitutedExpectedThis = NO_RECEIVER; if (expectedThisObject.exists()) { JetType substitutedType = substitutor.substitute(expectedThisObject.getType(), Variance.INVARIANT); @@ -178,7 +173,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i substitutedTypeParameters, substitutedValueParameters, substitutedReturnType, - newModality, + modality, visibility ); for (FunctionDescriptor overriddenFunction : overriddenFunctions) { @@ -187,7 +182,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorImpl i return substitutedDescriptor; } - protected abstract FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner); + protected abstract FunctionDescriptorImpl createSubstitutedCopy(); @Override public R accept(DeclarationDescriptorVisitor visitor, D data) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NamedFunctionDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NamedFunctionDescriptorImpl.java index c6e5a87d2e8..2bcd2613d4c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NamedFunctionDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/NamedFunctionDescriptorImpl.java @@ -4,7 +4,6 @@ import com.google.common.collect.Lists; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; -import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.List; @@ -28,9 +27,9 @@ public class NamedFunctionDescriptorImpl extends FunctionDescriptorImpl implemen } @Override - protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner) { + protected FunctionDescriptorImpl createSubstitutedCopy() { return new NamedFunctionDescriptorImpl( - newOwner, + getContainingDeclaration(), this, // TODO : safeSubstitute getAnnotations(), @@ -40,6 +39,16 @@ public class NamedFunctionDescriptorImpl extends FunctionDescriptorImpl implemen @NotNull @Override public NamedFunctionDescriptor copy(DeclarationDescriptor newOwner, boolean makeNonAbstract) { - return (NamedFunctionDescriptor) doSubstitute(TypeSubstitutor.EMPTY, newOwner, DescriptorUtils.convertModality(modality, makeNonAbstract)); + NamedFunctionDescriptorImpl copy = new NamedFunctionDescriptorImpl(newOwner, getOriginal(), Lists.newArrayList(getAnnotations()), getName()); + copy.initialize( + getReceiverParameter().exists() ? getReceiverParameter().getType() : null, + expectedThisObject, + DescriptorUtils.copyTypeParameters(copy, typeParameters), + DescriptorUtils.copyValueParameters(copy, unsubstitutedValueParameters), + unsubstitutedReturnType, + DescriptorUtils.convertModality(modality, makeNonAbstract), + visibility + ); + return copy; } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java index f2a3a4b816e..744bb7729f0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/VariableAsFunctionDescriptor.java @@ -36,7 +36,7 @@ public class VariableAsFunctionDescriptor extends FunctionDescriptorImpl { } @Override - protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner) { + protected FunctionDescriptorImpl createSubstitutedCopy() { throw new IllegalStateException(); } -} +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ExpressionAsFunctionDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ExpressionAsFunctionDescriptor.java index 1ccd711ff15..9b38282eb41 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ExpressionAsFunctionDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ExpressionAsFunctionDescriptor.java @@ -20,7 +20,7 @@ public class ExpressionAsFunctionDescriptor extends FunctionDescriptorImpl { } @Override - protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner) { + protected FunctionDescriptorImpl createSubstitutedCopy() { throw new IllegalStateException(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/error/NamedFunctionDescriptorErrorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/error/NamedFunctionDescriptorErrorImpl.java index b3e07225c1d..4ebb4249b98 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/error/NamedFunctionDescriptorErrorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/error/NamedFunctionDescriptorErrorImpl.java @@ -25,7 +25,7 @@ public class NamedFunctionDescriptorErrorImpl extends NamedFunctionDescriptorImp } @Override - protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner) { + protected FunctionDescriptorImpl createSubstitutedCopy() { return this; }