IntelliJ GSDL: определение метода с необязательными аргументами

У меня есть разделяемая библиотека Jenkins, которая задает глобальную переменную foo который обеспечивает два метода. Один из них не имеет аргумента, другой имеет один необязательный аргумент:

/vars/foo.groovy

def getBarOne() {
    //...
}

def getBarTwo(String value = '') {
    //...
}

Теперь я хочу предоставить файл IntellJ GSDL, который поддерживает полезное завершение кода для обоих этих методов. (GSDL, предоставленный моим Jenkins, содержит только определение для глобальной переменной, но не для ее методов, поэтому я пытаюсь добавить это.)

pipe.gsdl (автор Дженкинс)

//The global script scope
def ctx = context(scope: scriptScope())
contributor(ctx) {
//...
property(name: 'foo', type: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable')
}
//..

pipe.gsdl (прокаченный мной)

//The global script scope
def ctx = context(scope: scriptScope())
contributor(ctx) {
//...
property(name: 'foo', type: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable')
}
def uservarCtx = context(ctype: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable')
contributor (uservarCtx) {
    method name: 'getBarOne', type: 'java.lang.String', params: [:]
    method name: 'getBarTwo', params: [value:'java.lang.String'], type: 'List<String>'
}
//..

Все идет нормально.
Тем не менее, завершение кода в моем Jenkinsfile не является полностью удовлетворительным, как это предполагает

За getBarOne() это предполагает оба .barOne а также .getBarOne(); за getBarTwo(..) только .getBarTwo(String value) предлагается, хотя аргумент не является обязательным.

Как я могу указать в файле GDSL, что аргумент является необязательным, так что мне предложили все три (допустимые groovy) опции: barTwo, getBarTwo() а также getBarTwo(String value)? (К сожалению, серия "GDSL AWESOMENESS" не помогла.)

1 ответ

Чтобы были предоставлены все три параметра, необходимо указать две сигнатуры метода в файле GDSL. Один с (необязательным) аргументом, один без него:

pipeline.gdsl

//...
def uservarCtx = context(ctype: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable')
contributor (uservarCtx) {
    method name: 'getBarOne', type: 'java.lang.String', params: [:]
    method name: 'getBarTwo', params: [:], type: 'List<String>'     //<---
    method name: 'getBarTwo', params: [value:'java.lang.String'], type: 'List<String>'
}

автозаполнение предложений:

Бонус-трек: несколько глобальных переменных

Поскольку у меня есть не только одна глобальная переменная, но и две, я также хотел иметь автозаполнение для ее поддержки.

Хитрость заключается в том, чтобы задать различные типы для ваших глобальных переменных:

pipeline.gsdl

//The global script scope
def ctx = context(scope: scriptScope())
contributor(ctx) {
//...
property(name: 'foo', type: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable.Foo')
property(name: 'bar', type: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable.Bar')
}
def varCtxFoo = context(ctype: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable.Foo')
contributor (varCtxFoo) {
    //...
}
def varCtxBar = context(ctype: 'org.jenkinsci.plugins.workflow.cps.global.UserDefinedGlobalVariable.Bar')
contributor (varCtxBar) {
    //...
}
//..

Обратите внимание .Foo а также .Bar суффикс к типу UserDefinedGlobalVariable с определениями типов.

Другие вопросы по тегам