2012-04-06 2 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

java.lang (Deprecated과 같은) 클래스를 제외하고 모든 클래스 이름은 gen-class 선언으로 정규화되어야합니다. 그래서, 당신의 코드가되어야합니다 : 같은 제한이 deftype, defprotocol, 또는 defrecord 형태로 /에 주석 메타 데이터에 적용되지 않습니다

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

참고.

0

import의 적용이 허용하는 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] 
    ]) 
관련 문제