day8 / re-frame-debux

A fork of debux for tracing re-frame code (for eventual consumption by re-frame-10x)
Eclipse Public License 1.0
43 stars 7 forks source link

Encountered error when macroexpanding debux.dbgn/dbgn : NullPointerException #31

Closed clov0 closed 4 years ago

clov0 commented 4 years ago

Building results in this error when certain reg-event-fxs handlers are turned from fn to fn-traced :

------ ERROR -------------------------------------------------------------------
 File: /home/ho0man/Projects/focus/stellar-awesome-o/src/cljs/stellar/awesome_o/events/dashboard.cljs:61:2
--------------------------------------------------------------------------------
  58 | (re-frame/reg-event-db
  59 |  ::persist-active-instances
  60 |  [etil/check-spec-interceptor]
  61 |  (fn-traced [db [_ new-instances]]
--------^-----------------------------------------------------------------------
Encountered error when macroexpanding debux.dbgn/dbgn.
NullPointerException: 
        clojure.lang.Murmur3.hashUnencodedChars (Murmur3.java:76)
        clojure.lang.Symbol.hasheq (Symbol.java:89)
        clojure.lang.Util.dohasheq (Util.java:177)
        clojure.lang.Util.hasheq (Util.java:168)
        clojure.lang.PersistentHashMap.hash (PersistentHashMap.java:120)
        clojure.lang.PersistentHashMap.valAt (PersistentHashMap.java:152)
        clojure.lang.PersistentHashMap.valAt (PersistentHashMap.java:156)
        clojure.lang.APersistentSet.get (APersistentSet.java:38)
        clojure.lang.APersistentSet.invoke (APersistentSet.java:50)
        debux.dbgn/insert-skip (dbgn.clj:63)
        debux.dbgn/insert-skip (dbgn.clj:44)
        debux.dbgn/dbgn (dbgn.clj:428)
        debux.dbgn/dbgn (dbgn.clj:414)
        clojure.core/apply (core.clj:669)
        clojure.core/apply (core.clj:660)
        cljs.analyzer/macroexpand-1*/fn--2556 (analyzer.cljc:3879)
        cljs.analyzer/macroexpand-1* (analyzer.cljc:3877)
        cljs.analyzer/macroexpand-1* (analyzer.cljc:3864)
        cljs.analyzer/macroexpand-1 (analyzer.cljc:3928)
        cljs.analyzer/macroexpand-1 (analyzer.cljc:3924)
        cljs.analyzer/analyze-seq (analyzer.cljc:3961)
        cljs.analyzer/analyze-seq (analyzer.cljc:3941)
        cljs.analyzer/analyze-form (analyzer.cljc:4150)
        cljs.analyzer/analyze-form (analyzer.cljc:4147)
        cljs.analyzer/analyze* (analyzer.cljc:4200)
        cljs.analyzer/analyze* (analyzer.cljc:4191)
        cljs.analyzer/analyze (analyzer.cljc:4220)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze-seq (analyzer.cljc:3964)
        cljs.analyzer/analyze-seq (analyzer.cljc:3941)
        cljs.analyzer/analyze-form (analyzer.cljc:4150)
        cljs.analyzer/analyze-form (analyzer.cljc:4147)
        cljs.analyzer/analyze* (analyzer.cljc:4200)
        cljs.analyzer/analyze* (analyzer.cljc:4191)
        cljs.analyzer/analyze (analyzer.cljc:4220)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze (analyzer.cljc:4213)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze (analyzer.cljc:4211)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/fn--1962 (analyzer.cljc:2252)
        cljs.analyzer/fn--1962 (analyzer.cljc:2248)
        clojure.lang.MultiFn.invoke (MultiFn.java:252)
        cljs.analyzer/analyze-seq* (analyzer.cljc:3934)
        cljs.analyzer/analyze-seq* (analyzer.cljc:3932)
        cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3939)
        cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3937)
        cljs.analyzer/analyze-seq (analyzer.cljc:3963)
        cljs.analyzer/analyze-seq (analyzer.cljc:3941)
        cljs.analyzer/analyze-form (analyzer.cljc:4150)
        cljs.analyzer/analyze-form (analyzer.cljc:4147)
        cljs.analyzer/analyze* (analyzer.cljc:4200)
        cljs.analyzer/analyze* (analyzer.cljc:4191)
        cljs.analyzer/analyze (analyzer.cljc:4220)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze (analyzer.cljc:4213)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze (analyzer.cljc:4211)
        cljs.analyzer/analyze (analyzer.cljc:4203)
        cljs.analyzer/analyze-let-body* (analyzer.cljc:2330)
        cljs.analyzer/analyze-let-body* (analyzer.cljc:2329)
        cljs.analyzer/analyze-let-body (analyzer.cljc:2335)
        cljs.analyzer/analyze-let-body (analyzer.cljc:2332)
        cljs.analyzer/analyze-let (analyzer.cljc:2371)
        cljs.analyzer/analyze-let (analyzer.cljc:2337)
        cljs.analyzer/fn--1994 (analyzer.cljc:2391)
        cljs.analyzer/fn--1994 (analyzer.cljc:2389)
        clojure.lang.MultiFn.invoke (MultiFn.java:252)
        cljs.analyzer/analyze-seq* (analyzer.cljc:3934)
        cljs.analyzer/analyze-seq* (analyzer.cljc:3932)
        cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3939)
        cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3937)
        cljs.analyzer/analyze-seq (analyzer.cljc:3963)
        cljs.analyzer/analyze-seq (analyzer.cljc:3941)
        cljs.analyzer/analyze-form (analyzer.cljc:4150)
        cljs.analyzer/analyze-form (analyzer.cljc:4147)
        cljs.analyzer/analyze* (analyzer.cljc:4200)
        cljs.analyzer/analyze* (analyzer.cljc:4191)
        cljs.analyzer/analyze (analyzer.cljc:4220)
        cljs.analyzer/analyze (analyzer.cljc:4203)

