From fa3b7392932e49ac6e2b1718bf2faf3e4685abc3 Mon Sep 17 00:00:00 2001 From: Maksim Zuev Date: Mon, 18 Dec 2023 18:50:01 +0100 Subject: [PATCH] [coverage] Refactor JavaCoverageEngine GitOrigin-RevId: ae536364a6d21fd43c771327dba86e7cbf4a82fd --- .../intellij/coverage/JavaCoverageEngine.java | 10 +- .../intellij/coverage/JavaCoverageSuite.java | 182 +++++++++--------- .../intellij/coverage/xml/XMLReportEngine.kt | 4 +- .../intellij/coverage/xml/XMLReportSuite.kt | 20 +- .../JavaCoverageEnabledConfiguration.java | 3 +- 5 files changed, 109 insertions(+), 110 deletions(-) diff --git a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java index 9d597807ca0d..d89b2875ec23 100644 --- a/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java +++ b/plugins/coverage/src/com/intellij/coverage/JavaCoverageEngine.java @@ -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(), diff --git a/plugins/coverage/src/com/intellij/coverage/JavaCoverageSuite.java b/plugins/coverage/src/com/intellij/coverage/JavaCoverageSuite.java index 7a916dcf6404..7f3cd89b3e5e 100644 --- a/plugins/coverage/src/com/intellij/coverage/JavaCoverageSuite.java +++ b/plugins/coverage/src/com/intellij/coverage/JavaCoverageSuite.java @@ -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 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 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 children = element.getChildren(tagName); - List 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 getCurrentSuiteClasses(final Project project) { final List 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 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 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 children = element.getChildren(tagName); + List 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); + } + } + } } diff --git a/plugins/coverage/src/com/intellij/coverage/xml/XMLReportEngine.kt b/plugins/coverage/src/com/intellij/coverage/xml/XMLReportEngine.kt index 765bd82f36cb..19fc49a55c2b 100644 --- a/plugins/coverage/src/com/intellij/coverage/xml/XMLReportEngine.kt +++ b/plugins/coverage/src/com/intellij/coverage/xml/XMLReportEngine.kt @@ -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 diff --git a/plugins/coverage/src/com/intellij/coverage/xml/XMLReportSuite.kt b/plugins/coverage/src/com/intellij/coverage/xml/XMLReportSuite.kt index 713dc208f932..18ef2b8acb00 100644 --- a/plugins/coverage/src/com/intellij/coverage/xml/XMLReportSuite.kt +++ b/plugins/coverage/src/com/intellij/coverage/xml/XMLReportSuite.kt @@ -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 diff --git a/plugins/coverage/src/com/intellij/execution/configurations/coverage/JavaCoverageEnabledConfiguration.java b/plugins/coverage/src/com/intellij/execution/configurations/coverage/JavaCoverageEnabledConfiguration.java index 3925baff627b..41325aa5a316 100644 --- a/plugins/coverage/src/com/intellij/execution/configurations/coverage/JavaCoverageEnabledConfiguration.java +++ b/plugins/coverage/src/com/intellij/execution/configurations/coverage/JavaCoverageEnabledConfiguration.java @@ -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)); }