#groovy #pattern-matching #intellij-plugin #ofbiz
Вопрос:
Привет, ребята, я работаю над плагином ИДЕИ и пользовательскими ссылками. У меня работает много рекомендаций, но я застрял с одной сложной.
Я хотел бы обнаружить закономерности в groovy, такие как этот :
result = run service: 'createAgreementItem', with: createAgreementItemInMap
В приведенной выше строке я хотел бы, чтобы createAgreementItem
элемент соответствовал.
run
определяется в базовом скрипте groovy
package org.apache.ofbiz.service.engine
abstract class GroovyBaseScript extends Script {
//...
Map run(Map args) throws ExecutionServiceException {
return runService((String)args.get('service'), (Map)args.get('with', new HashMap()))
}
//...
Проблема в том, что то, что я пытаюсь получить, технически не является параметром, это значение из карты с ключом, равным service
.
Так что это не сработает :
GroovyPatterns.groovyLiteralExpression()
.methodCallParameter(0,
GroovyPatterns.psiMethod().withName("run")
.definedInClass("org.apache.ofbiz.service.engine.GroovyBaseScript"))
У вас есть какие-нибудь идеи или какая-нибудь помощь ? Заранее спасибо!
Ответ №1:
Проблема в том, что то, что я пытаюсь получить, технически не является параметром, это значение карты с ключом, равным «сервис».
Если все, что вы хотите сделать, это получить service
значение из Map
, то вместо args.get('with', new HashMap())
этого вы могли бы сделать args.with.service
. Если бы вы хотели нулевой безопасности, вы могли бы это сделать args?.with?.service
.
Комментарии:
1. Может быть, моя проблема была недостаточно ясна. Я не работаю над классным
run
методом DSL. Я работаю над ИДЕЕЙ заводного шаблона2. Извинения. Я думал, вы хотели знать, как извлечь значение из
Map
того, что связано сservice
ключом.3. Вообще никаких проблем, спасибо за ответ в любом случае 😀