--------------------------------------------------------------------------------
  62 |    (if-not (or (empty? new-instances)
  63 |                (nil? new-instances))
  64 |      (let [instances-ids (->> new-instances
  65 |                               (transduce
--------------------------------------------------------------------------------
clov0 commented 4 years ago

This is the file and the first and the last reg-event-fxs are the problematic ones :

(ns stellar.awesome-o.events.dashboard
  (:require
   [re-frame.core :as re-frame]
   [stellar.awesome-o.db :as db]
   [day8.re-frame.http-fx]
   [ajax.core :as ajax]
   [stellar.awesome-o.events.util :as etil]
   [day8.re-frame.tracing :refer-macros [fn-traced defn-traced]]
   [reagent.cookies :as cks]))

;;------------------------------------------------------------------;;
;;------------------------------------------------------------------;;

(re-frame/reg-event-db
 ::persist-all-instances
 [etil/check-spec-interceptor]
 (fn [db [_ new-instances]]
   (if-not (or (empty? new-instances)
               (nil? new-instances))
     (let [updated-all-instances-map
           (reduce (fn [all-instances {:keys [id] :as post-inst}]
                     (update all-instances id
                             (fn [pre-inst]
                               (if (nil? pre-inst)
                                 (->> post-inst)
                                 (cond
                                   (or (and (= db/deactivating (pre-inst :status))
                                            (not= db/deactive (post-inst :status)))
                                       (and (= db/deactivating (pre-inst :status))
                                            (not= db/gracing-down (post-inst :status))))
                                   (->> pre-inst)
                                   (and (= db/activating (pre-inst :status))
                                        (not= db/active (post-inst :status)))
                                   (->> pre-inst)
                                   :else (->> post-inst))))))
                   (db :all-instances)
                   new-instances)]

       (-> db
           (assoc :all-instances  updated-all-instances-map)))
     (->> db))))

;;------------------------------------------------------------------;;

(re-frame/reg-event-fx
 ::api-get-all-instances
 [etil/check-spec-interceptor]
 (fn-traced [{:keys [db]} _]
   {:http-xhrio (etil/api-request etil/req-format
                                  :get "/api/v1/instances/all"
                                  nil nil
                                  [::persist-all-instances]
                                  [::cancel-repetitive-dispatch]
                                  db)}))

;;------------------------------------------------------------------;;

(re-frame/reg-event-db
 ::persist-active-instances
 [etil/check-spec-interceptor]
 (fn-traced [db [_ new-instances]]
   (if-not (or (empty? new-instances)
               (nil? new-instances))
     (let [instances-ids (->> new-instances
                              (transduce
                               (map #(->> (:id %)))
                               conj
                               []))
           updated-all-instances
           (reduce (fn [all-instances {:keys [id] :as post-inst}]
                     (update all-instances id
                             (fn [pre-inst]
                               (if (nil? pre-inst)
                                 (->> post-inst)
                                 (cond
                                   (or (and (= db/deactivating (pre-inst :status))
                                            (not= db/deactive (post-inst :status)))
                                       (and (= db/deactivating (pre-inst :status))
                                            (not= db/gracing-down (post-inst :status))))
                                   (->> pre-inst)
                                   (and (= db/activating (pre-inst :status))
                                        (not= db/active (post-inst :status)))
                                   (->> pre-inst)
                                   :else (->> post-inst))))))
                   (db :all-instances)
                   new-instances)]
       (-> db
           (assoc :active-instances instances-ids)
           (assoc :all-instances updated-all-instances)))
     (->> db))))
stumitchell commented 4 years ago

Almost 100% sure this was an issue with cond that should be fixed on master now

stumitchell commented 4 years ago

@clov0 if you like I can do a SNAPSHOT release and you can test