MCPcopy Create free account
hub / github.com/antlr/codebuff / putInverse

Method putInverse

corpus/java/training/guava/collect/HashBiMap.java:304–336  ·  view source on GitHub ↗
(@Nullable V value, @Nullable K key, boolean force)

Source from the content-addressed store, hash-verified

302 }
303
304 @Nullable
305 private K putInverse(@Nullable V value, @Nullable K key, boolean force) {
306 int valueHash = smearedHash(value);
307 int keyHash = smearedHash(key);
308
309 BiEntry<K, V> oldEntryForValue = seekByValue(value, valueHash);
310 if (oldEntryForValue != null
311 && keyHash == oldEntryForValue.keyHash
312 && Objects.equal(key, oldEntryForValue.key)) {
313 return key;
314 }
315
316 BiEntry<K, V> oldEntryForKey = seekByKey(key, keyHash);
317 if (oldEntryForKey != null) {
318 if (force) {
319 delete(oldEntryForKey);
320 } else {
321 throw new IllegalArgumentException("value already present: " + key);
322 }
323 }
324
325 if (oldEntryForValue != null) {
326 delete(oldEntryForValue);
327 }
328 BiEntry<K, V> newEntry = new BiEntry<K, V>(key, keyHash, value, valueHash);
329 insert(newEntry, oldEntryForKey);
330 if (oldEntryForKey != null) {
331 oldEntryForKey.prevInKeyInsertionOrder = null;
332 oldEntryForKey.nextInKeyInsertionOrder = null;
333 }
334 rehashIfNecessary();
335 return Maps.keyOrNull(oldEntryForValue);
336 }
337
338 private void rehashIfNecessary() {
339 BiEntry<K, V>[] oldKToV = hashTableKToV;

Callers 2

putMethod · 0.45
forcePutMethod · 0.45

Calls 8

seekByValueMethod · 0.95
equalMethod · 0.95
seekByKeyMethod · 0.95
deleteMethod · 0.95
insertMethod · 0.95
rehashIfNecessaryMethod · 0.95
keyOrNullMethod · 0.95
smearedHashMethod · 0.80

Tested by

no test coverage detected