MCPcopy Index your code
hub / github.com/clojure/clojure / preferMethod

Method preferMethod

src/jvm/clojure/lang/MultiFn.java:84–103  ·  view source on GitHub ↗
(Object dispatchValX, Object dispatchValY)

Source from the content-addressed store, hash-verified

82}
83
84public MultiFn preferMethod(Object dispatchValX, Object dispatchValY) {
85 rw.writeLock().lock();
86 try
87 {
88 if(prefers(hierarchy.deref(), dispatchValY, dispatchValX))
89 throw new IllegalStateException(
90 String.format("Preference conflict in multimethod '%s': %s is already preferred to %s",
91 name, dispatchValY, dispatchValX));
92 preferTable = getPreferTable().assoc(dispatchValX, RT.conj((IPersistentCollection) RT.get(getPreferTable(),
93 dispatchValX,
94 PersistentHashSet.EMPTY),
95 dispatchValY));
96 resetCache();
97 return this;
98 }
99 finally
100 {
101 rw.writeLock().unlock();
102 }
103}
104
105private boolean prefers(Object hierarchy, Object x, Object y) {
106 IPersistentSet xprefs = (IPersistentSet) getPreferTable().valAt(x);

Callers

nothing calls this directly

Calls 9

prefersMethod · 0.95
getPreferTableMethod · 0.95
conjMethod · 0.95
getMethod · 0.95
resetCacheMethod · 0.95
lockMethod · 0.80
formatMethod · 0.80
derefMethod · 0.65
assocMethod · 0.65

Tested by

no test coverage detected