Regression in reflectively finding default methods

Description

https://clojure.atlassian.net/browse/CLJ-2066#icft=CLJ-2066 introduced a new reflective walk for matching accessible methods but the logic in that walk assumes it will find a method in the superclass hierarchy. If it does not, then it will produce an infinite loop.

This is an example of a concrete class (sun.nio.fs.UnixPath) which has a method startsWith which is declared as a default method on java.nio.file.Path:

(def p (java.nio.file.Paths/get "src" (into-array String []))) (.startsWith p "s")

Proposed: Instead, should walk all super classes, then walk all interfaces to find an accessible default method.

Patch: clj-2414-2.patch

Environment

Java 9+

Attachments

2
  • 07 Oct 2018, 04:34 PM
  • 07 Oct 2018, 04:08 PM

Activity

Show:
Completed

Details

Assignee

Reporter

Approval

Ok

Patch

Code and Test

Priority

Affects versions

Fix versions

Created October 7, 2018 at 4:04 PM
Updated October 9, 2018 at 9:41 PM
Resolved October 9, 2018 at 9:41 PM

Flag notifications