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 61df151c942..e7a56f5993b 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 @@ -219,7 +219,7 @@ public class DescriptorDeserializer { @NotNull private CallableMemberDescriptor loadFunction(@NotNull Callable proto) { int flags = proto.getFlags(); - DeserializedSimpleFunctionDescriptor function = new DeserializedSimpleFunctionDescriptor( + DeserializedSimpleFunctionDescriptor function = DeserializedSimpleFunctionDescriptor.create( containingDeclaration, proto, deserializers, nameResolver diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedSimpleFunctionDescriptor.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedSimpleFunctionDescriptor.java index 8e03fb2282c..d5624e05b21 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedSimpleFunctionDescriptor.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedSimpleFunctionDescriptor.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.descriptors.serialization.descriptors; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.DescriptorDeserializer; import org.jetbrains.jet.descriptors.serialization.Flags; import org.jetbrains.jet.descriptors.serialization.NameResolver; @@ -35,20 +36,7 @@ public class DeserializedSimpleFunctionDescriptor extends SimpleFunctionDescript private DeserializedSimpleFunctionDescriptor( @NotNull DeclarationDescriptor containingDeclaration, - @NotNull Annotations annotations, - @NotNull Name name, - @NotNull Kind kind, - @NotNull ProtoBuf.Callable functionProto, - @NotNull NameResolver nameResolver - ) { - super(containingDeclaration, annotations, name, kind); - this.functionProto = functionProto; - this.nameResolver = nameResolver; - } - - private DeserializedSimpleFunctionDescriptor( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull SimpleFunctionDescriptor original, + @Nullable SimpleFunctionDescriptor original, @NotNull Annotations annotations, @NotNull Name name, @NotNull Kind kind, @@ -59,45 +47,17 @@ public class DeserializedSimpleFunctionDescriptor extends SimpleFunctionDescript this.nameResolver = nameResolver; } - public DeserializedSimpleFunctionDescriptor( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull ProtoBuf.Callable functionProto, - @NotNull Deserializers deserializers, - @NotNull NameResolver nameResolver - ) { - this(containingDeclaration, - DescriptorDeserializer.getAnnotations(containingDeclaration, functionProto, functionProto.getFlags(), - Deserializers.AnnotatedCallableKind.FUNCTION, deserializers.getAnnotationDeserializer(), - nameResolver), - nameResolver.getName(functionProto.getName()), - DescriptorDeserializer.memberKind(Flags.MEMBER_KIND.get(functionProto.getFlags())), - functionProto, - nameResolver); - } - @Override protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner, boolean preserveOriginal, Kind kind) { - if (preserveOriginal) { - return new DeserializedSimpleFunctionDescriptor( - newOwner, - getOriginal(), - getAnnotations(), - getName(), - kind, - functionProto, - nameResolver - ); - } - else { - return new DeserializedSimpleFunctionDescriptor( - newOwner, - getAnnotations(), - getName(), - kind, - functionProto, - nameResolver - ); - } + return new DeserializedSimpleFunctionDescriptor( + newOwner, + preserveOriginal ? getOriginal() : null, + getAnnotations(), + getName(), + kind, + functionProto, + nameResolver + ); } @NotNull @@ -113,4 +73,24 @@ public class DeserializedSimpleFunctionDescriptor extends SimpleFunctionDescript public NameResolver getNameResolver() { return nameResolver; } + + public static DeserializedSimpleFunctionDescriptor create( + @NotNull DeclarationDescriptor containingDeclaration, + @NotNull ProtoBuf.Callable functionProto, + @NotNull Deserializers deserializers, + @NotNull NameResolver nameResolver + ) { + Annotations annotations = DescriptorDeserializer.getAnnotations(containingDeclaration, functionProto, functionProto.getFlags(), + Deserializers.AnnotatedCallableKind.FUNCTION, + deserializers.getAnnotationDeserializer(), + nameResolver); + return new DeserializedSimpleFunctionDescriptor( + containingDeclaration, + null, + annotations, + nameResolver.getName(functionProto.getName()), + DescriptorDeserializer.memberKind(Flags.MEMBER_KIND.get(functionProto.getFlags())), + functionProto, + nameResolver); + } } 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 50729d6b84c..2c87142e251 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 @@ -40,7 +40,7 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements } public ConstructorDescriptorImpl(@NotNull ClassDescriptor containingDeclaration, @NotNull Annotations annotations, boolean isPrimary, Kind kind) { - super(containingDeclaration, annotations, NAME, kind); + super(containingDeclaration, null, annotations, NAME, kind); this.isPrimary = isPrimary; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/FunctionDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/FunctionDescriptorImpl.java index ae6a5baf99f..7dead86d131 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/FunctionDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/FunctionDescriptorImpl.java @@ -50,22 +50,12 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo protected FunctionDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, + @Nullable FunctionDescriptor original, @NotNull Annotations annotations, @NotNull Name name, @NotNull Kind kind) { super(containingDeclaration, annotations, name); - this.original = this; - this.kind = kind; - } - - protected FunctionDescriptorImpl( - @NotNull DeclarationDescriptor containingDeclaration, - @NotNull FunctionDescriptor original, - @NotNull Annotations annotations, - @NotNull Name name, - @NotNull Kind kind) { - super(containingDeclaration, annotations, name); - this.original = original; + this.original = original == null ? this : original; this.kind = kind; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScriptCodeDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScriptCodeDescriptor.java index f459259b551..d146079fa64 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScriptCodeDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScriptCodeDescriptor.java @@ -28,7 +28,7 @@ import java.util.List; public class ScriptCodeDescriptor extends FunctionDescriptorImpl { public ScriptCodeDescriptor(@NotNull ScriptDescriptor containingDeclaration) { - super(containingDeclaration, Annotations.EMPTY, Name.special(""), Kind.DECLARATION); + super(containingDeclaration, null, Annotations.EMPTY, Name.special(""), Kind.DECLARATION); setVisibility(Visibilities.LOCAL); } 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 b12e8b52223..91ac0311cac 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 @@ -38,12 +38,12 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @NotNull Name name, @NotNull Kind kind ) { - super(containingDeclaration, annotations, name, kind); + this(containingDeclaration, null, annotations, name, kind); } protected SimpleFunctionDescriptorImpl( @NotNull DeclarationDescriptor containingDeclaration, - @NotNull SimpleFunctionDescriptor original, + @Nullable SimpleFunctionDescriptor original, @NotNull Annotations annotations, @NotNull Name name, @NotNull Kind kind) { @@ -76,30 +76,19 @@ public class SimpleFunctionDescriptorImpl extends FunctionDescriptorImpl impleme @Override protected FunctionDescriptorImpl createSubstitutedCopy(DeclarationDescriptor newOwner, boolean preserveOriginal, Kind kind) { - if (preserveOriginal) { - return new SimpleFunctionDescriptorImpl( - newOwner, - getOriginal(), - // TODO : safeSubstitute - getAnnotations(), - getName(), - kind); - } - else { - return new SimpleFunctionDescriptorImpl( - newOwner, - // TODO : safeSubstitute - getAnnotations(), - getName(), - kind); - } + return new SimpleFunctionDescriptorImpl( + newOwner, + preserveOriginal ? getOriginal() : null, + // TODO : safeSubstitute + getAnnotations(), + getName(), + kind); } @NotNull @Override public SimpleFunctionDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) { - SimpleFunctionDescriptorImpl copy = (SimpleFunctionDescriptorImpl)doSubstitute(TypeSubstitutor.EMPTY, newOwner, modality, visibility, false, copyOverrides, kind); - return copy; + return (SimpleFunctionDescriptorImpl)doSubstitute(TypeSubstitutor.EMPTY, newOwner, modality, visibility, false, copyOverrides, kind); } @NotNull