Skip to content

Commit 2fccdd4

Browse files
committed
Widening/Narrowing opertaions in j.l.reflect.Array.
Adds correct narrowing and widening operations in Array.java. Change-Id: I8583263f7142337143709cf006c1033b5dadcd47 Review-Link: https://gwt-review.googlesource.com/#/c/19300/
1 parent d469a76 commit 2fccdd4

File tree

2 files changed

+287
-43
lines changed

2 files changed

+287
-43
lines changed

user/super/com/google/gwt/emul/java/lang/reflect/Array.java

Lines changed: 157 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,24 @@ private static char getCharImpl(Object array, int index) {
8282
}
8383

8484
public static double getDouble(Object array, int index) {
85-
checkArgument(array instanceof double[]);
86-
return getDoubleImpl(array, index);
85+
if (array instanceof double[]) {
86+
return getDoubleImpl(array, index);
87+
} else if (array instanceof byte[]) {
88+
return getByteImpl(array, index);
89+
} else if (array instanceof char[]) {
90+
return getCharImpl(array, index);
91+
} else if (array instanceof float[]) {
92+
return getFloatImpl(array, index);
93+
} else if (array instanceof int[]) {
94+
return getIntImpl(array, index);
95+
} else if (array instanceof long[]) {
96+
return getLongImpl(array, index);
97+
} else if (array instanceof short[]) {
98+
return getShortImpl(array, index);
99+
} else {
100+
checkArgument(false);
101+
return 0;
102+
}
87103
}
88104

