diff --git a/src/main/java/picocli/CommandLine.java b/src/main/java/picocli/CommandLine.java index 91f5d65d2..905cd4b19 100644 --- a/src/main/java/picocli/CommandLine.java +++ b/src/main/java/picocli/CommandLine.java @@ -11987,19 +11987,17 @@ private ITypeConverter getTypeConverter(final Class type, ArgSpec argSpec, return new ITypeConverter() { @SuppressWarnings("unchecked") public Object convert(String value) throws Exception { - String sensitivity = "case-sensitive"; - if (commandSpec.parser().caseInsensitiveEnumValuesAllowed()) { - String upper = value.toUpperCase(); + try { return Enum.valueOf((Class) type, value); } + catch (IllegalArgumentException ex) { + boolean insensitive = commandSpec.parser().caseInsensitiveEnumValuesAllowed(); for (Object enumConstant : type.getEnumConstants()) { - if (upper.equals(String.valueOf(enumConstant).toUpperCase())) { return enumConstant; } + String thisName = enumConstant.toString(); + if( value.equals(thisName) || insensitive && value.equalsIgnoreCase(thisName) ) { return enumConstant; } } - sensitivity = "case-insensitive"; - } - try { return Enum.valueOf((Class) type, value); } - catch (Exception ex) { + String sensitivity = insensitive ? "case-insensitive" : "case-sensitive"; Enum[] constants = ((Class>) type).getEnumConstants(); String[] names = new String[constants.length]; - for (int i = 0; i < names.length; i++) { names[i] = constants[i].name(); } + for (int i = 0; i < names.length; i++) { names[i] = constants[i].toString(); } throw new TypeConversionException( String.format("expected one of %s (%s) but was '%s'", Arrays.asList(names), sensitivity, value)); } }