From eaad1f9f50dd3eb754772fb224e0fdc3d26ed3f8 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 25 Mar 2014 18:35:20 +0400 Subject: [PATCH] Got rid of constructors/initializers zoo in simple function descriptors --- .../AccessorForFunctionDescriptor.java | 2 +- .../jet/codegen/ClassBodyCodegen.java | 6 +-- .../jetbrains/jet/codegen/CodegenUtil.java | 5 ++- .../jet/codegen/PackagePartCodegen.java | 6 +-- .../jet/lang/resolve/DescriptorResolver.java | 6 +-- .../lang/resolve/FunctionDescriptorUtil.java | 2 +- .../ControlStructureTypingUtils.java | 2 +- .../java/descriptor/JavaMethodDescriptor.java | 39 +++++++++---------- .../descriptor/SamConstructorDescriptor.java | 2 +- .../lazy/descriptors/LazyJavaMemberScope.kt | 2 +- .../sam/SamAdapterFunctionDescriptor.java | 2 +- .../impl/AnonymousFunctionDescriptor.java | 2 +- .../impl/SimpleFunctionDescriptorImpl.java | 19 ++++----- .../jet/lang/resolve/DescriptorFactory.java | 8 ++-- .../ErrorSimpleFunctionDescriptorImpl.java | 2 +- 15 files changed, 52 insertions(+), 53 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java index d1be3db9e21..de59d0e6a69 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AccessorForFunctionDescriptor.java @@ -36,7 +36,7 @@ public class AccessorForFunctionDescriptor extends SimpleFunctionDescriptorImpl @NotNull DeclarationDescriptor containingDeclaration, int index ) { - super(containingDeclaration, Annotations.EMPTY, + super(containingDeclaration, null, Annotations.EMPTY, Name.identifier((descriptor instanceof ConstructorDescriptor ? "$init" : descriptor.getName()) + "$b$" + index), Kind.DECLARATION); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java index 479160229c7..e643202675d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java @@ -174,9 +174,9 @@ public abstract class ClassBodyCodegen extends MemberCodegen { MethodVisitor method = createOrGetClInitMethod(); method.visitCode(); SimpleFunctionDescriptorImpl clInit = - new SimpleFunctionDescriptorImpl(descriptor, Annotations.EMPTY, - Name.special(""), - CallableMemberDescriptor.Kind.SYNTHESIZED); + SimpleFunctionDescriptorImpl.create(descriptor, Annotations.EMPTY, + Name.special(""), + CallableMemberDescriptor.Kind.SYNTHESIZED); clInit.initialize(null, null, Collections.emptyList(), Collections.emptyList(), null, null, Visibilities.PRIVATE); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index e5e9a4ef87e..35c0fb4600a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -74,12 +74,13 @@ public class CodegenUtil { public static SimpleFunctionDescriptor createInvoke(FunctionDescriptor fd) { int arity = fd.getValueParameters().size(); - SimpleFunctionDescriptorImpl invokeDescriptor = new SimpleFunctionDescriptorImpl( + SimpleFunctionDescriptorImpl invokeDescriptor = SimpleFunctionDescriptorImpl.create( fd.getExpectedThisObject() != null ? KotlinBuiltIns.getInstance().getExtensionFunction(arity) : KotlinBuiltIns.getInstance().getFunction(arity), Annotations.EMPTY, Name.identifier("invoke"), - CallableMemberDescriptor.Kind.DECLARATION); + CallableMemberDescriptor.Kind.DECLARATION + ); invokeDescriptor.initialize(DescriptorUtils.getReceiverParameterType(fd.getReceiverParameter()), fd.getExpectedThisObject(), diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java index 43a4702c3c8..0d8e9a7eb2f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/PackagePartCodegen.java @@ -99,9 +99,9 @@ public class PackagePartCodegen extends MemberCodegen { FrameMap frameMap = new FrameMap(); SimpleFunctionDescriptorImpl clInit = - new SimpleFunctionDescriptorImpl(this.descriptor, Annotations.EMPTY, - Name.special(""), - CallableMemberDescriptor.Kind.SYNTHESIZED); + SimpleFunctionDescriptorImpl.create(this.descriptor, Annotations.EMPTY, + Name.special(""), + CallableMemberDescriptor.Kind.SYNTHESIZED); clInit.initialize(null, null, Collections.emptyList(), Collections.emptyList(), null, null, Visibilities.PRIVATE); 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 8408143eef0..47b57cff004 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -293,7 +293,7 @@ public class DescriptorResolver { @NotNull final DataFlowInfo dataFlowInfo, @NotNull Annotations annotations ) { - final SimpleFunctionDescriptorImpl functionDescriptor = new SimpleFunctionDescriptorImpl( + final SimpleFunctionDescriptorImpl functionDescriptor = SimpleFunctionDescriptorImpl.create( containingDescriptor, annotations, JetPsiUtil.safeName(function.getName()), @@ -379,7 +379,7 @@ public class DescriptorResolver { String functionName = COMPONENT_FUNCTION_NAME_PREFIX + parameterIndex; JetType returnType = property.getType(); - SimpleFunctionDescriptorImpl functionDescriptor = new SimpleFunctionDescriptorImpl( + SimpleFunctionDescriptorImpl functionDescriptor = SimpleFunctionDescriptorImpl.create( classDescriptor, Annotations.EMPTY, Name.identifier(functionName), @@ -409,7 +409,7 @@ public class DescriptorResolver { ) { JetType returnType = classDescriptor.getDefaultType(); - SimpleFunctionDescriptorImpl functionDescriptor = new SimpleFunctionDescriptorImpl( + SimpleFunctionDescriptorImpl functionDescriptor = SimpleFunctionDescriptorImpl.create( classDescriptor, Annotations.EMPTY, COPY_METHOD_NAME, diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/FunctionDescriptorUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/FunctionDescriptorUtil.java index d42fb499185..0b63b9faca4 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/FunctionDescriptorUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/FunctionDescriptorUtil.java @@ -118,7 +118,7 @@ public class FunctionDescriptorUtil { @NotNull FunctionDescriptor function, @NotNull List newParameters ) { - FunctionDescriptorImpl descriptor = new SimpleFunctionDescriptorImpl( + FunctionDescriptorImpl descriptor = SimpleFunctionDescriptorImpl.create( function.getContainingDeclaration(), function.getAnnotations(), function.getName(), diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java index 6dd1291eaf5..5bad00935a9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ControlStructureTypingUtils.java @@ -90,7 +90,7 @@ public class ControlStructureTypingUtils { Name specialFunctionName = Name.identifierNoValidate(""); - SimpleFunctionDescriptorImpl function = new SimpleFunctionDescriptorImpl( + SimpleFunctionDescriptorImpl function = SimpleFunctionDescriptorImpl.create( ErrorUtils.getErrorModule(),//todo hack to avoid returning true in 'isError(DeclarationDescriptor)' Annotations.EMPTY, specialFunctionName, CallableMemberDescriptor.Kind.DECLARATION); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaMethodDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaMethodDescriptor.java index 1322d5c28e9..f2c9e82ca7c 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaMethodDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/JavaMethodDescriptor.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.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; @@ -27,26 +28,9 @@ import org.jetbrains.jet.lang.resolve.name.Name; public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implements JavaCallableMemberDescriptor { private Boolean hasStableParameterNames = null; - public JavaMethodDescriptor( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull Name name - ) { - this(containingDeclaration, annotations, name, Kind.DECLARATION); - } - private JavaMethodDescriptor( @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull Name name, - @NotNull Kind kind - ) { - super(containingDeclaration, annotations, name, kind); - } - - private JavaMethodDescriptor( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull SimpleFunctionDescriptor original, + @Nullable SimpleFunctionDescriptor original, @NotNull Annotations annotations, @NotNull Name name, @NotNull Kind kind @@ -54,6 +38,15 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement super(containingDeclaration, original, annotations, name, kind); } + @NotNull + public static JavaMethodDescriptor createJavaMethod( + @NotNull DeclarationDescriptor containingDeclaration, + @NotNull Annotations annotations, + @NotNull Name name + ) { + return new JavaMethodDescriptor(containingDeclaration, null, annotations, name, Kind.DECLARATION); + } + @Override public boolean hasStableParameterNames() { assert hasStableParameterNames != null : "hasStableParameterNames was not set: " + this; @@ -66,9 +59,13 @@ public class JavaMethodDescriptor extends SimpleFunctionDescriptorImpl implement @Override protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner, boolean preserveOriginal, Kind kind) { - JavaMethodDescriptor result = preserveOriginal - ? new JavaMethodDescriptor(newOwner, getOriginal(), getAnnotations(), getName(), kind) - : new JavaMethodDescriptor(newOwner, getAnnotations(), getName(), kind); + JavaMethodDescriptor result = new JavaMethodDescriptor( + newOwner, + preserveOriginal ? getOriginal() : null, + getAnnotations(), + getName(), + kind + ); result.setHasStableParameterNames(hasStableParameterNames()); return result; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.java index 605f486c6a8..79e38d8c3c2 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/descriptor/SamConstructorDescriptor.java @@ -29,7 +29,7 @@ public class SamConstructorDescriptor extends SimpleFunctionDescriptorImpl @NotNull ClassOrPackageFragmentDescriptor containingDeclaration, @NotNull JavaClassDescriptor samInterface ) { - super(containingDeclaration, samInterface.getAnnotations(), samInterface.getName(), Kind.SYNTHESIZED); + super(containingDeclaration, null, samInterface.getAnnotations(), samInterface.getName(), Kind.SYNTHESIZED); this.samInterface = samInterface; } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt index 11c152fdc95..72bb1609364 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaMemberScope.kt @@ -101,7 +101,7 @@ public abstract class LazyJavaMemberScope( internal fun resolveMethodToFunctionDescriptor(method: JavaMethod, record: Boolean = true): SimpleFunctionDescriptor { - val functionDescriptorImpl = JavaMethodDescriptor(_containingDeclaration, c.resolveAnnotations(method), method.getName()) + val functionDescriptorImpl = JavaMethodDescriptor.createJavaMethod(_containingDeclaration, c.resolveAnnotations(method), method.getName()) val c = c.child(functionDescriptorImpl, method.getTypeParameters().toSet()) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterFunctionDescriptor.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterFunctionDescriptor.java index 5cbede4cb16..0bc3833cf0f 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterFunctionDescriptor.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/sam/SamAdapterFunctionDescriptor.java @@ -26,7 +26,7 @@ import org.jetbrains.jet.lang.resolve.java.descriptor.SamAdapterDescriptor; private final SimpleFunctionDescriptor declaration; public SamAdapterFunctionDescriptor(@NotNull SimpleFunctionDescriptor declaration) { - super(declaration.getContainingDeclaration(), declaration.getAnnotations(), declaration.getName(), Kind.SYNTHESIZED); + super(declaration.getContainingDeclaration(), null, declaration.getAnnotations(), declaration.getName(), Kind.SYNTHESIZED); this.declaration = declaration; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/AnonymousFunctionDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/AnonymousFunctionDescriptor.java index 5116f2b2f17..af2be7b0b98 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/AnonymousFunctionDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/AnonymousFunctionDescriptor.java @@ -27,6 +27,6 @@ public class AnonymousFunctionDescriptor extends SimpleFunctionDescriptorImpl { @NotNull Annotations annotations, @NotNull Kind kind ) { - super(containingDeclaration, annotations, Name.special(""), kind); + super(containingDeclaration, null, annotations, Name.special(""), kind); } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java index 91ac0311cac..65a5d1574c9 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/SimpleFunctionDescriptorImpl.java @@ -32,15 +32,6 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme private InlineStrategy inlineStrategy; - public SimpleFunctionDescriptorImpl( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull Name name, - @NotNull Kind kind - ) { - this(containingDeclaration, null, annotations, name, kind); - } - protected SimpleFunctionDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, @Nullable SimpleFunctionDescriptor original, @@ -50,6 +41,16 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme super(containingDeclaration, original, annotations, name, kind); } + @NotNull + public static SimpleFunctionDescriptorImpl create( + @NotNull DeclarationDescriptor containingDeclaration, + @NotNull Annotations annotations, + @NotNull Name name, + @NotNull Kind kind + ) { + return new SimpleFunctionDescriptorImpl(containingDeclaration, null, annotations, name, kind); + } + @NotNull @Override 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 3e38b5b35fc..99bd93fb39b 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorFactory.java @@ -89,8 +89,8 @@ public class DescriptorFactory { @NotNull JetType returnType ) { SimpleFunctionDescriptorImpl values = - new SimpleFunctionDescriptorImpl(classObject, Annotations.EMPTY, VALUES_METHOD_NAME, - CallableMemberDescriptor.Kind.SYNTHESIZED); + SimpleFunctionDescriptorImpl.create(classObject, Annotations.EMPTY, VALUES_METHOD_NAME, + CallableMemberDescriptor.Kind.SYNTHESIZED); return values.initialize(null, classObject.getThisAsReceiverParameter(), Collections.emptyList(), Collections.emptyList(), returnType, Modality.FINAL, @@ -103,8 +103,8 @@ public class DescriptorFactory { @NotNull JetType returnType ) { SimpleFunctionDescriptorImpl values = - new SimpleFunctionDescriptorImpl(classObject, Annotations.EMPTY, VALUE_OF_METHOD_NAME, - CallableMemberDescriptor.Kind.SYNTHESIZED); + SimpleFunctionDescriptorImpl.create(classObject, Annotations.EMPTY, VALUE_OF_METHOD_NAME, + CallableMemberDescriptor.Kind.SYNTHESIZED); ValueParameterDescriptor parameterDescriptor = new ValueParameterDescriptorImpl( values, 0, diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorSimpleFunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorSimpleFunctionDescriptorImpl.java index 6d17dc6c44b..f59354eab9f 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorSimpleFunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/types/error/ErrorSimpleFunctionDescriptorImpl.java @@ -30,7 +30,7 @@ public class ErrorSimpleFunctionDescriptorImpl extends SimpleFunctionDescriptorI private final ErrorUtils.ErrorScope ownerScope; public ErrorSimpleFunctionDescriptorImpl(ErrorUtils.ErrorScope ownerScope) { - super(ErrorUtils.getErrorClass(), Annotations.EMPTY, Name.special(""), Kind.DECLARATION); + super(ErrorUtils.getErrorClass(), null, Annotations.EMPTY, Name.special(""), Kind.DECLARATION); this.ownerScope = ownerScope; }