diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunnerUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunnerUtil.java index 6b84350e7080..df2a2e873564 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunnerUtil.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/GradleRunnerUtil.java @@ -21,6 +21,7 @@ import com.intellij.execution.junit.JUnitUtil; import com.intellij.execution.junit2.PsiMemberParameterizedLocation; import com.intellij.execution.junit2.info.MethodLocation; import com.intellij.execution.process.ProcessHandler; +import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.ui.ConsoleView; import com.intellij.icons.AllIcons; import com.intellij.ide.util.PropertiesComponent; @@ -40,24 +41,25 @@ import com.intellij.openapi.fileEditor.OpenFileDescriptor; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; -import com.intellij.openapi.vfs.VirtualFileManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; -import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.testIntegration.TestLocator; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.gradle.execution.test.runner.GradleUrlProvider; import org.jetbrains.plugins.gradle.util.GradleBundle; import org.jetbrains.plugins.gradle.util.GradleConstants; import java.util.Iterator; import java.util.List; +import static com.intellij.util.io.URLUtil.SCHEME_SEPARATOR; + /** * @author Vladislav.Soroka * @since 12/4/2015 @@ -179,11 +181,14 @@ public class GradleRunnerUtil { return null; } + /** + * @deprecated to be removed in 2018.2 + */ @NotNull public static String getTestLocationUrl(@Nullable String testName, @NotNull String fqClassName) { return testName == null - ? String.format("%s://%s::%s", GradleUrlProvider.PROTOCOL_ID, GradleUrlProvider.CLASS_PREF, fqClassName) - : String.format("%s://%s::%s::%s", GradleUrlProvider.PROTOCOL_ID, GradleUrlProvider.METHOD_PREF, fqClassName, testName); + ? JavaTestLocator.TEST_PROTOCOL + SCHEME_SEPARATOR + fqClassName + : JavaTestLocator.TEST_PROTOCOL + SCHEME_SEPARATOR + StringUtil.getQualifiedName(fqClassName, testName); } public static Object getData(@NotNull Project project, @NonNls String dataId, @NotNull ExecutionInfo executionInfo) { @@ -245,15 +250,17 @@ public class GradleRunnerUtil { if (descriptor instanceof TestOperationDescriptor) { if (DumbService.isDumb(project)) return null; + String suiteName = ((TestOperationDescriptor)descriptor).getSuiteName(); + if (StringUtil.isNotEmpty(suiteName)) { + return TestLocator.getLocation(JavaTestLocator.SUITE_PROTOCOL + SCHEME_SEPARATOR + suiteName, project); + } + final String className = ((TestOperationDescriptor)descriptor).getClassName(); if (className == null) return null; final String methodName = ((TestOperationDescriptor)descriptor).getMethodName(); - final String testLocationUrl = VirtualFileManager.extractPath(getTestLocationUrl(methodName, className)); - - final List locations = GradleUrlProvider.INSTANCE.getLocation( - GradleUrlProvider.PROTOCOL_ID, testLocationUrl, project, GlobalSearchScope.allScope(project)); - return ContainerUtil.getFirstItem(locations); + return TestLocator.getLocation( + JavaTestLocator.TEST_PROTOCOL + SCHEME_SEPARATOR + StringUtil.getQualifiedName(className, methodName), project); } return getTaskLocation(project, executionInfo); } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleTestsExecutionConsole.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleTestsExecutionConsole.java index 15baddb4a2cc..6853b5d41bc4 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleTestsExecutionConsole.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleTestsExecutionConsole.java @@ -15,6 +15,7 @@ */ package org.jetbrains.plugins.gradle.execution.test.runner; +import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.testframework.TestConsoleProperties; import com.intellij.execution.testframework.sm.runner.SMTestLocator; import com.intellij.execution.testframework.sm.runner.SMTestProxy; @@ -51,6 +52,6 @@ public class GradleTestsExecutionConsole extends SMTRunnerConsoleView { } public SMTestLocator getUrlProvider() { - return GradleUrlProvider.INSTANCE; + return JavaTestLocator.INSTANCE; } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleUrlProvider.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleUrlProvider.java deleted file mode 100644 index fcfd36daf13c..000000000000 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/GradleUrlProvider.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.gradle.execution.test.runner; - -import com.intellij.execution.Location; -import com.intellij.execution.PsiLocation; -import com.intellij.execution.testframework.sm.runner.SMTestLocator; -import com.intellij.openapi.project.Project; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.search.GlobalSearchScope; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -/** - * @author Vladislav.Soroka - * @since 2/24/14 - */ -public class GradleUrlProvider implements SMTestLocator { - public static final String PROTOCOL_ID = "gradle"; - public static final String METHOD_PREF = "methodName"; - public static final String CLASS_PREF = "className"; - - public static final GradleUrlProvider INSTANCE = new GradleUrlProvider(); - - @NotNull - @Override - public List getLocation(@NotNull String protocol, @NotNull String path, @NotNull Project project, @NotNull GlobalSearchScope scope) { - if (!PROTOCOL_ID.equals(protocol)) return Collections.emptyList(); - - final String className = extractFullClassName(path); - if (className == null) return Collections.emptyList(); - final PsiClass testClass = - JavaPsiFacade.getInstance(project).findClass(className.replace('$', '.'), GlobalSearchScope.allScope(project)); - if (testClass == null) return Collections.emptyList(); - - final String methodName = extractMethodName(path); - if (methodName == null) { - return Collections.singletonList(new PsiLocation<>(project, testClass)); - } - - final PsiMethod[] methods = testClass.findMethodsByName(methodName, true); - final List list = new ArrayList<>(methods.length); - for (PsiMethod method : methods) { - list.add(new PsiLocation<>(project, method)); - } - return list; - } - - @Nullable - private static String extractFullClassName(String locationData) { - final int i = locationData.indexOf("::"); - final String pref = locationData.substring(0, i); - final String qualifiedName = locationData.substring(i + 2); - if (METHOD_PREF.equals(pref)) { - final int dot = qualifiedName.indexOf("::"); - return dot == -1 ? null : qualifiedName.substring(0, dot); - } - else if (CLASS_PREF.equals(pref)) { - return qualifiedName; - } - return null; - } - - @Nullable - private static String extractMethodName(String locationData) { - final int i = locationData.indexOf("::"); - final String pref = locationData.substring(0, i); - final String qualifiedName = locationData.substring(i + 2); - if (METHOD_PREF.equals(pref)) { - final int dot = qualifiedName.indexOf("::"); - return dot == -1 ? null : qualifiedName.substring(dot + 2); - } - return null; - } -} diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AbstractTestEvent.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AbstractTestEvent.java index 15c99a6a2405..6e7f57be2ba4 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AbstractTestEvent.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/AbstractTestEvent.java @@ -15,19 +15,22 @@ */ package org.jetbrains.plugins.gradle.execution.test.runner.events; +import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.testframework.sm.runner.SMTestProxy; import com.intellij.execution.testframework.sm.runner.ui.SMTestRunnerResultsForm; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.gradle.execution.GradleRunnerUtil; import org.jetbrains.plugins.gradle.execution.test.runner.GradleConsoleProperties; import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestsExecutionConsole; import java.nio.charset.StandardCharsets; import java.util.Base64; +import static com.intellij.util.io.URLUtil.SCHEME_SEPARATOR; + /** * @author Vladislav.Soroka * @since 2/28/14 @@ -57,7 +60,9 @@ public abstract class AbstractTestEvent implements TestEvent { @NotNull protected String findLocationUrl(@Nullable String name, @NotNull String fqClassName) { - return GradleRunnerUtil.getTestLocationUrl(name, fqClassName); + return name == null + ? JavaTestLocator.TEST_PROTOCOL + SCHEME_SEPARATOR + fqClassName + : JavaTestLocator.TEST_PROTOCOL + SCHEME_SEPARATOR + StringUtil.getQualifiedName(fqClassName, name); } protected void addToInvokeLater(final Runnable runnable) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/BeforeSuiteEvent.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/BeforeSuiteEvent.java index cd7fd6d4aeb2..00bf2646a686 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/BeforeSuiteEvent.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/events/BeforeSuiteEvent.java @@ -15,13 +15,17 @@ */ package org.jetbrains.plugins.gradle.execution.test.runner.events; +import com.intellij.execution.testframework.JavaTestLocator; import com.intellij.execution.testframework.sm.runner.SMTestProxy; import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.execution.test.runner.GradleConsoleProperties; import org.jetbrains.plugins.gradle.execution.test.runner.GradleSMTestProxy; import org.jetbrains.plugins.gradle.execution.test.runner.GradleTestsExecutionConsole; +import static com.intellij.util.io.URLUtil.SCHEME_SEPARATOR; + /** * @author Vladislav.Soroka * @since 2/28/14 @@ -57,6 +61,13 @@ public class BeforeSuiteEvent extends AbstractTestEvent { } } + @NotNull + protected String findLocationUrl(@Nullable String name, @NotNull String fqClassName) { + return name == null + ? JavaTestLocator.SUITE_PROTOCOL + SCHEME_SEPARATOR + fqClassName + : JavaTestLocator.SUITE_PROTOCOL + SCHEME_SEPARATOR + StringUtil.getQualifiedName(fqClassName, name); + } + private boolean isHiddenTestNode(String name, SMTestProxy parentTest) { return parentTest != null && !GradleConsoleProperties.SHOW_INTERNAL_TEST_NODES.value(getProperties()) &&