Skip to content

Commit 3b91300

Browse files
committed
enforce arg name to be present
1 parent 926d2cd commit 3b91300

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

dev/io.openliberty.mcp.internal/src/io/openliberty/mcp/internal/ToolMetadata.java

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,38 @@ public static ToolMetadata createFrom(Tool annotation, Bean<?> bean, AnnotatedMe
5151

5252
private static Map<String, ArgumentMetadata> getArgumentMap(AnnotatedMethod<?> method) {
5353
Map<String, ArgumentMetadata> result = new HashMap<>();
54-
for (AnnotatedParameter<?> p : method.getParameters()) {
55-
ToolArg pInfo = p.getAnnotation(ToolArg.class);
56-
if (pInfo != null) {
57-
String toolArgName = (pInfo.name().equals(ToolArg.ELEMENT_NAME)) ? p.getJavaParameter().getName() : pInfo.name(); // p.getJavaParameter().getName() needs java compiler -parameter flag to work
58-
boolean isDuplicateArg = result.containsKey(toolArgName);
59-
result.put(toolArgName, new ArgumentMetadata(p.getBaseType(), p.getPosition(), pInfo.description(), pInfo.required(), isDuplicateArg));
54+
55+
for (AnnotatedParameter<?> param : method.getParameters()) {
56+
57+
ToolArg argAnnotation = param.getAnnotation(ToolArg.class);
58+
59+
if (argAnnotation == null) {
60+
continue;
6061
}
62+
63+
String argName = resolveArgumentName(param, argAnnotation);
64+
boolean isDuplicateArg = result.containsKey(argName);
65+
66+
result.put(argName, new ArgumentMetadata(param.getBaseType(),
67+
param.getPosition(),
68+
argAnnotation.description(),
69+
argAnnotation.required(),
70+
isDuplicateArg));
6171
}
6272
return result.isEmpty() ? Collections.emptyMap() : result;
6373
}
6474

75+
private static String resolveArgumentName(AnnotatedParameter<?> param, ToolArg argAnnotation) {
76+
if (ToolArg.ELEMENT_NAME.equals(argAnnotation.name())) {
77+
return argAnnotation.name();
78+
}
79+
if (param.getJavaParameter().isNamePresent()) {
80+
// needs java compiler -parameter flag to work
81+
return param.getJavaParameter().getName();
82+
}
83+
throw new IllegalStateException("Parameter name not set. Ensure that javac -parameter flag is enabled");
84+
}
85+
6586
private static List<SpecialArgumentMetadata> getSpecialArgumentList(AnnotatedMethod<?> method) {
6687
List<SpecialArgumentMetadata> result = new ArrayList<>();
6788
for (AnnotatedParameter<?> p : method.getParameters()) {

0 commit comments

Comments
 (0)