From c80301a13d023d5a08d70bb67e3e481bb0f0bc5d Mon Sep 17 00:00:00 2001 From: svtk Date: Thu, 24 Nov 2011 16:02:29 +0400 Subject: [PATCH] Changed 'getOverriddenDescriptors' method for accessors (get accessors of overridden properties) --- .../descriptors/PropertyAccessorDescriptor.java | 14 ++++++++++++++ .../jet/lang/descriptors/PropertyDescriptor.java | 4 ++-- .../lang/descriptors/PropertyGetterDescriptor.java | 9 ++------- .../lang/descriptors/PropertySetterDescriptor.java | 9 ++------- 4 files changed, 20 insertions(+), 16 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 cf0a0c8be05..93f2000146d 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java @@ -1,5 +1,6 @@ package org.jetbrains.jet.lang.descriptors; +import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; @@ -7,6 +8,7 @@ import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.Collections; import java.util.List; +import java.util.Set; /** * @author abreslav @@ -95,4 +97,16 @@ public abstract class PropertyAccessorDescriptor extends DeclarationDescriptorIm public PropertyAccessorDescriptor copy(DeclarationDescriptor newOwner, boolean makeNonAbstract) { throw new UnsupportedOperationException("Accessors must be copied by the corresponding property"); } + + protected Set getOverriddenDescriptors(boolean isGetter) { + Set overriddenProperties = getCorrespondingProperty().getOverriddenDescriptors(); + Set overriddenAccessors = Sets.newHashSet(); + for (PropertyDescriptor overriddenProperty : overriddenProperties) { + PropertyAccessorDescriptor accessorDescriptor = isGetter ? overriddenProperty.getGetter() : overriddenProperty.getSetter(); + if (accessorDescriptor != null) { + overriddenAccessors.add(accessorDescriptor); + } + } + return overriddenAccessors; + } } 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 354979ecac9..69555990589 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyDescriptor.java @@ -27,6 +27,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab private final ReceiverDescriptor receiver; private final ReceiverDescriptor expectedThisObject; private final Set overriddenProperties = Sets.newLinkedHashSet(); + private final Set overridingProperties = Sets.newLinkedHashSet(); private final List typeParemeters = Lists.newArrayListWithCapacity(0); private final PropertyDescriptor original; private PropertyGetterDescriptor getter; @@ -190,7 +191,6 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab @Override public Set getOverriddenDescriptors() { return overriddenProperties; - } @NotNull @@ -212,7 +212,7 @@ public class PropertyDescriptor extends VariableDescriptorImpl implements Callab DescriptorUtils.convertModality(setter.getModality(), makeNonAbstract), setter.getVisibility(), propertyDescriptor, Lists.newArrayList(setter.getAnnotations()), - setter.hasBody(), setter.isDefault());; + setter.hasBody(), setter.isDefault()); propertyDescriptor.initialize(DescriptorUtils.copyTypeParameters(propertyDescriptor, getTypeParameters()), newGetter, newSetter); return propertyDescriptor; } 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 01bde2bf062..4181da25779 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java @@ -15,7 +15,6 @@ import java.util.Set; * @author abreslav */ public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { - private final Set overriddenGetters = Sets.newHashSet(); private JetType returnType; public PropertyGetterDescriptor(@NotNull PropertyDescriptor correspondingProperty, @NotNull List annotations, @NotNull Modality modality, @NotNull Visibility visibility, @Nullable JetType returnType, boolean hasBody, boolean isDefault) { @@ -25,12 +24,8 @@ public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { @NotNull @Override - public Set getOverriddenDescriptors() { - return overriddenGetters; - } - - public void addOverriddenFunction(@NotNull PropertyGetterDescriptor overriddenGetter) { - overriddenGetters.add(overriddenGetter); + public Set getOverriddenDescriptors() { + return super.getOverriddenDescriptors(true); } @NotNull 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 d5f2038a282..7319cb5ce3b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java @@ -16,7 +16,6 @@ import java.util.Set; public class PropertySetterDescriptor extends PropertyAccessorDescriptor { private MutableValueParameterDescriptor parameter; - private final Set overriddenSetters = Sets.newHashSet(); public PropertySetterDescriptor(@NotNull Modality modality, @NotNull Visibility visibility, @NotNull PropertyDescriptor correspondingProperty, @NotNull List annotations, boolean hasBody, boolean isDefault) { super(modality, visibility, correspondingProperty, annotations, "set-" + correspondingProperty.getName(), hasBody, isDefault); @@ -33,12 +32,8 @@ public class PropertySetterDescriptor extends PropertyAccessorDescriptor { @NotNull @Override - public Set getOverriddenDescriptors() { - return overriddenSetters; - } - - public void setOverriddenFunction(@NotNull PropertySetterDescriptor overriddenSetter) { - overriddenSetters.add(overriddenSetter); + public Set getOverriddenDescriptors() { + return super.getOverriddenDescriptors(false); } @NotNull