Skip to content

Commit b6cc111

Browse files
Prefer methods with string parameters over specific type ones in bridge to simplify bridging with other languages
Only accepting string is enough in most of the cases.
1 parent 0cd35b5 commit b6cc111

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

jmeter-java-dsl-bridge/src/main/java/us/abstracta/jmeter/javadsl/bridge/serialization/constructs/BridgedObjectConstruct.java

+24-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import java.lang.reflect.Parameter;
66
import java.time.Duration;
77
import java.util.Arrays;
8-
import java.util.Comparator;
98
import java.util.HashMap;
109
import java.util.LinkedHashMap;
1110
import java.util.List;
@@ -36,8 +35,30 @@ public BridgedObjectConstruct(BridgedObjectConstructor constructor, String tag,
3635
this.constructor = constructor;
3736
this.tag = tag;
3837
this.builders = builders;
39-
builders.sort(
40-
Comparator.<BuilderMethod, Integer>comparing(b -> b.getParameters().length).reversed());
38+
builders.sort((b1, b2) -> {
39+
int ret = compareMoreParametersFirst(b1, b2);
40+
return ret != 0 ? ret : compareFirstStringParameters(b1, b2);
41+
});
42+
}
43+
44+
private int compareMoreParametersFirst(BuilderMethod b1, BuilderMethod b2) {
45+
return b2.getParameters().length - b1.getParameters().length;
46+
}
47+
48+
// prefer methods with string parameters (JMeter expressions) over specific types
49+
private int compareFirstStringParameters(BuilderMethod b1, BuilderMethod b2) {
50+
Parameter[] params1 = b1.getParameters();
51+
Parameter[] params2 = b2.getParameters();
52+
for (int i = 0; i < params1.length; i++) {
53+
if (params1[i].getType().equals(String.class) && !params2[i].getType()
54+
.equals(String.class)) {
55+
return -1;
56+
} else if (params2[i].getType().equals(String.class) && !params1[i].getType()
57+
.equals(String.class)) {
58+
return 1;
59+
}
60+
}
61+
return 0;
4162
}
4263

4364
private static Map<Class<?>, Function<String, Object>> solveParsers() {

0 commit comments

Comments
 (0)