@@ -51,17 +51,38 @@ public static ToolMetadata createFrom(Tool annotation, Bean<?> bean, AnnotatedMe
51
51
52
52
private static Map <String , ArgumentMetadata > getArgumentMap (AnnotatedMethod <?> method ) {
53
53
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 ;
60
61
}
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 ));
61
71
}
62
72
return result .isEmpty () ? Collections .emptyMap () : result ;
63
73
}
64
74
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
+
65
86
private static List <SpecialArgumentMetadata > getSpecialArgumentList (AnnotatedMethod <?> method ) {
66
87
List <SpecialArgumentMetadata > result = new ArrayList <>();
67
88
for (AnnotatedParameter <?> p : method .getParameters ()) {
0 commit comments