From e09cba03cc9fd425f5ac7c660dcbaf04ec2831a7 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 5 Feb 2013 11:54:11 +0400 Subject: [PATCH] Extract interface: PropertyAccessorDescriptor --- .../PropertyAccessorDescriptor.java | 127 ++------------- .../PropertyAccessorDescriptorImpl.java | 151 ++++++++++++++++++ .../descriptors/PropertyGetterDescriptor.java | 2 +- .../descriptors/PropertySetterDescriptor.java | 2 +- .../jet/lang/resolve/OverrideResolver.java | 4 +- 5 files changed, 169 insertions(+), 117 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptorImpl.java 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 e01c9c31721..ec7d4674ac5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptor.java @@ -16,126 +16,27 @@ package org.jetbrains.jet.lang.descriptors; -import com.google.common.collect.Sets; 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.TypeSubstitutor; -import java.util.Collections; -import java.util.List; -import java.util.Set; +public interface PropertyAccessorDescriptor extends FunctionDescriptor { + boolean hasBody(); -public abstract class PropertyAccessorDescriptor extends DeclarationDescriptorNonRootImpl implements FunctionDescriptor, MemberDescriptor { - - private final boolean hasBody; - private final boolean isDefault; - private final Modality modality; - private final PropertyDescriptor correspondingProperty; - private final Kind kind; - private Visibility visibility; - - public PropertyAccessorDescriptor( - @NotNull Modality modality, - @NotNull Visibility visibility, - @NotNull PropertyDescriptor correspondingProperty, - @NotNull List annotations, - @NotNull Name name, - boolean hasBody, - boolean isDefault, - Kind kind) { - super(correspondingProperty.getContainingDeclaration(), annotations, name); - this.modality = modality; - this.visibility = visibility; - this.correspondingProperty = correspondingProperty; - this.hasBody = hasBody; - this.isDefault = isDefault; - this.kind = kind; - } - - public boolean hasBody() { - return hasBody; - } - - public boolean isDefault() { - return isDefault; - } - - @Override - public Kind getKind() { - return kind; - } + boolean isDefault(); @NotNull @Override - public abstract PropertyAccessorDescriptor getOriginal(); + PropertyAccessorDescriptor getOriginal(); + + @NotNull + PropertyDescriptor getCorrespondingProperty(); @NotNull @Override - public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - throw new UnsupportedOperationException(); // TODO - } - - @NotNull - @Override - public List getTypeParameters() { - return Collections.emptyList(); - } - - @NotNull - @Override - public Modality getModality() { - return modality; - } - - @NotNull - @Override - public Visibility getVisibility() { - return visibility; - } - - public void setVisibility(Visibility visibility) { - this.visibility = visibility; - } - - @NotNull - public PropertyDescriptor getCorrespondingProperty() { - return correspondingProperty; - } - - @Nullable - @Override - public ReceiverParameterDescriptor getReceiverParameter() { - return getCorrespondingProperty().getReceiverParameter(); - } - - @Nullable - @Override - public ReceiverParameterDescriptor getExpectedThisObject() { - return getCorrespondingProperty().getExpectedThisObject(); - } - - @NotNull - @Override - public PropertyAccessorDescriptor copy(DeclarationDescriptor newOwner, Modality modality, Visibility visibility, Kind kind, boolean copyOverrides) { - 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; - } - - @Override - public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden) { - throw new IllegalStateException(); - } + PropertyAccessorDescriptor copy( + DeclarationDescriptor newOwner, + Modality modality, + Visibility visibility, + Kind kind, + boolean copyOverrides + ); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptorImpl.java new file mode 100644 index 00000000000..bc9e61f27e9 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyAccessorDescriptorImpl.java @@ -0,0 +1,151 @@ +/* + * Copyright 2010-2013 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.descriptors; + +import com.google.common.collect.Sets; +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.TypeSubstitutor; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescriptorNonRootImpl implements PropertyAccessorDescriptor { + + private final boolean hasBody; + private final boolean isDefault; + private final Modality modality; + private final PropertyDescriptor correspondingProperty; + private final Kind kind; + private Visibility visibility; + + public PropertyAccessorDescriptorImpl( + @NotNull Modality modality, + @NotNull Visibility visibility, + @NotNull PropertyDescriptor correspondingProperty, + @NotNull List annotations, + @NotNull Name name, + boolean hasBody, + boolean isDefault, + Kind kind + ) { + super(correspondingProperty.getContainingDeclaration(), annotations, name); + this.modality = modality; + this.visibility = visibility; + this.correspondingProperty = correspondingProperty; + this.hasBody = hasBody; + this.isDefault = isDefault; + this.kind = kind; + } + + @Override + public boolean hasBody() { + return hasBody; + } + + @Override + public boolean isDefault() { + return isDefault; + } + + @Override + public Kind getKind() { + return kind; + } + + @NotNull + @Override + public FunctionDescriptor substitute(@NotNull TypeSubstitutor substitutor) { + throw new UnsupportedOperationException(); // TODO + } + + @NotNull + @Override + public List getTypeParameters() { + return Collections.emptyList(); + } + + @NotNull + @Override + public Modality getModality() { + return modality; + } + + @NotNull + @Override + public Visibility getVisibility() { + return visibility; + } + + public void setVisibility(Visibility visibility) { + this.visibility = visibility; + } + + @Override + @NotNull + public PropertyDescriptor getCorrespondingProperty() { + return correspondingProperty; + } + + @Nullable + @Override + public ReceiverParameterDescriptor getReceiverParameter() { + return getCorrespondingProperty().getReceiverParameter(); + } + + @Nullable + @Override + public ReceiverParameterDescriptor getExpectedThisObject() { + return getCorrespondingProperty().getExpectedThisObject(); + } + + @NotNull + @Override + public PropertyAccessorDescriptor copy( + DeclarationDescriptor newOwner, + Modality modality, + Visibility visibility, + Kind kind, + boolean copyOverrides + ) { + 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; + } + + @Override + public void addOverriddenDescriptor(@NotNull CallableMemberDescriptor overridden) { + throw new IllegalStateException(); + } + + @NotNull + @Override + public abstract PropertyAccessorDescriptor getOriginal(); +} 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 eda0b295ef3..ef856202881 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertyGetterDescriptor.java @@ -26,7 +26,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -public class PropertyGetterDescriptor extends PropertyAccessorDescriptor { +public class PropertyGetterDescriptor extends PropertyAccessorDescriptorImpl { private JetType returnType; @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 9adc6aedc1e..e6b68846d41 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/PropertySetterDescriptor.java @@ -27,7 +27,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; -public class PropertySetterDescriptor extends PropertyAccessorDescriptor { +public class PropertySetterDescriptor extends PropertyAccessorDescriptorImpl { private ValueParameterDescriptor parameter; @NotNull diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java index ad5df5e24cf..812bc2f490a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/OverrideResolver.java @@ -890,8 +890,8 @@ public class OverrideResolver { ((FunctionDescriptorImpl)memberDescriptor).setVisibility(visibility); } else { - assert memberDescriptor instanceof PropertyAccessorDescriptor; - ((PropertyAccessorDescriptor) memberDescriptor).setVisibility(visibility); + assert memberDescriptor instanceof PropertyAccessorDescriptorImpl; + ((PropertyAccessorDescriptorImpl) memberDescriptor).setVisibility(visibility); } }