Change overriddenDescriptors' type from Set to Collection

So that the easiest way of constructing a HashSet in the implementation will be
not the only possible way to implement getOverriddenDescriptors(). If there's
not too many overridden descriptors, an implementation may decide to return a
small list for example instead
This commit is contained in:
Alexander Udalov
2015-08-06 04:27:59 +03:00
parent d328727cea
commit f3857cbb89
22 changed files with 49 additions and 61 deletions
@@ -518,7 +518,7 @@ public class OverrideResolver {
JetModifierList modifierList = member.getModifierList(); JetModifierList modifierList = member.getModifierList();
boolean hasOverrideNode = modifierList != null && modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD); boolean hasOverrideNode = modifierList != null && modifierList.hasModifier(JetTokens.OVERRIDE_KEYWORD);
Set<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
if (hasOverrideNode) { if (hasOverrideNode) {
checkOverridesForMemberMarkedOverride(declared, true, new CheckOverrideReportStrategy() { checkOverridesForMemberMarkedOverride(declared, true, new CheckOverrideReportStrategy() {
@@ -580,7 +580,7 @@ public class OverrideResolver {
boolean checkIfOverridesNothing, boolean checkIfOverridesNothing,
@NotNull CheckOverrideReportStrategy reportError @NotNull CheckOverrideReportStrategy reportError
) { ) {
Set<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overriddenDescriptors = declared.getOverriddenDescriptors();
for (CallableMemberDescriptor overridden : overriddenDescriptors) { for (CallableMemberDescriptor overridden : overriddenDescriptors) {
if (overridden == null) continue; if (overridden == null) continue;
@@ -872,11 +872,10 @@ public class OverrideResolver {
} }
@NotNull @NotNull
public static <D extends CallableMemberDescriptor> Set<D> getDirectlyOverriddenDeclarations(@NotNull D descriptor) { public static <D extends CallableMemberDescriptor> Collection<D> getDirectlyOverriddenDeclarations(@NotNull D descriptor) {
Set<D> result = Sets.newHashSet(); Set<D> result = new LinkedHashSet<D>();
//noinspection unchecked //noinspection unchecked
Set<D> overriddenDescriptors = (Set<D>) descriptor.getOverriddenDescriptors(); for (D overriddenDescriptor : (Collection<D>) descriptor.getOverriddenDescriptors()) {
for (D overriddenDescriptor : overriddenDescriptors) {
CallableMemberDescriptor.Kind kind = overriddenDescriptor.getKind(); CallableMemberDescriptor.Kind kind = overriddenDescriptor.getKind();
if (kind == DECLARATION) { if (kind == DECLARATION) {
result.add(overriddenDescriptor); result.add(overriddenDescriptor);
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot { public interface CallableDescriptor extends DeclarationDescriptorWithVisibility, DeclarationDescriptorNonRoot {
@Nullable @Nullable
@@ -66,8 +66,6 @@ public interface CallableDescriptor extends DeclarationDescriptorWithVisibility,
*/ */
boolean hasSynthesizedParameterNames(); boolean hasSynthesizedParameterNames();
// Workaround for KT-4609 Wildcard types (super/extends) shouldn't be loaded as nullable
@KotlinSignature("fun getOverriddenDescriptors(): Set<out CallableDescriptor>")
@NotNull @NotNull
Set<? extends CallableDescriptor> getOverriddenDescriptors(); Collection<? extends CallableDescriptor> getOverriddenDescriptors();
} }
@@ -16,16 +16,14 @@
package org.jetbrains.kotlin.descriptors; package org.jetbrains.kotlin.descriptors;
import jet.runtime.typeinfo.KotlinSignature;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Set; import java.util.Collection;
public interface CallableMemberDescriptor extends CallableDescriptor, MemberDescriptor { public interface CallableMemberDescriptor extends CallableDescriptor, MemberDescriptor {
@KotlinSignature("fun getOverriddenDescriptors(): MutableSet<out CallableMemberDescriptor>")
@NotNull @NotNull
@Override @Override
Set<? extends CallableMemberDescriptor> getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> getOverriddenDescriptors();
@NotNull @NotNull
@Override @Override
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.Set; import java.util.Collection;
public interface FunctionDescriptor extends CallableMemberDescriptor { public interface FunctionDescriptor extends CallableMemberDescriptor {
@Override @Override
@@ -35,7 +35,7 @@ public interface FunctionDescriptor extends CallableMemberDescriptor {
@Override @Override
@NotNull @NotNull
Set<? extends FunctionDescriptor> getOverriddenDescriptors(); Collection<? extends FunctionDescriptor> getOverriddenDescriptors();
@NotNull @NotNull
@Override @Override
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Set; import java.util.Collection;
public interface PropertyAccessorDescriptor extends FunctionDescriptor { public interface PropertyAccessorDescriptor extends FunctionDescriptor {
boolean hasBody(); boolean hasBody();
@@ -31,7 +31,7 @@ public interface PropertyAccessorDescriptor extends FunctionDescriptor {
@Override @Override
@NotNull @NotNull
Set<? extends PropertyAccessorDescriptor> getOverriddenDescriptors(); Collection<? extends PropertyAccessorDescriptor> getOverriddenDescriptors();
@NotNull @NotNull
PropertyDescriptor getCorrespondingProperty(); PropertyDescriptor getCorrespondingProperty();
@@ -20,8 +20,8 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Set;
public interface PropertyDescriptor extends VariableDescriptor, CallableMemberDescriptor { public interface PropertyDescriptor extends VariableDescriptor, CallableMemberDescriptor {
@Nullable @Nullable
@@ -49,7 +49,7 @@ public interface PropertyDescriptor extends VariableDescriptor, CallableMemberDe
@NotNull @NotNull
@Override @Override
Set<? extends PropertyDescriptor> getOverriddenDescriptors(); Collection<? extends PropertyDescriptor> getOverriddenDescriptors();
@Override @Override
PropertyDescriptor substitute(@NotNull TypeSubstitutor substitutor); PropertyDescriptor substitute(@NotNull TypeSubstitutor substitutor);
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Set; import java.util.Collection;
public interface PropertyGetterDescriptor extends PropertyAccessorDescriptor { public interface PropertyGetterDescriptor extends PropertyAccessorDescriptor {
@NotNull @NotNull
@@ -27,5 +27,5 @@ public interface PropertyGetterDescriptor extends PropertyAccessorDescriptor {
@Override @Override
@NotNull @NotNull
Set<? extends PropertyGetterDescriptor> getOverriddenDescriptors(); Collection<? extends PropertyGetterDescriptor> getOverriddenDescriptors();
} }
@@ -18,7 +18,7 @@ package org.jetbrains.kotlin.descriptors;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Set; import java.util.Collection;
public interface PropertySetterDescriptor extends PropertyAccessorDescriptor { public interface PropertySetterDescriptor extends PropertyAccessorDescriptor {
@NotNull @NotNull
@@ -27,5 +27,5 @@ public interface PropertySetterDescriptor extends PropertyAccessorDescriptor {
@Override @Override
@NotNull @NotNull
Set<? extends PropertySetterDescriptor> getOverriddenDescriptors(); Collection<? extends PropertySetterDescriptor> getOverriddenDescriptors();
} }
@@ -21,7 +21,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import java.util.Set; import java.util.Collection;
public interface ValueParameterDescriptor extends VariableDescriptor, ParameterDescriptor { public interface ValueParameterDescriptor extends VariableDescriptor, ParameterDescriptor {
@NotNull @NotNull
@@ -58,5 +58,5 @@ public interface ValueParameterDescriptor extends VariableDescriptor, ParameterD
*/ */
@NotNull @NotNull
@Override @Override
Set<? extends ValueParameterDescriptor> getOverriddenDescriptors(); Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors();
} }
@@ -26,9 +26,9 @@ import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import org.jetbrains.kotlin.types.Variance; import org.jetbrains.kotlin.types.Variance;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
public abstract class AbstractReceiverParameterDescriptor extends DeclarationDescriptorImpl implements ReceiverParameterDescriptor { public abstract class AbstractReceiverParameterDescriptor extends DeclarationDescriptorImpl implements ReceiverParameterDescriptor {
private static final Name RECEIVER_PARAMETER_NAME = Name.special("<this>"); private static final Name RECEIVER_PARAMETER_NAME = Name.special("<this>");
@@ -100,7 +100,7 @@ public abstract class AbstractReceiverParameterDescriptor extends DeclarationDes
@NotNull @NotNull
@Override @Override
public Set<? extends CallableDescriptor> getOverriddenDescriptors() { public Collection<? extends CallableDescriptor> getOverriddenDescriptors() {
return Collections.emptySet(); return Collections.emptySet();
} }
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.descriptors.*;
import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import static org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER; import static org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER;
@@ -101,7 +101,7 @@ public class ConstructorDescriptorImpl extends FunctionDescriptorImpl implements
@NotNull @NotNull
@Override @Override
public Set<? extends FunctionDescriptor> getOverriddenDescriptors() { public Collection<? extends FunctionDescriptor> getOverriddenDescriptors() {
return Collections.emptySet(); return Collections.emptySet();
} }
@@ -27,10 +27,7 @@ import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import org.jetbrains.kotlin.types.Variance; import org.jetbrains.kotlin.types.Variance;
import java.util.ArrayList; import java.util.*;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRootImpl implements FunctionDescriptor { public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRootImpl implements FunctionDescriptor {
private List<TypeParameterDescriptor> typeParameters; private List<TypeParameterDescriptor> typeParameters;
@@ -120,7 +117,7 @@ public abstract class FunctionDescriptorImpl extends DeclarationDescriptorNonRoo
@NotNull @NotNull
@Override @Override
public Set<? extends FunctionDescriptor> getOverriddenDescriptors() { public Collection<? extends FunctionDescriptor> getOverriddenDescriptors() {
return overriddenFunctions; return overriddenFunctions;
} }
@@ -23,10 +23,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.Collections; import java.util.*;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescriptorNonRootImpl implements PropertyAccessorDescriptor { public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescriptorNonRootImpl implements PropertyAccessorDescriptor {
@@ -142,8 +139,8 @@ public abstract class PropertyAccessorDescriptorImpl extends DeclarationDescript
} }
@NotNull @NotNull
protected Set<PropertyAccessorDescriptor> getOverriddenDescriptors(boolean isGetter) { protected Collection<PropertyAccessorDescriptor> getOverriddenDescriptors(boolean isGetter) {
Set<? extends PropertyDescriptor> overriddenProperties = getCorrespondingProperty().getOverriddenDescriptors(); Collection<? extends PropertyDescriptor> overriddenProperties = getCorrespondingProperty().getOverriddenDescriptors();
// LinkedHashSet for determinism // LinkedHashSet for determinism
Set<PropertyAccessorDescriptor> overriddenAccessors = new LinkedHashSet<PropertyAccessorDescriptor>(); Set<PropertyAccessorDescriptor> overriddenAccessors = new LinkedHashSet<PropertyAccessorDescriptor>();
for (PropertyDescriptor overriddenProperty : overriddenProperties) { for (PropertyDescriptor overriddenProperty : overriddenProperties) {
@@ -325,7 +325,7 @@ public class PropertyDescriptorImpl extends VariableDescriptorWithInitializerImp
@NotNull @NotNull
@Override @Override
public Set<? extends PropertyDescriptor> getOverriddenDescriptors() { public Collection<? extends PropertyDescriptor> getOverriddenDescriptors() {
return overriddenProperties; return overriddenProperties;
} }
@@ -23,9 +23,9 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
public class PropertyGetterDescriptorImpl extends PropertyAccessorDescriptorImpl implements PropertyGetterDescriptor { public class PropertyGetterDescriptorImpl extends PropertyAccessorDescriptorImpl implements PropertyGetterDescriptor {
private JetType returnType; private JetType returnType;
@@ -57,8 +57,8 @@ public class PropertyGetterDescriptorImpl extends PropertyAccessorDescriptorImpl
@NotNull @NotNull
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Set<? extends PropertyGetterDescriptor> getOverriddenDescriptors() { public Collection<? extends PropertyGetterDescriptor> getOverriddenDescriptors() {
return (Set) super.getOverriddenDescriptors(true); return (Collection) super.getOverriddenDescriptors(true);
} }
@NotNull @NotNull
@@ -23,9 +23,9 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns; import static org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilPackage.getBuiltIns;
@@ -73,8 +73,8 @@ public class PropertySetterDescriptorImpl extends PropertyAccessorDescriptorImpl
@NotNull @NotNull
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Set<? extends PropertySetterDescriptor> getOverriddenDescriptors() { public Collection<? extends PropertySetterDescriptor> getOverriddenDescriptors() {
return (Set) super.getOverriddenDescriptors(false); return (Collection) super.getOverriddenDescriptors(false);
} }
@NotNull @NotNull
@@ -27,8 +27,8 @@ import org.jetbrains.kotlin.resolve.constants.ConstantValue;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import org.jetbrains.kotlin.types.TypeSubstitutor; import org.jetbrains.kotlin.types.TypeSubstitutor;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Set;
public class ValueParameterDescriptorImpl extends VariableDescriptorImpl implements ValueParameterDescriptor { public class ValueParameterDescriptorImpl extends VariableDescriptorImpl implements ValueParameterDescriptor {
private final boolean declaresDefaultValue; private final boolean declaresDefaultValue;
@@ -122,8 +122,8 @@ public class ValueParameterDescriptorImpl extends VariableDescriptorImpl impleme
@NotNull @NotNull
@Override @Override
public Set<? extends ValueParameterDescriptor> getOverriddenDescriptors() { public Collection<? extends ValueParameterDescriptor> getOverriddenDescriptors() {
Set<? extends CallableDescriptor> overriddenFunctions = getContainingDeclaration().getOverriddenDescriptors(); Collection<? extends CallableDescriptor> overriddenFunctions = getContainingDeclaration().getOverriddenDescriptors();
if (overriddenFunctions.isEmpty()) return Collections.emptySet(); if (overriddenFunctions.isEmpty()) return Collections.emptySet();
return KotlinPackage.toSet(KotlinPackage.map(overriddenFunctions, new Function1<CallableDescriptor, ValueParameterDescriptor>() { return KotlinPackage.toSet(KotlinPackage.map(overriddenFunctions, new Function1<CallableDescriptor, ValueParameterDescriptor>() {
@@ -23,9 +23,9 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.name.Name; import org.jetbrains.kotlin.name.Name;
import org.jetbrains.kotlin.types.JetType; import org.jetbrains.kotlin.types.JetType;
import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set;
public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRootImpl implements VariableDescriptor { public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRootImpl implements VariableDescriptor {
protected JetType outType; protected JetType outType;
@@ -77,7 +77,7 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo
@NotNull @NotNull
@Override @Override
public Set<? extends CallableDescriptor> getOverriddenDescriptors() { public Collection<? extends CallableDescriptor> getOverriddenDescriptors() {
return Collections.emptySet(); return Collections.emptySet();
} }
@@ -443,7 +443,7 @@ public class DescriptorUtils {
@NotNull @NotNull
public static <D extends CallableMemberDescriptor> D unwrapFakeOverride(@NotNull D descriptor) { public static <D extends CallableMemberDescriptor> D unwrapFakeOverride(@NotNull D descriptor) {
while (descriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { while (descriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
Set<? extends CallableMemberDescriptor> overridden = descriptor.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overridden = descriptor.getOverriddenDescriptors();
if (overridden.isEmpty()) { if (overridden.isEmpty()) {
throw new IllegalStateException("Fake override should have at least one overridden descriptor: " + descriptor); throw new IllegalStateException("Fake override should have at least one overridden descriptor: " + descriptor);
} }
@@ -447,7 +447,7 @@ public class OverridingUtil {
@Nullable @Nullable
private static Visibility computeVisibilityToInherit(@NotNull CallableMemberDescriptor memberDescriptor) { private static Visibility computeVisibilityToInherit(@NotNull CallableMemberDescriptor memberDescriptor) {
Set<? extends CallableMemberDescriptor> overriddenDescriptors = memberDescriptor.getOverriddenDescriptors(); Collection<? extends CallableMemberDescriptor> overriddenDescriptors = memberDescriptor.getOverriddenDescriptors();
Visibility maxVisibility = findMaxVisibility(overriddenDescriptors); Visibility maxVisibility = findMaxVisibility(overriddenDescriptors);
if (maxVisibility == null) { if (maxVisibility == null) {
return null; return null;
@@ -59,7 +59,7 @@ public abstract class CallableRefactoring<T: CallableDescriptor>(
return false return false
} }
private fun getClosestModifiableDescriptors(): Set<CallableDescriptor> { private fun getClosestModifiableDescriptors(): Collection<CallableDescriptor> {
return when (kind) { return when (kind) {
DECLARATION -> { DECLARATION -> {
Collections.singleton(callableDescriptor) Collections.singleton(callableDescriptor)
@@ -135,14 +135,13 @@ public final class JsDescriptorUtils {
@Nullable @Nullable
public static FunctionDescriptor getOverriddenDescriptor(@NotNull FunctionDescriptor functionDescriptor) { public static FunctionDescriptor getOverriddenDescriptor(@NotNull FunctionDescriptor functionDescriptor) {
Set<? extends FunctionDescriptor> overriddenDescriptors = functionDescriptor.getOverriddenDescriptors(); Collection<? extends FunctionDescriptor> overriddenDescriptors = functionDescriptor.getOverriddenDescriptors();
if (overriddenDescriptors.isEmpty()) { if (overriddenDescriptors.isEmpty()) {
return null; return null;
} }
else {
//TODO: for now translator can't deal with multiple inheritance good enough //TODO: for now translator can't deal with multiple inheritance good enough
return overriddenDescriptors.iterator().next(); return overriddenDescriptors.iterator().next();
}
} }
private static boolean isDefaultAccessor(@Nullable PropertyAccessorDescriptor accessorDescriptor) { private static boolean isDefaultAccessor(@Nullable PropertyAccessorDescriptor accessorDescriptor) {