@@ -89,6 +89,11 @@ static class TestObject extends BaseClass {
89
89
int intField3 = Integer .MIN_VALUE ;
90
90
int intField4 = Integer .MAX_VALUE ;
91
91
int intField5 = -1 ;
92
+ long longField1 = 0 ;
93
+ long longField2 = 42L ;
94
+ long longField3 = Long .MIN_VALUE ;
95
+ long longField4 = Long .MAX_VALUE ;
96
+ long longField5 = -1L ;
92
97
float floatField1 = -1.4F ;
93
98
float floatField2 = Float .MIN_NORMAL ;
94
99
float floatField3 = Float .MIN_VALUE ;
@@ -120,13 +125,18 @@ public String toString() {
120
125
}
121
126
};
122
127
123
- private static List <Object > fieldValues (Object obj ) {
124
- List <Object > values = new ArrayList <>();
128
+ @ ObjectCopier .NotExternalValue (reason = "testing NotExternalValue annotation" ) //
129
+ static final String [] TEST_OBJECT_COPIABLE = {
130
+ "this" , "value" , "should" , "be" , "copied"
131
+ };
132
+
133
+ private static Map <Field , Object > fieldValues (Object obj ) {
134
+ Map <Field , Object > values = new HashMap <>();
125
135
Class <?> c = obj .getClass ();
126
136
while (c != Object .class ) {
127
137
for (Field f : c .getDeclaredFields ()) {
128
138
try {
129
- values .add ( f .get (obj ));
139
+ values .put ( f , f .get (obj ));
130
140
} catch (IllegalAccessException e ) {
131
141
throw new AssertionError (e );
132
142
}
@@ -138,7 +148,7 @@ private static List<Object> fieldValues(Object obj) {
138
148
139
149
@ Override
140
150
public String toString () {
141
- return fieldValues (this ).stream ().map (String ::valueOf ).collect (Collectors .joining (", " ));
151
+ return fieldValues (this ).values (). stream ().map (String ::valueOf ).collect (Collectors .joining (", " ));
142
152
}
143
153
}
144
154
@@ -150,10 +160,16 @@ public void testIt() {
150
160
ClassLoader loader = getClass ().getClassLoader ();
151
161
TestObject testObject = new TestObject ();
152
162
163
+ EconomicMap <String , Object > fieldMap = EconomicMap .create ();
164
+ for (var e : TestObject .fieldValues (testObject ).entrySet ()) {
165
+ fieldMap .put (e .getKey ().getName (), e .getValue ());
166
+ }
167
+
153
168
List <TimeUnit > timeUnits = List .of (TimeUnit .MICROSECONDS , TimeUnit .DAYS , TimeUnit .SECONDS );
154
169
EconomicMap <Integer , Object > emap = EconomicMap .create ();
155
170
emap .put (42 , Map .of ("1" , 1 , "2" , 2 ));
156
171
emap .put (-12345 , testObject );
172
+ emap .put (-6789 , fieldMap );
157
173
158
174
Map <String , String > hmap = new HashMap <>(Map .of ("1000" , "one thousand" ));
159
175
Map <Object , String > idMap = new IdentityHashMap <>(Map .of (new Object (), "some obj" ));
@@ -172,9 +188,13 @@ public void testIt() {
172
188
root .put ("6" , new ArrayList <>(timeUnits ));
173
189
root .put ("singleton2" , TestObject .TEST_OBJECT_SINGLETON );
174
190
root .put ("singleton2_2" , TestObject .TEST_OBJECT_SINGLETON );
191
+ root .put ("copiable" , TestObject .TEST_OBJECT_COPIABLE );
192
+
193
+ List <Field > externalValueFields = new ArrayList <>();
194
+ externalValueFields .addAll (ObjectCopier .getStaticFinalObjectFields (BaseClass .class ));
195
+ externalValueFields .addAll (ObjectCopier .getStaticFinalObjectFields (TestObject .class ));
175
196
176
- List <Field > externalValueFields = List .of (ObjectCopier .getField (BaseClass .class , "BASE_SINGLETON" ),
177
- ObjectCopier .getField (TestObject .class , "TEST_OBJECT_SINGLETON" ));
197
+ Assert .assertFalse (externalValueFields .contains (ObjectCopier .getField (TestObject .class , "TEST_OBJECT_COPIABLE" )));
178
198
179
199
byte [] encoded = encode (externalValueFields , root , "encoded" );
180
200
Object decoded = ObjectCopier .decode (encoded , loader );
@@ -187,13 +207,18 @@ public void testIt() {
187
207
188
208
Map <String , Object > root2 = (Map <String , Object >) ObjectCopier .decode (reencoded , loader );
189
209
210
+ Assert .assertSame (BaseClass .BASE_SINGLETON , root2 .get ("singleton1" ));
190
211
Assert .assertSame (root .get ("singleton1" ), root2 .get ("singleton1" ));
191
212
Assert .assertSame (root .get ("singleton1_2" ), root2 .get ("singleton1_2" ));
192
213
Assert .assertSame (root2 .get ("singleton1" ), root2 .get ("singleton1_2" ));
193
214
215
+ Assert .assertSame (TestObject .TEST_OBJECT_SINGLETON , root .get ("singleton2" ));
194
216
Assert .assertSame (root .get ("singleton2" ), root2 .get ("singleton2" ));
195
217
Assert .assertSame (root .get ("singleton2_2" ), root2 .get ("singleton2_2" ));
196
218
Assert .assertSame (root2 .get ("singleton2" ), root2 .get ("singleton2_2" ));
219
+
220
+ Assert .assertNotSame (TestObject .TEST_OBJECT_COPIABLE , root2 .get ("copiable" ));
221
+ Assert .assertNotSame (root .get ("copiable" ), root2 .get ("copiable" ));
197
222
}
198
223
199
224
private static byte [] encode (List <Field > externalValueFields , Object root , String debugLabel ) {
0 commit comments