     (-> @keyword-mapping classname-or-kw :classname)
     classname-or-kw))
 
-(defn add-parent
+(defn keyword-add-parent
   "Defines the `parent-kw` to be the parent of `kw`."
   [kw parent-kw]
   (swap! keyword-mapping #(update-in % [kw :parents] conj parent-kw)))

could be either actual values or keywords `:fill` and `:wrap`.

Taken from clj-android by remvee."
  ([both]
    `(let [both# ~(or (attribute-values both)
                                ViewGroup$LayoutParams/WRAP_CONTENT)]
       (new ViewGroup$LayoutParams both# both#)))
  ([width height]
    `(let [width# ~(or (attribute-values width)
                                 ViewGroup$LayoutParams/WRAP_CONTENT)
           height# ~(or (attribute-values height)
                                  ViewGroup$LayoutParams/WRAP_CONTENT)]
       (new ViewGroup$LayoutParams width# height#))))

(defmethod transform-attributes :layout-params [el-type obj attributes
                                                generated-code]
  [(dissoc attributes :layout-width :layout-height)
   (conj generated-code
         `(.setLayoutParams ~obj
                            ~(layout-params (:layout-width attributes)
                                            (:layout-height attributes))))])

;; ### Default attributes


                [attributes ()]
                (conj (all-parents el-type) el-type))]
    (concat generated-code
            (default-setters-from-attributes el-type obj rest-attributes))))

;; ## Top-level code-generation facilities

(defn make-ui-element
  "Takes a tree of elements and generates the code to create a new
