From cef67ce301d4f31f4c9e119cdad690e2ec04818b Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 20 Dec 2009 21:22:52 +0000 Subject: [PATCH] [Ken Sipe] gradle: context run for 'task'-property-based task definitions --- .../groovy/gradle/GradleScriptType.java | 41 +++++++++++++++++-- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/gradle/GradleScriptType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/gradle/GradleScriptType.java index de7cd8b904c3..5016ccab5373 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/gradle/GradleScriptType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/gradle/GradleScriptType.java @@ -41,9 +41,12 @@ import org.jetbrains.plugins.groovy.config.GroovyConfigUtils; import org.jetbrains.plugins.groovy.extensions.GroovyScriptType; import org.jetbrains.plugins.groovy.gant.GantUtils; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrApplicationStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression; +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.arithmetic.GrShiftExpressionImpl; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; import org.jetbrains.plugins.groovy.runner.GroovyScriptRunConfiguration; import org.jetbrains.plugins.groovy.runner.GroovyScriptRunner; @@ -80,10 +83,9 @@ public class GradleScriptType extends GroovyScriptType { pp = pp.getParent(); parent = parent.getParent(); } - if (pp != null && parent instanceof GrMethodCallExpression && PsiUtil.isMethodCall((GrMethodCallExpression)parent, "createTask")) { - final GrExpression[] arguments = ((GrMethodCallExpression)parent).getArgumentList().getExpressionArguments(); - if (arguments.length > 0 && arguments[0] instanceof GrLiteral && ((GrLiteral)arguments[0]).getValue() instanceof String) { - String target = (String)((GrLiteral)arguments[0]).getValue(); + if (pp != null) { + String target = getTaskTarget(parent); + if (target != null) { configuration.scriptParams = target; configuration.setName(configuration.getName() + "." + target); } @@ -95,6 +97,37 @@ public class GradleScriptType extends GroovyScriptType { } } + private String getTaskTarget(PsiElement parent) { + String target = null; + if (isCreateTaskMethod(parent)) { + final GrExpression[] arguments = ((GrMethodCallExpression)parent).getArgumentList().getExpressionArguments(); + if (arguments.length > 0 && arguments[0] instanceof GrLiteral && ((GrLiteral)arguments[0]).getValue() instanceof String) { + target = (String)((GrLiteral)arguments[0]).getValue(); + } + } + else if (parent instanceof GrApplicationStatement) { + PsiElement shiftExpression = parent.getChildren()[1].getChildren()[0]; + if (shiftExpression instanceof GrShiftExpressionImpl) { + PsiElement shiftiesChild = shiftExpression.getChildren()[0]; + if (shiftiesChild instanceof GrReferenceExpression) { + target = shiftiesChild.getText(); + } + else if (shiftiesChild instanceof GrMethodCallExpression) { + target = shiftiesChild.getChildren()[0].getText(); + } + } + else if (shiftExpression instanceof GrMethodCallExpression) { + target = shiftExpression.getChildren()[0].getText(); + } + } + + return target; + } + + private boolean isCreateTaskMethod(PsiElement parent) { + return parent instanceof GrMethodCallExpression && PsiUtil.isMethodCall((GrMethodCallExpression)parent, "createTask"); + } + @Override public GroovyScriptRunner getRunner() { return new GroovyScriptRunner() {