In mappedEnumLookup, a local map is created when enumMap.map is null, but it's never assigned to enumMap.map which assumedly is the intent:
private static <T extends Enum<T>> int mappedEnumLookup(T value, MethodHandles.Lookup lookup, Class<T> enumClass, EnumDesc<?>[] labels, EnumMap enumMap) {
if (enumMap.map == null) {
T[] constants = SharedSecrets.getJavaLangAccess().getEnumConstantsShared(enumClass);
int[] map = new int[constants.length];
int ordinal = 0;
for (T constant : constants) {
map[ordinal] = labels.length;
for (int i = 0; i < labels.length; i++) {
if (Objects.equals(labels[i].constantName(), constant.name())) {
map[ordinal] = i;
break;
}
}
ordinal++;
}
}
return enumMap.map[value.ordinal()];
}
Since the return statement would throw a NPE if this path was exercised it's unclear if this is covered by tests.
private static <T extends Enum<T>> int mappedEnumLookup(T value, MethodHandles.Lookup lookup, Class<T> enumClass, EnumDesc<?>[] labels, EnumMap enumMap) {
if (enumMap.map == null) {
T[] constants = SharedSecrets.getJavaLangAccess().getEnumConstantsShared(enumClass);
int[] map = new int[constants.length];
int ordinal = 0;
for (T constant : constants) {
map[ordinal] = labels.length;
for (int i = 0; i < labels.length; i++) {
if (Objects.equals(labels[i].constantName(), constant.name())) {
map[ordinal] = i;
break;
}
}
ordinal++;
}
}
return enumMap.map[value.ordinal()];
}
Since the return statement would throw a NPE if this path was exercised it's unclear if this is covered by tests.
- duplicates
-
JDK-8333605 Unreachable Code in SwitchBootstraps#enumSwitch
-
- Closed
-
- links to
-
Commit(master) openjdk/jdk/958786b2
-
Review(master) openjdk/jdk/19906