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
с определениями типов.