show discovered tests action: search by methods fixed

This commit is contained in:
Dmitriy.Panov
2018-04-17 17:50:55 +03:00
parent d4937bc956
commit add3ecbb05
2 changed files with 45 additions and 2 deletions
@@ -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)
@@ -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<String> 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) {