   [class-info access field-name desc signature value]
   (merge class-info
          {
-           :dependencies (add-dependency (:dependencies class-info) (.getClassName (org.objectweb.asm.Type/getType desc)) :uses)
+           :dependencies (add-dependency (:dependencies class-info) (fix-field-descriptor desc) :uses)
+         }))
+
+(defn- visit-annotation
+  [class-info name desc]
+  (merge class-info
+         {
+           ;####TODO!!!!
          }))
 
 (defn class-info


(defn- add-dependencies
  [dependencies new-dependencies type]
  (loop [result                 dependencies
         current-dependency     (first new-dependencies)
         remaining-dependencies (rest  new-dependencies)]
    (if (empty? remaining-dependencies)
      (add-dependency result current-dependency type)
      (recur (add-dependency result current-dependency type) (first remaining-dependencies) (rest remaining-dependencies)))))

(defn- visit
  [class-info version access class-name signature super-name interfaces]

  [^String name]
  (.replaceAll name "/" "."))

(defn- fix-field-descriptor
  [^String field-descriptor]
  (let [result (.getClassName (org.objectweb.asm.Type/getType field-descriptor))]
    (if (.endsWith result "[]")   ; Trim array suffix - we don't differentiate between dependencies on arrays and the fundamental type
      (.substring result 0 (- (.length result) 2))
      result)))

(defn- add-dependency
  [dependencies dependency type]
  (if (contains? dependencies dependency)
