|
3 | 3 | import org.jetbrains.annotations.NotNull; |
4 | 4 |
|
5 | 5 | import java.io.Serializable; |
6 | | -import java.lang.reflect.Field; |
7 | 6 | import java.util.AbstractSet; |
8 | 7 | import java.util.Collection; |
9 | 8 | import java.util.Iterator; |
@@ -36,26 +35,19 @@ static class UniverseLoader { |
36 | 35 |
|
37 | 36 | @SuppressWarnings("rawtypes") |
38 | 37 | @NotNull |
39 | | - public static Enum[] getUniverseSlow(Class elementType) { |
| 38 | + public static <E extends Enum<E>> Enum[] getUniverseSlow(Class<E> elementType) { |
40 | 39 | assert (elementType.isEnum()); |
41 | 40 | Enum[] cachedUniverse = enumUniverseMap.get(elementType); |
42 | 41 | if (cachedUniverse != null) return cachedUniverse; |
43 | 42 |
|
44 | | - Field[] fields = elementType.getFields(); |
45 | | - int enums = 0; |
46 | | - for (Field field : fields) { |
47 | | - if (field.getType().isEnum()) enums++; |
48 | | - } |
49 | | - |
| 43 | + E[] constants = elementType.getEnumConstants(); |
| 44 | + int enums = constants.length; |
50 | 45 | if (enums > 0) { |
51 | 46 | cachedUniverse = new Enum[enums]; |
52 | 47 |
|
53 | 48 | enums = 0; |
54 | | - for (Field field : fields) { |
55 | | - if (field.getType().isEnum()) { |
56 | | - //noinspection unchecked |
57 | | - cachedUniverse[enums++] = Enum.valueOf((Class<Enum>) field.getType(), field.getName()); |
58 | | - } |
| 49 | + for (E constant : constants) { |
| 50 | + cachedUniverse[enums++] = constant; |
59 | 51 | } |
60 | 52 | } else { |
61 | 53 | cachedUniverse = ZERO_LENGTH_ENUM_ARRAY; |
|
0 commit comments