Skip to content

Commit 3628697

Browse files
authored
fix: restore pair<map, xx> type error (#457)
1 parent 7d8206a commit 3628697

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/util/StringUtil.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,17 @@ public static String[] splitByFirstSeparator(String str, char separator) {
254254
return new String[]{str.substring(0, index), str.substring(index + 1)};
255255
}
256256

257+
public static String[] splitByLastSeparator(String str, char separator) {
258+
if (str == null) {
259+
return StringUtil.EMPTY_STRING_ARRAY;
260+
}
261+
int index = str.lastIndexOf(separator);
262+
if (index == -1) {
263+
return new String[]{str};
264+
}
265+
return new String[]{str.substring(0, index), str.substring(index + 1)};
266+
}
267+
257268
public static int encodeAndHash(String str){
258269
if (isBlank(str)) {
259270
return 0;

arex-agent-bootstrap/src/test/java/io/arex/agent/bootstrap/util/StringUtilTest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -383,4 +383,18 @@ void subStringAfter() {
383383
assertEquals("k", StringUtil.substringAfter("mock", "c"));
384384
assertEquals("mock", StringUtil.substringAfter("mock", "cd"));
385385
}
386+
387+
@Test
388+
void splitByLastSeparator() {
389+
String[] actualResult = StringUtil.splitByLastSeparator(null, ',');
390+
assertArrayEquals(new String[0], actualResult);
391+
392+
String noSeparator = "x";
393+
actualResult = StringUtil.splitByLastSeparator(noSeparator, ',');
394+
assertArrayEquals(new String[] {"x"}, actualResult);
395+
396+
String val = "x,,y,z";
397+
actualResult = StringUtil.splitByLastSeparator(val, ',');
398+
assertArrayEquals(new String[] {"x,,y", "z"}, actualResult);
399+
}
386400
}

arex-instrumentation-api/src/main/java/io/arex/inst/runtime/util/TypeUtil.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,11 @@ public static Type forName(String typeName) {
6666
}
6767

6868
if (typeParametersLength == 2) {
69-
final String[] split = StringUtil.splitByFirstSeparator(types[1], COMMA);
69+
String[] split = StringUtil.splitByFirstSeparator(types[1], COMMA);
70+
if (split[0].contains(HORIZONTAL_LINE_STR)) {
71+
// ex: Pair-Map-String,String,Boolean
72+
split = StringUtil.splitByLastSeparator(types[1], COMMA);
73+
}
7074
Type[] args = new Type[]{forName(split[0]), forName(split[1])};
7175
ParameterizedTypeImpl parameterizedType = ParameterizedTypeImpl.make(raw, args, null);
7276
TYPE_NAME_CACHE.put(typeName, parameterizedType);

arex-instrumentation-api/src/test/java/io/arex/inst/runtime/util/TypeUtilTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,18 @@ void testNeedUseDefaultCollection() {
390390
assertEquals("java.util.Set<java.time.LocalDateTime>", type.getTypeName());
391391
}
392392

393+
@Test
394+
void testPairMap() {
395+
Map<String, String> map = new HashMap<>();
396+
map.put("key", "value");
397+
final Pair<Map<String, String>, Boolean> pair = Pair.of(map, Boolean.TRUE);
398+
final String name = TypeUtil.getName(pair);
399+
assertEquals("io.arex.agent.bootstrap.internal.Pair-java.util.HashMap-java.lang.String,java.lang.String,java.lang.Boolean", name);
400+
final Type type = TypeUtil.forName(name);
401+
assert type != null;
402+
assertEquals("io.arex.agent.bootstrap.internal.Pair<java.util.HashMap<java.lang.String, java.lang.String>, java.lang.Boolean>", type.getTypeName());
403+
}
404+
393405
public static class FlightCollection extends ArrayList<LocalDateTime> {
394406
}
395407

0 commit comments

Comments
 (0)