From add3ecbb055289a6f9f80933d6fdda3ea20be260 Mon Sep 17 00:00:00 2001 From: "Dmitriy.Panov" Date: Tue, 17 Apr 2018 17:48:05 +0300 Subject: [PATCH] show discovered tests action: search by methods fixed --- .../IntellijTestDiscoveryProducer.java | 2 +- .../actions/ShowDiscoveredTestsAction.java | 45 ++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/IntellijTestDiscoveryProducer.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/IntellijTestDiscoveryProducer.java index 14fb778d501a..c1c0c8baabb7 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/IntellijTestDiscoveryProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/IntellijTestDiscoveryProducer.java @@ -32,7 +32,7 @@ public class IntellijTestDiscoveryProducer implements TestDiscoveryProducer { return MultiMap.emptyInstance(); } String methodFqn = classFQName + "." + methodName; - String url = INTELLIJ_TEST_DISCOVERY_HOST + "/search/tests/by-method/" + methodFqn; + String url = INTELLIJ_TEST_DISCOVERY_HOST + "/search/tests/by-method?fqn=" + methodFqn; LOG.debug(url); RequestBuilder r = HttpRequests.request(url) diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java index c93dd295c52e..73969ac7dca9 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/actions/ShowDiscoveredTestsAction.java @@ -19,6 +19,7 @@ import com.intellij.find.actions.CompositeActiveComponent; import com.intellij.icons.AllIcons; import com.intellij.ide.DataManager; import com.intellij.lang.Language; +import com.intellij.lang.jvm.JvmParameter; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.impl.ActionButton; @@ -43,6 +44,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.ClassUtil; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtilCore; +import com.intellij.rt.coverage.testDiscovery.instrumentation.TestDiscoveryInstrumentationUtils; import com.intellij.uast.UastMetaLanguage; import com.intellij.ui.ActiveComponent; import com.intellij.usages.UsageView; @@ -67,6 +69,7 @@ import java.awt.event.ActionEvent; import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; import static com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR; @@ -308,7 +311,47 @@ public class ShowDiscoveredTestsAction extends AnAction { private static Couple getMethodQualifiedName(@NotNull PsiMethod method) { PsiClass c = method.getContainingClass(); String fqn = c != null ? getName(c) : null; - return fqn == null ? null : Couple.of(fqn, method.getName()); + return fqn == null ? null : Couple.of(fqn, methodSignature(method)); + } + + @NotNull + private static String methodSignature(@NotNull PsiMethod method) { + StringBuilder signature = new StringBuilder(method.getName()); + signature.append(TestDiscoveryInstrumentationUtils.SEPARATOR); + signature.append("("); + for (JvmParameter param : method.getParameters()) { + formatType(signature, (PsiType)param.getType()); + } + signature.append(")"); + if (method.getReturnType() == null || "void".equals(method.getReturnType().getCanonicalText())) { + signature.append("V"); + } + else { + formatType(signature, method.getReturnType()); + } + return signature.toString(); + } + + private static void formatType(StringBuilder signature, PsiType type) { + signature.append("L"); + String typeName = type.getCanonicalText(); + if (type instanceof PsiClassType) { + PsiClass psiClass = ((PsiClassType)type).resolve(); + if (psiClass instanceof PsiTypeParameter) { + // type parameter + typeName = Optional.ofNullable(psiClass.getSuperClass()) + .map(PsiClass::getQualifiedName) + .orElse(typeName); + } + else if (((PsiClassType)type).hasParameters()) { + // parametrized type + typeName = Optional.ofNullable(psiClass) + .map(PsiClass::getQualifiedName) + .orElse(typeName); + } + } + signature.append(typeName.replace(".", "/")); + signature.append(";"); } private static String getName(PsiClass c) {