On Tue, 4 Aug 2026 22:57:14 GMT, Chen Liang <[email protected]> wrote:
>> Changed Tests:
>>
>> HashMap/KeySetRemove.java: equal ValueClass keys mapped to null can be
>> removed from HashMap and TreeMap.
>>
>> HashMap/NullKeyAtResize.java: null-key resize behavior remains correct when
>> surrounding keys are ValueClass instances.
>>
>> HashMap/PutNullKey.java: colliding comparable tree-bin keys are
>> value-capable via @AsValueClass.
>>
>> HashMap/ReplaceExisting.java: replacing an existing ValueClass key during
>> active iteration does not corrupt the iterator.
>>
>> HashMap/SetValue.java: Map.Entry.setValue() returns the old ValueClass value.
>>
>> HashMap/ToArray.java: toArray() coverage is added for ValueClass keys,
>> values, and set elements across hash and linked variants.
>>
>> HashMap/TreeBinAssert.java: tree-bin iterator-removal coverage now uses a
>> value-capable key.
>>
>> Hashtable/EqualsCast.java: Provider/Hashtable equality now includes matching
>> ValueClass key/value entries.
>>
>> Hashtable/SimpleSerialization.java: serialization round-trip now also covers
>> Hashtable<Integer,Integer>.
>>
>> LinkedHashMap/ComputeIfAbsentAccessOrder.java: access-order behavior is
>> repeated with Integer keys.
>>
>> LinkedHashMap/EmptyMapIterator.java: fail-fast iterator behavior is repeated
>> with Integer key/value entries.
>>
>> LinkedList/AddAll.java: append-order behavior is repeated with ValueClass
>> elements.
>>
>> LinkedList/Clone.java: clone/equality checks for LinkedList, TreeSet, and
>> TreeMap subclasses now include ValueClass contents.
>>
>> Unchanged Tests:
>>
>> HashMap/HashMapCloneLeak.java: unchanged because the test depends on
>> WeakReference reachability. Value objects are not valid weak-reference
>> targets, so adding VClass would not match the regression being tested.
>>
>> HashMap/OverrideIsEmpty.java: unchanged because the test is about HashMap
>> subclass method dispatch. Value classes cannot extend HashMap, and changing
>> only the key/value payload would not add meaningful value-class coverage.
>>
>> HashMap/WhiteBoxResizeTest.java: unchanged because it is a
>> white-box/internal capacity and table-sizing test using
>> reflection/VarHandles over HashMap, LinkedHashMap, HashSet, and WeakHashMap
>> internals. Its purpose is sizing/lazy allocation/resize arithmetic, not
>> key/value equality or value-object behavior.
>>
>> HashMap/ToString.java: unchanged because it specifically verifies that
>> HashMap.Entry.toString() does not throw when the map contains null keys or
>> values. Adding value-class keys or values would not extend the original
>> null-handling regression in a meaningful ...
>
> test/jdk/java/util/HashMap/TreeBinAssert.java line 179:
>
>> 177:
>> 178: @AsValueClass
>> 179: static class KeyVClass implements Comparable<KeyVClass> {
>
> Why can't we just `@AsValueClass` the `Key` class itself? When we don't use
> the value class plugin, we are still testing the identity versions.
Your recommendation works perfectly now. But @Lmesnik and I had a discussion on
this issue, and he recommended keeping a separate test case for the value
class, that way it will be easier to maintain when we rewrite `@AsValueClass`
with `value class` later, without losing the value class coverage.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/32201#discussion_r3768775685