From 8d38e74bd9dbceb01b8d9fc8c4db9e025ba95a3e Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 25 Mar 2014 17:29:19 +0400 Subject: [PATCH] Got rid of constructors/initializers zoo in constructor descriptors --- .../jet/codegen/context/CodegenContext.java | 4 +- .../serialization/DescriptorDeserializer.java | 2 +- .../jet/lang/resolve/DescriptorResolver.java | 2 +- .../descriptor/JavaConstructorDescriptor.java | 22 +++++----- .../descriptors/LazyJavaClassMemberScope.kt | 4 +- .../sam/SamAdapterConstructorDescriptor.java | 2 +- .../lang/descriptors/ScriptDescriptor.java | 5 +-- .../impl/ConstructorDescriptorImpl.java | 42 ++++++++++++------- .../DeclarationDescriptorNonRootImpl.java | 2 +- .../jet/lang/resolve/DescriptorFactory.java | 2 +- .../types/error/ErrorClassDescriptor.java | 9 ++-- .../error/MissingDependencyErrorClass.kt | 4 +- 12 files changed, 54 insertions(+), 46 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java index 3d0c809e828..f041831d35f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/context/CodegenContext.java @@ -190,9 +190,9 @@ public abstract class CodegenContext { @NotNull public ConstructorContext intoConstructor(@Nullable ConstructorDescriptor descriptor, @Nullable MutableClosure closure) { if (descriptor == null) { - descriptor = new ConstructorDescriptorImpl(getThisDescriptor(), Annotations.EMPTY, true) + descriptor = ConstructorDescriptorImpl.create(getThisDescriptor(), Annotations.EMPTY, true) .initialize(Collections.emptyList(), Collections.emptyList(), - Visibilities.PUBLIC); + Visibilities.PUBLIC, false); } return new ConstructorContext(descriptor, getContextKind(), this, closure); } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java index 966fd64a82d..5499faa1030 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/DescriptorDeserializer.java @@ -250,7 +250,7 @@ public class DescriptorDeserializer { @NotNull private CallableMemberDescriptor loadConstructor(@NotNull Callable proto) { ClassDescriptor classDescriptor = (ClassDescriptor) containingDeclaration; - ConstructorDescriptorImpl descriptor = new ConstructorDescriptorImpl( + ConstructorDescriptorImpl descriptor = ConstructorDescriptorImpl.create( classDescriptor, getAnnotations(proto, proto.getFlags(), AnnotatedCallableKind.FUNCTION), // TODO: primary diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 55147f1db30..8408143eef0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -1228,7 +1228,7 @@ public class DescriptorResolver { @NotNull JetDeclaration declarationToTrace, List typeParameters, @NotNull List valueParameters, BindingTrace trace ) { - ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl( + ConstructorDescriptorImpl constructorDescriptor = ConstructorDescriptorImpl.create( classDescriptor, annotationResolver.resolveAnnotationsWithoutArguments(scope, modifierList, trace), isPrimary diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaConstructorDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaConstructorDescriptor.java index 02ed3784f28..a04fa9f2a92 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaConstructorDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaConstructorDescriptor.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.resolve.java.descriptor; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; @@ -25,21 +26,22 @@ import org.jetbrains.jet.lang.descriptors.impl.ConstructorDescriptorImpl; public class JavaConstructorDescriptor extends ConstructorDescriptorImpl { private Boolean hasStableParameterNames; - public JavaConstructorDescriptor( - @NotNull ClassDescriptor containingDeclaration, - @NotNull Annotations annotations, - boolean isPrimary - ) { - super(containingDeclaration, annotations, isPrimary); - } - private JavaConstructorDescriptor( @NotNull ClassDescriptor containingDeclaration, - @NotNull JavaConstructorDescriptor original, + @Nullable JavaConstructorDescriptor original, @NotNull Annotations annotations, boolean isPrimary ) { - super(containingDeclaration, original, annotations, isPrimary); + super(containingDeclaration, original, annotations, isPrimary, Kind.DECLARATION); + } + + @NotNull + public static JavaConstructorDescriptor createJavaConstructor( + @NotNull ClassDescriptor containingDeclaration, + @NotNull Annotations annotations, + boolean isPrimary + ) { + return new JavaConstructorDescriptor(containingDeclaration, null, annotations, isPrimary); } @Override diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt index 8f6a244d2e9..c97b791d4fa 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaClassMemberScope.kt @@ -74,7 +74,7 @@ public class LazyJavaClassMemberScope( } private fun resolveConstructor(constructor: JavaMethod, classDescriptor: ClassDescriptor, isStaticClass: Boolean): ConstructorDescriptor { - val constructorDescriptor = JavaConstructorDescriptor(classDescriptor, Annotations.EMPTY, /* isPrimary = */ false) + val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor(classDescriptor, Annotations.EMPTY, /* isPrimary = */ false) val valueParameters = resolveValueParameters(c, constructorDescriptor, constructor.getValueParameters()) val effectiveSignature = c.externalSignatureResolver.resolveAlternativeMethodSignature( @@ -106,7 +106,7 @@ public class LazyJavaClassMemberScope( return null val classDescriptor = getContainingDeclaration() - val constructorDescriptor = JavaConstructorDescriptor(classDescriptor, Annotations.EMPTY, /* isPrimary = */ true) + val constructorDescriptor = JavaConstructorDescriptor.createJavaConstructor(classDescriptor, Annotations.EMPTY, /* isPrimary = */ true) val typeParameters = classDescriptor.getTypeConstructor().getParameters() val valueParameters = if (isAnnotation) createAnnotationConstructorParameters(constructorDescriptor) else Collections.emptyList() diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterConstructorDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterConstructorDescriptor.java index da64be565fb..5b7ab94097d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterConstructorDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterConstructorDescriptor.java @@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor; private final ConstructorDescriptor declaration; public SamAdapterConstructorDescriptor(@NotNull ConstructorDescriptor declaration) { - super(declaration.getContainingDeclaration(), declaration.getAnnotations(), declaration.isPrimary(), Kind.SYNTHESIZED); + super(declaration.getContainingDeclaration(), null, declaration.getAnnotations(), declaration.isPrimary(), Kind.SYNTHESIZED); this.declaration = declaration; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java index d16f4790705..43d386be3fc 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ScriptDescriptor.java @@ -17,7 +17,6 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; import org.jetbrains.jet.lang.descriptors.impl.*; import org.jetbrains.jet.lang.resolve.DescriptorFactory; @@ -157,8 +156,8 @@ public class ScriptDescriptor extends DeclarationDescriptorNonRootImpl { public void setValueParameters(@NotNull List valueParameters) { this.valueParameters = valueParameters; ConstructorDescriptorImpl constructorDescriptor = - new ConstructorDescriptorImpl(classDescriptor, Annotations.EMPTY, true) - .initialize(Collections.emptyList(), valueParameters, Visibilities.PUBLIC); + ConstructorDescriptorImpl.create(classDescriptor, Annotations.EMPTY, true) + .initialize(Collections.emptyList(), valueParameters, Visibilities.PUBLIC, false); constructorDescriptor.setReturnType(classDescriptor.getDefaultType()); classDescriptor.getConstructors().add(constructorDescriptor); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ConstructorDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ConstructorDescriptorImpl.java index 2c87142e251..8ade6520bc8 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ConstructorDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ConstructorDescriptorImpl.java @@ -35,26 +35,34 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements private static final Name NAME = Name.special(""); - public ConstructorDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull Annotations annotations, boolean isPrimary) { - this(containingDeclaration, annotations, isPrimary, Kind.DECLARATION); - } - - public ConstructorDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull Annotations annotations, boolean isPrimary, Kind kind) { - super(containingDeclaration, null, annotations, NAME, kind); + protected ConstructorDescriptorImpl( + @NotNull ClassDescriptor containingDeclaration, + @Nullable ConstructorDescriptor original, + @NotNull Annotations annotations, + boolean isPrimary, + @NotNull Kind kind + ) { + super(containingDeclaration, original, annotations, NAME, kind); this.isPrimary = isPrimary; } - public ConstructorDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull ConstructorDescriptor original, @NotNull Annotations annotations, boolean isPrimary) { - super(containingDeclaration, original, annotations, NAME, Kind.DECLARATION); - this.isPrimary = isPrimary; + @NotNull + public static ConstructorDescriptorImpl create( + @NotNull ClassDescriptor containingDeclaration, + @NotNull Annotations annotations, + boolean isPrimary + ) { + return new ConstructorDescriptorImpl(containingDeclaration, null, annotations, isPrimary, Kind.DECLARATION); } - public ConstructorDescriptorImpl initialize(@NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, Visibility visibility) { - return initialize(typeParameters, unsubstitutedValueParameters, visibility, false); - } - - public ConstructorDescriptorImpl initialize(@NotNull List typeParameters, @NotNull List unsubstitutedValueParameters, Visibility visibility, boolean isStatic) { - super.initialize(null, isStatic ? NO_RECEIVER_PARAMETER : getExpectedThisObject(getContainingDeclaration()), typeParameters, unsubstitutedValueParameters, null, Modality.FINAL, visibility); + public ConstructorDescriptorImpl initialize( + @NotNull List typeParameters, + @NotNull List unsubstitutedValueParameters, + @NotNull Visibility visibility, + boolean isStatic + ) { + super.initialize(null, isStatic ? NO_RECEIVER_PARAMETER : getExpectedThisObject(getContainingDeclaration()), typeParameters, + unsubstitutedValueParameters, null, Modality.FINAL, visibility); return this; } @@ -105,11 +113,13 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements "newOwner: " + newOwner + "\n" + "kind: " + kind); } + assert preserveOriginal : "Attempt to create copy of constructor without preserving original: " + this; return new ConstructorDescriptorImpl( (ClassDescriptor) newOwner, this, Annotations.EMPTY, // TODO - isPrimary); + isPrimary, + Kind.DECLARATION); } @NotNull diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorNonRootImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorNonRootImpl.java index dc8e8efb8d6..7a677b58397 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorNonRootImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorNonRootImpl.java @@ -29,7 +29,7 @@ public abstract class DeclarationDescriptorNonRootImpl @NotNull private final DeclarationDescriptor containingDeclaration; - public DeclarationDescriptorNonRootImpl( + protected DeclarationDescriptorNonRootImpl( @NotNull DeclarationDescriptor containingDeclaration, @NotNull Annotations annotations, @NotNull Name name) { diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java index 42205b7b708..3e38b5b35fc 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java @@ -37,7 +37,7 @@ public class DescriptorFactory { private static class DefaultConstructorDescriptor extends ConstructorDescriptorImpl { public DefaultConstructorDescriptor(@NotNull ClassDescriptor containingClass) { - super(containingClass, Annotations.EMPTY, true); + super(containingClass, null, Annotations.EMPTY, true, Kind.DECLARATION); initialize(Collections.emptyList(), Collections.emptyList(), getDefaultConstructorVisibility(containingClass), true); } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorClassDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorClassDescriptor.java index 6ab176ccd90..e84b54bd84e 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorClassDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorClassDescriptor.java @@ -37,13 +37,10 @@ public final class ErrorClassDescriptor extends ClassDescriptorImpl { super(getErrorModule(), Name.special(""), Modality.OPEN, Collections.emptyList()); ConstructorDescriptorImpl errorConstructor = - new ConstructorDescriptorImpl(this, Annotations.EMPTY, true); + ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true); - errorConstructor.initialize( - Collections.emptyList(), // TODO - Collections.emptyList(), // TODO - Visibilities.INTERNAL - ); + errorConstructor.initialize(Collections.emptyList(), Collections.emptyList(), + Visibilities.INTERNAL, false); errorConstructor.setReturnType(createErrorType("")); initialize(createErrorScope("ERROR_CLASS"), Collections.singleton(errorConstructor), errorConstructor); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt b/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt index 4e459f7362e..2cb638cb4a6 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/error/MissingDependencyErrorClass.kt @@ -58,8 +58,8 @@ public class MissingDependencyErrorClassDescriptor(override val fullFqName: FqNa } { - val emptyConstructor = ConstructorDescriptorImpl(this, Annotations.EMPTY, true) - emptyConstructor.initialize(Collections.emptyList(), Collections.emptyList(), Visibilities.INTERNAL) + val emptyConstructor = ConstructorDescriptorImpl.create(this, Annotations.EMPTY, true) + emptyConstructor.initialize(Collections.emptyList(), Collections.emptyList(), Visibilities.INTERNAL, false) emptyConstructor.setReturnType(createErrorType("")) initialize(JetScope.EMPTY, Collections.singleton(emptyConstructor), emptyConstructor) }