refactoring listener: update coverage filters by package on test move in another package (IDEA-139703)

This commit is contained in:
Anna Kozlova
2015-05-12 17:07:11 +02:00
parent 6a6b9f5226
commit f0c483658f
2 changed files with 41 additions and 3 deletions
@@ -150,6 +150,23 @@ public class RefactoringListeners {
return psiClass.getQualifiedName();
}
}
public static class RefactorPackageByClass extends RenameElement<PsiClass> {
public RefactorPackageByClass(final Accessor<PsiClass> 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<PsiPackage> {
private final PsiPackage myContainingPackage;
@@ -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<PsiClass> 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++) {