// this is from plume-lib class TypeVarAndArrayRefinement { private <T extends Enum<T>> T getEnumValue(Class<T> enumType, String name) { T[] constants = enumType.getEnumConstants(); if (constants == null) { throw new IllegalArgumentException(enumType.getName() + " is not an enum type"); } // previously the constants method was considered nullable mainly because it was an invalid type // because when lubbing type variables we didn't copy the declared types on the bounds over to // the lub for (T constant : constants) { if (constant.name().equalsIgnoreCase(name.replace('-', '_'))) { return constant; } } // same error that's thrown by Enum.valueOf() throw new IllegalArgumentException( "No enum constant " + enumType.getCanonicalName() + "." + name); } }