11package net .sf .j2s .ajax ;
22
33import java .lang .reflect .Field ;
4- import java .lang .reflect .Modifier ;
54import java .util .Arrays ;
65import java .util .HashSet ;
6+ import java .util .Iterator ;
7+ import java .util .Map ;
78import java .util .Set ;
89
910public class SimpleRPCUtils {
@@ -15,117 +16,110 @@ public class SimpleRPCUtils {
1516 *
1617 * @param runnable1 original object
1718 * @param runnable2 modified object
18- * @return Names of the modified fields.
19+ * @return Name set of the modified fields.
1920 *
2021 * @j2sIgnore
2122 */
22- public static String [] compareDiffs (SimpleRPCRunnable runnable1 , SimpleRPCRunnable runnable2 ) {
23+ public static Set < String > compareDiffs (SimpleRPCRunnable runnable1 , SimpleRPCRunnable runnable2 ) {
2324 Set <String > diffSet = new HashSet <String >();
24- Set <Field > fieldSet = new HashSet <Field >();
25- Class <?> clazz = runnable1 .getClass ();
26- while (clazz != null && !"net.sf.j2s.ajax.SimpleSerializable" .equals (clazz .getName ())) {
27- Field [] fields = clazz .getDeclaredFields ();
28- for (int i = 0 ; i < fields .length ; i ++) {
29- fieldSet .add (fields [i ]);
30- }
31- clazz = clazz .getSuperclass ();
32- }
3325 String [] ignoredFields = runnable1 .fieldDiffIgnored ();
34- Field [] fields = fieldSet .toArray (new Field [fieldSet .size ()]);
35- for (int i = 0 ; i < fields .length ; i ++) {
36- Field field = fields [i ];
37- int modifiers = field .getModifiers ();
38- if ((modifiers & (Modifier .PUBLIC | Modifier .PROTECTED )) != 0
39- && (modifiers & Modifier .TRANSIENT ) == 0
40- && (modifiers & Modifier .STATIC ) == 0 ) {
41- String name = field .getName ();
42- if (ignoredFields != null ) {
43- boolean ignored = false ;
44- for (int j = 0 ; j < ignoredFields .length ; j ++) {
45- if (name .equals (ignoredFields [j ])) {
46- ignored = true ;
47- break ;
48- }
49- }
50- if (ignored ) {
51- continue ;
26+ Map <String , Field > allFields = runnable1 .getSerializableFields (runnable1 .getClass ().getName ());
27+ for (Iterator <String > itr = allFields .keySet ().iterator (); itr .hasNext ();) {
28+ String name = (String ) itr .next ();
29+ Field field = allFields .get (name );
30+ if (ignoredFields != null ) {
31+ boolean ignored = false ;
32+ for (int j = 0 ; j < ignoredFields .length ; j ++) {
33+ if (name .equals (ignoredFields [j ])) {
34+ ignored = true ;
35+ break ;
5236 }
5337 }
54- Object field1 = null ;
55- try {
56- field1 = field .get (runnable1 );
57- } catch (IllegalArgumentException e1 ) {
58- //e1.printStackTrace();
59- } catch (IllegalAccessException e1 ) {
60- //e1.printStackTrace();
38+ if (ignored ) {
39+ continue ;
6140 }
62- Object field2 = null ;
63- try {
64- field2 = field .get (runnable2 );
65- } catch (IllegalArgumentException e ) {
66- //e.printStackTrace();
67- } catch (IllegalAccessException e ) {
68- //e.printStackTrace();
41+ }
42+ Object field1 = null ;
43+ try {
44+ field1 = field .get (runnable1 );
45+ } catch (IllegalArgumentException e1 ) {
46+ //e1.printStackTrace();
47+ } catch (IllegalAccessException e1 ) {
48+ //e1.printStackTrace();
49+ }
50+ Object field2 = null ;
51+ try {
52+ field2 = field .get (runnable2 );
53+ } catch (IllegalArgumentException e ) {
54+ //e.printStackTrace();
55+ } catch (IllegalAccessException e ) {
56+ //e.printStackTrace();
57+ }
58+ if (field1 == null ) {
59+ if (field2 != null ) {
60+ diffSet .add (name );
6961 }
70- if (field1 == null ) {
71- if (field2 != null ) {
62+ } else if (field2 == null ) { // field1 != null
63+ diffSet .add (name );
64+ } else if (field .getType ().isArray ()) {
65+ Class <?> type = field .getType ();
66+ if (type == int [].class ) {
67+ if (!Arrays .equals ((int []) field1 , (int []) field2 )) {
7268 diffSet .add (name );
7369 }
74- } else if (field2 == null ) { // field1 != null
70+ } else if (type == byte [].class ) {
71+ if (!Arrays .equals ((byte []) field1 , (byte []) field2 )) {
72+ diffSet .add (name );
73+ }
74+ } else if (type == String [].class ) {
75+ if (!Arrays .equals ((String []) field1 , (String []) field2 )) {
76+ diffSet .add (name );
77+ }
78+ } else if (SimpleSerializable .isSubclassOf (type , SimpleSerializable [].class )) {
7579 diffSet .add (name );
76- } else if (field1 .getClass ().isArray ()) {
77- Class <?> type = field .getType ();
78- if (type == float [].class ) {
79- if (!Arrays .equals ((float []) field1 , (float []) field2 )) {
80- diffSet .add (name );
81- }
82- } else if (type == double [].class ) {
83- if (!Arrays .equals ((double []) field1 , (double []) field2 )) {
84- diffSet .add (name );
85- }
86- } else if (type == int [].class ) {
87- if (!Arrays .equals ((int []) field1 , (int []) field2 )) {
88- diffSet .add (name );
89- }
90- } else if (type == long [].class ) {
91- if (!Arrays .equals ((long []) field1 , (long []) field2 )) {
92- diffSet .add (name );
93- }
94- } else if (type == short [].class ) {
95- if (!Arrays .equals ((short []) field1 , (short []) field2 )) {
96- diffSet .add (name );
97- }
98- } else if (type == byte [].class ) {
99- if (!Arrays .equals ((byte []) field1 , (byte []) field2 )) {
100- diffSet .add (name );
101- }
102- } else if (type == char [].class ) {
103- if (!Arrays .equals ((char []) field1 , (char []) field2 )) {
104- diffSet .add (name );
105- }
106- } else if (type == boolean [].class ) {
107- if (!Arrays .equals ((boolean []) field1 , (boolean []) field2 )) {
108- diffSet .add (name );
109- }
110- } else if (type == String [].class ) {
111- if (!Arrays .equals ((String []) field1 , (String []) field2 )) {
112- diffSet .add (name );
113- }
114- } else if (SimpleSerializable .isSubclassOf (type , SimpleSerializable [].class )) {
80+ } else if (type == Object [].class ) {
81+ if (!Arrays .equals ((Object []) field1 , (Object []) field2 )) {
82+ diffSet .add (name );
83+ }
84+ } else if (type == long [].class ) {
85+ if (!Arrays .equals ((long []) field1 , (long []) field2 )) {
86+ diffSet .add (name );
87+ }
88+ } else if (type == boolean [].class ) {
89+ if (!Arrays .equals ((boolean []) field1 , (boolean []) field2 )) {
90+ diffSet .add (name );
91+ }
92+ } else if (type == float [].class ) {
93+ if (!Arrays .equals ((float []) field1 , (float []) field2 )) {
94+ diffSet .add (name );
95+ }
96+ } else if (type == double [].class ) {
97+ if (!Arrays .equals ((double []) field1 , (double []) field2 )) {
98+ diffSet .add (name );
99+ }
100+ } else if (type == short [].class ) {
101+ if (!Arrays .equals ((short []) field1 , (short []) field2 )) {
102+ diffSet .add (name );
103+ }
104+ } else if (type == char [].class ) {
105+ if (!Arrays .equals ((char []) field1 , (char []) field2 )) {
106+ diffSet .add (name );
107+ }
108+ }
109+ } else {
110+ Class <?> type = field .getType ();
111+ if (type .isPrimitive () || type == String .class ) {
112+ if (!field1 .equals (field2 )) {
115113 diffSet .add (name );
116- } else if (type == Object [].class ) {
117- if (!Arrays .equals ((Object []) field1 , (Object []) field2 )) {
118- diffSet .add (name );
119- }
120114 }
121- } else if (SimpleSerializable .isSubclassOf (field . getType () , SimpleSerializable .class )) {
115+ } else if (SimpleSerializable .isSubclassOf (type , SimpleSerializable .class )) {
122116 diffSet .add (name );
123117 } else if (!field1 .equals (field2 )) {
124118 diffSet .add (name );
125119 }
126120 }
127121 }
128- return diffSet . toArray ( new String [ diffSet . size ()]) ;
122+ return diffSet ;
129123 }
130124
131125}
0 commit comments