2014-10-04 3 views
4

주석이 달린 클래스에 몇 가지 메소드와 기본 생성자를 추가하는 주석이 있습니다. 메소드에 대한 아이디어에서 자동 완성을 사용하기 위해 gdsl을 만들었지 만 생성자가 붙어서 문서가 매우 열악합니다.Intellij 아이디어 gdsl. 클래스에 생성자를 추가하십시오. GDSL 문서

아무에게도 아이디어가 있습니까, 어떻게해야합니까?

아마도 기존의 gdsl에서 해결책을 찾을 수 있었지만 생성자와 관련된 변환을 기억할 수 없습니다. 어쩌면 당신은 그들 중 어떤 것을 생각 나게 할 수 있습니다.

def objectContext = context(ctype: "java.lang.Object") 

contributor(objectContext) { 
    if (hasAnnotation("com.xseagullx.SomeAnnotation")) { 
    // Here I want to add constructor's declaration(with empty arg's) 
    // … 
    // And then my methods. 
    method name: 'someMethod', type: 'void', params: [:] 
    } 
} 

편집 : OK라고 @jasp대로, 그리고 생성자를 선언, 나는 여전히 JB의 합류 페이지가 아닌 다른 좋은 문서 소스에 대한 부탁 해요 구성에는 DSL이없는 경우. 자습서 및 기타 소스. 나는 그루비, grails 및 gradle에 대한 dsl의에 익숙하다.

필요합니다. 가능하다면 더 구조화되어 있습니다.

답변

1

나는 이것이 약간 오래된 것을 알고 있지만 비슷한 것을 찾고있는 것을 발견했다.

내가 원하는 이유를 모르겠지만 찾고있는 DSL은 method params: [:], constructor: true입니다. 클래스가 생성자를 선언하지 않으면 IDEA는 항상 기본 생성자를 제안하지 않습니까?

+0

예, 클래스가 생성자를 선언하지 않으면 _ ...하지만 제 경우에는 클래스가 생성자를 가질 수 있으므로 기본 애노테이션으로 생성됩니다. 어쨌든, 답변 주셔서 감사합니다! 이 일이 가능하다는 것은 좋은 일입니다. – Seagull

+1

아, 알 겠어. 설명서에 관해서는, 그 대답은 존재하지 않는 것 같습니다 (http://stackoverflow.com/questions/3584883/where-is-the-jetbrains-intellij-openapi-documentation) OpenAPI 라이브러리 자체 (http://www.mvnrepository.com/artifact/com.intellij/openapi/7.0.3)는 일반적으로 충분합니다 (프로젝트에 의존성이 있다면 꽤 괜찮은 코드 완성을 얻을 수 있습니다 귀하의 GDSL 파일에). – Poundex

3

GroovyDSL 내부의 모든 함수 호출은 내부 IDEA의 프로그램 구조 인터페이스 (PCI)에 대한 래퍼 호출입니다. 그러나 필자가 생각하는 기본 생성자 기능을 포함하여 모든 PCI 기능을 포함하지는 않습니다. 그 하나의 증거 중 하나는 singletonTransform.gdsl이며 9 버전의 IDEA에 번들되어 @Singleton AST 변환을 설명합니다.

contributor(context()) { 
    if (classType?.hasAnnotation("groovy.lang.Singleton")) { 
    property name: "instance", 
      type: classType?.getQualifiedName() ?: "java.lang.Object", 
      isStatic: true 
    } 
} 

당신이 생성자를 변경하지 않습니다 볼 수 있으며 가시성이다함에 따라, IDEA이 유효하지 않은 코드를 자동으로 완성됩니다 :

@Singleton class Foo {} 
def foo = new Foo() 

Futhermore GDSL that describes the semantics of GroovyDSL을 (실제로 일부입니다 다음은이 코드의 IDEA 출처의 /plugins/groovy/resources/standardDsls/metaDsl.gdsl)는 생성자를 설명 할 수있는 기능을 제공하지 않습니다.

이 경우에는 생성 된 인스턴스를 반환하는 targetClass.name 메서드를 설명 할 수있는 newify 변환을 사용하는 것이 좋습니다.

+0

감사합니다. 나는 더 많은 것을 기대했지만 부정적 대답은 여전히 ​​답이다. – Seagull