| 386 | } |
| 387 | |
| 388 | void put(int idx, @NotNull FieldMeta fieldMeta) { |
| 389 | fieldMeta.next = null; |
| 390 | fieldMetas[idx] = fieldMeta; |
| 391 | int hash = fieldMeta.hash; |
| 392 | int i = hash & (valueTable.length - 1); |
| 393 | FieldMeta fm = valueTable[i]; |
| 394 | if (fm == null) { // fast path |
| 395 | valueTable[i] = fieldMeta; |
| 396 | return; |
| 397 | } |
| 398 | for (; ; ) { |
| 399 | if (fm.hash == hash) { // bad luck! try to call setKeyHashMultiplier with another prime number |
| 400 | throw new IllegalStateException("conflicted field names: " + fieldMeta.getName() + " & " |
| 401 | + fm.getName() + " in " + fieldMeta.klass.getName()); |
| 402 | } |
| 403 | FieldMeta next = fm.next; |
| 404 | if (next == null) { |
| 405 | fm.next = fieldMeta; |
| 406 | return; |
| 407 | } |
| 408 | fm = next; |
| 409 | } |
| 410 | } |
| 411 | } |
| 412 | |
| 413 | private static final @NotNull MethodHandles.Lookup lookup = MethodHandles.lookup(); |