From f0c483658f67b8713e5ce39cc61058ae8ddd8e35 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 12 May 2015 16:48:33 +0200 Subject: [PATCH] refactoring listener: update coverage filters by package on test move in another package (IDEA-139703) --- .../execution/junit/RefactoringListeners.java | 17 ++++++++++++ ...CoverageJavaRunConfigurationExtension.java | 27 ++++++++++++++++--- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java b/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java index b832c3828cdc..5730b4d790ab 100644 --- a/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java +++ b/java/execution/impl/src/com/intellij/execution/junit/RefactoringListeners.java @@ -150,6 +150,23 @@ public class RefactoringListeners { return psiClass.getQualifiedName(); } } + + public static class RefactorPackageByClass extends RenameElement { + public RefactorPackageByClass(final Accessor accessor) { + super(accessor, "*"); + } + + public PsiClass findNewElement(final PsiClass psiClass, final String qualifiedName) { + return JavaPsiFacade.getInstance(psiClass.getProject()) + .findClass(qualifiedName.replace('$', '.').replace("\\*", psiClass.getName()), + GlobalSearchScope.moduleScope(JavaExecutionUtil.findModule(psiClass))); + } + + public String getQualifiedName(final PsiClass psiClass) { + final String qualifiedName = psiClass.getQualifiedName(); + return qualifiedName != null ? StringUtil.getPackageName(qualifiedName) : null; + } + } private static class ClassPackageAccessor implements RefactoringListeners.Accessor { private final PsiPackage myContainingPackage; diff --git a/plugins/coverage/src/com/intellij/execution/coverage/CoverageJavaRunConfigurationExtension.java b/plugins/coverage/src/com/intellij/execution/coverage/CoverageJavaRunConfigurationExtension.java index 332573623ab0..eb4fe13758e1 100644 --- a/plugins/coverage/src/com/intellij/execution/coverage/CoverageJavaRunConfigurationExtension.java +++ b/plugins/coverage/src/com/intellij/execution/coverage/CoverageJavaRunConfigurationExtension.java @@ -9,7 +9,10 @@ import com.intellij.coverage.listeners.CoverageListener; import com.intellij.execution.CommonJavaRunConfigurationParameters; import com.intellij.execution.Location; import com.intellij.execution.RunConfigurationExtension; -import com.intellij.execution.configurations.*; +import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.configurations.RunConfigurationBase; +import com.intellij.execution.configurations.RunnerSettings; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.configurations.coverage.CoverageConfigurable; import com.intellij.execution.configurations.coverage.CoverageEnabledConfiguration; import com.intellij.execution.configurations.coverage.JavaCoverageEnabledConfiguration; @@ -25,7 +28,11 @@ import com.intellij.openapi.projectRoots.JavaSdkVersion; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; -import com.intellij.psi.*; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.RefactoringElementListenerComposite; @@ -139,7 +146,8 @@ public class CoverageJavaRunConfigurationExtension extends RunConfigurationExten if (patterns != null) { assert filters != null; if (element instanceof PsiClass) { - final int idx = ArrayUtil.find(filters, ((PsiClass)element).getQualifiedName()); + final String qualifiedName = ((PsiClass)element).getQualifiedName(); + final int idx = ArrayUtil.find(filters, qualifiedName); if (idx > -1) { final RefactoringListeners.Accessor accessor = new MyClassAccessor(project, patterns, idx, filters); final RefactoringElementListener classListener = RefactoringListeners.getClassOrPackageListener(element, accessor); @@ -147,6 +155,19 @@ public class CoverageJavaRunConfigurationExtension extends RunConfigurationExten listener = appendListener(listener, classListener); } } + else if (qualifiedName != null){ + final String packageName = StringUtil.getPackageName(qualifiedName); + if (!StringUtil.isEmpty(packageName)) { + for (int i = 0; i < filters.length; i++) { + String filter = filters[i]; + if (filter.equals(packageName + ".*")) { + listener = appendListener(listener, + new RefactoringListeners.RefactorPackageByClass(new MyClassAccessor(project, patterns, i, filters))); + break; + } + } + } + } } else if (element instanceof PsiPackage) { final String qualifiedName = ((PsiPackage)element).getQualifiedName(); for (int i = 0, filtersLength = filters.length; i < filtersLength; i++) {