From dc2972d99efd5810ab84b94d1261d5f0e36b745d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 8 Jun 2016 17:28:37 +0300 Subject: [PATCH] Implement copy in FunctionDescriptorImpl, call doSubstitute only in CopyConfiguration#build --- .../lazy/descriptors/LazyClassDescriptor.java | 19 ++++-------------- .../impl/ConstructorDescriptorImpl.java | 18 ++++++++--------- .../impl/FunctionDescriptorImpl.java | 20 ++++++++++++++++++- .../impl/SimpleFunctionDescriptorImpl.java | 9 +-------- 4 files changed, 32 insertions(+), 34 deletions(-) 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 55ba381622f..4644e40ccbc 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 @@ -269,9 +269,10 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes ConstructorDescriptor primaryConstructor = getUnsubstitutedPrimaryConstructor(); if (primaryConstructor != null) return primaryConstructor; - return new FunctionDescriptorImpl(LazyClassDescriptor.this, null, Annotations.Companion.getEMPTY(), - Name.special(""), - CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE) { + return new FunctionDescriptorImpl( + LazyClassDescriptor.this, null, Annotations.Companion.getEMPTY(), Name.special(""), + CallableMemberDescriptor.Kind.SYNTHESIZED, SourceElement.NO_SOURCE + ) { @NotNull @Override protected FunctionDescriptorImpl createSubstitutedCopy( @@ -284,18 +285,6 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes ) { throw new UnsupportedOperationException(); } - - @NotNull - @Override - public FunctionDescriptor copy( - DeclarationDescriptor newOwner, - Modality modality, - Visibility visibility, - Kind kind, - boolean copyOverrides - ) { - throw new UnsupportedOperationException(); - } }; } diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java index cb7ac3086db..48e9e44b667 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/ConstructorDescriptorImpl.java @@ -156,15 +156,13 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements @NotNull @Override - public ConstructorDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) { - //noinspection ConstantConditions - return (ConstructorDescriptor) doSubstitute( - (CopyConfiguration) newCopyBuilder() - .setOwner(newOwner) - .setModality(modality) - .setVisibility(visibility) - .setKind(kind) - .setCopyOverrides(copyOverrides) - ); + public ConstructorDescriptor copy( + DeclarationDescriptor newOwner, + Modality modality, + Visibility visibility, + Kind kind, + boolean copyOverrides + ) { + return (ConstructorDescriptor) super.copy(newOwner, modality, visibility, kind, copyOverrides); } } 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 7bc0a86e4da..81435e03cee 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/FunctionDescriptorImpl.java @@ -315,7 +315,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo if (originalSubstitutor.isEmpty()) { return this; } - return doSubstitute(newCopyBuilder(originalSubstitutor).setOriginal(getOriginal())); + return newCopyBuilder(originalSubstitutor).setOriginal(getOriginal()).build(); } @Nullable @@ -691,6 +691,24 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo return substitutedDescriptor; } + @NotNull + @Override + public FunctionDescriptor copy( + DeclarationDescriptor newOwner, + Modality modality, + Visibility visibility, + Kind kind, + boolean copyOverrides + ) { + return newCopyBuilder() + .setOwner(newOwner) + .setModality(modality) + .setVisibility(visibility) + .setKind(kind) + .setCopyOverrides(copyOverrides) + .build(); + } + @NotNull protected abstract FunctionDescriptorImpl createSubstitutedCopy( @NotNull DeclarationDescriptor newOwner, 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 b6ed33aa910..50f2356face 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/impl/SimpleFunctionDescriptorImpl.java @@ -99,14 +99,7 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme Kind kind, boolean copyOverrides ) { - //noinspection ConstantConditions - return newCopyBuilder() - .setOwner(newOwner) - .setModality(modality) - .setVisibility(visibility) - .setKind(kind) - .setCopyOverrides(copyOverrides) - .build(); + return (SimpleFunctionDescriptor) super.copy(newOwner, modality, visibility, kind, copyOverrides); } @NotNull