Ideally when generating a java class from Clojure for interop
purposes, we should be able to generate any annotations that the
equivalent java code could generate.  Thus if a java class can
annotate a constructor parameter, then gen-class and defrecord should
be able to do that too.  (I'm trying to interoperate with some Spring
Framework stuff that expects to inject stuff into my class via an
annotated constructor parameter.  I'm trying to gradually introduce
clojure code into the project starting with this one class that has
that requirement. Maybe that's not a good idea to begin with, but I
always find it very tempting. It's probably a case of driving while
bouncing off the guard rails. :))

Did I put my constructor annotation in the wrong place in my example
below?  I also tried putting directly on the parameter of the -init
function.  If this is truly missing functionality, I may try to level
up enough to patch the clojure compiler, send in a CA, submit a pull
request...  But I think I have a ways to go to level up my clojure to
that level.

Many thanks in advance for any insights/feedback from the wonderful
clojure community.

(ns com.warrenthomaswood.MyGenClass
  (:gen-class :methods [["foo" [^{Deprecated true} String] void]]
              :init init
              :constructors {[^{Deprecated true} String] []}))

(defn -init [word] (println word))

(defn -foo [this word] (println word))

;;; given the above clojure-generated class MyGenClass, and a plain
java class MyClass with a
;;; constructor parameter annotation as follows:

package com.warrenthomaswood;
public class MyClass { public MyClass(@Deprecated String s) { } }

;;; when I try to retrieve the annotations in a JUnit test, I can
retrieve the method parameter
;;; annotation from the clojure generated class using
MyGenClass.class.getMethods() and then calling
;;; getAnnotations() on the method.

;;; I can retrieve the constructor parameter annotation from the java
generated class using
;;; MyClass.class.getConstructors() and then calling getAnnotations on
the constructor

;;; but the clojure compiler does not seem to have a way of getting
the constructor parameter
;;; annotation into the byte code.  I can get annotations on the whole
constructor I think, but
;;; not on the individual parameters of the construct.

-- 
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

Reply via email to