File tree Expand file tree Collapse file tree
src/main/clojure/clojure/tools/analyzer/jvm Expand file tree Collapse file tree Original file line number Diff line number Diff line change 409409 (= pc (maybe-class mp))))
410410 (map vector param-classes method-params)))))
411411
412+ (defn- most-specific
413+ [methods]
414+ (map (fn [ms]
415+ (reduce (fn [a b]
416+ (if (.isAssignableFrom ^Class (maybe-class (:declaring-class a))
417+ ^Class (maybe-class (:declaring-class b)))
418+ b a))
419+ ms))
420+ (vals (group-by #(mapv maybe-class (:parameter-types %)) methods))))
421+
412422(defn resolve-hinted-method
413423 " Given a class, method name and param-tags, resolves to the unique matching method.
414424 Returns nil if no match or if ambiguous."
415425 [methods param-tags]
416426 (let [param-classes (tags-to-maybe-classes param-tags)
417- matching (filter #(signature-matches? param-classes %) methods)]
427+ matching (most-specific ( filter #(signature-matches? param-classes %) methods) )]
418428 (when (= 1 (count matching))
419429 (first matching))))
420430
You can’t perform that action at this time.
0 commit comments