[coverage] Refactor JavaCoverageEngine

GitOrigin-RevId: ae536364a6d21fd43c771327dba86e7cbf4a82fd
This commit is contained in:
Maksim Zuev
2023-12-19 17:24:08 +00:00
committed by intellij-monorepo-bot
parent c9d9f2b14e
commit fa3b739293
5 changed files with 109 additions and 110 deletions
@@ -245,7 +245,7 @@ public class JavaCoverageEngine extends CoverageEngine {
@NotNull
@Override
public CoverageEnabledConfiguration createCoverageEnabledConfiguration(@NotNull final RunConfigurationBase conf) {
return new JavaCoverageEnabledConfiguration(conf, this);
return new JavaCoverageEnabledConfiguration(conf);
}
@Nullable
@@ -265,10 +265,10 @@ public class JavaCoverageEngine extends CoverageEngine {
}
@Override
public CoverageSuite createCoverageSuite(@NotNull final CoverageRunner covRunner,
@NotNull final String name,
@NotNull final CoverageFileProvider coverageDataFileProvider,
@NotNull final CoverageEnabledConfiguration config) {
public CoverageSuite createCoverageSuite(@NotNull CoverageRunner covRunner,
@NotNull String name,
@NotNull CoverageFileProvider coverageDataFileProvider,
@NotNull CoverageEnabledConfiguration config) {
if (config instanceof JavaCoverageEnabledConfiguration javaConfig) {
return createSuite(covRunner, name, coverageDataFileProvider,
javaConfig.getPatterns(),
@@ -77,6 +77,14 @@ public class JavaCoverageSuite extends BaseCoverageSuite {
return getPackageNames(myExcludePatterns);
}
public final String @NotNull [] getFilteredClassNames() {
return getClassNames(myIncludeFilters);
}
public final String @NotNull [] getExcludedClassNames() {
return getClassNames(myExcludePatterns);
}
final String @Nullable [] getIncludeFilters() {
return myIncludeFilters;
}
@@ -101,91 +109,10 @@ public class JavaCoverageSuite extends BaseCoverageSuite {
mySkipUnloadedClassesAnalysis = skipUnloadedClassesAnalysis;
}
private static String[] getPackageNames(String[] filters) {
if (filters == null || filters.length == 0) return ArrayUtilRt.EMPTY_STRING_ARRAY;
List<String> result = new ArrayList<>();
for (String filter : filters) {
if (filter.equals("*")) {
result.add(""); //default package
}
else if (filter.endsWith(".*")) result.add(filter.substring(0, filter.length() - 2));
}
return ArrayUtilRt.toStringArray(result);
}
public final String @NotNull [] getFilteredClassNames() {
return getClassNames(myIncludeFilters);
}
public final String @NotNull [] getExcludedClassNames() {
return getClassNames(myExcludePatterns);
}
private static String @NotNull [] getClassNames(final String[] filters) {
if (filters == null) return ArrayUtilRt.EMPTY_STRING_ARRAY;
List<String> result = new ArrayList<>();
for (String filter : filters) {
if (!filter.equals("*") && !filter.endsWith(".*")) result.add(filter);
}
return ArrayUtilRt.toStringArray(result);
}
@Override
public final void readExternal(Element element) throws InvalidDataException {
super.readExternal(element);
// filters
myIncludeFilters = readFilters(element, FILTER);
myExcludePatterns = readFilters(element, EXCLUDED_FILTER);
if (myRunner == null) {
myRunner = CoverageRunner.getInstance(IDEACoverageRunner.class); //default
}
}
private static String[] readFilters(Element element, final String tagName) {
final List<Element> children = element.getChildren(tagName);
List<String> filters = new ArrayList<>();
for (Element child : children) {
filters.add(child.getValue());
}
return filters.isEmpty() ? null : ArrayUtilRt.toStringArray(filters);
}
@Override
public final void writeExternal(final Element element) throws WriteExternalException {
super.writeExternal(element);
writeFilters(element, myIncludeFilters, FILTER);
writeFilters(element, myExcludePatterns, EXCLUDED_FILTER);
final CoverageRunner coverageRunner = getRunner();
if (coverageRunner != null) {
element.setAttribute(COVERAGE_RUNNER, coverageRunner.getId());
}
}
private static void writeFilters(Element element, final String[] filters, final String tagName) {
if (filters != null) {
for (String filter : filters) {
final Element filterElement = new Element(tagName);
filterElement.setText(filter);
element.addContent(filterElement);
}
}
}
public final boolean isClassFiltered(final String classFQName) {
return isClassFiltered(classFQName, getFilteredClassNames());
}
public static boolean isClassFiltered(String classFQName, String[] classPatterns) {
for (String className : classPatterns) {
if (className.equals(classFQName) || classFQName.startsWith(className) && classFQName.charAt(className.length()) == '$') {
return true;
}
}
return false;
}
public final boolean isPackageFiltered(final String packageFQName) {
for (String name : getExcludedPackageNames()) {
if (packageFQName.equals(name) || packageFQName.startsWith(name + ".")) return false;
@@ -231,15 +158,6 @@ public class JavaCoverageSuite extends BaseCoverageSuite {
});
}
private static boolean isSubPackage(String[] filters, String filter) {
for (String supPackageFilter : filters) {
if (filter.startsWith(supPackageFilter + ".")) {
return true;
}
}
return false;
}
public final @NotNull List<PsiClass> getCurrentSuiteClasses(final Project project) {
final List<PsiClass> classes = new ArrayList<>();
final String[] classNames = getFilteredClassNames();
@@ -250,7 +168,7 @@ public class JavaCoverageSuite extends BaseCoverageSuite {
GlobalSearchScope searchScope = GlobalSearchScope.allScope(project);
RunConfigurationBase<?> configuration = getConfiguration();
if (configuration instanceof ModuleBasedConfiguration) {
Module module = ((ModuleBasedConfiguration<?,?>)configuration).getConfigurationModule().getModule();
Module module = ((ModuleBasedConfiguration<?, ?>)configuration).getConfigurationModule().getModule();
if (module != null) {
searchScope = GlobalSearchScope.moduleRuntimeScope(module, isTrackTestFolders());
}
@@ -266,4 +184,86 @@ public class JavaCoverageSuite extends BaseCoverageSuite {
return classes;
}
@Override
public final void readExternal(Element element) throws InvalidDataException {
super.readExternal(element);
// filters
myIncludeFilters = readFilters(element, FILTER);
myExcludePatterns = readFilters(element, EXCLUDED_FILTER);
if (myRunner == null) {
myRunner = CoverageRunner.getInstance(IDEACoverageRunner.class); //default
}
}
@Override
public final void writeExternal(final Element element) throws WriteExternalException {
super.writeExternal(element);
writeFilters(element, myIncludeFilters, FILTER);
writeFilters(element, myExcludePatterns, EXCLUDED_FILTER);
final CoverageRunner coverageRunner = getRunner();
if (coverageRunner != null) {
element.setAttribute(COVERAGE_RUNNER, coverageRunner.getId());
}
}
public static boolean isClassFiltered(String classFQName, String[] classPatterns) {
for (String className : classPatterns) {
if (className.equals(classFQName) || classFQName.startsWith(className) && classFQName.charAt(className.length()) == '$') {
return true;
}
}
return false;
}
private static boolean isSubPackage(String[] filters, String filter) {
for (String supPackageFilter : filters) {
if (filter.startsWith(supPackageFilter + ".")) {
return true;
}
}
return false;
}
private static String[] getPackageNames(String[] filters) {
if (filters == null || filters.length == 0) return ArrayUtilRt.EMPTY_STRING_ARRAY;
List<String> result = new ArrayList<>();
for (String filter : filters) {
if (filter.equals("*")) {
result.add(""); //default package
}
else if (filter.endsWith(".*")) result.add(filter.substring(0, filter.length() - 2));
}
return ArrayUtilRt.toStringArray(result);
}
private static String @NotNull [] getClassNames(final String[] filters) {
if (filters == null) return ArrayUtilRt.EMPTY_STRING_ARRAY;
List<String> result = new ArrayList<>();
for (String filter : filters) {
if (!filter.equals("*") && !filter.endsWith(".*")) result.add(filter);
}
return ArrayUtilRt.toStringArray(result);
}
private static String[] readFilters(Element element, final String tagName) {
final List<Element> children = element.getChildren(tagName);
List<String> filters = new ArrayList<>();
for (Element child : children) {
filters.add(child.getValue());
}
return filters.isEmpty() ? null : ArrayUtilRt.toStringArray(filters);
}
private static void writeFilters(Element element, final String[] filters, final String tagName) {
if (filters != null) {
for (String filter : filters) {
final Element filterElement = new Element(tagName);
filterElement.setText(filter);
element.addContent(filterElement);
}
}
}
}
@@ -25,7 +25,7 @@ class XMLReportEngine : CoverageEngine() {
trackTestFolders: Boolean,
project: Project?): CoverageSuite? {
if (covRunner !is XMLReportRunner) return null
return XMLReportSuite(this, name, coverageDataFileProvider, lastCoverageTimeStamp, trackTestFolders, covRunner, project)
return XMLReportSuite(name, project, covRunner, coverageDataFileProvider, lastCoverageTimeStamp, this)
}
override fun createCoverageSuite(covRunner: CoverageRunner,
@@ -35,7 +35,7 @@ class XMLReportEngine : CoverageEngine() {
override fun createEmptyCoverageSuite(coverageRunner: CoverageRunner): XMLReportSuite? {
if (coverageRunner !is XMLReportRunner) return null
return XMLReportSuite(this, coverageRunner)
return XMLReportSuite(this)
}
override fun coverageEditorHighlightingApplicableTo(psiFile: PsiFile) = psiFile is PsiClassOwner
@@ -11,16 +11,16 @@ import com.intellij.rt.coverage.report.XMLProjectData
import com.intellij.rt.coverage.report.XMLProjectData.FileInfo
import java.io.File
class XMLReportSuite(engine: XMLReportEngine,
name: String?,
fileProvider: CoverageFileProvider?,
lastCoverageTimeStamp: Long,
trackTestFolders: Boolean,
coverageRunner: XMLReportRunner,
project: Project?) : JavaCoverageSuite(name, fileProvider, emptyArray(), emptyArray(), lastCoverageTimeStamp, false,
true, trackTestFolders,
coverageRunner, engine, project) {
constructor(engine: XMLReportEngine, coverageRunner: XMLReportRunner) : this(engine, null, null, 0, false, coverageRunner, null)
class XMLReportSuite : JavaCoverageSuite {
constructor(name: String?,
project: Project?,
coverageRunner: XMLReportRunner,
fileProvider: CoverageFileProvider?,
lastCoverageTimeStamp: Long,
engine: XMLReportEngine) : super(name, fileProvider, emptyArray(), emptyArray(), lastCoverageTimeStamp, false, true, false,
coverageRunner, engine, project)
constructor(engine: XMLReportEngine) : super(engine)
private var data: XMLProjectData? = null
@@ -40,8 +40,7 @@ public final class JavaCoverageEnabledConfiguration extends CoverageEnabledConfi
@NonNls private static final String COVERAGE_MERGE_SUITE_ATT_NAME = "merge_suite";
public JavaCoverageEnabledConfiguration(final RunConfigurationBase configuration,
final JavaCoverageEngine coverageProvider) {
public JavaCoverageEnabledConfiguration(RunConfigurationBase configuration) {
super(configuration);
setCoverageRunner(CoverageRunner.getInstance(IDEACoverageRunner.class));
}