diff --git a/plugins/gradle/java/src/execution/GradleGroovyRunLineMarkerProvider.java b/plugins/gradle/java/src/execution/GradleGroovyRunLineMarkerProvider.java index d8fc860946d7..38323155f048 100644 --- a/plugins/gradle/java/src/execution/GradleGroovyRunLineMarkerProvider.java +++ b/plugins/gradle/java/src/execution/GradleGroovyRunLineMarkerProvider.java @@ -30,7 +30,7 @@ public class GradleGroovyRunLineMarkerProvider extends RunLineMarkerContributor if (isFromGroovyGradleScript(element)) { if (element instanceof LeafElement && !(element instanceof PsiWhiteSpace) && !(element instanceof PsiComment) && element.getParent() instanceof GrReferenceExpression && element.getParent().getParent() instanceof GrMethodCallExpression) { - List tasks = GradleRunnerUtil.getTasksTarget(element); + List tasks = GradleGroovyRunnerUtil.getTasksTarget(element); if (!tasks.isEmpty() && tasks.contains(element.getText().trim())) { final AnAction[] actions = ExecutorAction.getActions(); return new Info(AllIcons.RunConfigurations.TestState.Run, actions, diff --git a/plugins/gradle/java/src/execution/GradleGroovyRunnerUtil.java b/plugins/gradle/java/src/execution/GradleGroovyRunnerUtil.java new file mode 100644 index 000000000000..0071614a23ea --- /dev/null +++ b/plugins/gradle/java/src/execution/GradleGroovyRunnerUtil.java @@ -0,0 +1,105 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.gradle.execution; + +import com.intellij.execution.Location; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.gradle.service.resolve.GradleResolverUtil; +import org.jetbrains.plugins.gradle.settings.GradleExtensionsSettings; +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.util.PsiUtil; + +import java.util.Collections; +import java.util.List; + +public class GradleGroovyRunnerUtil { + @NotNull + public static List getTasksTarget(@NotNull PsiElement element, @Nullable Module module) { + PsiElement parent = element; + while (parent.getParent() != null && !(parent.getParent() instanceof PsiFile)) { + parent = parent.getParent(); + } + + if (isCreateTaskMethod(parent)) { + final GrExpression[] arguments = ((GrMethodCallExpression)parent).getExpressionArguments(); + if (arguments.length > 0 && arguments[0] instanceof GrLiteral && ((GrLiteral)arguments[0]).getValue() instanceof String) { + return Collections.singletonList((String)((GrLiteral)arguments[0]).getValue()); + } + } + else if (parent instanceof GrApplicationStatement) { + PsiElement shiftExpression = parent.getChildren()[1].getChildren()[0]; + if (GradleResolverUtil.isLShiftElement(shiftExpression)) { + PsiElement shiftiesChild = shiftExpression.getChildren()[0]; + if (shiftiesChild instanceof GrReferenceExpression) { + return Collections.singletonList(shiftiesChild.getText()); + } + else if (shiftiesChild instanceof GrMethodCallExpression) { + return Collections.singletonList(shiftiesChild.getChildren()[0].getText()); + } + } + else if (shiftExpression instanceof GrMethodCallExpression) { + return Collections.singletonList(shiftExpression.getChildren()[0].getText()); + } + } + GrMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(element, GrMethodCallExpression.class); + if (methodCallExpression != null) { + String taskNameCandidate = methodCallExpression.getChildren()[0].getText(); + Project project = element.getProject(); + if (module == null) { + module = getModule(element, project); + } + GradleExtensionsSettings.GradleExtensionsData extensionsData = GradleExtensionsSettings.getInstance(project).getExtensionsFor(module); + if (extensionsData != null) { + GradleExtensionsSettings.GradleTask gradleTask = extensionsData.tasksMap.get(taskNameCandidate); + if (gradleTask != null) { + return Collections.singletonList(taskNameCandidate); + } + } + } + + return Collections.emptyList(); + } + + @Nullable + private static Module getModule(@NotNull PsiElement element, @NotNull Project project) { + PsiFile containingFile = element.getContainingFile(); + if (containingFile != null) { + VirtualFile virtualFile = containingFile.getVirtualFile(); + if (virtualFile != null) { + return ProjectFileIndex.SERVICE.getInstance(project).getModuleForFile(virtualFile); + } + } + return null; + } + + private static boolean isCreateTaskMethod(PsiElement parent) { + return parent instanceof GrMethodCallExpression && PsiUtil.isMethodCall((GrMethodCallExpression)parent, "createTask"); + } + + @NotNull + public static List getTasksTarget(@Nullable Location location) { + if (location == null) return Collections.emptyList(); + if (location instanceof GradleTaskLocation) { + return ((GradleTaskLocation)location).getTasks(); + } + + Module module = location.getModule(); + return getTasksTarget(location.getPsiElement(), module); + } + + @NotNull + public static List getTasksTarget(@NotNull PsiElement element) { + return getTasksTarget(element, null); + } +} diff --git a/plugins/gradle/java/src/execution/GradleGroovyScriptRunConfigurationProducer.java b/plugins/gradle/java/src/execution/GradleGroovyScriptRunConfigurationProducer.java index 7c400e6efbcd..b7a5978e6522 100644 --- a/plugins/gradle/java/src/execution/GradleGroovyScriptRunConfigurationProducer.java +++ b/plugins/gradle/java/src/execution/GradleGroovyScriptRunConfigurationProducer.java @@ -19,7 +19,9 @@ import org.jetbrains.plugins.gradle.util.GradleConstants; import java.util.List; -import static org.jetbrains.plugins.gradle.execution.GradleRunnerUtil.*; +import static org.jetbrains.plugins.gradle.execution.GradleGroovyRunnerUtil.getTasksTarget; +import static org.jetbrains.plugins.gradle.execution.GradleRunnerUtil.isFromGroovyGradleScript; +import static org.jetbrains.plugins.gradle.execution.GradleRunnerUtil.resolveProjectPath; /** * @author Vladislav.Soroka diff --git a/plugins/gradle/java/src/execution/GradleRunnerUtil.java b/plugins/gradle/java/src/execution/GradleRunnerUtil.java index d0aab0b9eb10..7cb4b442bfd2 100644 --- a/plugins/gradle/java/src/execution/GradleRunnerUtil.java +++ b/plugins/gradle/java/src/execution/GradleRunnerUtil.java @@ -7,31 +7,19 @@ import com.intellij.execution.junit2.PsiMemberParameterizedLocation; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiMethod; -import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.model.data.BuildParticipant; -import org.jetbrains.plugins.gradle.service.resolve.GradleResolverUtil; import org.jetbrains.plugins.gradle.settings.CompositeDefinitionSource; -import org.jetbrains.plugins.gradle.settings.GradleExtensionsSettings; import org.jetbrains.plugins.gradle.settings.GradleProjectSettings; import org.jetbrains.plugins.gradle.settings.GradleSettings; import org.jetbrains.plugins.gradle.util.GradleConstants; -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.util.PsiUtil; -import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -102,84 +90,4 @@ public class GradleRunnerUtil { if (virtualFile == null) return false; return GradleConstants.EXTENSION.equals(virtualFile.getExtension()); } - - @NotNull - public static List getTasksTarget(@Nullable Location location) { - if (location == null) return Collections.emptyList(); - if (location instanceof GradleTaskLocation) { - return ((GradleTaskLocation)location).getTasks(); - } - - Module module = location.getModule(); - return getTasksTarget(location.getPsiElement(), module); - } - - @NotNull - public static List getTasksTarget(@NotNull PsiElement element, @Nullable Module module) { - PsiElement parent = element; - while (parent.getParent() != null && !(parent.getParent() instanceof PsiFile)) { - parent = parent.getParent(); - } - - if (isCreateTaskMethod(parent)) { - final GrExpression[] arguments = ((GrMethodCallExpression)parent).getExpressionArguments(); - if (arguments.length > 0 && arguments[0] instanceof GrLiteral && ((GrLiteral)arguments[0]).getValue() instanceof String) { - return Collections.singletonList((String)((GrLiteral)arguments[0]).getValue()); - } - } - else if (parent instanceof GrApplicationStatement) { - PsiElement shiftExpression = parent.getChildren()[1].getChildren()[0]; - if (GradleResolverUtil.isLShiftElement(shiftExpression)) { - PsiElement shiftiesChild = shiftExpression.getChildren()[0]; - if (shiftiesChild instanceof GrReferenceExpression) { - return Collections.singletonList(shiftiesChild.getText()); - } - else if (shiftiesChild instanceof GrMethodCallExpression) { - return Collections.singletonList(shiftiesChild.getChildren()[0].getText()); - } - } - else if (shiftExpression instanceof GrMethodCallExpression) { - return Collections.singletonList(shiftExpression.getChildren()[0].getText()); - } - } - GrMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(element, GrMethodCallExpression.class); - if (methodCallExpression != null) { - String taskNameCandidate = methodCallExpression.getChildren()[0].getText(); - Project project = element.getProject(); - if (module == null) { - module = getModule(element, project); - } - GradleExtensionsSettings.GradleExtensionsData extensionsData = GradleExtensionsSettings.getInstance(project).getExtensionsFor(module); - if (extensionsData != null) { - GradleExtensionsSettings.GradleTask gradleTask = extensionsData.tasksMap.get(taskNameCandidate); - if (gradleTask != null) { - return Collections.singletonList(taskNameCandidate); - } - } - } - - return Collections.emptyList(); - } - - @Nullable - private static Module getModule(@NotNull PsiElement element, @NotNull Project project) { - PsiFile containingFile = element.getContainingFile(); - if (containingFile != null) { - VirtualFile virtualFile = containingFile.getVirtualFile(); - if (virtualFile != null) { - return ProjectFileIndex.SERVICE.getInstance(project).getModuleForFile(virtualFile); - } - } - return null; - } - - @NotNull - public static List getTasksTarget(@NotNull PsiElement element) { - return getTasksTarget(element, null); - } - - - private static boolean isCreateTaskMethod(PsiElement parent) { - return parent instanceof GrMethodCallExpression && PsiUtil.isMethodCall((GrMethodCallExpression)parent, "createTask"); - } }