Commented in pull request https://github.com/Engelberg/mister-rogers/pull/1

> On 1 Aug 2018, at 02:38, Mark Engelberg <mark.engelb...@gmail.com> wrote:
> 
> I am seeing the same behavior when I remove the lein-virgil plugin.
> 
> On Tue, Jul 31, 2018 at 11:38 AM, Mark Engelberg <mark.engelb...@gmail.com> 
> wrote:
> That's surprising, but good to know. Thanks.
> 
> On Tue, Jul 31, 2018 at 9:56 AM, Renzo Borgatti <rebor...@gmail.com> wrote:
> Hey Mark, it's lein-virgil interfering. As of why, better opening an issue 
> there.
> 
> Renzo
> 
> > On 30 Jul 2018, at 11:50, Mark Engelberg <mark.engelb...@gmail.com> wrote:
> > 
> > OK, I just pushed the repo (work in progress) to github. 
> > https://github.com/Engelberg/mister-rogers
> > At the bottom of mister-rogers.wrappers I tacked on the three lines we've 
> > been discussing.
> > https://github.com/Engelberg/mister-rogers/blob/523fc29f8827193fa9ea6ae2e82649e2933e6ae3/src/clj/mister_rogers/wrappers.clj#L80
> > 
> > 
> > Here's a REPL interaction:
> > 
> > C:\devel\Clojure\mister-rogers>lein repl
> > 
> > recompiling all files in ["C:\\devel\\Clojure\\mister-rogers\\src\\java"]
> > :reloading (mister-rogers.core mister-rogers.protocols 
> > mister-rogers.problem mister-rogers.wrappers mister-rogers.core-test)
> > 
> > recompiling all files in ["C:\\devel\\Clojure\\mister-rogers\\src\\java"]
> > :reloading (mister-rogers.core mister-rogers.protocols 
> > mister-rogers.problem mister-rogers.wrappers mister-rogers.core-test)
> > nREPL server started on port 49492 on host 127.0.0.1 - 
> > nrepl://127.0.0.1:49492
> > REPL-y 0.3.7, nREPL 0.2.12
> > Clojure 1.9.0
> > Java HotSpot(TM) 64-Bit Server VM 1.8.0_66-b18
> >     Docs: (doc function-name-here)
> >           (find-doc "part-of-name-here")
> >   Source: (source function-name-here)
> >  Javadoc: (javadoc java-object-or-class-here)
> >     Exit: Control+D or (exit) or (quit)
> >  Results: Stored in vars *1, *2, *3, an exception in *e
> > 
> > user=> (in-ns 'mister-rogers.wrappers)
> > #namespace[mister-rogers.wrappers]
> > mister-rogers.wrappers=> (get-test p)
> > 
> > ClassCastException 
> > mister_rogers.wrappers.proxy$java.lang.Object$Interface$7e434bc9 cannot be 
> > cast to mister_rogers.wrappers.Interface  mister-rogers.wrappers/get-test 
> > (wrappers.clj:82)
> > 
> > 
> > Thanks for looking at this.
> > 
> > 
> > On Mon, Jul 30, 2018 at 3:43 AM, Nicola Mometto <brobro...@gmail.com> wrote:
> > Can you paste an entire repl session, starting from how you launch it (e.g. 
> > lein repl vs clj -- ideally not from a project) reproducing this?
> >  I'm interested in taking a look but I simply cannot repro :/
> > 
> >> On 30 Jul 2018, at 11:40, Mark Engelberg <mark.engelb...@gmail.com> wrote:
> >> 
> >> Yes, it is in a fresh environment.
> >> 
> >> I find that the problematic example does work in the user namespace, but 
> >> it doesn't work in my segmented namespace (ns mister-rogers.wrappers, to 
> >> be really specific).
> >> 
> >> On Mon, Jul 30, 2018 at 3:34 AM, Nicola Mometto <brobro...@gmail.com> 
> >> wrote:
> >> No, I just tested this on 1.9.0 and 1.8.0 and I get no reflection, as I'd 
> >> expect.
> >> 
> >> Are you testing this in a fresh environment?
> >> 
> >> 
> >>> On 30 Jul 2018, at 11:31, Mark Engelberg <mark.engelb...@gmail.com> wrote:
> >>> 
> >>> I'm using 1.9.0.  Is this a behavior that recently changed?
> >>> 
> >>> On Mon, Jul 30, 2018 at 3:28 AM, Nicola Mometto <brobro...@gmail.com> 
> >>> wrote:
> >>> Which version of clojure? This works fine in 1.10
> >>> 
> >>> Clojure 1.10.0-master-SNAPSHOT
> >>> user=> (set! *warn-on-reflection* true)
> >>> true
> >>> user=> (definterface Interface (test []))
> >>> user.Interface
> >>> user=> (def p (proxy [Object Interface] [] (test [] 1)))
> >>> #'user/p
> >>> user=> (defn get-test [o] (.test ^Interface o))
> >>> #'user/get-test
> >>> user=> (get-test p)
> >>> 1
> >>> 
> >>> 
> >>>> On 30 Jul 2018, at 11:26, Mark Engelberg <mark.engelb...@gmail.com> 
> >>>> wrote:
> >>>> 
> >>>> Those fishy things were errors I made when simplifying and transcribing 
> >>>> the proxy to post, but I have it correct in my own code.
> >>>> 
> >>>> Here's a more precise, tested minimal example:
> >>>> 
> >>>> (definterface Interface (test []))
> >>>> (def p (proxy [Object Interface] [] (test [] 1)))
> >>>> (defn get-test [o] (.test ^Interface o))
> >>>> 
> >>>> => (get-test p)
> >>>> This throws an error that it can't cast the proxy to Interface.
> >>>> 
> >>>> If you remove the ^Interface type hint, then get-test will work but will 
> >>>> trigger reflection.
> >>>> 
> >>>> Thanks for looking at this. It seems like it should work, but it doesn't.
> >>>> 
> >>>> 
> >>>> On Mon, Jul 30, 2018 at 3:06 AM, Nicola Mometto <brobro...@gmail.com> 
> >>>> wrote:
> >>>> That's exactly what you should do and it does work, e.g.:
> >>>> 
> >>>> user=> (set! *warn-on-reflection* true)
> >>>> true
> >>>> user=> (.meta ^clojure.lang.IMeta (proxy [clojure.lang.IMeta] [] (meta 
> >>>> [] {:a 1})))
> >>>> {:a 1}
> >>>> 
> >>>> In your small example you have two errors that might be fishy: a missing 
> >>>> arg vector to pass to the super ctor and an extra `this` parameter in 
> >>>> the method impl (proxy, unlike reify, is anaphoric and binds `this` for 
> >>>> you)
> >>>> 
> >>>> 
> >>>>> On 30 Jul 2018, at 10:56, Mark Engelberg <mark.engelb...@gmail.com> 
> >>>>> wrote:
> >>>>> 
> >>>>> Let's say I have a proxy object:
> >>>>> 
> >>>>> (def p (proxy [MyClass MyInterface] (interfaceMethod [this] ...)))
> >>>>> 
> >>>>> Now, I want to call (.interfaceMethod p).  How do I do this without 
> >>>>> reflection?
> >>>>> I would have thought that (.interfaceMethod ^MyInterface p) would work, 
> >>>>> but this results in an error message that this proxy object cannot be 
> >>>>> cast to MyInterface.
> >>>>> 
> >>>>> 
> >>>>> 
> >>>>> -- 
> >>>>> You received this message because you are subscribed to the Google
> >>>>> Groups "Clojure" group.
> >>>>> To post to this group, send email to clojure@googlegroups.com
> >>>>> Note that posts from new members are moderated - please be patient with 
> >>>>> your first post.
> >>>>> To unsubscribe from this group, send email to
> >>>>> clojure+unsubscr...@googlegroups.com
> >>>>> For more options, visit this group at
> >>>>> http://groups.google.com/group/clojure?hl=en
> >>>>> --- 
> >>>>> You received this message because you are subscribed to the Google 
> >>>>> Groups "Clojure" group.
> >>>>> To unsubscribe from this group and stop receiving emails from it, send 
> >>>>> an email to clojure+unsubscr...@googlegroups.com.
> >>>>> For more options, visit https://groups.google.com/d/optout.
> >>>> 
> >>>> 
> >>>> -- 
> >>>> You received this message because you are subscribed to the Google
> >>>> Groups "Clojure" group.
> >>>> To post to this group, send email to clojure@googlegroups.com
> >>>> Note that posts from new members are moderated - please be patient with 
> >>>> your first post.
> >>>> To unsubscribe from this group, send email to
> >>>> clojure+unsubscr...@googlegroups.com
> >>>> For more options, visit this group at
> >>>> http://groups.google.com/group/clojure?hl=en
> >>>> --- 
> >>>> You received this message because you are subscribed to the Google 
> >>>> Groups "Clojure" group.
> >>>> To unsubscribe from this group and stop receiving emails from it, send 
> >>>> an email to clojure+unsubscr...@googlegroups.com.
> >>>> For more options, visit https://groups.google.com/d/optout.
> >>>> 
> >>>> 
> >>>> -- 
> >>>> You received this message because you are subscribed to the Google
> >>>> Groups "Clojure" group.
> >>>> To post to this group, send email to clojure@googlegroups.com
> >>>> Note that posts from new members are moderated - please be patient with 
> >>>> your first post.
> >>>> To unsubscribe from this group, send email to
> >>>> clojure+unsubscr...@googlegroups.com
> >>>> For more options, visit this group at
> >>>> http://groups.google.com/group/clojure?hl=en
> >>>> --- 
> >>>> You received this message because you are subscribed to the Google 
> >>>> Groups "Clojure" group.
> >>>> To unsubscribe from this group and stop receiving emails from it, send 
> >>>> an email to clojure+unsubscr...@googlegroups.com.
> >>>> For more options, visit https://groups.google.com/d/optout.
> >>> 
> >>> 
> >>> -- 
> >>> You received this message because you are subscribed to the Google
> >>> Groups "Clojure" group.
> >>> To post to this group, send email to clojure@googlegroups.com
> >>> Note that posts from new members are moderated - please be patient with 
> >>> your first post.
> >>> To unsubscribe from this group, send email to
> >>> clojure+unsubscr...@googlegroups.com
> >>> For more options, visit this group at
> >>> http://groups.google.com/group/clojure?hl=en
> >>> --- 
> >>> You received this message because you are subscribed to the Google Groups 
> >>> "Clojure" group.
> >>> To unsubscribe from this group and stop receiving emails from it, send an 
> >>> email to clojure+unsubscr...@googlegroups.com.
> >>> For more options, visit https://groups.google.com/d/optout.
> >>> 
> >>> 
> >>> -- 
> >>> You received this message because you are subscribed to the Google
> >>> Groups "Clojure" group.
> >>> To post to this group, send email to clojure@googlegroups.com
> >>> Note that posts from new members are moderated - please be patient with 
> >>> your first post.
> >>> To unsubscribe from this group, send email to
> >>> clojure+unsubscr...@googlegroups.com
> >>> For more options, visit this group at
> >>> http://groups.google.com/group/clojure?hl=en
> >>> --- 
> >>> You received this message because you are subscribed to the Google Groups 
> >>> "Clojure" group.
> >>> To unsubscribe from this group and stop receiving emails from it, send an 
> >>> email to clojure+unsubscr...@googlegroups.com.
> >>> For more options, visit https://groups.google.com/d/optout.
> >> 
> >> 
> >> -- 
> >> You received this message because you are subscribed to the Google
> >> Groups "Clojure" group.
> >> To post to this group, send email to clojure@googlegroups.com
> >> Note that posts from new members are moderated - please be patient with 
> >> your first post.
> >> To unsubscribe from this group, send email to
> >> clojure+unsubscr...@googlegroups.com
> >> For more options, visit this group at
> >> http://groups.google.com/group/clojure?hl=en
> >> --- 
> >> You received this message because you are subscribed to the Google Groups 
> >> "Clojure" group.
> >> To unsubscribe from this group and stop receiving emails from it, send an 
> >> email to clojure+unsubscr...@googlegroups.com.
> >> For more options, visit https://groups.google.com/d/optout.
> >> 
> >> 
> >> -- 
> >> You received this message because you are subscribed to the Google
> >> Groups "Clojure" group.
> >> To post to this group, send email to clojure@googlegroups.com
> >> Note that posts from new members are moderated - please be patient with 
> >> your first post.
> >> To unsubscribe from this group, send email to
> >> clojure+unsubscr...@googlegroups.com
> >> For more options, visit this group at
> >> http://groups.google.com/group/clojure?hl=en
> >> --- 
> >> You received this message because you are subscribed to the Google Groups 
> >> "Clojure" group.
> >> To unsubscribe from this group and stop receiving emails from it, send an 
> >> email to clojure+unsubscr...@googlegroups.com.
> >> For more options, visit https://groups.google.com/d/optout.
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to clojure@googlegroups.com
> > Note that posts from new members are moderated - please be patient with 
> > your first post.
> > To unsubscribe from this group, send email to
> > clojure+unsubscr...@googlegroups.com
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
> > --- 
> > You received this message because you are subscribed to the Google Groups 
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to clojure+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/d/optout.
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to clojure@googlegroups.com
> > Note that posts from new members are moderated - please be patient with 
> > your first post.
> > To unsubscribe from this group, send email to
> > clojure+unsubscr...@googlegroups.com
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
> > --- 
> > You received this message because you are subscribed to the Google Groups 
> > "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send an 
> > email to clojure+unsubscr...@googlegroups.com.
> > For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to