getOriginal() works correctly for PropertyGetter(Setter)Descriptor (previously was returning itself).

This commit is contained in:
Pavel V. Talanov
2012-07-19 17:35:51 +04:00
parent 534bde52f1
commit 4dcbd8d0c5
4 changed files with 55 additions and 8 deletions
@@ -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
@@ -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<ValueParameterDescriptor> substitutedValueParameters = FunctionDescriptorUtil.getSubstitutedValueParameters(newSetter, setter, substitutor);
if (substitutedValueParameters == null) {
@@ -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<AnnotationDescriptor> 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<AnnotationDescriptor> 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<AnnotationDescriptor> annotations,
@NotNull Modality modality,
@NotNull Visibility visibility,
boolean hasBody,
boolean isDefault,
Kind kind,
@Nullable PropertyGetterDescriptor original)
{
super(modality, visibility, correspondingProperty, annotations, Name.special("<get-" + correspondingProperty.getName() + ">"), 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, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
return visitor.visitPropertyGetterDescriptor(this, data);
}
@NotNull
@Override
public PropertyGetterDescriptor getOriginal() {
return this.original;
}
}
@@ -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<AnnotationDescriptor> annotations,
@NotNull Modality modality,
@NotNull Visibility visibility,
boolean hasBody,
boolean isDefault,
Kind kind,
@Nullable PropertySetterDescriptor original) {
super(modality, visibility, correspondingProperty, annotations, Name.special("<set-" + correspondingProperty.getName() + ">"), 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, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
return visitor.visitPropertySetterDescriptor(this, data);
}
@NotNull
@Override
public PropertySetterDescriptor getOriginal() {
return this.original;
}
}