From 4dcbd8d0c507c0282e5918cf9279438f888ed9ea Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 19 Jul 2012 17:35:51 +0400 Subject: [PATCH] getOriginal() works correctly for PropertyGetter(Setter)Descriptor (previously was returning itself). --- .../PropertyAccessorDescriptor.java | 4 +-- .../lang/descriptors/PropertyDescriptor.java | 4 +-- .../descriptors/PropertyGetterDescriptor.java | 31 +++++++++++++++++-- .../descriptors/PropertySetterDescriptor.java | 24 +++++++++++++- 4 files changed, 55 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java index 78a531ba7a9..1bf2a15486e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java @@ -72,9 +72,7 @@ public abstract class PropertyAccessorDescriptor extends DeclarationDescriptorNo @NotNull @Override - public PropertyAccessorDescriptor getOriginal() { - return (PropertyAccessorDescriptor) super.getOriginal(); - } + public abstract PropertyAccessorDescriptor getOriginal(); @NotNull @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java index 1dca0b9b47b..458500b92c7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -247,14 +247,14 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab PropertyGetterDescriptor newGetter = getter == null ? null : new PropertyGetterDescriptor( substitutedDescriptor, Lists.newArrayList(getter.getAnnotations()), DescriptorUtils.convertModality(getter.getModality(), false), getter.getVisibility(), - getter.hasBody(), getter.isDefault(), kind); + getter.hasBody(), getter.isDefault(), kind, getter); if (newGetter != null) { JetType returnType = getter.getReturnType(); newGetter.initialize(returnType != null ? substitutor.substitute(returnType, Variance.OUT_VARIANCE) : null); } PropertySetterDescriptor newSetter = setter == null ? null : new PropertySetterDescriptor( substitutedDescriptor, Lists.newArrayList(setter.getAnnotations()), DescriptorUtils.convertModality(setter.getModality(), false), setter.getVisibility(), - setter.hasBody(), setter.isDefault(), kind); + setter.hasBody(), setter.isDefault(), kind, setter); if (newSetter != null) { List substitutedValueParameters = FunctionDescriptorUtil.getSubstitutedValueParameters(newSetter, setter, substitutor); if (substitutedValueParameters == null) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java index 739ed73bb92..549346b379d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; @@ -31,10 +32,30 @@ import java.util.Set; public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { private JetType returnType; - public PropertyGetterDescriptor(@NotNull PropertyDescriptor correspondingProperty, @NotNull List annotations, - @NotNull Modality modality, @NotNull Visibility visibility, boolean hasBody, boolean isDefault, Kind kind) + @NotNull + private final PropertyGetterDescriptor original; + + public PropertyGetterDescriptor(@NotNull PropertyDescriptor correspondingProperty, + @NotNull List annotations, + @NotNull Modality modality, + @NotNull Visibility visibility, + boolean hasBody, + boolean isDefault, + Kind kind) { + this(correspondingProperty, annotations, modality, visibility, hasBody, isDefault, kind, null); + } + + public PropertyGetterDescriptor(@NotNull PropertyDescriptor correspondingProperty, + @NotNull List annotations, + @NotNull Modality modality, + @NotNull Visibility visibility, + boolean hasBody, + boolean isDefault, + Kind kind, + @Nullable PropertyGetterDescriptor original) { super(modality, visibility, correspondingProperty, annotations, Name.special(""), hasBody, isDefault, kind); + this.original = original != null ? original : this; } public void initialize(JetType returnType) { @@ -62,4 +83,10 @@ public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { public R accept(DeclarationDescriptorVisitor visitor, D data) { return visitor.visitPropertyGetterDescriptor(this, data); } + + @NotNull + @Override + public PropertyGetterDescriptor getOriginal() { + return this.original; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java index 5489a7eee7d..8cb254fd467 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java @@ -17,10 +17,11 @@ package org.jetbrains.jet.lang.descriptors; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import java.util.Collections; import java.util.List; @@ -32,6 +33,8 @@ import java.util.Set; public class PropertySetterDescriptor extends PropertyAccessorDescriptor { private ValueParameterDescriptor parameter; + @NotNull + private final PropertySetterDescriptor original; public PropertySetterDescriptor( @NotNull PropertyDescriptor correspondingProperty, @@ -41,7 +44,20 @@ public class PropertySetterDescriptor extends PropertyAccessorDescriptor { boolean hasBody, boolean isDefault, Kind kind) { + this(correspondingProperty, annotations, modality, visibility, hasBody, isDefault, kind, null); + } + + public PropertySetterDescriptor( + @NotNull PropertyDescriptor correspondingProperty, + @NotNull List annotations, + @NotNull Modality modality, + @NotNull Visibility visibility, + boolean hasBody, + boolean isDefault, + Kind kind, + @Nullable PropertySetterDescriptor original) { super(modality, visibility, correspondingProperty, annotations, Name.special(""), hasBody, isDefault, kind); + this.original = original != null ? original : this; } public void initialize(@NotNull ValueParameterDescriptor parameter) { @@ -79,4 +95,10 @@ public class PropertySetterDescriptor extends PropertyAccessorDescriptor { public R accept(DeclarationDescriptorVisitor visitor, D data) { return visitor.visitPropertySetterDescriptor(this, data); } + + @NotNull + @Override + public PropertySetterDescriptor getOriginal() { + return this.original; + } }