[groovy] add and use separate GrLightMethodBuilder#addAndGetOptionalParameter method

This commit is contained in:
Daniil Ovchinnikov
2018-11-20 15:08:57 +03:00
parent 8f81c8a8e4
commit eed4955809
9 changed files with 23 additions and 18 deletions
@@ -140,7 +140,7 @@ class GradleExtensionsContributor : GradleMethodContextContributor {
if (parent is GrMethodCallExpressionImpl && parent.argumentList.namedArguments.isNotEmpty()) {
addOptionalParameter("args", JAVA_UTIL_MAP)
}
val closureParam = addAndGetParameter("configuration", GROOVY_LANG_CLOSURE, true)
val closureParam = addAndGetOptionalParameter("configuration", GROOVY_LANG_CLOSURE)
closureParam.putUserData(DELEGATES_TO_KEY, gradleTask.typeFqn)
closureParam.putUserData(DELEGATES_TO_STRATEGY_KEY, Closure.OWNER_FIRST)
}
@@ -48,7 +48,7 @@ class GradleIdeaSettingsContributor : GradleMethodContextContributor {
val projectSettingsMethodBuilder = GrLightMethodBuilder(place.manager, "settings").apply {
containingClass = ideaProjectClass
returnType = projectSettingsType
addAndGetParameter("configuration", GroovyCommonClassNames.GROOVY_LANG_CLOSURE, false).apply {
addAndGetParameter("configuration", GroovyCommonClassNames.GROOVY_LANG_CLOSURE).apply {
putUserData(DELEGATES_TO_KEY, PROJECT_SETTINGS_FQN)
putUserData(DELEGATES_TO_STRATEGY_KEY, Closure.DELEGATE_FIRST)
}
@@ -65,7 +65,7 @@ class GradleIdeaSettingsContributor : GradleMethodContextContributor {
val moduleSettingsMethodBuilder = GrLightMethodBuilder(place.manager, "settings").apply {
containingClass = ideaModuleClass
returnType = moduleSettingsType
addAndGetParameter("configuration", GroovyCommonClassNames.GROOVY_LANG_CLOSURE, false).apply {
addAndGetParameter("configuration", GroovyCommonClassNames.GROOVY_LANG_CLOSURE).apply {
putUserData(DELEGATES_TO_KEY, MODULE_SETTINGS_FQN)
putUserData(DELEGATES_TO_STRATEGY_KEY, Closure.DELEGATE_FIRST)
}
@@ -91,7 +91,7 @@ class GradleMiscContributor : GradleMethodContextContributor {
containingClass = pluginsDependenciesClass
returnType = returnClass
}
methodBuilder.addAndGetParameter("configuration", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, pluginDependenciesSpecFqn)
methodBuilder.addAndGetParameter("configuration", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, pluginDependenciesSpecFqn)
place.putUserData(RESOLVED_CODE, true)
if (!processor.execute(methodBuilder, state)) return false
}
@@ -142,7 +142,7 @@ class GradleNonCodeMembersContributor : NonCodeMembersContributor() {
val wrappedBase = GrLightMethodBuilder(place.manager, propCandidate).apply {
returnType = domainObjectType
containingClass = aClass
val closureParam = addAndGetParameter("configuration", GROOVY_LANG_CLOSURE, true)
val closureParam = addAndGetOptionalParameter("configuration", GROOVY_LANG_CLOSURE)
closureParam.putUserData(DELEGATES_TO_KEY, domainObjectFqn)
closureParam.putUserData(DELEGATES_TO_STRATEGY_KEY, Closure.DELEGATE_FIRST)
@@ -41,7 +41,7 @@ public class JsonBuilderContributor extends BuilderMethodsContributor {
// (Closure)
method = createMethod(name, clazz, place);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
if (!processor.process(method)) return false;
// (Map)
@@ -52,19 +52,19 @@ public class JsonBuilderContributor extends BuilderMethodsContributor {
// (Map, Closure)
method = createMethod(name, clazz, place);
method.addParameter("map", JAVA_UTIL_MAP);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
if (!processor.process(method)) return false;
// (Iterable, Closure)
method = createMethod(name, clazz, place);
method.addParameter("value", TypesUtil.createIterableType(place, null));
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
if (!processor.process(method)) return false;
// (Object[], Closure)
method = createMethod(name, clazz, place);
method.addParameter("value", TypesUtil.getJavaLangObject(place).createArrayType());
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
return processor.process(method);
}
@@ -48,7 +48,7 @@ public class JsonDelegateContributor extends BuilderMethodsContributor {
method = createMethod(name, clazz, place);
genericType = facade.getElementFactory().createType(method.addTypeParameter("T"));
method.addParameter("values", genericType.createArrayType());
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.setReturnType(TypesUtil.createListType(place, genericType));
if (!processor.process(method)) return false;
@@ -56,7 +56,7 @@ public class JsonDelegateContributor extends BuilderMethodsContributor {
method = createMethod(name, clazz, place);
genericType = facade.getElementFactory().createType(method.addTypeParameter("T"));
method.addParameter("values", TypesUtil.createIterableType(place, genericType));
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.addAndGetParameter("c", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, DELEGATE_FQN);
method.setReturnType(TypesUtil.createListType(place, genericType));
if (!processor.process(method)) return false;
@@ -39,19 +39,19 @@ public class XmlMarkupBuilderNonCodeMemberContributor extends BuilderMethodsCont
// (Closure)
res = createMethod(name, clazz, place);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, FQN);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, FQN);
if (!processor.process(res)) return false;
// (Object, Closure)
res = createMethod(name, clazz, place);
res.addParameter("value", JAVA_LANG_OBJECT);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, FQN);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, FQN);
if (!processor.process(res)) return false;
// (Map, Closure)
res = createMethod(name, clazz, place);
res.addParameter("attributes", JAVA_UTIL_MAP);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE, false).putUserData(DELEGATES_TO_KEY, FQN);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, FQN);
if (!processor.process(res)) return false;
// (Map)
@@ -60,7 +60,7 @@ public class XmlMarkupBuilderNonCodeMemberContributor extends BuilderMethodsCont
res = createMethod(name, clazz, place);
res.addParameter("attributes", JAVA_UTIL_MAP);
res.addOptionalParameter("value", JAVA_LANG_OBJECT);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE, true).putUserData(DELEGATES_TO_KEY, FQN);
res.addAndGetOptionalParameter("body", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, FQN);
for (GrReflectedMethod method : res.getReflectedMethods()) {
if (!processor.process(method)) return false;
}
@@ -71,7 +71,7 @@ public class XmlMarkupBuilderNonCodeMemberContributor extends BuilderMethodsCont
res = createMethod(name, clazz, place);
res.addParameter("value", JAVA_LANG_OBJECT);
res.addOptionalParameter("attributes", JAVA_UTIL_MAP);
res.addAndGetParameter("body", GROOVY_LANG_CLOSURE, true).putUserData(DELEGATES_TO_KEY, FQN);
res.addAndGetOptionalParameter("body", GROOVY_LANG_CLOSURE).putUserData(DELEGATES_TO_KEY, FQN);
for (GrReflectedMethod method : res.getReflectedMethods()) {
if (!processor.process(method)) return false;
}
@@ -275,7 +275,12 @@ public class GrLightMethodBuilder extends LightElement implements GrMethod, Orig
}
@NotNull
public GrLightParameter addAndGetParameter(@NotNull String name, @NotNull String type, boolean isOptional) {
public GrLightParameter addAndGetOptionalParameter(@NotNull String name, @NotNull String type) {
return addAndGetParameter(name, type, true);
}
@NotNull
private GrLightParameter addAndGetParameter(@NotNull String name, @NotNull String type, boolean isOptional) {
return addAndGetParameter(name, JavaPsiFacade.getElementFactory(getProject()).createTypeFromText(type, this), isOptional);
}
@@ -107,7 +107,7 @@ class LogbackDelegateMemberContributor : NonCodeMembersContributor() {
// (clazz, configuration)
wrappedBase.copy().apply {
addParameter("clazz", classType)
addAndGetParameter("configuration", GROOVY_LANG_CLOSURE, true).apply {
addAndGetOptionalParameter("configuration", GROOVY_LANG_CLOSURE).apply {
putUserData(DELEGATES_TO_KEY, componentDelegateFqn)
putUserData(DELEGATES_TO_STRATEGY_KEY, DELEGATE_FIRST)
}