Stable member sorting.

This commit is contained in:
Evgeny Gerashchenko
2013-07-12 18:10:49 +04:00
parent 5c8f87658a
commit b6e7dcbb02
@@ -18,6 +18,7 @@ package org.jetbrains.jet.lang.resolve;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.renderer.DescriptorRendererBuilder;
import java.util.Comparator;
import java.util.List;
@@ -25,6 +26,8 @@ import java.util.List;
public class MemberComparator implements Comparator<DeclarationDescriptor> {
public static final MemberComparator INSTANCE = new MemberComparator();
private static final DescriptorRenderer RENDERER = new DescriptorRendererBuilder().setWithDefinedIn(false).setVerbose(true).build();
private MemberComparator() {
}
@@ -77,8 +80,8 @@ public class MemberComparator implements Comparator<DeclarationDescriptor> {
ReceiverParameterDescriptor c2ReceiverParameter = c2.getReceiverParameter();
assert (c1ReceiverParameter != null) == (c2ReceiverParameter != null);
if (c1ReceiverParameter != null) {
String r1 = DescriptorRenderer.TEXT.renderType(c1ReceiverParameter.getType());
String r2 = DescriptorRenderer.TEXT.renderType(c2ReceiverParameter.getType());
String r1 = RENDERER.renderType(c1ReceiverParameter.getType());
String r2 = RENDERER.renderType(c2ReceiverParameter.getType());
int receiversCompareTo = r1.compareTo(r2);
if (receiversCompareTo != 0) {
return receiversCompareTo;
@@ -88,8 +91,8 @@ public class MemberComparator implements Comparator<DeclarationDescriptor> {
List<ValueParameterDescriptor> c1ValueParameters = c1.getValueParameters();
List<ValueParameterDescriptor> c2ValueParameters = c2.getValueParameters();
for (int i = 0; i < Math.min(c1ValueParameters.size(), c2ValueParameters.size()); i++) {
String p1 = DescriptorRenderer.TEXT.renderType(c1ValueParameters.get(i).getType());
String p2 = DescriptorRenderer.TEXT.renderType(c2ValueParameters.get(i).getType());
String p1 = RENDERER.renderType(c1ValueParameters.get(i).getType());
String p2 = RENDERER.renderType(c2ValueParameters.get(i).getType());
int parametersCompareTo = p1.compareTo(p2);
if (parametersCompareTo != 0) {
return parametersCompareTo;
@@ -104,8 +107,8 @@ public class MemberComparator implements Comparator<DeclarationDescriptor> {
List<TypeParameterDescriptor> c1TypeParameters = c1.getTypeParameters();
List<TypeParameterDescriptor> c2TypeParameters = c2.getTypeParameters();
for (int i = 0; i < Math.min(c1TypeParameters.size(), c2TypeParameters.size()); i++) {
String p1 = DescriptorRenderer.TEXT.renderType(c1TypeParameters.get(i).getUpperBoundsAsType());
String p2 = DescriptorRenderer.TEXT.renderType(c2TypeParameters.get(i).getUpperBoundsAsType());
String p1 = RENDERER.renderType(c1TypeParameters.get(i).getUpperBoundsAsType());
String p2 = RENDERER.renderType(c2TypeParameters.get(i).getUpperBoundsAsType());
int parametersCompareTo = p1.compareTo(p2);
if (parametersCompareTo != 0) {
return parametersCompareTo;
@@ -120,9 +123,12 @@ public class MemberComparator implements Comparator<DeclarationDescriptor> {
if (c1 instanceof CallableMemberDescriptor && c2 instanceof CallableMemberDescriptor) {
CallableMemberDescriptor.Kind c1Kind = ((CallableMemberDescriptor) c1).getKind();
CallableMemberDescriptor.Kind c2Kind = ((CallableMemberDescriptor) c2).getKind();
return c1Kind.ordinal() - c2Kind.ordinal();
int kindsCompareTo = c1Kind.ordinal() - c2Kind.ordinal();
if (kindsCompareTo != 0) {
return kindsCompareTo;
}
}
return 0;
return RENDERER.render(o1).compareTo(RENDERER.render(o2));
}
}