From 76afab3c787a96b42408aab7ea6b1ed26f0dac8e Mon Sep 17 00:00:00 2001 From: Redkale <8730487+redkale@users.noreply.github.com> Date: Fri, 18 Sep 2020 14:09:27 +0800 Subject: [PATCH] --- src/org/redkale/convert/DeMember.java | 1 + src/org/redkale/convert/EnMember.java | 1 + src/org/redkale/convert/ObjectDecoder.java | 2 +- src/org/redkale/convert/ObjectEncoder.java | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/org/redkale/convert/DeMember.java b/src/org/redkale/convert/DeMember.java index 1325d4464..826351552 100644 --- a/src/org/redkale/convert/DeMember.java +++ b/src/org/redkale/convert/DeMember.java @@ -86,6 +86,7 @@ public final class DeMember { public int compareTo(boolean fieldSort, DeMember o) { if (o == null) return -1; + if (this.position != o.position) return (this.position == 0 ? Integer.MAX_VALUE : this.position) - (o.position == 0 ? Integer.MAX_VALUE : o.position); if (this.index != o.index) return (this.index == 0 ? Integer.MAX_VALUE : this.index) - (o.index == 0 ? Integer.MAX_VALUE : o.index); if (this.index != 0) throw new RuntimeException("fields (" + attribute.field() + ", " + o.attribute.field() + ") have same ConvertColumn.index(" + this.index + ") in " + attribute.declaringClass()); return fieldSort ? this.attribute.field().compareTo(o.attribute.field()) : 0; diff --git a/src/org/redkale/convert/EnMember.java b/src/org/redkale/convert/EnMember.java index 8338ceaf4..d7bab877f 100644 --- a/src/org/redkale/convert/EnMember.java +++ b/src/org/redkale/convert/EnMember.java @@ -91,6 +91,7 @@ public final class EnMember { public int compareTo(boolean fieldSort, EnMember o) { if (o == null) return -1; + if (this.position != o.position) return (this.position == 0 ? Integer.MAX_VALUE : this.position) - (o.position == 0 ? Integer.MAX_VALUE : o.position); if (this.index != o.index) return (this.index == 0 ? Integer.MAX_VALUE : this.index) - (o.index == 0 ? Integer.MAX_VALUE : o.index); if (this.index != 0) throw new RuntimeException("fields (" + attribute.field() + ", " + o.attribute.field() + ") have same ConvertColumn.index(" + this.index + ") in " + attribute.declaringClass()); return fieldSort ? this.attribute.field().compareTo(o.attribute.field()) : 0; diff --git a/src/org/redkale/convert/ObjectDecoder.java b/src/org/redkale/convert/ObjectDecoder.java index 973c2b4c0..827fac59a 100644 --- a/src/org/redkale/convert/ObjectDecoder.java +++ b/src/org/redkale/convert/ObjectDecoder.java @@ -166,7 +166,6 @@ public class ObjectDecoder implements Decodeable { } } this.members = list.toArray(new DeMember[list.size()]); - Arrays.sort(this.members, (a, b) -> a.compareTo(factory.isFieldSort(), b)); Set pos = new HashSet<>(); for (int i = 0; i < this.members.length; i++) { if (this.members[i].index > 0) pos.add(this.members[i].index); @@ -180,6 +179,7 @@ public class ObjectDecoder implements Decodeable { member.position = pidx; } } + Arrays.sort(this.members, (a, b) -> a.compareTo(factory.isFieldSort(), b)); if (cps != null) { final String[] fields = cps; diff --git a/src/org/redkale/convert/ObjectEncoder.java b/src/org/redkale/convert/ObjectEncoder.java index 6cc3f3078..f5930458a 100644 --- a/src/org/redkale/convert/ObjectEncoder.java +++ b/src/org/redkale/convert/ObjectEncoder.java @@ -116,7 +116,6 @@ public class ObjectEncoder implements Encodeable { list.add(member); } this.members = list.toArray(new EnMember[list.size()]); - Arrays.sort(this.members, (a, b) -> a.compareTo(factory.isFieldSort(), b)); Set pos = new HashSet<>(); for (int i = 0; i < this.members.length; i++) { if (this.members[i].index > 0) pos.add(this.members[i].index); @@ -130,6 +129,7 @@ public class ObjectEncoder implements Encodeable { member.position = pidx; } } + Arrays.sort(this.members, (a, b) -> a.compareTo(factory.isFieldSort(), b)); } catch (Exception ex) { throw new ConvertException(ex);