13
13
import java .util .List ;
14
14
import java .util .Map ;
15
15
import java .util .Optional ;
16
- import java .util .OptionalDouble ;
17
- import java .util .OptionalInt ;
18
- import java .util .OptionalLong ;
19
16
import java .util .Properties ;
20
17
import java .util .Set ;
21
18
import java .util .function .Consumer ;
@@ -87,7 +84,7 @@ public void accept(Container node) {
87
84
String defaultDefault ;
88
85
final Class <?> valueClass = field .getType ();
89
86
90
- EffectiveConfigTypeAndValues effectiveConfigTypeAndValues = getTypeName (field );
87
+ EffectiveConfigTypeAndValues effectiveConfigTypeAndValues = getTypeName (valueClass , field . getGenericType () );
91
88
92
89
if (valueClass == boolean .class ) {
93
90
defaultDefault = "false" ;
@@ -112,8 +109,8 @@ public void accept(Container node) {
112
109
ret .add (new ConfigDescriptionBuildItem (name ,
113
110
defVal ,
114
111
javadoc .getProperty (javadocKey ),
115
- effectiveConfigTypeAndValues .getTypeName (),
116
- effectiveConfigTypeAndValues .getAllowedValues (),
112
+ effectiveConfigTypeAndValues .typeName (),
113
+ effectiveConfigTypeAndValues .allowedValues (),
117
114
configPhase ));
118
115
}
119
116
});
@@ -147,136 +144,75 @@ private void processMappings(List<ConfigClass> mappings, List<ConfigDescriptionB
147
144
}
148
145
149
146
String javadocKey = method .getDeclaringClass ().getName ().replace ('$' , '.' ) + '.' + method .getName ();
150
- // TODO - radcortez - Fix nulls
147
+ EffectiveConfigTypeAndValues typeName = getTypeName ( method . getReturnType (), method . getGenericReturnType ());
151
148
descriptionBuildItems .add (new ConfigDescriptionBuildItem (propertyName , defaultValue ,
152
- javaDocProperties .getProperty (javadocKey ), null , null , configPhase ));
149
+ javaDocProperties .getProperty (javadocKey ), typeName . typeName (), typeName . allowedValues () , configPhase ));
153
150
}
154
151
}
155
152
}
156
153
157
- private EffectiveConfigTypeAndValues getTypeName (Field field ) {
158
- final Class <?> valueClass = field .getType ();
159
- return getTypeName (field , valueClass );
160
- }
161
-
162
- private EffectiveConfigTypeAndValues getTypeName (Field field , Class <?> valueClass ) {
163
- EffectiveConfigTypeAndValues typeAndValues = new EffectiveConfigTypeAndValues ();
164
- String name = valueClass .getName ();
154
+ private EffectiveConfigTypeAndValues getTypeName (Class <?> valueClass , Type genericType ) {
155
+ final String name ;
156
+ final List <String > allowedValues = new ArrayList <>();
165
157
166
158
// Extract Optionals, Lists and Sets
167
159
if ((valueClass .equals (Optional .class ) || valueClass .equals (List .class ) || valueClass .equals (Set .class ))) {
168
-
169
- if (field != null ) {
170
- Type genericType = field .getGenericType ();
171
- name = genericType .getTypeName ();
160
+ String thisName = valueClass .getName ();
161
+ if (genericType != null ) {
162
+ thisName = genericType .getTypeName ();
172
163
}
173
164
174
- if (name .contains ("<" ) && name .contains (">" )) {
175
- name = name .substring (name .lastIndexOf ("<" ) + 1 , name .indexOf (">" ));
165
+ if (thisName .contains ("<" ) && thisName .contains (">" )) {
166
+ thisName = thisName .substring (thisName .lastIndexOf ("<" ) + 1 , thisName .indexOf (">" ));
176
167
}
177
168
178
169
try {
179
- Class <?> c = Class .forName (name );
180
- return getTypeName (null , c );
170
+ Class <?> c = Class .forName (thisName );
171
+ return getTypeName (c , null );
181
172
} catch (ClassNotFoundException ex ) {
182
173
// Then we use the name as is.
183
174
}
184
- }
185
-
186
- // Check other optionals
187
- if (valueClass .equals (OptionalInt .class )) {
188
- name = Integer .class .getName ();
189
- } else if (valueClass .equals (OptionalDouble .class )) {
190
- name = Double .class .getName ();
191
- } else if (valueClass .equals (OptionalLong .class )) {
192
- name = Long .class .getName ();
193
- }
194
-
195
- // Check if this is an enum
196
- if (Enum .class .isAssignableFrom (valueClass )) {
175
+ name = thisName ;
176
+ } else if (Enum .class .isAssignableFrom (valueClass )) {
177
+ // Check if this is an enum
197
178
name = Enum .class .getName ();
198
179
199
180
Object [] values = valueClass .getEnumConstants ();
200
181
for (Object v : values ) {
201
- Enum casted = (Enum ) valueClass .cast (v );
202
- typeAndValues . addAllowedValue (casted .name ());
182
+ Enum <?> casted = (Enum <?> ) valueClass .cast (v );
183
+ allowedValues . add (casted .name ());
203
184
}
185
+ } else {
186
+ // Map all primitives
187
+ name = switch (valueClass .getName ()) {
188
+ case "java.util.OptionalInt" , "int" -> Integer .class .getName ();
189
+ case "boolean" -> Boolean .class .getName ();
190
+ case "float" -> Float .class .getName ();
191
+ case "java.util.OptionalDouble" , "double" -> Double .class .getName ();
192
+ case "java.util.OptionalLong" , "long" -> Long .class .getName ();
193
+ case "byte" -> Byte .class .getName ();
194
+ case "short" -> Short .class .getName ();
195
+ case "char" -> Character .class .getName ();
196
+ default -> valueClass .getName ();
197
+ };
204
198
}
205
199
206
200
// Special case for Log level
207
201
if (valueClass .isAssignableFrom (Level .class )) {
208
- typeAndValues .addAllowedValue (Level .ALL .getName ());
209
- typeAndValues .addAllowedValue (Level .CONFIG .getName ());
210
- typeAndValues .addAllowedValue (Level .FINE .getName ());
211
- typeAndValues .addAllowedValue (Level .FINER .getName ());
212
- typeAndValues .addAllowedValue (Level .FINEST .getName ());
213
- typeAndValues .addAllowedValue (Level .INFO .getName ());
214
- typeAndValues .addAllowedValue (Level .OFF .getName ());
215
- typeAndValues .addAllowedValue (Level .SEVERE .getName ());
216
- typeAndValues .addAllowedValue (Level .WARNING .getName ());
217
- }
218
-
219
- // Map all primitives
220
- if (name .equals ("int" )) {
221
- name = Integer .class .getName ();
222
- } else if (name .equals ("boolean" )) {
223
- name = Boolean .class .getName ();
224
- } else if (name .equals ("float" )) {
225
- name = Float .class .getName ();
226
- } else if (name .equals ("double" )) {
227
- name = Double .class .getName ();
228
- } else if (name .equals ("long" )) {
229
- name = Long .class .getName ();
230
- } else if (name .equals ("byte" )) {
231
- name = Byte .class .getName ();
232
- } else if (name .equals ("short" )) {
233
- name = Short .class .getName ();
234
- } else if (name .equals ("char" )) {
235
- name = Character .class .getName ();
236
- }
237
-
238
- typeAndValues .setTypeName (name );
239
- return typeAndValues ;
202
+ allowedValues .add (Level .ALL .getName ());
203
+ allowedValues .add (Level .CONFIG .getName ());
204
+ allowedValues .add (Level .FINE .getName ());
205
+ allowedValues .add (Level .FINER .getName ());
206
+ allowedValues .add (Level .FINEST .getName ());
207
+ allowedValues .add (Level .INFO .getName ());
208
+ allowedValues .add (Level .OFF .getName ());
209
+ allowedValues .add (Level .SEVERE .getName ());
210
+ allowedValues .add (Level .WARNING .getName ());
211
+ }
212
+
213
+ return new EffectiveConfigTypeAndValues (name , allowedValues );
240
214
}
241
215
242
- static class EffectiveConfigTypeAndValues {
243
- private String typeName ;
244
- private List <String > allowedValues ;
245
-
246
- public EffectiveConfigTypeAndValues () {
247
-
248
- }
249
-
250
- public EffectiveConfigTypeAndValues (String typeName ) {
251
- this .typeName = typeName ;
252
- }
253
-
254
- public EffectiveConfigTypeAndValues (String typeName , List <String > allowedValues ) {
255
- this .typeName = typeName ;
256
- this .allowedValues = allowedValues ;
257
- }
258
-
259
- public String getTypeName () {
260
- return typeName ;
261
- }
262
-
263
- public void setTypeName (String typeName ) {
264
- this .typeName = typeName ;
265
- }
266
-
267
- public List <String > getAllowedValues () {
268
- return allowedValues ;
269
- }
270
-
271
- public void setAllowedValues (List <String > allowedValues ) {
272
- this .allowedValues = allowedValues ;
273
- }
274
-
275
- public void addAllowedValue (String v ) {
276
- if (allowedValues == null ) {
277
- allowedValues = new ArrayList <>();
278
- }
279
- allowedValues .add (v );
280
- }
216
+ private record EffectiveConfigTypeAndValues (String typeName , List <String > allowedValues ) {
281
217
}
282
218
}
0 commit comments