     [[:version Integer true]
      [(keyword (count-value-key count-key)) Number true]])))
 
-(defn make-count-reducer-strategy [#^Metadata src-metadata #^Metadata tgt-metadata & [count-key]]
+(defn make-count-reducer-strategy [^Metadata src-metadata ^Metadata tgt-metadata & [count-key]]
   ;; TODO - use count-key
   (let [creator (.getCreator tgt-metadata)]
     (proxy

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

(defn reducer
  [#^String src-name #^Metadata src-metadata #^Metadata tgt-metadata reduction-key #^Collection extra-values #^IFn strategy-fn #^IFn value-key-fn]
  (let [strategy (strategy-fn src-metadata tgt-metadata reduction-key)]
    (Reducer. (str src-name "." (value-key-fn reduction-key))
	      tgt-metadata extra-values strategy)))

     src-metamodel
     (proxy [View] []
	    (update [insertions alterations deletions]
		    (doall (map (fn [^Update insertion]
				    (trace (str "INSERTION " (.getNewValue insertion)))
				    (apply f tgt-metamodel (.getNewValue insertion))) insertions)))))
    tgt-metamodel))
