【问题标题】:Intellij idea gdsl. Add constructor to the class. Documentation for GDSLIntellij 想法 gdsl。将构造函数添加到类。 GDSL 文档
【发布时间】:2014-10-04 23:06:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: groovy intellij-idea dsl


    【解决方案1】:

    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()
    

    此外,GDSL that describes the semantics of GroovyDSL(实际上是 IDEA 源的 /plugins/groovy/resources/standardDsls/metaDsl.gdsl 的一部分)不提供任何描述构造函数的能力。

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

    【讨论】:

    • 谢谢!我期待更多,但否定的答案仍然是一个答案。
    【解决方案2】:

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

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

    【讨论】:

    • 是的,如果类没有声明任何构造函数...但在我的情况下不是,因为类可以有构造函数,默认一个是通过注释添加的。无论如何,谢谢你的回答!很好,这件事是可能的。
    • 啊,我明白了 - 很公平。至于文档,答案似乎是没有(stackoverflow.com/questions/3584883/…),但我发现 OpenAPI 库本身(mvnrepository.com/artifact/com.intellij/openapi/7.0.3)通常足够好(如果您在项目中将此作为依赖项,您还将在 GDSL 文件中获得相当不错的代码完成)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多