2012-04-06 7 views
2

私はClojureで書いているBaseXJava interfaceのモジュールを持っています。このインタフェースは、メソッドが呼び出される方法と最適化される方法を決定するために使用できるいくつかのアノテーションを提供します。 QueryModule$RequiresQueryModule$Deterministic注釈が黙って破棄される -Clojure:AOTでコンパイルされたメソッドにアノテーションをアタッチする

(ns net.dyfis.svnkit_wrapper.SvnWrapper 
    (:import (org.basex.query QueryModule 
          QueryModule$Requires 
          QueryModule$Permission 
          QueryModule$Deterministic)) 
    (:gen-class 
    :main false 
    :extends org.basex.query.QueryModule 
    :methods [ 
     ^{:static true} 
     [^{QueryModule$Requires QueryModule$Permission/NONE, 
     Deprecated {}} 
     cat [java.lang.String] java.lang.String] 

     ^{:static true} 
     [^{QueryModule$Deterministic {}, 
     QueryModule$Requires QueryModule$Permission/NONE} 
     catRev [java.lang.String int] java.lang.String]])) 

しかし、唯一の非推奨注釈が添付されます::

>>> cat 
public static java.lang.String net.dyfis.svnkit_wrapper.SvnWrapper.cat(java.lang.String) 
>>> cat.getAnnotations() 
array(java.lang.annotation.Annotation,[@java.lang.Deprecated()]) 

しかし、私は、これらが実際に生成されたクラスにアタッチするのに問題を抱えていますこれはClojure 1.4.0-beta6で発生していますが、AOTでコンパイルされたメソッドの注釈のサポートはClojure 1.2から提供されるはずです。このように、これはおそらく使用エラーですが、どうすれば違うのでしょうか?

答えて

2

Deprecatedなど)のクラスを除き、すべてのクラス名はgen-class宣言で完全修飾されていなければなりません。だから、あなたのコードは次のようになります。

^{org.basex.query.QueryModule$Deterministic {}, 
    org.basex.query.QueryModule$Requires org.basex.query.QueryModule$Permission/NONE} 

同じ制限がdeftypeに/上の注釈メタデータには適用されないことに注意してください、defprotocol、またはdefrecordフォーム。

0

import sが適用することができns宣言のうちgen-class定義の移動:

(ns net.dyfis.svnkit_wrapper.SvnWrapper 
    (:import (org.basex.query QueryModule 
          QueryModule$Requires 
          QueryModule$Permission 
          QueryModule$Deterministic))) 

(gen-class 
    :name com.indeed.svnkit_wrapper.SvnWrapper 
    :main false 
    :extends org.basex.query.QueryModule 
    :methods [ 
    ^{:static true} 
    [^{QueryModule$Requires QueryModule$Permission/NONE, 
     Deprecated {}} 
    cat [java.lang.String] java.lang.String] 

    ^{:static true} 
    [^{QueryModule$Deterministic {}, 
     QueryModule$Requires QueryModule$Permission/NONE} 
    catRev [java.lang.String long] java.lang.String] 
    ]) 
関連する問題