ryoakg
4/23/2010 - 9:31 PM

gistfile1.clj

;annotation syntax

(import [java.lang.annotation Retention RetentionPolicy Target ElementType]
        [javax.xml.ws WebServiceRef WebServiceRefs])
(definterface Foo (foo []))

;annotation on type
(deftype ^{Deprecated true 
            Retention RetentionPolicy/RUNTIME 
            javax.annotation.processing.SupportedOptions ["foo" "bar" "baz"]
            javax.xml.ws.soap.Addressing {:enabled false :required true}
            WebServiceRefs [(WebServiceRef {:name "fred" :type String}) 
                            (WebServiceRef {:name "ethel" :mappedName "lucy"})]} 
  Bar [^int a 
       ;on field
       ^{:tag int
          Deprecated true 
          Retention RetentionPolicy/RUNTIME 
          javax.annotation.processing.SupportedOptions ["foo" "bar" "baz"]
          javax.xml.ws.soap.Addressing {:enabled false :required true}
          WebServiceRefs [(WebServiceRef {:name "fred" :type String}) 
                          (WebServiceRef {:name "ethel" :mappedName "lucy"})]} 
       b]
  ;on method
  Foo (^{Deprecated true 
          Retention RetentionPolicy/RUNTIME 
          javax.annotation.processing.SupportedOptions ["foo" "bar" "baz"]
          javax.xml.ws.soap.Addressing {:enabled false :required true}
          WebServiceRefs [(WebServiceRef {:name "fred" :type String}) 
                          (WebServiceRef {:name "ethel" :mappedName "lucy"})]}
       foo [this] 42))

(seq (.getAnnotations Bar))
(seq (.getAnnotations (.getField Bar "b")))
(seq (.getAnnotations (.getMethod Bar "foo" nil)))