Intellij想法gdsl。在类中添加构造函数。 GDSL的文档

时间:2014-10-04 23:06:25

标签: groovy intellij-idea dsl

我有一个注释,它将一些方法和默认构造函数添加到带注释的类中。 我已经设法创建了一个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: [:]
  }
}

EDITED:好的,如果它像@jasp所说,并且没有用于声明构造函数的DSL构造,我仍然需要一个好的文档源,而不是JB的汇合页面。教程和其他来源。我熟悉嵌入式 dsl用于groovy,grails和gradle。

需要smth。如果可能的话,更有条理。

2 个答案:

答案 0 :(得分: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来源的/plu​​gins/groovy/resources/standardDsls/metaDsl.gdsl的一部分)并没有提供任何描述构造函数的能力。

在这种情况下,我建议你使用newify transformation,它允许你描述返回创建实例的targetClass.name方法。

答案 1 :(得分:1)

我知道这有点老了,但我发现自己在寻找类似的东西。

您正在寻找的DSL是 method params: [:], constructor: true虽然我不明白你为什么需要它;如果一个类没有声明任何构造函数,那么IDEA总是会建议默认构造函数吗?