From 75b733f25eded9e015812c4a49af1f11296be8c3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 16 Jun 2021 17:39:28 +0200 Subject: [PATCH 1/1] Correct QName.compareTo() Sorting on localName first is counter-intuitive and tends to spread related names (from the same module/revision) across the domain. Sort by module/revision first, which keeps related information closely together. JIRA: YANGTOOLS-1298 Change-Id: Ia57418f915498a0713549195b86413988b5208ce Signed-off-by: Robert Varga --- .../org/opendaylight/yangtools/yang/common/QName.java | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java index 2c19fa9f02..60072a1b59 100644 --- a/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java +++ b/common/yang-common/src/main/java/org/opendaylight/yangtools/yang/common/QName.java @@ -371,17 +371,11 @@ public final class QName extends AbstractQName implements Comparable { return getLocalName().equals(other.getLocalName()) && Objects.equals(getNamespace(), other.getNamespace()); } - // FIXME: this comparison function looks odd. We are sorting first by local name and then by module? What is - // the impact on iteration order of SortedMap? @Override @SuppressWarnings("checkstyle:parameterName") public int compareTo(final QName o) { - // compare mandatory localName parameter - int result = getLocalName().compareTo(o.getLocalName()); - if (result != 0) { - return result; - } - return module.compareTo(o.module); + final int result = module.compareTo(o.module); + return result != 0 ? result : getLocalName().compareTo(o.getLocalName()); } @Override -- 2.36.6