Groovy Intellij idea gdsl。将构造函数添加到类中。GDSL文档

Groovy Intellij idea gdsl。将构造函数添加到类中。GDSL文档,groovy,intellij-idea,dsl,Groovy,Intellij Idea,Dsl,我有一个注释,它向注释类添加了一些方法和默认构造函数。 我已经设法创建了一个gdsl,以便在idea for方法中启用自动完成功能,但我一直使用构造函数,而且文档非常糟糕 有没有人有什么想法,怎么做 也许我可以在现有的gdsl中找到一个解决方案,但我记不起任何与构造函数相关的转换。也许你能让我想起他们中的任何一个 def objectContext = context(ctype: "java.lang.Object") contributor(objectContext) { if (h

我有一个注释,它向注释类添加了一些方法和默认构造函数。 我已经设法创建了一个gdsl,以便在idea for方法中启用自动完成功能,但我一直使用构造函数,而且文档非常糟糕

有没有人有什么想法,怎么做

也许我可以在现有的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: [:]
  }
}
编辑:好的,如果它是@jasp所说的,并且没有用于声明构造函数的DSL构造,那么我仍然需要一个好的文档源,而不是JB的confluence页面。教程和其他来源。我熟悉groovy、grails和gradle的嵌入式dsl


需要smth。如果可能的话,更结构化。

GroovyDSL内部的所有函数调用都只是对内部IDEA的程序结构接口(PCI)包装器的调用。然而,它并没有涵盖PCI的所有功能,包括我相信的默认构造函数功能。这方面的一个证据是,它捆绑在9版本的IDEA中,描述了@Singleton AST转换。这是它的代码:

contributor(context()) {
  if (classType?.hasAnnotation("groovy.lang.Singleton")) {
    property name: "instance",
             type: classType?.getQualifiedName() ?: "java.lang.Object",
             isStatic: true
  }
}
正如您所见,IDEA不会改变构造函数及其可见性,因此IDEA将自动完成此无效代码:

@Singleton class Foo {}
def foo = new Foo()
而且(实际上是IDEA源代码的/plugins/groovy/resources/standardsls/metaDsl.gdsl的一部分)没有提供任何描述构造函数的能力


在本例中,我建议您使用newify转换,它允许您描述返回已创建实例的targetClass.name方法。

我知道这有点旧,但我发现自己正在寻找类似的方法

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

谢谢!我期望smth更多,但否定答案仍然是答案。是的,如果类没有声明任何构造函数…但在我的情况下不是,因为类可以有构造函数,默认的是通过注释添加一个构造函数。无论如何,谢谢你的回答!很好,这件事是可能的。啊,我明白了——很公平。至于文档,答案似乎是没有(),但我发现OpenAPI库本身()通常足够好(如果您的项目中有这个依赖项,那么您的GDSL文件中也会有相当不错的代码完成)。