From b6e7dcbb02967d3c04fc92849e42267ff84b4cfe Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Fri, 12 Jul 2013 18:10:49 +0400 Subject: [PATCH] Stable member sorting. --- .../jet/lang/resolve/MemberComparator.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MemberComparator.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MemberComparator.java index 09eecdc7a51..e4c783c81e5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MemberComparator.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/MemberComparator.java @@ -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 { 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 { 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 { List c1ValueParameters = c1.getValueParameters(); List 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 { List c1TypeParameters = c1.getTypeParameters(); List 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 { 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)); } }