Skip to content

Commit 69b2416

Browse files
gastaldigsmet
authored andcommitted
Render ConfigMapping elements properly in the Configuration editor
(cherry picked from commit 811819e)
1 parent 50569d8 commit 69b2416

File tree

1 file changed

+46
-110
lines changed

1 file changed

+46
-110
lines changed

core/deployment/src/main/java/io/quarkus/deployment/steps/ConfigDescriptionBuildStep.java

Lines changed: 46 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@
1313
import java.util.List;
1414
import java.util.Map;
1515
import java.util.Optional;
16-
import java.util.OptionalDouble;
17-
import java.util.OptionalInt;
18-
import java.util.OptionalLong;
1916
import java.util.Properties;
2017
import java.util.Set;
2118
import java.util.function.Consumer;
@@ -87,7 +84,7 @@ public void accept(Container node) {
8784
String defaultDefault;
8885
final Class<?> valueClass = field.getType();
8986

90-
EffectiveConfigTypeAndValues effectiveConfigTypeAndValues = getTypeName(field);
87+
EffectiveConfigTypeAndValues effectiveConfigTypeAndValues = getTypeName(valueClass, field.getGenericType());
9188

9289
if (valueClass == boolean.class) {
9390
defaultDefault = "false";
@@ -112,8 +109,8 @@ public void accept(Container node) {
112109
ret.add(new ConfigDescriptionBuildItem(name,
113110
defVal,
114111
javadoc.getProperty(javadocKey),
115-
effectiveConfigTypeAndValues.getTypeName(),
116-
effectiveConfigTypeAndValues.getAllowedValues(),
112+
effectiveConfigTypeAndValues.typeName(),
113+
effectiveConfigTypeAndValues.allowedValues(),
117114
configPhase));
118115
}
119116
});
@@ -147,136 +144,75 @@ private void processMappings(List<ConfigClass> mappings, List<ConfigDescriptionB
147144
}
148145

149146
String javadocKey = method.getDeclaringClass().getName().replace('$', '.') + '.' + method.getName();
150-
// TODO - radcortez - Fix nulls
147+
EffectiveConfigTypeAndValues typeName = getTypeName(method.getReturnType(), method.getGenericReturnType());
151148
descriptionBuildItems.add(new ConfigDescriptionBuildItem(propertyName, defaultValue,
152-
javaDocProperties.getProperty(javadocKey), null, null, configPhase));
149+
javaDocProperties.getProperty(javadocKey), typeName.typeName(), typeName.allowedValues(), configPhase));
153150
}
154151
}
155152
}
156153

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<>();
165157

166158
// Extract Optionals, Lists and Sets
167159
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();
172163
}
173164

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(">"));
176167
}
177168

178169
try {
179-
Class<?> c = Class.forName(name);
180-
return getTypeName(null, c);
170+
Class<?> c = Class.forName(thisName);
171+
return getTypeName(c, null);
181172
} catch (ClassNotFoundException ex) {
182173
// Then we use the name as is.
183174
}
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
197178
name = Enum.class.getName();
198179

199180
Object[] values = valueClass.getEnumConstants();
200181
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());
203184
}
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+
};
204198
}
205199

206200
// Special case for Log level
207201
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);
240214
}
241215

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) {
281217
}
282218
}

0 commit comments

Comments
 (0)