You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by va...@apache.org on 2015/07/21 22:52:32 UTC
[35/50] ode git commit: current deep equal has serious bugs. need to
be reimpled
current deep equal has serious bugs. need to be reimpled
Project: http://git-wip-us.apache.org/repos/asf/ode/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/016c3449
Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/016c3449
Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/016c3449
Branch: refs/heads/ODE-912
Commit: 016c34498c117fae11c86796fde2f72f0f68b7c8
Parents: 646ca99
Author: fangzhen <fa...@gmail.com>
Authored: Fri Aug 1 22:57:40 2014 +0800
Committer: fangzhen <fa...@gmail.com>
Committed: Fri Aug 1 22:57:40 2014 +0800
----------------------------------------------------------------------
.../ode/bpel/obj/migrate/EqualityVisitor.java | 38 +++++++++++++++-----
1 file changed, 30 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ode/blob/016c3449/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
index 9e419ba..b600940 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
@@ -2,6 +2,7 @@ package org.apache.ode.bpel.obj.migrate;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
@@ -166,6 +167,7 @@ public class EqualityVisitor extends AbstractObjectVisitor{
other = t2;
if ((Boolean)traverse.traverseObject(t1, false)) {
logFalseThrough = false;
+ other = pre;
return t2;
}
}
@@ -272,9 +274,9 @@ public class EqualityVisitor extends AbstractObjectVisitor{
}
public Boolean equalityByReflection(Object obj) {
//TODO if it's sufficient to just compare public fields?
- Field[] fields = obj.getClass().getFields();
- Field[] fields2 = other.getClass().getFields();
- if (! Arrays.equals(fields, fields2)){
+ List<Field> fields = getAllFields(obj.getClass());
+ List<Field> fields2 = getAllFields(other.getClass());
+ if (!fields.equals(fields2)){
if (!logFalseThrough){
__log.debug("Unequal: getFields() of two Object do not match " + st);
}
@@ -282,7 +284,8 @@ public class EqualityVisitor extends AbstractObjectVisitor{
}
for (Field f : fields){
- if ((Modifier.TRANSIENT & f.getModifiers()) != 0){
+ f.setAccessible(true);
+ if (((Modifier.TRANSIENT | Modifier.STATIC) & f.getModifiers()) != 0){
continue; //skip transient fields
}
try {
@@ -303,10 +306,6 @@ public class EqualityVisitor extends AbstractObjectVisitor{
other = v2;
Boolean res = (Boolean)traverse.traverseObject(v1);
if (!res){
- if (!logFalseThrough){
- __log.debug("Unequal:" + st + ".\n When dealing with "
- + v1 + " and " + v2);
- }
return false;
}
other = pre;
@@ -318,6 +317,29 @@ public class EqualityVisitor extends AbstractObjectVisitor{
}
return true;
}
+ private List<Field> getAllFields(Class cls) {
+ List<Field> fields = getFieldsRec(cls.getSuperclass(), new ArrayList<Field>());
+ fields.addAll(Arrays.asList(cls.getDeclaredFields()));
+ return fields;
+ }
+ /**
+ * get fields that are accessible to its sub-classes.
+ * @param cls
+ * @param fields
+ * @return
+ */
+ private List<Field> getFieldsRec(Class cls, ArrayList<Field> fields) {
+ if (cls != null){
+ Field[] fs = cls.getDeclaredFields();
+ for (Field f : fs){
+ if ((f.getModifiers() & Modifier.PRIVATE) == 0){
+ fields.add(f);
+ }
+ }
+ getFieldsRec(cls.getSuperclass(), fields);
+ }
+ return fields;
+ }
public void setOther(Object other){
this.other = other;