89105
private static double getDoubleImpl(Object array, int index) {
@@ -92,8 +108,22 @@ private static double getDoubleImpl(Object array, int index) {
92108
}
93109

94110
public static float getFloat(Object array, int index) {
95-
checkArgument(array instanceof float[]);
96-
return getFloatImpl(array, index);
111+
if (array instanceof float[]) {
112+
return getFloatImpl(array, index);
113+
} else if (array instanceof byte[]) {
114+
return getByteImpl(array, index);
115+
} else if (array instanceof char[]) {
116+
return getCharImpl(array, index);
117+
} else if (array instanceof int[]) {
118+
return getIntImpl(array, index);
119+
} else if (array instanceof long[]) {
120+
return getLongImpl(array, index);
121+
} else if (array instanceof short[]) {
122+
return getShortImpl(array, index);
123+
} else {
124+
checkArgument(false);
125+
return 0;
126+
}
97127
}
98128

99129
private static float getFloatImpl(Object array, int index) {
@@ -102,8 +132,18 @@ private static float getFloatImpl(Object array, int index) {
102132
}
103133

104134
public static int getInt(Object array, int index) {
105-
checkArgument(array instanceof int[]);
106-
return getIntImpl(array, index);
135+
if (array instanceof int[]) {
136+
return getIntImpl(array, index);
137+
} else if (array instanceof byte[]) {
138+
return getByteImpl(array, index);
139+
} else if (array instanceof char[]) {
140+
return getCharImpl(array, index);
141+
} else if (array instanceof short[]) {
142+
return getShortImpl(array, index);
143+
} else {
144+
checkArgument(false);
145+
return 0;
146+
}
107147
}
108148

109149
private static int getIntImpl(Object array, int index) {
@@ -117,8 +157,20 @@ public static int getLength(Object array) {
117157
}
118158

119159
public static long getLong(Object array, int index) {
120-
checkArgument(array instanceof long[]);
121-
return getLongImpl(array, index);
160+
if (array instanceof long[]) {
161+
return getLongImpl(array, index);
162+
} else if (array instanceof byte[]) {
163+
return getByteImpl(array, index);
164+
} else if (array instanceof char[]) {
165+
return getCharImpl(array, index);
166+
} else if (array instanceof int[]) {
167+
return getIntImpl(array, index);
168+
} else if (array instanceof short[]) {
169+
return getShortImpl(array, index);
170+
} else {
171+
checkArgument(false);
172+
return 0;
173+
}
122174
}
123175

124176
private static long getLongImpl(Object array, int index) {
@@ -127,8 +179,14 @@ private static long getLongImpl(Object array, int index) {
127179
}
128180

129181
public static short getShort(Object array, int index) {
130-
checkArgument(array instanceof short[]);
131-
return getShortImpl(array, index);
182+
if (array instanceof short[]) {
183+
return getShortImpl(array, index);
184+
} else if (array instanceof byte[]) {
185+
return getByteImpl(array, index);
186+
} else {
187+
checkArgument(false);
188+
return 0;
189+
}
132190
}
133191

134192
private static short getShortImpl(Object array, int index) {
@@ -137,26 +195,29 @@ private static short getShortImpl(Object array, int index) {
137195
}
138196

139197
public static void set(Object array, int index, Object value) {
140-
if (array instanceof boolean[]) {
141-
setBooleanImpl(array, index, (Boolean) value);
142-
} else if (array instanceof byte[]) {
143-
setByteImpl(array, index, (Byte) value);
144-
} else if (array instanceof char[]) {
145-
setCharImpl(array, index, (Character) value);
146-
} else if (array instanceof double[]) {
147-
setDoubleImpl(array, index, (Double) value);
148-
} else if (array instanceof float[]) {
149-
setFloatImpl(array, index, (Float) value);
150-
} else if (array instanceof int[]) {
151-
setIntImpl(array, index, (Integer) value);
152-
} else if (array instanceof long[]) {
153-
setLongImpl(array, index, (Long) value);
154-
} else if (array instanceof short[]) {
155-
setShortImpl(array, index, (Short) value);
156-
} else {
157-
checkArgument(array instanceof Object[]);
198+
if (array instanceof Object[]) {
158199
Object[] typedArray = (Object[]) array;
159200
typedArray[index] = value;
201+
} else {
202+
if (value instanceof Boolean) {
203+
setBoolean(array, index, ((Boolean) value).booleanValue());
204+
} else if (value instanceof Byte) {
205+
setByte(array, index, ((Byte) value).byteValue());
206+
} else if (value instanceof Character) {
207+
setChar(array, index, ((Character) value).charValue());
208+
} else if (value instanceof Short) {
209+
setShort(array, index, ((Short) value).shortValue());
210+
} else if (value instanceof Integer) {
211+
setInt(array, index, ((Integer) value).intValue());
212+
} else if (value instanceof Long) {
213+
setLong(array, index, ((Long) value).longValue());
214+
} else if (value instanceof Float) {
215+
setFloat(array, index, ((Float) value).floatValue());
216+
} else if (value instanceof Double) {
217+
setDouble(array, index, ((Double) value).doubleValue());
218+
} else {
219+
checkArgument(false);
220+
}
160221
}
161222
}
162223

@@ -171,8 +232,21 @@ private static void setBooleanImpl(Object array, int index, boolean value) {
171232
}
172233

173234
public static void setByte(Object array, int index, byte value) {
174-
checkArgument(array instanceof byte[]);
175-
setByteImpl(array, index, value);
235+
if (array instanceof byte[]) {
236+
setByteImpl(array, index, value);
237+
} else if (array instanceof double[]) {
238+
setDoubleImpl(array, index, value);
239+
} else if (array instanceof float[]) {
240+
setFloatImpl(array, index, value);
241+
} else if (array instanceof int[]) {
242+
setIntImpl(array, index, value);
243+
} else if (array instanceof long[]) {
244+
setLongImpl(array, index, value);
245+
} else if (array instanceof short[]) {
246+
setShortImpl(array, index, value);
247+
} else {
248+
checkArgument(false);
249+
}
176250
}
177251

178252
private static void setByteImpl(Object array, int index, byte value) {
@@ -181,8 +255,19 @@ private static void setByteImpl(Object array, int index, byte value) {
181255
}
182256

183257
public static void setChar(Object array, int index, char value) {
184-
checkArgument(array instanceof char[]);
185-
setCharImpl(array, index, value);
258+
if (array instanceof char[]) {
259+
setCharImpl(array, index, value);
260+
} else if (array instanceof double[]) {
261+
setDoubleImpl(array, index, value);
262+
} else if (array instanceof float[]) {
263+
setFloatImpl(array, index, value);
264+
} else if (array instanceof int[]) {
265+
setIntImpl(array, index, value);
266+
} else if (array instanceof long[]) {
267+
setLongImpl(array, index, value);
268+
} else {
269+
checkArgument(false);
270+
}
186271
}
187272

188273
private static void setCharImpl(Object array, int index, char value) {
@@ -201,8 +286,13 @@ private static void setDoubleImpl(Object array,int index, double value) {
201286
}
202287

203288
public static void setFloat(Object array, int index, float value) {
204-
checkArgument(array instanceof float[]);
205-
setFloatImpl(array, index, value);
289+
if (array instanceof float[]) {
290+
setFloatImpl(array, index, value);
291+
} else if (array instanceof double[]) {
292+
setDoubleImpl(array, index, value);
293+
} else {
294+
checkArgument(false);
295+
}
206296
}
207297

208298
private static void setFloatImpl(Object array, int index, float value) {
@@ -211,8 +301,17 @@ private static void setFloatImpl(Object array, int index, float value) {
211301
}
212302

213303
public static void setInt(Object array, int index, int value) {
214-
checkArgument(array instanceof int[]);
215-
setIntImpl(array, index, value);
304+
if (array instanceof int[]) {
305+
setIntImpl(array, index, value);
306+
} else if (array instanceof double[]) {
307+
setDoubleImpl(array, index, value);
308+
} else if (array instanceof float[]) {
309+
setFloatImpl(array, index, value);
310+
} else if (array instanceof long[]) {
311+
setLongImpl(array, index, value);
312+
} else {
313+
checkArgument(false);
314+
}
216315
}
217316

218317
private static void setIntImpl(Object array, int index, int value) {
@@ -221,8 +320,15 @@ private static void setIntImpl(Object array, int index, int value) {
221320
}
222321

223322
public static void setLong(Object array, int index, long value) {
224-
checkArgument(array instanceof long[]);
225-
setLongImpl(array, index, value);
323+
if (array instanceof long[]) {
324+
setLongImpl(array, index, value);
325+
} else if (array instanceof double[]) {
326+
setDoubleImpl(array, index, value);
327+
} else if (array instanceof float[]) {
328+
setFloatImpl(array, index, value);
329+
} else {
330+
checkArgument(false);
331+
}
226332
}
227333

228334
private static void setLongImpl(Object array, int index, long value) {
@@ -231,8 +337,19 @@ private static void setLongImpl(Object array, int index, long value) {
231337
}
232338

233339
public static void setShort(Object array, int index, short value) {
234-
checkArgument(array instanceof short[]);
235-
setShortImpl(array, index, value);
340+
if (array instanceof short[]) {
341+
setShortImpl(array, index, value);
342+
} else if (array instanceof double[]) {
343+
setDoubleImpl(array, index, value);
344+
} else if (array instanceof float[]) {
345+
setFloatImpl(array, index, value);
346+
} else if (array instanceof int[]) {
347+
setIntImpl(array, index, value);
348+
} else if (array instanceof long[]) {
349+
setLongImpl(array, index, value);
350+
} else {
351+
checkArgument(false);
352+
}
236353
}
237354

238355
private static void setShortImpl(Object array, int index, short value) {

0 commit comments

Comments
 (0)