mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
merge show discovered tests action
This commit is contained in:
+63
-2
@@ -1,6 +1,7 @@
|
||||
// Copyright 2000-2018 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 com.intellij.execution.testDiscovery.actions;
|
||||
|
||||
import com.intellij.codeInsight.actions.FormatChangedTextUtil;
|
||||
import com.intellij.execution.ExecutionException;
|
||||
import com.intellij.execution.Executor;
|
||||
import com.intellij.execution.JavaTestConfigurationBase;
|
||||
@@ -17,12 +18,15 @@ import com.intellij.find.FindUtil;
|
||||
import com.intellij.find.actions.CompositeActiveComponent;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButton;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.keymap.KeymapUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -32,10 +36,14 @@ import com.intellij.openapi.util.Couple;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vcs.VcsDataKeys;
|
||||
import com.intellij.openapi.vcs.changes.Change;
|
||||
import com.intellij.psi.*;
|
||||
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.uast.UastMetaLanguage;
|
||||
import com.intellij.ui.ActiveComponent;
|
||||
import com.intellij.usages.UsageView;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
@@ -47,14 +55,18 @@ import com.intellij.util.ui.tree.TreeModelAdapter;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.uast.UFile;
|
||||
import org.jetbrains.uast.UMethod;
|
||||
import org.jetbrains.uast.UastContextKt;
|
||||
import org.jetbrains.uast.visitor.AbstractUastVisitor;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.TreeModelEvent;
|
||||
import javax.swing.tree.TreeModel;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR;
|
||||
@@ -65,7 +77,10 @@ public class ShowDiscoveredTestsAction extends AnAction {
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
e.getPresentation().setEnabledAndVisible(isEnabledForProject(e) && findMethodAtCaret(e) != null);
|
||||
e.getPresentation().setEnabledAndVisible(
|
||||
isEnabledForProject(e) &&
|
||||
(findMethodAtCaret(e) != null || e.getData(VcsDataKeys.CHANGES) != null)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -74,8 +89,16 @@ public class ShowDiscoveredTestsAction extends AnAction {
|
||||
assert project != null;
|
||||
|
||||
PsiMethod method = findMethodAtCaret(e);
|
||||
assert method != null;
|
||||
|
||||
if (method != null) {
|
||||
showDiscoveredTestsByPsi(e, project, method);
|
||||
}
|
||||
else {
|
||||
showDiscoveredTestsByChanges(e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void showDiscoveredTestsByPsi(AnActionEvent e, Project project, PsiMethod method) {
|
||||
Couple<String> couple = getMethodQualifiedName(method);
|
||||
PsiClass c = method.getContainingClass();
|
||||
String fqn = couple != null ? couple.first : null;
|
||||
@@ -88,6 +111,44 @@ public class ShowDiscoveredTestsAction extends AnAction {
|
||||
showDiscoveredTests(project, dataContext, methodPresentationName, method);
|
||||
}
|
||||
|
||||
private static void showDiscoveredTestsByChanges(AnActionEvent e) {
|
||||
Change[] changes = e.getRequiredData(VcsDataKeys.CHANGES);
|
||||
Project project = e.getProject();
|
||||
assert project != null;
|
||||
UastMetaLanguage jvmLanguage = Language.findInstance(UastMetaLanguage.class);
|
||||
|
||||
List<PsiElement> methods = FormatChangedTextUtil.getInstance().getChangedElements(project, changes, file -> {
|
||||
PsiFile psiFile = PsiUtilCore.getPsiFile(project, file);
|
||||
if (!jvmLanguage.matchesLanguage(psiFile.getLanguage())) {
|
||||
return null;
|
||||
}
|
||||
Document document = FileDocumentManager.getInstance().getDocument(file);
|
||||
if (document == null) return null;
|
||||
UFile uFile = UastContextKt.toUElement(psiFile, UFile.class);
|
||||
if (uFile == null) return null;
|
||||
|
||||
PsiDocumentManager.getInstance(project).commitDocument(document);
|
||||
List<PsiElement> physicalMethods = new ArrayList<>();
|
||||
uFile.accept(new AbstractUastVisitor() {
|
||||
@Override
|
||||
public boolean visitMethod(@NotNull UMethod node) {
|
||||
physicalMethods.add(node.getSourcePsi());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
return physicalMethods;
|
||||
});
|
||||
|
||||
PsiMethod[] asJavaMethods = methods
|
||||
.stream()
|
||||
.map(m -> ObjectUtils.tryCast(Objects.requireNonNull(UastContextKt.toUElement(m)).getJavaPsi(), PsiMethod.class))
|
||||
.filter(Objects::nonNull)
|
||||
.toArray(PsiMethod.ARRAY_FACTORY::create);
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed("test.discovery.selected.changes");
|
||||
showDiscoveredTests(project, e.getDataContext(), "Selected Changes", asJavaMethods);
|
||||
}
|
||||
|
||||
static boolean isEnabledForProject(AnActionEvent e) {
|
||||
return (Registry.is(TestDiscoveryExtension.TEST_DISCOVERY_REGISTRY_KEY) || ApplicationManager.getApplication().isInternal()) && e.getProject() != null;
|
||||
}
|
||||
|
||||
-77
@@ -1,77 +0,0 @@
|
||||
// Copyright 2000-2018 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 com.intellij.execution.testDiscovery.actions;
|
||||
|
||||
import com.intellij.codeInsight.actions.FormatChangedTextUtil;
|
||||
import com.intellij.featureStatistics.FeatureUsageTracker;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.fileEditor.FileDocumentManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vcs.VcsDataKeys;
|
||||
import com.intellij.openapi.vcs.changes.Change;
|
||||
import com.intellij.psi.PsiDocumentManager;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.uast.UastMetaLanguage;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.uast.UFile;
|
||||
import org.jetbrains.uast.UMethod;
|
||||
import org.jetbrains.uast.UastContextKt;
|
||||
import org.jetbrains.uast.visitor.AbstractUastVisitor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
public class ShowDiscoveredTestsFromChangesAction extends AnAction {
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
e.getPresentation().setEnabledAndVisible(ShowDiscoveredTestsAction.isEnabledForProject(e) && e.getData(VcsDataKeys.CHANGES) != null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
Change[] changes = e.getRequiredData(VcsDataKeys.CHANGES);
|
||||
Project project = e.getProject();
|
||||
assert project != null;
|
||||
UastMetaLanguage jvmLanguage = Language.findInstance(UastMetaLanguage.class);
|
||||
|
||||
|
||||
List<PsiElement> methods = FormatChangedTextUtil.getInstance().getChangedElements(project, changes, file -> {
|
||||
PsiFile psiFile = PsiUtilCore.getPsiFile(project, file);
|
||||
if (!jvmLanguage.matchesLanguage(psiFile.getLanguage())) {
|
||||
return null;
|
||||
}
|
||||
Document document = FileDocumentManager.getInstance().getDocument(file);
|
||||
if (document == null) return null;
|
||||
UFile uFile = UastContextKt.toUElement(psiFile, UFile.class);
|
||||
if (uFile == null) return null;
|
||||
|
||||
|
||||
PsiDocumentManager.getInstance(project).commitDocument(document);
|
||||
List<PsiElement> physicalMethods = new ArrayList<>();
|
||||
uFile.accept(new AbstractUastVisitor() {
|
||||
@Override
|
||||
public boolean visitMethod(@NotNull UMethod node) {
|
||||
physicalMethods.add(node.getSourcePsi());
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
return physicalMethods;
|
||||
});
|
||||
|
||||
PsiMethod[] asJavaMethods = methods
|
||||
.stream()
|
||||
.map(m -> ObjectUtils.tryCast(Objects.requireNonNull(UastContextKt.toUElement(m)).getJavaPsi(), PsiMethod.class))
|
||||
.filter(Objects::nonNull)
|
||||
.toArray(PsiMethod.ARRAY_FACTORY::create);
|
||||
FeatureUsageTracker.getInstance().triggerFeatureUsed("test.discovery.selected.changes");
|
||||
ShowDiscoveredTestsAction.showDiscoveredTests(project, e.getDataContext(), "Selected Changes", asJavaMethods);
|
||||
}
|
||||
}
|
||||
@@ -403,8 +403,6 @@
|
||||
|
||||
<action class="com.intellij.execution.testDiscovery.actions.ShowDiscoveredTestsAction" id="ShowDiscoveredTests" text="Show Discovered Tests">
|
||||
<add-to-group group-id="RunMenu" anchor="before" relative-to-action="DebugMainMenu"/>
|
||||
</action>
|
||||
<action class="com.intellij.execution.testDiscovery.actions.ShowDiscoveredTestsFromChangesAction" id="ShowDiscoveredTestsFromChangeList" text="Show Discovered Tests">
|
||||
<add-to-group group-id="ChangesViewPopupMenu" anchor="last"/>
|
||||
</action>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user