MCPcopy Index your code
hub / github.com/apache/groovy / CacheKey

Class CacheKey

src/main/java/groovy/util/ProxyGenerator.java:388–480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

386 //--------------------------------------------------------------------------
387
388 private static final class CacheKey {
389 private static final Comparator<Class> INTERFACE_COMPARATOR = (o1, o2) -> {
390 // Traits order *must* be preserved
391 // See GROOVY-7285
392 if (Traits.isTrait(o1)) return -1;
393 if (Traits.isTrait(o2)) return 1;
394 return o1.getName().compareTo(o2.getName());
395 };
396 private final ClassReference baseClass;
397 private final ClassReference delegateClass;
398 private final Set<String> methods;
399 private final ClassReference[] interfaces;
400 private final boolean emptyMethods;
401 private final boolean useDelegate;
402
403 private CacheKey(final Class baseClass, final Class delegateClass, final Set<String> methods, final Class[] interfaces, final boolean emptyMethods, final boolean useDelegate) {
404 this.baseClass = new ClassReference(baseClass);
405 this.delegateClass = new ClassReference(delegateClass);
406 this.methods = methods;
407 this.emptyMethods = emptyMethods;
408 this.useDelegate = useDelegate;
409 final int interfaceCount = interfaces.length;
410 if (interfaces != null) {
411 Class[] interfacesCopy = new Class[interfaceCount];
412 System.arraycopy(interfaces, 0, interfacesCopy, 0, interfaceCount);
413 Arrays.sort(interfacesCopy, INTERFACE_COMPARATOR);
414 ClassReference[] interfaceReferences = new ClassReference[interfaceCount];
415 for (int i = 0, n = interfacesCopy.length; i < n; i++) {
416 interfaceReferences[i] = new ClassReference(interfacesCopy[i]);
417 }
418 this.interfaces = interfaceReferences;
419 } else {
420 this.interfaces = null;
421 }
422 }
423
424 /** {@inheritDoc} */
425 @Override
426 public boolean equals(final Object o) {
427 if (this == o) return true;
428 if (o == null || getClass() != o.getClass()) return false;
429
430 final CacheKey cacheKey = (CacheKey) o;
431
432 if (emptyMethods != cacheKey.emptyMethods) return false;
433 if (useDelegate != cacheKey.useDelegate) return false;
434 if (!Objects.equals(delegateClass, cacheKey.delegateClass)) return false;
435 if (!Objects.equals(baseClass, cacheKey.baseClass)) return false;
436 if (!Arrays.equals(interfaces, cacheKey.interfaces)) return false;
437 if (!Objects.equals(methods, cacheKey.methods)) return false;
438
439 return true;
440 }
441
442 /** {@inheritDoc} */
443 @Override
444 public int hashCode() {
445 return Objects.hash(emptyMethods, useDelegate, delegateClass, baseClass, Arrays.hashCode(interfaces), methods);

Callers

nothing calls this directly

Calls 3

isTraitMethod · 0.95
getNameMethod · 0.65
compareToMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…