in server/src/main/java/org/eclipse/jifa/server/support/AnalysisApiArgumentResolverFactory.java [113:159]
private static LeafResolver buildLeafResolver(ApiParameter parameter) {
Type type = parameter.type();
String name = parameter.name();
boolean required = parameter.required();
boolean targetPath = parameter.targetPath();
boolean comparisonTargetPath = parameter.comparisonTargetPath();
return LEAF_RESOLVERS.computeIfAbsent
(parameter,
k -> {
if (type == boolean.class || type == Boolean.class) {
return new BooleanResolver(name, required);
} else if (type == int.class || type == Integer.class) {
return new IntResolver(name, required);
} else if (type == long.class || type == Long.class) {
return new LongResolver(name, required);
} else if (type == double.class || type == DoubleResolver.class) {
return new DoubleResolver(name, required);
} else if (type == String.class) {
return new StringResolver(name, required);
} else if (type == Path.class) {
if (targetPath) {
return new TargetPathResolver(name);
} else {
assert comparisonTargetPath;
return new ComparisonPathResolver(name);
}
} else {
Class<?> raw;
if (type instanceof Class<?> clazz) {
raw = clazz;
} else if (type instanceof ParameterizedType pt) {
raw = (Class<?>) pt.getRawType();
} else {
throw new IllegalArgumentException("Unsupported type: " + type);
}
if (raw.isEnum()) {
return new EnumResolver(name, required, raw);
} else if (!raw.isPrimitive()) {
return new ObjectResolver(name, required, type);
} else {
throw new IllegalArgumentException("Unsupported type: " + type);
}
}
}
);
}