This fails for me, claiming it can't find a deftype class in my own code - stack trace below. Here's the code it seems to choke on:
;; New Relic traceable API
(ann-protocol INR
delete_by_id [INR Keyword Any Keyword -> Any]
execute_sql [INR [Any -> Any] String (HMap) -> Any]
find_by_keys [INR [Any -> Any] Keyword (HMap) (Seqable Direction) Boolean -> Any]
get_by_id [INR Keyword Any Keyword Boolean -> (HMap)]
save_row [INR Keyword (HMap) [(HMap) -> (HMap)] Keyword -> Any])
(definterface INR
(delete_by_id [table id pk])
(execute_sql [f sql-string params])
(find_by_keys [f table record ordering slave-ok?])
(get_by_id [table id pk slave-ok?])
(save_row [table record key-gen pk]))
(ann-datatype ^:no-check NR [])
(deftype NR []
INR
(^{com.newrelic.api.agent.Trace {}} delete_by_id
[_ table id pk]
(delete-by-id* table id pk))
(^{com.newrelic.api.agent.Trace {}} execute_sql
[_ f sql-string params]
(execute* f sql-string params))
(^{com.newrelic.api.agent.Trace {}} find_by_keys
[_ f table record ordering slave-ok?]
(find-by-keys* f table record ordering slave-ok?))
(^{com.newrelic.api.agent.Trace {}} get_by_id
[_ table id pk slave-ok?]
(get-by-id* table id pk slave-ok?))
(^{com.newrelic.api.agent.Trace {}} save_row
[_ table record key-gen pk]
(save-row* table record key-gen pk)))
(ann ^:no-check delete-by-id (Fn [Keyword Any -> Any]
[Keyword Any Keyword -> Any]))
(defn delete-by-id
([table id] (.delete_by_id (NR.) table id :id))
([table id pk] (.delete_by_id (NR.) table id pk)))
(ann ^:no-check execute (Fn [String -> Any]
[(U String [Any -> Any]) (U String (HMap)) -> Any]
[[Any -> Any] String (HMap) -> Any]))
(defn execute
([sql-string]
(.execute_sql (NR.) identity sql-string []))
([fn-or-sql sql-or-params]
(if (fn? fn-or-sql)
(.execute_sql (NR.) fn-or-sql sql-or-params [])
(.execute_sql (NR.) identity fn-or-sql sql-or-params)))
([f sql-string params]
(.execute_sql (NR.) f sql-string params)))
(ann ^:no-check find-by-keys (All [x y] (Fn [[x -> y] Keyword (HMap) -> y]
[[x -> y] Keyword (HMap) (Seqable Direction) -> y])))
(defn find-by-keys
([f table record]
(.find_by_keys (NR.) f table record [] false))
([f table record ordering & {:keys [slave-ok?] :or {slave-ok? false}}]
(.find_by_keys (NR.) f table record ordering slave-ok?)))
(ann ^:no-check get-by-id
(Fn [Keyword Any -> (HMap)]
[Keyword Any Keyword & :optional {:slave-ok? Boolean} -> (HMap)]))
(defn get-by-id
([table id]
(.get_by_id (NR.) table id :id false))
([table id pk & {:keys [slave-ok?] :or {slave-ok? false}}]
(.get_by_id (NR.) table id pk slave-ok?)))
(ann ^:no-check save-row (Fn [Keyword (HMap) -> Any]
[Keyword (HMap) [(HMap) -> (HMap)] -> Any]
[Keyword (HMap) [(HMap) -> (HMap)] Keyword -> Any]))
(defn save-row
([table record]
(.save_row (NR.) table record identity :id))
([table record key-gen]
(.save_row (NR.) table record key-gen :id))
([table record key-gen pk]
(.save_row (NR.) table record key-gen pk)))
And here's the stacktrace. The code runs just fine, it's only core.typed's checking that trips up on it.
java.lang.ClassNotFoundException:
worldsingles.data.core.NR
URLClassLoader.java:366 java.net.URLClassLoader$1.run
URLClassLoader.java:355 java.net.URLClassLoader$1.run
(Unknown Source) java.security.AccessController.doPrivileged
URLClassLoader.java:354 java.net.URLClassLoader.findClass
ClassLoader.java:425 java.lang.ClassLoader.loadClass
Launcher.java:308 sun.misc.Launcher$AppClassLoader.loadClass
ClassLoader.java:358 java.lang.ClassLoader.loadClass
(Unknown Source) java.lang.Class.forName0
Class.java:270 java.lang.Class.forName
java.clj:169 clojure.reflect/clojure.reflect.JavaReflector
reflect.clj:44 clojure.reflect/fn[fn]
reflect.clj:44 clojure.reflect/fn[fn]
AFn.java:156 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:626 clojure.core/apply
core.clj:2468 clojure.core/partial[fn]
RestFn.java:408 clojure.lang.RestFn.invoke
reflect.clj:100 clojure.reflect/type-reflect
RestFn.java:410 clojure.lang.RestFn.invoke
AFn.java:154 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
reflect.clj:121 clojure.reflect/reflect
RestFn.java:410 clojure.lang.RestFn.invoke
check.clj:4985 clojure.core.typed.check/deftype-method-members
check.clj:5000 clojure.core.typed.check/check -COLON-deftype17488[fn]
check.clj:4994 clojure.core.typed.check/check -COLON-deftype17488
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:3454 clojure.core.typed.check/check -COLON-do16866[fn]
check.clj:3446 clojure.core.typed.check/check -COLON-do16866[fn]
ArrayChunk.java:58 clojure.lang.ArrayChunk.reduce
protocols.clj:98 clojure.core.protocols/fn
protocols.clj:19 clojure.core.protocols/fn[fn]
protocols.clj:31 clojure.core.protocols/seq-reduce
protocols.clj:54 clojure.core.protocols/fn
protocols.clj:13 clojure.core.protocols/fn[fn]
core.clj:6289 clojure.core/reduce
check.clj:3481 clojure.core.typed.check/check -COLON-do16866
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:4049 clojure.core.typed.check/check-let[fn]
check.clj:4044 clojure.core.typed.check/check-let
RestFn.java:587 clojure.lang.RestFn.invoke
check.clj:4172 clojure.core.typed.check/check -COLON-let17236
RestFn.java:423 clojure.lang.RestFn.invoke
MultiFn.java:231 clojure.lang.MultiFn.invoke
check.clj:184 clojure.core.typed.check/check-expr
RestFn.java:410 clojure.lang.RestFn.invoke
check.clj:152 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
check.clj:141 clojure.core.typed.check/check-ns-and-deps
typed.clj:1638 clojure.core.typed/check-ns-info[fn]
typed.clj:1635 clojure.core.typed/check-ns-info
RestFn.java:410 clojure.lang.RestFn.invoke
AFn.java:154 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:626 clojure.core/apply
typed.clj:1702 clojure.core.typed/check-ns
RestFn.java:410 clojure.lang.RestFn.invoke
typed.clj:1700 clojure.core.typed/check-ns
/Developer/workspace/worldsingles/ws/model/clojure/worldsingles/src/worldsingles/payment/sbw.clj:16 worldsingles.payment.sbw/eval8790
Compiler.java:6703 clojure.lang.Compiler.eval
Compiler.java:6666 clojure.lang.Compiler.eval
core.clj:2927 clojure.core/eval
eval.clj:77 lighttable.nrepl.eval/->result
AFn.java:156 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:626 clojure.core/apply
core.clj:2468 clojure.core/partial[fn]
RestFn.java:408 clojure.lang.RestFn.invoke
core.clj:2559 clojure.core/map[fn]
LazySeq.java:40 clojure.lang.LazySeq.sval
LazySeq.java:49 clojure.lang.LazySeq.seq
RT.java:484 clojure.lang.RT.seq
core.clj:133 clojure.core/seq
core.clj:2595 clojure.core/filter[fn]
LazySeq.java:40 clojure.lang.LazySeq.sval
LazySeq.java:49 clojure.lang.LazySeq.seq
RT.java:484 clojure.lang.RT.seq
core.clj:133 clojure.core/seq
core.clj:2855 clojure.core/dorun
core.clj:2871 clojure.core/doall
eval.clj:126 lighttable.nrepl.eval/eval-clj
RestFn.java:442 clojure.lang.RestFn.invoke
eval.clj:192 lighttable.nrepl.eval/eval2637[fn]
AFn.java:152 clojure.lang.AFn.applyToHelper
AFn.java:144 clojure.lang.AFn.applyTo
core.clj:624 clojure.core/apply
core.clj:1862 clojure.core/with-bindings*
RestFn.java:425 clojure.lang.RestFn.invoke
eval.clj:177 lighttable.nrepl.eval/eval2637[fn]
eval.clj:176 lighttable.nrepl.eval/eval2637[fn]
MultiFn.java:227 clojure.lang.MultiFn.invoke
core.clj:98 lighttable.nrepl.core/queued[fn]
core.clj:2402 clojure.core/comp[fn]
interruptible_eval.clj:138 clojure.tools.nrepl.middleware.interruptible-eval/run-next[fn]
AFn.java:22 clojure.lang.AFn.run
ThreadPoolExecutor.java:1145 java.util.concurrent.ThreadPoolExecutor.runWorker
ThreadPoolExecutor.java:615 java.util.concurrent.ThreadPoolExecutor$Worker.run
Thread.java:744 java.lang.Thread.run