Skip to content

Commit 72403cb

Browse files
committed
Fix problem in handling normal cast
1 parent 326a59d commit 72403cb

File tree

4 files changed

+28
-10
lines changed

4 files changed

+28
-10
lines changed

unittest/src/main/java/score/Context.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public static<T> T call(Class<T> cls, BigInteger value,
9292

9393
public static Object call(BigInteger value,
9494
Address targetAddress, String method, Object... params) {
95-
return TypeConverter.normalize(sm.call(value, targetAddress, method, params));
95+
return TypeConverter.cast(sm.call(value, targetAddress, method, params));
9696
}
9797

9898
public static<T> T call(Class<T> cls,
@@ -101,7 +101,7 @@ public static<T> T call(Class<T> cls,
101101
}
102102

103103
public static Object call(Address targetAddress, String method, Object... params) {
104-
return TypeConverter.normalize(sm.call(BigInteger.ZERO, targetAddress, method, params));
104+
return TypeConverter.cast(sm.call(BigInteger.ZERO, targetAddress, method, params));
105105
}
106106

107107
public static void transfer(Address targetAddress, BigInteger value) {

unittest/src/main/java/score/ServiceManagerImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ private static Object[] convertParameters(Method method, Object[] params) {
608608
parsedParams[i] = null;
609609
} else {
610610
try {
611-
parsedParams[i] = TypeConverter.parameterize(params[i], parameterClass);
611+
parsedParams[i] = TypeConverter.cast(params[i], parameterClass);
612612
} catch (RuntimeException e) {
613613
throw new IllegalArgumentException(
614614
String.format("InvalidParameter(idx=%d,target=%s,source=%s)",

unittest/src/main/java/score/impl/TypeConverter.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
import java.util.Map;
3333

3434
public class TypeConverter {
35-
public static Object normalize(Object so) {
36-
return normalize(so, true);
35+
private static Object normalize(Object so) {
36+
return normalize(so, false);
3737
}
3838

3939
private static Object normalize(Object so, boolean ret) {
@@ -201,9 +201,8 @@ public static<T> T cast(Object so, Class<T> cls) {
201201
return (T)specialize(normalize(so), cls);
202202
}
203203

204-
@SuppressWarnings("unchecked")
205-
public static<T> T parameterize(Object so, Class<T> cls) {
206-
return (T)specialize(normalize(so, false), cls);
204+
public static Object cast(Object so) {
205+
return normalize(so, true);
207206
}
208207

209208
@SuppressWarnings("unchecked")

unittest/src/test/java/score/impl/TypeConverterTest.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ void normalizeList() {
6868
new Address[]{Address.fromString("hx0800000000000000000000000000000000000000")}
6969
};
7070
for (var tc : cases) {
71-
assertDoesNotThrow(() -> (List<Object>) TypeConverter.normalize(tc));
71+
//noinspection unchecked
72+
assertDoesNotThrow(() -> (List<Object>) TypeConverter.cast(tc));
7273
}
7374
}
7475

@@ -80,7 +81,8 @@ void normalizeMap() {
8081
Map.of("a", List.of(Map.of("a", BigInteger.ZERO)))
8182
};
8283
for (var tc : cases) {
83-
assertDoesNotThrow(() -> (Map<String, Object>) TypeConverter.normalize(tc));
84+
//noinspection unchecked
85+
assertDoesNotThrow(() -> (Map<String, Object>) TypeConverter.cast(tc));
8486
}
8587
}
8688

@@ -128,4 +130,21 @@ void objectStore() {
128130
assertEquals(tc, obj);
129131
}
130132
}
133+
134+
@SuppressWarnings("unchecked")
135+
@Test
136+
void arrayTo() {
137+
var value = new int[]{ 1, 2, 3};
138+
139+
var arrayValue = TypeConverter.cast(value, long[].class);
140+
assertArrayEquals(new long[]{ 1, 2, 3}, arrayValue);
141+
142+
var listValue = TypeConverter.cast(value);
143+
var realValue = (List<BigInteger>)listValue;
144+
int idx = 0;
145+
for (var v : realValue) {
146+
assertEquals(value[idx], v.intValueExact());
147+
idx+=1;
148+
}
149+
}
131150
}

0 commit comments

Comments
 (0)