如何在Intellij IDEA实时模板groovy脚本中将变量传递给groovy代码?

时间:2016-02-15 09:38:30

标签: intellij-idea groovy live-templates

我的groovyScript IDEA动态模板中有Intellij,如下所示:

groovyScript("D:/test.groovy","", v1)

在我的D:/test.groovy我有这样的代码:

if ( v1 == 'abc') {
    'abc'
}

现在我想将v1变量传递给test.groovy,任何人都可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:4)

为了举例说明,我制作了一个实时模板,用当前类和当前方法打印注释。

这就是我的实时模板的定义方式:

enter image description here

以下是我编辑 variableResolvedWithGroovyScript 变量的方法:

enter image description here

给定变量的表达式具有以下值:

groovyScript("return \"// Current Class:\" + _1 + \". Current Method:\"+ _2 ", className(),methodName())

正如您所看到的,在这种情况下,_1(其作用类似于groovy脚本中的变量)采用第一个参数的值,即类名,而_2采用的是 第二个参数是方法名称。如果需要另一个参数,_3将在groovy脚本中用于引用给定的参数。

答案 1 :(得分:2)

groovyScript宏的参数绑定到名为_1,_2等的脚本变量。这也在Edit Template Variables Dialog / Live Template Variables的groovyScript帮助中进行了描述。

答案 2 :(得分:0)

我找到了解决方法。

我需要使用实时模型来计算合格类名称的CRC32

我这样使用它:

groovyScript("   
def crc = new java.util.zip.CRC32().with { update _1.bytes; value }; 
return Long.toHexString(crc);  
", qualifiedClassName())

enter image description here

那么结果就是

enter image description here

答案 3 :(得分:0)

基于documentation,您的变量可以用_1_2等表示。请注意,变量传递时不带美元符号(因此只有 v1 而不是 $ v1 $

因此您的测试脚本应如下所示

if ( _2 == 'abc') {
    'abc'
}