diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/index.html b/jacoco-0.8.9-20220705.221536-11/coverage/index.html
new file mode 100644
index 00000000..a6fb8131
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/index.html
@@ -0,0 +1 @@
+
JaCoCoJaCoCo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/index.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/index.html
new file mode 100644
index 00000000..5333bd42
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/index.html
@@ -0,0 +1 @@
+
jacoco-maven-pluginjacoco-maven-plugin
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods | Missed | Classes |
| Total | 175 of 1,922 | 90% | 27 of 154 | 82% | 35 | 194 | 46 | 418 | 8 | 117 | 0 | 23 |
| org.jacoco.maven |   | 90% |   | 82% | 35 | 194 | 46 | 418 | 8 | 117 | 0 | 23 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.html
new file mode 100644
index 00000000..f99a0a49
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.html
@@ -0,0 +1 @@
+
AbstractAgentMojoAbstractAgentMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.java.html
new file mode 100644
index 00000000..2877f3f1
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractAgentMojo.java.html
@@ -0,0 +1,258 @@
+
AbstractAgentMojo.javaAbstractAgentMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.codehaus.plexus.util.StringUtils;
+import org.jacoco.core.runtime.AgentOptions;
+
+/**
+ * Base class for preparing a property pointing to the JaCoCo runtime agent that
+ * can be passed as a VM argument to the application under test.
+ */
+public abstract class AbstractAgentMojo extends AbstractJacocoMojo {
+
+ /**
+ * Name of the JaCoCo Agent artifact.
+ */
+ static final String AGENT_ARTIFACT_NAME = "org.jacoco:org.jacoco.agent";
+ /**
+ * Name of the property used in maven-osgi-test-plugin.
+ */
+ static final String TYCHO_ARG_LINE = "tycho.testArgLine";
+ /**
+ * Name of the property used in maven-surefire-plugin.
+ */
+ static final String SUREFIRE_ARG_LINE = "argLine";
+ /**
+ * Map of plugin artifacts.
+ */
+ @Parameter(property = "plugin.artifactMap", required = true, readonly = true)
+ Map<String, Artifact> pluginArtifactMap;
+ /**
+ * Allows to specify property which will contains settings for JaCoCo Agent.
+ * If not specified, then "argLine" would be used for "jar" packaging and
+ * "tycho.testArgLine" for "eclipse-test-plugin".
+ */
+ @Parameter(property = "jacoco.propertyName")
+ String propertyName;
+ /**
+ * If set to true and the execution data file already exists, coverage data
+ * is appended to the existing file. If set to false, an existing execution
+ * data file will be replaced.
+ */
+ @Parameter(property = "jacoco.append")
+ Boolean append;
+
+ /**
+ * A list of class names to include in instrumentation. May use wildcard
+ * characters (* and ?). When not specified everything will be included.
+ */
+ @Parameter
+ private List<String> includes;
+
+ /**
+ * A list of class names to exclude from instrumentation. May use wildcard
+ * characters (* and ?). When not specified nothing will be excluded. Except
+ * for performance optimization or technical corner cases this option is
+ * normally not required. If you want to exclude classes from the report
+ * please configure the <code>report</code> goal accordingly.
+ */
+ @Parameter
+ private List<String> excludes;
+
+ /**
+ * A list of class loader names, that should be excluded from execution
+ * analysis. The list entries are separated by a colon (:) and may use
+ * wildcard characters (* and ?). This option might be required in case of
+ * special frameworks that conflict with JaCoCo code instrumentation, in
+ * particular class loaders that do not have access to the Java runtime
+ * classes.
+ */
+ @Parameter(property = "jacoco.exclClassLoaders")
+ String exclClassLoaders;
+ /**
+ * Specifies whether also classes from the bootstrap classloader should be
+ * instrumented. Use this feature with caution, it needs heavy
+ * includes/excludes tuning.
+ */
+ @Parameter(property = "jacoco.inclBootstrapClasses")
+ Boolean inclBootstrapClasses;
+ /**
+ * Specifies whether classes without source location should be instrumented.
+ */
+ @Parameter(property = "jacoco.inclNoLocationClasses")
+ Boolean inclNoLocationClasses;
+ /**
+ * A session identifier that is written with the execution data. Without
+ * this parameter a random identifier is created by the agent.
+ */
+ @Parameter(property = "jacoco.sessionId")
+ String sessionId;
+ /**
+ * If set to true coverage data will be written on VM shutdown.
+ */
+ @Parameter(property = "jacoco.dumpOnExit")
+ Boolean dumpOnExit;
+ /**
+ * Output method to use for writing coverage data. Valid options are:
+ * <ul>
+ * <li>file: At VM termination execution data is written to a file.</li>
+ * <li>tcpserver: The agent listens for incoming connections on the TCP port
+ * specified by the {@link #address} and {@link #port}. Execution data is
+ * written to this TCP connection.</li>
+ * <li>tcpclient: At startup the agent connects to the TCP port specified by
+ * the {@link #address} and {@link #port}. Execution data is written to this
+ * TCP connection.</li>
+ * <li>none: Do not produce any output.</li>
+ * </ul>
+ */
+ @Parameter(property = "jacoco.output")
+ String output;
+ /**
+ * IP address or hostname to bind to when the output method is tcpserver or
+ * connect to when the output method is tcpclient. In tcpserver mode the
+ * value "*" causes the agent to accept connections on any local address.
+ */
+ @Parameter(property = "jacoco.address")
+ String address;
+ /**
+ * Port to bind to when the output method is tcpserver or connect to when
+ * the output method is tcpclient. In tcpserver mode the port must be
+ * available, which means that if multiple JaCoCo agents should run on the
+ * same machine, different ports have to be specified.
+ */
+ @Parameter(property = "jacoco.port")
+ Integer port;
+ /**
+ * If a directory is specified for this parameter the JaCoCo agent dumps all
+ * class files it processes to the given location. This can be useful for
+ * debugging purposes or in case of dynamically created classes for example
+ * when scripting engines are used.
+ */
+ @Parameter(property = "jacoco.classDumpDir")
+ File classDumpDir;
+ /**
+ * If set to true the agent exposes functionality via JMX.
+ */
+ @Parameter(property = "jacoco.jmx")
+ Boolean jmx;
+
+ @Override
+ public void executeMojo() {
+ final String name = getEffectivePropertyName();
+ final Properties projectProperties = getProject().getProperties();
+ final String oldValue = projectProperties.getProperty(name);
+ final String newValue = createAgentOptions()
+ .prependVMArguments(oldValue, getAgentJarFile());
+ getLog().info(name + " set to " + newValue);
+ projectProperties.setProperty(name, newValue);
+ }
+
+ @Override
+ protected void skipMojo() {
+ final String name = getEffectivePropertyName();
+ final Properties projectProperties = getProject().getProperties();
+ final String oldValue = projectProperties.getProperty(name);
+ if (oldValue == null) {
+ getLog().info(name + " set to empty");
+ projectProperties.setProperty(name, "");
+ }
+ }
+
+ File getAgentJarFile() {
+ final Artifact jacocoAgentArtifact = pluginArtifactMap
+ .get(AGENT_ARTIFACT_NAME);
+ return jacocoAgentArtifact.getFile();
+ }
+
+ AgentOptions createAgentOptions() {
+ final AgentOptions agentOptions = new AgentOptions();
+ agentOptions.setDestfile(getDestFile().getAbsolutePath());
+ if (append != null) {
+ agentOptions.setAppend(append.booleanValue());
+ }
+ if (includes != null && !includes.isEmpty()) {
+ agentOptions
+ .setIncludes(StringUtils.join(includes.iterator(), ":"));
+ }
+ if (excludes != null && !excludes.isEmpty()) {
+ agentOptions
+ .setExcludes(StringUtils.join(excludes.iterator(), ":"));
+ }
+ if (exclClassLoaders != null) {
+ agentOptions.setExclClassloader(exclClassLoaders);
+ }
+ if (inclBootstrapClasses != null) {
+ agentOptions.setInclBootstrapClasses(
+ inclBootstrapClasses.booleanValue());
+ }
+ if (inclNoLocationClasses != null) {
+ agentOptions.setInclNoLocationClasses(
+ inclNoLocationClasses.booleanValue());
+ }
+ if (sessionId != null) {
+ agentOptions.setSessionId(sessionId);
+ }
+ if (dumpOnExit != null) {
+ agentOptions.setDumpOnExit(dumpOnExit.booleanValue());
+ }
+ if (output != null) {
+ agentOptions.setOutput(output);
+ }
+ if (address != null) {
+ agentOptions.setAddress(address);
+ }
+ if (port != null) {
+ agentOptions.setPort(port.intValue());
+ }
+ if (classDumpDir != null) {
+ agentOptions.setClassDumpDir(classDumpDir.getAbsolutePath());
+ }
+ if (jmx != null) {
+ agentOptions.setJmx(jmx.booleanValue());
+ }
+ return agentOptions;
+ }
+
+ String getEffectivePropertyName() {
+ if (isPropertyNameSpecified()) {
+ return propertyName;
+ }
+ if (isEclipseTestPluginPackaging()) {
+ return TYCHO_ARG_LINE;
+ }
+ return SUREFIRE_ARG_LINE;
+ }
+
+ boolean isPropertyNameSpecified() {
+ return propertyName != null && !"".equals(propertyName);
+ }
+
+ boolean isEclipseTestPluginPackaging() {
+ return "eclipse-test-plugin".equals(getProject().getPackaging());
+ }
+
+ /**
+ * @return the destFile
+ */
+ abstract File getDestFile();
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.html
new file mode 100644
index 00000000..75d0227f
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.html
@@ -0,0 +1 @@
+
AbstractJacocoMojoAbstractJacocoMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.java.html
new file mode 100644
index 00000000..e878f789
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractJacocoMojo.java.html
@@ -0,0 +1,77 @@
+
AbstractJacocoMojo.javaAbstractJacocoMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+
+/**
+ * Base class for JaCoCo Mojos.
+ */
+public abstract class AbstractJacocoMojo extends AbstractMojo {
+
+ /**
+ * Maven project.
+ */
+ @Parameter(property = "project", readonly = true)
+ private MavenProject project;
+
+ /**
+ * Flag used to suppress execution.
+ */
+ @Parameter(property = "jacoco.skip", defaultValue = "false")
+ private boolean skip;
+
+ public final void execute()
+ throws MojoExecutionException, MojoFailureException {
+ if (skip) {
+ getLog().info(
+ "Skipping JaCoCo execution because property jacoco.skip is set.");
+ skipMojo();
+ return;
+ }
+ executeMojo();
+ }
+
+ /**
+ * Executes Mojo.
+ *
+ * @throws MojoExecutionException
+ * if an unexpected problem occurs. Throwing this exception
+ * causes a "BUILD ERROR" message to be displayed.
+ * @throws MojoFailureException
+ * if an expected problem (such as a compilation failure)
+ * occurs. Throwing this exception causes a "BUILD FAILURE"
+ * message to be displayed.
+ */
+ protected abstract void executeMojo()
+ throws MojoExecutionException, MojoFailureException;
+
+ /**
+ * Skips Mojo.
+ */
+ protected void skipMojo() {
+ }
+
+ /**
+ * @return Maven project
+ */
+ protected final MavenProject getProject() {
+ return project;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.html
new file mode 100644
index 00000000..29d31046
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.html
@@ -0,0 +1 @@
+
AbstractReportMojoAbstractReportMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.java.html
new file mode 100644
index 00000000..47f553ac
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AbstractReportMojo.java.html
@@ -0,0 +1,217 @@
+
AbstractReportMojo.javaAbstractReportMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * troosan - add support for format selection
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.maven.doxia.sink.SinkFactory;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.reporting.MavenMultiPageReport;
+import org.apache.maven.reporting.MavenReportException;
+import org.jacoco.report.IReportGroupVisitor;
+import org.jacoco.report.IReportVisitor;
+
+/**
+ * Base class for creating a code coverage report for tests of a single project
+ * in multiple formats (HTML, XML, and CSV).
+ */
+public abstract class AbstractReportMojo extends AbstractMojo
+ implements MavenMultiPageReport {
+
+ /**
+ * Encoding of the generated reports.
+ */
+ @Parameter(property = "project.reporting.outputEncoding", defaultValue = "UTF-8")
+ String outputEncoding;
+
+ /**
+ * A list of report formats to generate. Supported formats are HTML, XML and
+ * CSV. Defaults to all formats if no values are given.
+ *
+ * @since 0.8.7
+ */
+ @Parameter(defaultValue = "HTML,XML,CSV")
+ List<ReportFormat> formats;
+
+ /**
+ * Name of the root node HTML report pages.
+ *
+ * @since 0.7.7
+ */
+ @Parameter(defaultValue = "${project.name}")
+ String title;
+
+ /**
+ * Footer text used in HTML report pages.
+ *
+ * @since 0.7.7
+ */
+ @Parameter
+ String footer;
+
+ /**
+ * Encoding of the source files.
+ */
+ @Parameter(property = "project.build.sourceEncoding", defaultValue = "UTF-8")
+ String sourceEncoding;
+
+ /**
+ * A list of class files to include in the report. May use wildcard
+ * characters (* and ?). When not specified everything will be included.
+ */
+ @Parameter
+ List<String> includes;
+
+ /**
+ * A list of class files to exclude from the report. May use wildcard
+ * characters (* and ?). When not specified nothing will be excluded.
+ */
+ @Parameter
+ List<String> excludes;
+
+ /**
+ * Flag used to suppress execution.
+ */
+ @Parameter(property = "jacoco.skip", defaultValue = "false")
+ boolean skip;
+
+ /**
+ * Maven project.
+ */
+ @Parameter(property = "project", readonly = true)
+ MavenProject project;
+
+ public String getDescription(final Locale locale) {
+ return getName(locale) + " Coverage Report.";
+ }
+
+ public boolean isExternalReport() {
+ return true;
+ }
+
+ public String getCategoryName() {
+ return CATEGORY_PROJECT_REPORTS;
+ }
+
+ /**
+ * Returns the list of class files to include in the report.
+ *
+ * @return class files to include, may contain wildcard characters
+ */
+ List<String> getIncludes() {
+ return includes;
+ }
+
+ /**
+ * Returns the list of class files to exclude from the report.
+ *
+ * @return class files to exclude, may contain wildcard characters
+ */
+ List<String> getExcludes() {
+ return excludes;
+ }
+
+ public boolean canGenerateReport() {
+ if (skip) {
+ getLog().info(
+ "Skipping JaCoCo execution because property jacoco.skip is set.");
+ return false;
+ }
+ if (!canGenerateReportRegardingDataFiles()) {
+ getLog().info(
+ "Skipping JaCoCo execution due to missing execution data file.");
+ return false;
+ }
+ if (!canGenerateReportRegardingClassesDirectory()) {
+ getLog().info(
+ "Skipping JaCoCo execution due to missing classes directory.");
+ return false;
+ }
+ return true;
+ }
+
+ abstract boolean canGenerateReportRegardingDataFiles();
+
+ abstract boolean canGenerateReportRegardingClassesDirectory();
+
+ abstract File getOutputDirectory();
+
+ public void generate(
+ @SuppressWarnings("deprecation") final org.codehaus.doxia.sink.Sink sink,
+ final Locale locale) throws MavenReportException {
+ generate(sink, null, locale);
+ }
+
+ public void generate(final org.apache.maven.doxia.sink.Sink sink,
+ final SinkFactory sinkFactory, final Locale locale)
+ throws MavenReportException {
+ if (!canGenerateReport()) {
+ return;
+ }
+ executeReport(locale);
+ }
+
+ /**
+ * This method is called when the report generation is invoked directly as a
+ * standalone Mojo.
+ */
+ public void execute() throws MojoExecutionException {
+ if (!canGenerateReport()) {
+ return;
+ }
+ try {
+ executeReport(Locale.getDefault());
+ } catch (final MavenReportException e) {
+ throw new MojoExecutionException("An error has occurred in "
+ + getName(Locale.ENGLISH) + " report generation.", e);
+ }
+ }
+
+ private void executeReport(final Locale locale)
+ throws MavenReportException {
+ try {
+ final ReportSupport support = new ReportSupport(getLog());
+ loadExecutionData(support);
+ addFormatters(support, locale);
+ final IReportVisitor visitor = support.initRootVisitor();
+ createReport(visitor, support);
+ visitor.visitEnd();
+ } catch (final IOException e) {
+ throw new MavenReportException(
+ "Error while creating report: " + e.getMessage(), e);
+ }
+ }
+
+ private void addFormatters(final ReportSupport support, final Locale locale)
+ throws IOException {
+ getOutputDirectory().mkdirs();
+ for (final ReportFormat f : formats) {
+ support.addVisitor(f.createVisitor(this, locale));
+ }
+ }
+
+ abstract void loadExecutionData(final ReportSupport support)
+ throws IOException;
+
+ abstract void createReport(final IReportGroupVisitor visitor,
+ final ReportSupport support) throws IOException;
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.html
new file mode 100644
index 00000000..99c56802
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.html
@@ -0,0 +1 @@
+
AgentITMojoAgentITMojo
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 0 of 6 | 100% | 0 of 0 | n/a | 0 | 2 | 0 | 2 | 0 | 2 |
| AgentITMojo() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getDestFile() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.java.html
new file mode 100644
index 00000000..bf1c93b2
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentITMojo.java.html
@@ -0,0 +1,51 @@
+
AgentITMojo.javaAgentITMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+
+/**
+ * Same as <code>prepare-agent</code>, but provides default values suitable for
+ * integration-tests:
+ * <ul>
+ * <li>bound to <code>pre-integration-test</code> phase</li>
+ * <li>different <code>destFile</code></li>
+ * </ul>
+ *
+ * @since 0.6.4
+ */
+@Mojo(name = "prepare-agent-integration", defaultPhase = LifecyclePhase.PRE_INTEGRATION_TEST, requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true)
+public class AgentITMojo extends AbstractAgentMojo {
+
+ /**
+ * Path to the output file for execution data.
+ */
+ @Parameter(property = "jacoco.destFile", defaultValue = "${project.build.directory}/jacoco-it.exec")
+ private File destFile;
+
+ /**
+ * @return the destFile
+ */
+ @Override
+ File getDestFile() {
+ return destFile;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.html
new file mode 100644
index 00000000..5643bbef
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.html
@@ -0,0 +1 @@
+
AgentMojoAgentMojo
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 0 of 6 | 100% | 0 of 0 | n/a | 0 | 2 | 0 | 2 | 0 | 2 |
| AgentMojo() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
| getDestFile() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.java.html
new file mode 100644
index 00000000..7babf70e
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/AgentMojo.java.html
@@ -0,0 +1,106 @@
+
AgentMojo.javaAgentMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+
+/**
+ * <p>
+ * Prepares a property pointing to the JaCoCo runtime agent that can be passed
+ * as a VM argument to the application under test. Depending on the project
+ * packaging type by default a property with the following name is set:
+ * </p>
+ *
+ * <ul>
+ * <li>tycho.testArgLine for packaging type eclipse-test-plugin and</li>
+ * <li>argLine otherwise.</li>
+ * </ul>
+ *
+ * <p>
+ * If your project already defines VM arguments for test execution, be sure that
+ * they will include property defined by JaCoCo.
+ * </p>
+ *
+ * <p>
+ * One of the ways to do this in case of maven-surefire-plugin - is to use
+ * syntax for <a href=
+ * "http://maven.apache.org/surefire/maven-surefire-plugin/faq.html#late-property-evaluation">late
+ * property evaluation</a>:
+ * </p>
+ *
+ * <pre>
+ * <plugin>
+ * <groupId>org.apache.maven.plugins</groupId>
+ * <artifactId>maven-surefire-plugin</artifactId>
+ * <configuration>
+ * <argLine>@{argLine} -your -extra -arguments</argLine>
+ * </configuration>
+ * </plugin>
+ * </pre>
+ *
+ * <p>
+ * You can define empty property to avoid JVM startup error
+ * <code>Could not find or load main class @{argLine}</code> when using late
+ * property evaluation and jacoco-maven-plugin not executed.
+ * </p>
+ *
+ * <p>
+ * Another way is to define "argLine" as a Maven property rather than as part of
+ * the configuration of maven-surefire-plugin:
+ * </p>
+ *
+ * <pre>
+ * <properties>
+ * <argLine>-your -extra -arguments</argLine>
+ * </properties>
+ * ...
+ * <plugin>
+ * <groupId>org.apache.maven.plugins</groupId>
+ * <artifactId>maven-surefire-plugin</artifactId>
+ * <configuration>
+ * <!-- no argLine here -->
+ * </configuration>
+ * </plugin>
+ * </pre>
+ *
+ * <p>
+ * Resulting coverage information is collected during execution and by default
+ * written to a file when the process terminates.
+ * </p>
+ *
+ * @since 0.5.3
+ */
+@Mojo(name = "prepare-agent", defaultPhase = LifecyclePhase.INITIALIZE, requiresDependencyResolution = ResolutionScope.RUNTIME, threadSafe = true)
+public class AgentMojo extends AbstractAgentMojo {
+
+ /**
+ * Path to the output file for execution data.
+ */
+ @Parameter(property = "jacoco.destFile", defaultValue = "${project.build.directory}/jacoco.exec")
+ private File destFile;
+
+ /**
+ * @return the destFile
+ */
+ @Override
+ File getDestFile() {
+ return destFile;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.html
new file mode 100644
index 00000000..e10ce406
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.html
@@ -0,0 +1 @@
+
CheckMojoCheckMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.java.html
new file mode 100644
index 00000000..ba1d5190
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/CheckMojo.java.html
@@ -0,0 +1,210 @@
+
CheckMojo.javaCheckMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ * Marc Hoffmann - redesign using report APIs
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.jacoco.core.analysis.ICoverageNode;
+import org.jacoco.report.IReportVisitor;
+import org.jacoco.report.check.IViolationsOutput;
+import org.jacoco.report.check.Limit;
+import org.jacoco.report.check.Rule;
+
+/**
+ * Checks that the code coverage metrics are being met.
+ *
+ * @since 0.6.1
+ */
+@Mojo(name = "check", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
+public class CheckMojo extends AbstractJacocoMojo implements IViolationsOutput {
+
+ private static final String MSG_SKIPPING = "Skipping JaCoCo execution due to missing execution data file:";
+ private static final String CHECK_SUCCESS = "All coverage checks have been met.";
+ private static final String CHECK_FAILED = "Coverage checks have not been met. See log for details.";
+
+ /**
+ * <p>
+ * Check configuration used to specify rules on element types (BUNDLE,
+ * PACKAGE, CLASS, SOURCEFILE or METHOD) with a list of limits. Each limit
+ * applies to a certain counter (INSTRUCTION, LINE, BRANCH, COMPLEXITY,
+ * METHOD, CLASS) and defines a minimum or maximum for the corresponding
+ * value (TOTALCOUNT, COVEREDCOUNT, MISSEDCOUNT, COVEREDRATIO, MISSEDRATIO).
+ * If a limit refers to a ratio it must be in the range from 0.0 to 1.0
+ * where the number of decimal places will also determine the precision in
+ * error messages. A limit ratio may optionally be declared as a percentage
+ * where 0.80 and 80% represent the same value.
+ * </p>
+ *
+ * <p>
+ * If not specified the following defaults are assumed:
+ * </p>
+ *
+ * <ul>
+ * <li>rule element: BUNDLE</li>
+ * <li>limit counter: INSTRUCTION</li>
+ * <li>limit value: COVEREDRATIO</li>
+ * </ul>
+ *
+ * <p>
+ * This example requires an overall instruction coverage of 80% and no class
+ * must be missed:
+ * </p>
+ *
+ * <pre>
+ * {@code
+ * <rules>
+ * <rule>
+ * <element>BUNDLE</element>
+ * <limits>
+ * <limit>
+ * <counter>INSTRUCTION</counter>
+ * <value>COVEREDRATIO</value>
+ * <minimum>0.80</minimum>
+ * </limit>
+ * <limit>
+ * <counter>CLASS</counter>
+ * <value>MISSEDCOUNT</value>
+ * <maximum>0</maximum>
+ * </limit>
+ * </limits>
+ * </rule>
+ * </rules>}
+ * </pre>
+ *
+ * <p>
+ * This example requires a line coverage minimum of 50% for every class
+ * except test classes:
+ * </p>
+ *
+ * <pre>
+ * {@code
+ * <rules>
+ * <rule>
+ * <element>CLASS</element>
+ * <excludes>
+ * <exclude>*Test</exclude>
+ * </excludes>
+ * <limits>
+ * <limit>
+ * <counter>LINE</counter>
+ * <value>COVEREDRATIO</value>
+ * <minimum>50%</minimum>
+ * </limit>
+ * </limits>
+ * </rule>
+ * </rules>}
+ * </pre>
+ */
+ @Parameter(required = true)
+ private List<RuleConfiguration> rules;
+
+ /**
+ * Halt the build if any of the checks fail.
+ */
+ @Parameter(property = "jacoco.haltOnFailure", defaultValue = "true", required = true)
+ private boolean haltOnFailure;
+
+ /**
+ * File with execution data.
+ */
+ @Parameter(defaultValue = "${project.build.directory}/jacoco.exec")
+ private File dataFile;
+
+ /**
+ * A list of class files to include into analysis. May use wildcard
+ * characters (* and ?). When not specified everything will be included.
+ */
+ @Parameter
+ private List<String> includes;
+
+ /**
+ * A list of class files to exclude from analysis. May use wildcard
+ * characters (* and ?). When not specified nothing will be excluded.
+ */
+ @Parameter
+ private List<String> excludes;
+
+ private boolean violations;
+
+ private boolean canCheckCoverage() {
+ if (!dataFile.exists()) {
+ getLog().info(MSG_SKIPPING + dataFile);
+ return false;
+ }
+ final File classesDirectory = new File(
+ getProject().getBuild().getOutputDirectory());
+ if (!classesDirectory.exists()) {
+ getLog().info(
+ "Skipping JaCoCo execution due to missing classes directory:"
+ + classesDirectory);
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void executeMojo() throws MojoExecutionException {
+ if (!canCheckCoverage()) {
+ return;
+ }
+ executeCheck();
+ }
+
+ private void executeCheck() throws MojoExecutionException {
+ violations = false;
+
+ final ReportSupport support = new ReportSupport(getLog());
+
+ final List<Rule> checkerrules = new ArrayList<Rule>();
+ for (final RuleConfiguration r : rules) {
+ checkerrules.add(r.rule);
+ }
+ support.addRulesChecker(checkerrules, this);
+
+ try {
+ final IReportVisitor visitor = support.initRootVisitor();
+ support.loadExecutionData(dataFile);
+ support.processProject(visitor, getProject(), includes, excludes);
+ visitor.visitEnd();
+ } catch (final IOException e) {
+ throw new MojoExecutionException(
+ "Error while checking code coverage: " + e.getMessage(), e);
+ }
+ if (violations) {
+ if (this.haltOnFailure) {
+ throw new MojoExecutionException(CHECK_FAILED);
+ } else {
+ this.getLog().warn(CHECK_FAILED);
+ }
+ } else {
+ this.getLog().info(CHECK_SUCCESS);
+ }
+ }
+
+ public void onViolation(final ICoverageNode node, final Rule rule,
+ final Limit limit, final String message) {
+ this.getLog().warn(message);
+ violations = true;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo$1.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo$1.html
new file mode 100644
index 00000000..e34537c4
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo$1.html
@@ -0,0 +1 @@
+
DumpMojo.new ExecDumpClient() {...}DumpMojo.new ExecDumpClient() {...}
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.html
new file mode 100644
index 00000000..8358d4c3
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.html
@@ -0,0 +1 @@
+
DumpMojoDumpMojo
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 7 of 58 | 87% | 1 of 2 | 50% | 1 | 3 | 2 | 13 | 0 | 2 |
| executeMojo() |   | 87% |   | 50% | 1 | 2 | 2 | 12 | 0 | 1 |
| DumpMojo() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.java.html
new file mode 100644
index 00000000..a01b977b
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/DumpMojo.java.html
@@ -0,0 +1,124 @@
+
DumpMojo.javaDumpMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Chas Honton, Marc R. Hoffmann - initial implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import static java.lang.String.format;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.InetAddress;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.jacoco.core.tools.ExecDumpClient;
+import org.jacoco.core.tools.ExecFileLoader;
+
+/**
+ * <p>
+ * Request a dump over TCP/IP from a JaCoCo agent running in
+ * <code>tcpserver</code> mode.
+ * </p>
+ *
+ * <p>
+ * Note concerning parallel builds: While the dump goal as such is thread safe,
+ * it has to be considered that TCP/IP server ports of the agents are a shared
+ * resource.
+ * </p>
+ *
+ * @since 0.6.4
+ */
+@Mojo(name = "dump", defaultPhase = LifecyclePhase.POST_INTEGRATION_TEST, threadSafe = true)
+public class DumpMojo extends AbstractJacocoMojo {
+
+ /**
+ * Path to the output file for execution data.
+ */
+ @Parameter(property = "jacoco.destFile", defaultValue = "${project.build.directory}/jacoco.exec")
+ private File destFile;
+
+ /**
+ * If set to true and the execution data file already exists, coverage data
+ * is appended to the existing file. If set to false, an existing execution
+ * data file will be replaced.
+ */
+ @Parameter(property = "jacoco.append", defaultValue = "true")
+ private boolean append;
+
+ /**
+ * Sets whether execution data should be downloaded from the remote host.
+ */
+ @Parameter(property = "jacoco.dump", defaultValue = "true")
+ private boolean dump;
+
+ /**
+ * Sets whether a reset command should be sent after the execution data has
+ * been dumped.
+ */
+ @Parameter(property = "jacoco.reset", defaultValue = "false")
+ private boolean reset;
+
+ /**
+ * IP address or hostname to connect to.
+ */
+ @Parameter(property = "jacoco.address")
+ private String address;
+
+ /**
+ * Port number to connect to. If multiple JaCoCo agents should run on the
+ * same machine, different ports have to be specified for the agents.
+ */
+ @Parameter(property = "jacoco.port", defaultValue = "6300")
+ private int port;
+
+ /**
+ * Number of retries which the goal will attempt to establish a connection.
+ * This can be used to wait until the target JVM is successfully launched.
+ */
+ @Parameter(property = "jacoco.retryCount", defaultValue = "10")
+ private int retryCount;
+
+ @Override
+ public void executeMojo() throws MojoExecutionException {
+ final ExecDumpClient client = new ExecDumpClient() {
+ @Override
+ protected void onConnecting(final InetAddress address,
+ final int port) {
+ getLog().info(format("Connecting to %s:%s", address,
+ Integer.valueOf(port)));
+ }
+
+ @Override
+ protected void onConnectionFailure(final IOException exception) {
+ getLog().info(exception.getMessage());
+ }
+ };
+ client.setDump(dump);
+ client.setReset(reset);
+ client.setRetryCount(retryCount);
+
+ try {
+ final ExecFileLoader loader = client.dump(address, port);
+ if (dump) {
+ getLog().info(format("Dumping execution data to %s",
+ destFile.getAbsolutePath()));
+ loader.save(destFile, append);
+ }
+ } catch (final IOException e) {
+ throw new MojoExecutionException("Unable to dump coverage data", e);
+ }
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.html
new file mode 100644
index 00000000..ea10addd
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.html
@@ -0,0 +1 @@
+
FileFilterFileFilter
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.java.html
new file mode 100644
index 00000000..a6ab2eaa
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/FileFilter.java.html
@@ -0,0 +1,102 @@
+
FileFilter.javaFileFilter.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.StringUtils;
+
+/**
+ * A file filter using includes/excludes patterns.
+ */
+public class FileFilter {
+
+ private static final String DEFAULT_INCLUDES = "**";
+ private static final String DEFAULT_EXCLUDES = "";
+
+ private final List<String> includes;
+ private final List<String> excludes;
+
+ /**
+ * Construct a new FileFilter
+ *
+ * @param includes
+ * list of includes patterns
+ * @param excludes
+ * list of excludes patterns
+ */
+ public FileFilter(final List<String> includes,
+ final List<String> excludes) {
+ this.includes = includes;
+ this.excludes = excludes;
+ }
+
+ /**
+ * Returns a list of file names.
+ *
+ * @param directory
+ * the directory to scan
+ * @return a list of files
+ * @throws IOException
+ * if file system access fails
+ */
+ public List<String> getFileNames(final File directory) throws IOException {
+ return FileUtils.getFileNames(directory, getIncludes(), getExcludes(),
+ false);
+ }
+
+ /**
+ * Returns a list of files.
+ *
+ * @param directory
+ * the directory to scan
+ * @return a list of files
+ * @throws IOException
+ * if file system access fails
+ */
+ public List<File> getFiles(final File directory) throws IOException {
+ return FileUtils.getFiles(directory, getIncludes(), getExcludes());
+ }
+
+ /**
+ * Get the includes pattern
+ *
+ * @return the pattern
+ */
+ public String getIncludes() {
+ return this.buildPattern(this.includes, DEFAULT_INCLUDES);
+ }
+
+ /**
+ * Get the excludes pattern
+ *
+ * @return the pattern
+ */
+ public String getExcludes() {
+ return this.buildPattern(this.excludes, DEFAULT_EXCLUDES);
+ }
+
+ private String buildPattern(final List<String> patterns,
+ final String defaultPattern) {
+ String pattern = defaultPattern;
+ if (patterns != null && !patterns.isEmpty()) {
+ pattern = StringUtils.join(patterns.iterator(), ",");
+ }
+ return pattern;
+ }
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.html
new file mode 100644
index 00000000..40ae14a2
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.html
@@ -0,0 +1 @@
+
InstrumentMojoInstrumentMojo
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 14 of 125 | 88% | 1 of 6 | 83% | 1 | 5 | 4 | 28 | 0 | 2 |
| executeMojo() |   | 88% |   | 83% | 1 | 4 | 4 | 27 | 0 | 1 |
| InstrumentMojo() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.java.html
new file mode 100644
index 00000000..981c8c17
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/InstrumentMojo.java.html
@@ -0,0 +1,116 @@
+
InstrumentMojo.javaInstrumentMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.codehaus.plexus.util.FileUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.jacoco.core.instr.Instrumenter;
+import org.jacoco.core.runtime.OfflineInstrumentationAccessGenerator;
+
+/**
+ * Performs offline instrumentation. Note that after execution of test you must
+ * restore original classes with help of "restore-instrumented-classes" goal.
+ * <p>
+ * <strong>Warning:</strong> The preferred way for code coverage analysis with
+ * JaCoCo is on-the-fly instrumentation. Offline instrumentation has several
+ * drawbacks and should only be used if a specific scenario explicitly requires
+ * this mode. Please consult <a href="offline.html">documentation</a> about
+ * offline instrumentation before using this mode.
+ * </p>
+ *
+ * @since 0.6.2
+ */
+@Mojo(name = "instrument", defaultPhase = LifecyclePhase.PROCESS_CLASSES, threadSafe = true)
+public class InstrumentMojo extends AbstractJacocoMojo {
+
+ /**
+ * A list of class files to include in instrumentation. May use wildcard
+ * characters (* and ?). When not specified everything will be included.
+ */
+ @Parameter
+ private List<String> includes;
+
+ /**
+ * A list of class files to exclude from instrumentation. May use wildcard
+ * characters (* and ?). When not specified nothing will be excluded. Except
+ * for performance optimization or technical corner cases this option is
+ * normally not required. If you want to exclude classes from the report
+ * please configure the <code>report</code> goal accordingly.
+ */
+ @Parameter
+ private List<String> excludes;
+
+ @Override
+ public void executeMojo()
+ throws MojoExecutionException, MojoFailureException {
+ final File originalClassesDir = new File(
+ getProject().getBuild().getDirectory(),
+ "generated-classes/jacoco");
+ originalClassesDir.mkdirs();
+ final File classesDir = new File(
+ getProject().getBuild().getOutputDirectory());
+ if (!classesDir.exists()) {
+ getLog().info(
+ "Skipping JaCoCo execution due to missing classes directory:"
+ + classesDir);
+ return;
+ }
+
+ final List<String> fileNames;
+ try {
+ fileNames = new FileFilter(includes, excludes)
+ .getFileNames(classesDir);
+ } catch (final IOException e1) {
+ throw new MojoExecutionException(
+ "Unable to get list of files to instrument.", e1);
+ }
+
+ final Instrumenter instrumenter = new Instrumenter(
+ new OfflineInstrumentationAccessGenerator());
+ for (final String fileName : fileNames) {
+ if (fileName.endsWith(".class")) {
+ final File source = new File(classesDir, fileName);
+ final File backup = new File(originalClassesDir, fileName);
+ InputStream input = null;
+ OutputStream output = null;
+ try {
+ FileUtils.copyFile(source, backup);
+ input = new FileInputStream(backup);
+ output = new FileOutputStream(source);
+ instrumenter.instrument(input, output, source.getPath());
+ } catch (final IOException e2) {
+ throw new MojoExecutionException(
+ "Unable to instrument file.", e2);
+ } finally {
+ IOUtil.close(input);
+ IOUtil.close(output);
+ }
+ }
+ }
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.html
new file mode 100644
index 00000000..57a3d2a9
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.html
@@ -0,0 +1 @@
+
MergeMojoMergeMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.java.html
new file mode 100644
index 00000000..47f3ca85
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/MergeMojo.java.html
@@ -0,0 +1,128 @@
+
MergeMojo.javaMergeMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Mads Mohr Christensen - implementation of MergeMojo
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.shared.model.fileset.FileSet;
+import org.apache.maven.shared.model.fileset.util.FileSetManager;
+import org.jacoco.core.tools.ExecFileLoader;
+
+/**
+ * Mojo for merging a set of execution data files (*.exec) into a single file
+ *
+ * @since 0.6.4
+ */
+@Mojo(name = "merge", defaultPhase = LifecyclePhase.GENERATE_RESOURCES, threadSafe = true)
+public class MergeMojo extends AbstractJacocoMojo {
+
+ private static final String MSG_SKIPPING = "Skipping JaCoCo merge execution due to missing execution data files";
+
+ /**
+ * Path to the output file for execution data.
+ */
+ @Parameter(property = "jacoco.destFile", defaultValue = "${project.build.directory}/jacoco.exec")
+ private File destFile;
+
+ /**
+ * This mojo accepts any number of execution data file sets.
+ *
+ * <pre>
+ * <code>
+ * <fileSets>
+ * <fileSet>
+ * <directory>${project.build.directory}</directory>
+ * <includes>
+ * <include>*.exec</include>
+ * </includes>
+ * </fileSet>
+ * </fileSets>
+ * </code>
+ * </pre>
+ */
+ @Parameter(required = true)
+ private List<FileSet> fileSets;
+
+ @Override
+ protected void executeMojo()
+ throws MojoExecutionException, MojoFailureException {
+ if (!canMergeReports()) {
+ return;
+ }
+ executeMerge();
+ }
+
+ private boolean canMergeReports() {
+ if (fileSets == null || fileSets.isEmpty()) {
+ getLog().info(MSG_SKIPPING);
+ return false;
+ }
+ return true;
+ }
+
+ private void executeMerge() throws MojoExecutionException {
+ final ExecFileLoader loader = new ExecFileLoader();
+
+ load(loader);
+ save(loader);
+ }
+
+ private void load(final ExecFileLoader loader)
+ throws MojoExecutionException {
+ final FileSetManager fileSetManager = new FileSetManager(getLog());
+ for (final FileSet fileSet : fileSets) {
+ for (final String includedFilename : fileSetManager
+ .getIncludedFiles(fileSet)) {
+ final File inputFile = new File(fileSet.getDirectory(),
+ includedFilename);
+ if (inputFile.isDirectory()) {
+ continue;
+ }
+ try {
+ getLog().info("Loading execution data file "
+ + inputFile.getAbsolutePath());
+ loader.load(inputFile);
+ } catch (final IOException e) {
+ throw new MojoExecutionException(
+ "Unable to read " + inputFile.getAbsolutePath(), e);
+ }
+ }
+ }
+ }
+
+ private void save(final ExecFileLoader loader)
+ throws MojoExecutionException {
+ if (loader.getExecutionDataStore().getContents().isEmpty()) {
+ getLog().info(MSG_SKIPPING);
+ return;
+ }
+ getLog().info("Writing merged execution data to "
+ + destFile.getAbsolutePath());
+ try {
+ loader.save(destFile, false);
+ } catch (final IOException e) {
+ throw new MojoExecutionException(
+ "Unable to write merged file " + destFile.getAbsolutePath(),
+ e);
+ }
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.html
new file mode 100644
index 00000000..aaef4c37
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.html
@@ -0,0 +1 @@
+
ReportAggregateMojoReportAggregateMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.java.html
new file mode 100644
index 00000000..095e0499
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportAggregateMojo.java.html
@@ -0,0 +1,224 @@
+
ReportAggregateMojo.javaReportAggregateMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * John Oliver, Marc R. Hoffmann, Jan Wloka - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.jacoco.report.IReportGroupVisitor;
+
+/**
+ * <p>
+ * Creates a structured code coverage report (HTML, XML, and CSV) from multiple
+ * projects within reactor. The report is created from all modules this project
+ * depends on, and optionally this project itself. From those projects class and
+ * source files as well as JaCoCo execution data files will be collected. In
+ * addition execution data is collected from the project itself. This also
+ * allows to create coverage reports when tests are in separate projects than
+ * the code under test, for example in case of integration tests.
+ * </p>
+ *
+ * <p>
+ * Using the dependency scope allows to distinguish projects which contribute
+ * execution data but should not become part of the report:
+ * </p>
+ *
+ * <ul>
+ * <li><code>compile</code>, <code>runtime</code>, <code>provided</code>:
+ * Project source and execution data is included in the report.</li>
+ * <li><code>test</code>: Only execution data is considered for the report.</li>
+ * </ul>
+ *
+ * @since 0.7.7
+ */
+@Mojo(name = "report-aggregate", threadSafe = true)
+public class ReportAggregateMojo extends AbstractReportMojo {
+
+ /**
+ * A list of execution data files to include in the report from each
+ * project. May use wildcard characters (* and ?). When not specified all
+ * *.exec files from the target folder will be included.
+ */
+ @Parameter
+ List<String> dataFileIncludes;
+
+ /**
+ * A list of execution data files to exclude from the report. May use
+ * wildcard characters (* and ?). When not specified nothing will be
+ * excluded.
+ */
+ @Parameter
+ List<String> dataFileExcludes;
+
+ /**
+ * Output directory for the reports. Note that this parameter is only
+ * relevant if the goal is run from the command line or from the default
+ * build lifecycle. If the goal is run indirectly as part of a site
+ * generation, the output directory configured in the Maven Site Plugin is
+ * used instead.
+ */
+ @Parameter(defaultValue = "${project.reporting.outputDirectory}/jacoco-aggregate")
+ private File outputDirectory;
+
+ /**
+ * Include this project in the report. If true then this projects class and
+ * source files as well as JaCoCo execution data files will be collected.
+ */
+ @Parameter(defaultValue = "false")
+ private boolean includeCurrentProject;
+
+ /**
+ * The projects in the reactor.
+ */
+ @Parameter(property = "reactorProjects", readonly = true)
+ private List<MavenProject> reactorProjects;
+
+ @Override
+ boolean canGenerateReportRegardingDataFiles() {
+ return true;
+ }
+
+ @Override
+ boolean canGenerateReportRegardingClassesDirectory() {
+ return true;
+ }
+
+ @Override
+ void loadExecutionData(final ReportSupport support) throws IOException {
+ // https://issues.apache.org/jira/browse/MNG-5440
+ if (dataFileIncludes == null) {
+ dataFileIncludes = Arrays.asList("target/*.exec");
+ }
+
+ final FileFilter filter = new FileFilter(dataFileIncludes,
+ dataFileExcludes);
+ loadExecutionData(support, filter, project.getBasedir());
+ for (final MavenProject dependency : findDependencies(
+ Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME,
+ Artifact.SCOPE_PROVIDED, Artifact.SCOPE_TEST)) {
+ loadExecutionData(support, filter, dependency.getBasedir());
+ }
+ }
+
+ private void loadExecutionData(final ReportSupport support,
+ final FileFilter filter, final File basedir) throws IOException {
+ for (final File execFile : filter.getFiles(basedir)) {
+ support.loadExecutionData(execFile);
+ }
+ }
+
+ @Override
+ File getOutputDirectory() {
+ return outputDirectory;
+ }
+
+ @Override
+ void createReport(final IReportGroupVisitor visitor,
+ final ReportSupport support) throws IOException {
+ final IReportGroupVisitor group = visitor.visitGroup(title);
+ if (includeCurrentProject) {
+ processProject(support, group, project);
+ }
+ for (final MavenProject dependency : findDependencies(
+ Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME,
+ Artifact.SCOPE_PROVIDED)) {
+ processProject(support, group, dependency);
+ }
+ }
+
+ private void processProject(final ReportSupport support,
+ final IReportGroupVisitor group, final MavenProject project)
+ throws IOException {
+ support.processProject(group, project.getArtifactId(), project,
+ getIncludes(), getExcludes(), sourceEncoding);
+ }
+
+ public File getReportOutputDirectory() {
+ return outputDirectory;
+ }
+
+ public void setReportOutputDirectory(final File reportOutputDirectory) {
+ if (reportOutputDirectory != null && !reportOutputDirectory
+ .getAbsolutePath().endsWith("jacoco-aggregate")) {
+ outputDirectory = new File(reportOutputDirectory,
+ "jacoco-aggregate");
+ } else {
+ outputDirectory = reportOutputDirectory;
+ }
+ }
+
+ public String getOutputName() {
+ return "jacoco-aggregate/index";
+ }
+
+ public String getName(final Locale locale) {
+ return "JaCoCo Aggregate";
+ }
+
+ private List<MavenProject> findDependencies(final String... scopes) {
+ final List<MavenProject> result = new ArrayList<MavenProject>();
+ final List<String> scopeList = Arrays.asList(scopes);
+ for (final Object dependencyObject : project.getDependencies()) {
+ final Dependency dependency = (Dependency) dependencyObject;
+ if (scopeList.contains(dependency.getScope())) {
+ final MavenProject project = findProjectFromReactor(dependency);
+ if (project != null) {
+ result.add(project);
+ }
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Note that if dependency specified using version range and reactor
+ * contains multiple modules with same artifactId and groupId but of
+ * different versions, then first dependency which matches range will be
+ * selected. For example in case of range <code>[0,2]</code> if version 1 is
+ * before version 2 in reactor, then version 1 will be selected.
+ */
+ private MavenProject findProjectFromReactor(final Dependency d) {
+ final VersionRange depVersionAsRange;
+ try {
+ depVersionAsRange = VersionRange
+ .createFromVersionSpec(d.getVersion());
+ } catch (final InvalidVersionSpecificationException e) {
+ throw new AssertionError(e);
+ }
+
+ for (final MavenProject p : reactorProjects) {
+ final DefaultArtifactVersion pv = new DefaultArtifactVersion(
+ p.getVersion());
+ if (p.getGroupId().equals(d.getGroupId())
+ && p.getArtifactId().equals(d.getArtifactId())
+ && depVersionAsRange.containsVersion(pv)) {
+ return p;
+ }
+ }
+ return null;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$1.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$1.html
new file mode 100644
index 00000000..12a96ef9
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$1.html
@@ -0,0 +1 @@
+
ReportFormat.new ReportFormat() {...}ReportFormat.new ReportFormat() {...}
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$2.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$2.html
new file mode 100644
index 00000000..f7020f77
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$2.html
@@ -0,0 +1 @@
+
ReportFormat.new ReportFormat() {...}ReportFormat.new ReportFormat() {...}
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$3.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$3.html
new file mode 100644
index 00000000..2c6fb359
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat$3.html
@@ -0,0 +1 @@
+
ReportFormat.new ReportFormat() {...}ReportFormat.new ReportFormat() {...}
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.html
new file mode 100644
index 00000000..910d6354
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.html
@@ -0,0 +1 @@
+
ReportFormatReportFormat
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 0 of 34 | 100% | 0 of 0 | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| static {...} |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.java.html
new file mode 100644
index 00000000..834d67e1
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportFormat.java.html
@@ -0,0 +1,81 @@
+
ReportFormat.javaReportFormat.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Marc R. Hoffmann - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Locale;
+
+import org.jacoco.report.FileMultiReportOutput;
+import org.jacoco.report.IReportVisitor;
+import org.jacoco.report.csv.CSVFormatter;
+import org.jacoco.report.html.HTMLFormatter;
+import org.jacoco.report.xml.XMLFormatter;
+
+/**
+ * Configurable output formats for the report goals.
+ */
+public enum ReportFormat {
+
+ /**
+ * Multi-page html report.
+ */
+ HTML() {
+ @Override
+ IReportVisitor createVisitor(final AbstractReportMojo mojo,
+ final Locale locale) throws IOException {
+ final HTMLFormatter htmlFormatter = new HTMLFormatter();
+ htmlFormatter.setOutputEncoding(mojo.outputEncoding);
+ htmlFormatter.setLocale(locale);
+ if (mojo.footer != null) {
+ htmlFormatter.setFooterText(mojo.footer);
+ }
+ return htmlFormatter.createVisitor(
+ new FileMultiReportOutput(mojo.getOutputDirectory()));
+ }
+ },
+
+ /**
+ * Single-file XML report.
+ */
+ XML() {
+ @Override
+ IReportVisitor createVisitor(final AbstractReportMojo mojo,
+ final Locale locale) throws IOException {
+ final XMLFormatter xml = new XMLFormatter();
+ xml.setOutputEncoding(mojo.outputEncoding);
+ return xml.createVisitor(new FileOutputStream(
+ new File(mojo.getOutputDirectory(), "jacoco.xml")));
+ }
+ },
+
+ /**
+ * Single-file CSV report.
+ */
+ CSV() {
+ @Override
+ IReportVisitor createVisitor(final AbstractReportMojo mojo,
+ final Locale locale) throws IOException {
+ final CSVFormatter csv = new CSVFormatter();
+ csv.setOutputEncoding(mojo.outputEncoding);
+ return csv.createVisitor(new FileOutputStream(
+ new File(mojo.getOutputDirectory(), "jacoco.csv")));
+ }
+ };
+
+ abstract IReportVisitor createVisitor(AbstractReportMojo mojo,
+ final Locale locale) throws IOException;
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.html
new file mode 100644
index 00000000..f6c3e821
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.html
@@ -0,0 +1 @@
+
ReportITMojoReportITMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.java.html
new file mode 100644
index 00000000..9bbda1ad
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportITMojo.java.html
@@ -0,0 +1,102 @@
+
ReportITMojo.javaReportITMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.jacoco.report.IReportGroupVisitor;
+
+/**
+ * Same as <code>report</code>, but provides default values suitable for
+ * integration-tests:
+ * <ul>
+ * <li>bound to <code>report-integration</code> phase</li>
+ * <li>different <code>dataFile</code></li>
+ * </ul>
+ *
+ * @since 0.6.4
+ */
+@Mojo(name = "report-integration", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
+public class ReportITMojo extends AbstractReportMojo {
+
+ /**
+ * Output directory for the reports. Note that this parameter is only
+ * relevant if the goal is run from the command line or from the default
+ * build lifecycle. If the goal is run indirectly as part of a site
+ * generation, the output directory configured in the Maven Site Plugin is
+ * used instead.
+ */
+ @Parameter(defaultValue = "${project.reporting.outputDirectory}/jacoco-it")
+ private File outputDirectory;
+
+ /**
+ * File with execution data.
+ */
+ @Parameter(defaultValue = "${project.build.directory}/jacoco-it.exec")
+ private File dataFile;
+
+ @Override
+ boolean canGenerateReportRegardingDataFiles() {
+ return dataFile.exists();
+ }
+
+ @Override
+ boolean canGenerateReportRegardingClassesDirectory() {
+ return new File(project.getBuild().getOutputDirectory()).exists();
+ }
+
+ @Override
+ void loadExecutionData(final ReportSupport support) throws IOException {
+ support.loadExecutionData(dataFile);
+ }
+
+ @Override
+ File getOutputDirectory() {
+ return outputDirectory;
+ }
+
+ @Override
+ void createReport(final IReportGroupVisitor visitor,
+ final ReportSupport support) throws IOException {
+ support.processProject(visitor, title, project, getIncludes(),
+ getExcludes(), sourceEncoding);
+ }
+
+ public File getReportOutputDirectory() {
+ return outputDirectory;
+ }
+
+ public void setReportOutputDirectory(final File reportOutputDirectory) {
+ if (reportOutputDirectory != null && !reportOutputDirectory
+ .getAbsolutePath().endsWith("jacoco-it")) {
+ outputDirectory = new File(reportOutputDirectory, "jacoco-it");
+ } else {
+ outputDirectory = reportOutputDirectory;
+ }
+ }
+
+ public String getOutputName() {
+ return "jacoco-it/index";
+ }
+
+ public String getName(final Locale locale) {
+ return "JaCoCo IT";
+ }
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.html
new file mode 100644
index 00000000..dd9d37af
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.html
@@ -0,0 +1 @@
+
ReportMojoReportMojo
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.java.html
new file mode 100644
index 00000000..5fc119e8
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportMojo.java.html
@@ -0,0 +1,97 @@
+
ReportMojo.javaReportMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.jacoco.report.IReportGroupVisitor;
+
+/**
+ * Creates a code coverage report for tests of a single project in multiple
+ * formats (HTML, XML, and CSV).
+ *
+ * @since 0.5.3
+ */
+@Mojo(name = "report", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
+public class ReportMojo extends AbstractReportMojo {
+
+ /**
+ * Output directory for the reports. Note that this parameter is only
+ * relevant if the goal is run from the command line or from the default
+ * build lifecycle. If the goal is run indirectly as part of a site
+ * generation, the output directory configured in the Maven Site Plugin is
+ * used instead.
+ */
+ @Parameter(defaultValue = "${project.reporting.outputDirectory}/jacoco")
+ private File outputDirectory;
+
+ /**
+ * File with execution data.
+ */
+ @Parameter(property = "jacoco.dataFile", defaultValue = "${project.build.directory}/jacoco.exec")
+ private File dataFile;
+
+ @Override
+ boolean canGenerateReportRegardingDataFiles() {
+ return dataFile.exists();
+ }
+
+ @Override
+ boolean canGenerateReportRegardingClassesDirectory() {
+ return new File(project.getBuild().getOutputDirectory()).exists();
+ }
+
+ @Override
+ void loadExecutionData(final ReportSupport support) throws IOException {
+ support.loadExecutionData(dataFile);
+ }
+
+ @Override
+ File getOutputDirectory() {
+ return outputDirectory;
+ }
+
+ @Override
+ void createReport(final IReportGroupVisitor visitor,
+ final ReportSupport support) throws IOException {
+ support.processProject(visitor, title, project, getIncludes(),
+ getExcludes(), sourceEncoding);
+ }
+
+ public File getReportOutputDirectory() {
+ return outputDirectory;
+ }
+
+ public void setReportOutputDirectory(final File reportOutputDirectory) {
+ if (reportOutputDirectory != null && !reportOutputDirectory
+ .getAbsolutePath().endsWith("jacoco")) {
+ outputDirectory = new File(reportOutputDirectory, "jacoco");
+ } else {
+ outputDirectory = reportOutputDirectory;
+ }
+ }
+
+ public String getOutputName() {
+ return "jacoco/index";
+ }
+
+ public String getName(final Locale locale) {
+ return "JaCoCo";
+ }
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$NoSourceLocator.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$NoSourceLocator.html
new file mode 100644
index 00000000..7841bda6
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$NoSourceLocator.html
@@ -0,0 +1 @@
+
ReportSupport.NoSourceLocatorReportSupport.NoSourceLocator
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$SourceFileCollection.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$SourceFileCollection.html
new file mode 100644
index 00000000..095344e0
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport$SourceFileCollection.html
@@ -0,0 +1 @@
+
ReportSupport.SourceFileCollectionReportSupport.SourceFileCollection
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.html
new file mode 100644
index 00000000..4b6f2004
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.html
@@ -0,0 +1 @@
+
ReportSupportReportSupport
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 7 of 269 | 97% | 1 of 16 | 93% | 1 | 19 | 1 | 48 | 0 | 11 |
| resolvePath(MavenProject, String) |   | 58% |   | 50% | 1 | 2 | 1 | 4 | 0 | 1 |
| logBundleInfo(IBundleCoverage, Collection) |  | 100% |  | 100% | 0 | 5 | 0 | 8 | 0 | 1 |
| processProject(IReportGroupVisitor, String, MavenProject, List, List, ISourceFileLocator) |  | 100% |  | 100% | 0 | 3 | 0 | 11 | 0 | 1 |
| getCompileSourceRoots(MavenProject) |  | 100% |  | 100% | 0 | 2 | 0 | 4 | 0 | 1 |
| initRootVisitor() |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| ReportSupport(Log) |  | 100% | | n/a | 0 | 1 | 0 | 5 | 0 | 1 |
| loadExecutionData(File) |  | 100% | | n/a | 0 | 1 | 0 | 3 | 0 | 1 |
| addRulesChecker(List, IViolationsOutput) |  | 100% | | n/a | 0 | 1 | 0 | 4 | 0 | 1 |
| processProject(IReportGroupVisitor, MavenProject, List, List) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| processProject(IReportGroupVisitor, String, MavenProject, List, List, String) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
| addVisitor(IReportVisitor) |  | 100% | | n/a | 0 | 1 | 0 | 2 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.java.html
new file mode 100644
index 00000000..1e9631f8
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/ReportSupport.java.html
@@ -0,0 +1,263 @@
+
ReportSupport.javaReportSupport.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import static java.lang.String.format;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.project.MavenProject;
+import org.jacoco.core.analysis.Analyzer;
+import org.jacoco.core.analysis.CoverageBuilder;
+import org.jacoco.core.analysis.IBundleCoverage;
+import org.jacoco.core.analysis.IClassCoverage;
+import org.jacoco.core.tools.ExecFileLoader;
+import org.jacoco.report.IReportGroupVisitor;
+import org.jacoco.report.IReportVisitor;
+import org.jacoco.report.ISourceFileLocator;
+import org.jacoco.report.MultiReportVisitor;
+import org.jacoco.report.check.IViolationsOutput;
+import org.jacoco.report.check.Rule;
+import org.jacoco.report.check.RulesChecker;
+
+/**
+ * Encapsulates the tasks to create reports for Maven projects. Instances are
+ * supposed to be used in the following sequence:
+ *
+ * <ol>
+ * <li>Create an instance</li>
+ * <li>Load one or multiple exec files with
+ * <code>loadExecutionData()</code></li>
+ * <li>Add one or multiple formatters with <code>addXXX()</code> methods</li>
+ * <li>Create the root visitor with <code>initRootVisitor()</code></li>
+ * <li>Process one or multiple projects with <code>processProject()</code></li>
+ * </ol>
+ */
+final class ReportSupport {
+
+ private final Log log;
+ private final ExecFileLoader loader;
+ private final List<IReportVisitor> formatters;
+
+ /**
+ * Construct a new instance with the given log output.
+ *
+ * @param log
+ * for log output
+ */
+ public ReportSupport(final Log log) {
+ this.log = log;
+ this.loader = new ExecFileLoader();
+ this.formatters = new ArrayList<IReportVisitor>();
+ }
+
+ /**
+ * Loads the given execution data file.
+ *
+ * @param execFile
+ * execution data file to load
+ * @throws IOException
+ * if the file can't be loaded
+ */
+ public void loadExecutionData(final File execFile) throws IOException {
+ log.info("Loading execution data file " + execFile);
+ loader.load(execFile);
+ }
+
+ public void addVisitor(final IReportVisitor visitor) {
+ formatters.add(visitor);
+ }
+
+ public void addRulesChecker(final List<Rule> rules,
+ final IViolationsOutput output) {
+ final RulesChecker checker = new RulesChecker();
+ checker.setRules(rules);
+ formatters.add(checker.createVisitor(output));
+ }
+
+ public IReportVisitor initRootVisitor() throws IOException {
+ final IReportVisitor visitor = new MultiReportVisitor(formatters);
+ visitor.visitInfo(loader.getSessionInfoStore().getInfos(),
+ loader.getExecutionDataStore().getContents());
+ return visitor;
+ }
+
+ /**
+ * Calculates coverage for the given project and emits it to the report
+ * group without source references
+ *
+ * @param visitor
+ * group visitor to emit the project's coverage to
+ * @param project
+ * the MavenProject
+ * @param includes
+ * list of includes patterns
+ * @param excludes
+ * list of excludes patterns
+ * @throws IOException
+ * if class files can't be read
+ */
+ public void processProject(final IReportGroupVisitor visitor,
+ final MavenProject project, final List<String> includes,
+ final List<String> excludes) throws IOException {
+ processProject(visitor, project.getArtifactId(), project, includes,
+ excludes, new NoSourceLocator());
+ }
+
+ /**
+ * Calculates coverage for the given project and emits it to the report
+ * group including source references
+ *
+ * @param visitor
+ * group visitor to emit the project's coverage to
+ * @param bundleName
+ * name for this project in the report
+ * @param project
+ * the MavenProject
+ * @param includes
+ * list of includes patterns
+ * @param excludes
+ * list of excludes patterns
+ * @param srcEncoding
+ * encoding of the source files within this project
+ * @throws IOException
+ * if class files can't be read
+ */
+ public void processProject(final IReportGroupVisitor visitor,
+ final String bundleName, final MavenProject project,
+ final List<String> includes, final List<String> excludes,
+ final String srcEncoding) throws IOException {
+ processProject(visitor, bundleName, project, includes, excludes,
+ new SourceFileCollection(project, srcEncoding));
+ }
+
+ private void processProject(final IReportGroupVisitor visitor,
+ final String bundleName, final MavenProject project,
+ final List<String> includes, final List<String> excludes,
+ final ISourceFileLocator locator) throws IOException {
+ final CoverageBuilder builder = new CoverageBuilder();
+ final File classesDir = new File(
+ project.getBuild().getOutputDirectory());
+
+ if (classesDir.isDirectory()) {
+ final Analyzer analyzer = new Analyzer(
+ loader.getExecutionDataStore(), builder);
+ final FileFilter filter = new FileFilter(includes, excludes);
+ for (final File file : filter.getFiles(classesDir)) {
+ analyzer.analyzeAll(file);
+ }
+ }
+
+ final IBundleCoverage bundle = builder.getBundle(bundleName);
+ logBundleInfo(bundle, builder.getNoMatchClasses());
+
+ visitor.visitBundle(bundle, locator);
+ }
+
+ private void logBundleInfo(final IBundleCoverage bundle,
+ final Collection<IClassCoverage> nomatch) {
+ log.info(format("Analyzed bundle '%s' with %s classes",
+ bundle.getName(),
+ Integer.valueOf(bundle.getClassCounter().getTotalCount())));
+ if (!nomatch.isEmpty()) {
+ log.warn(format(
+ "Classes in bundle '%s' do not match with execution data. "
+ + "For report generation the same class files must be used as at runtime.",
+ bundle.getName()));
+ for (final IClassCoverage c : nomatch) {
+ log.warn(format("Execution data for class %s does not match.",
+ c.getName()));
+ }
+ }
+ if (bundle.containsCode()
+ && bundle.getLineCounter().getTotalCount() == 0) {
+ log.warn(
+ "To enable source code annotation class files have to be compiled with debug information.");
+ }
+ }
+
+ private class NoSourceLocator implements ISourceFileLocator {
+
+ public Reader getSourceFile(final String packageName,
+ final String fileName) {
+ return null;
+ }
+
+ public int getTabWidth() {
+ return 0;
+ }
+ }
+
+ private class SourceFileCollection implements ISourceFileLocator {
+
+ private final List<File> sourceRoots;
+ private final String encoding;
+
+ public SourceFileCollection(final MavenProject project,
+ final String encoding) {
+ this.sourceRoots = getCompileSourceRoots(project);
+ this.encoding = encoding;
+ }
+
+ public Reader getSourceFile(final String packageName,
+ final String fileName) throws IOException {
+ final String r;
+ if (packageName.length() > 0) {
+ r = packageName + '/' + fileName;
+ } else {
+ r = fileName;
+ }
+ for (final File sourceRoot : sourceRoots) {
+ final File file = new File(sourceRoot, r);
+ if (file.exists() && file.isFile()) {
+ return new InputStreamReader(new FileInputStream(file),
+ encoding);
+ }
+ }
+ return null;
+ }
+
+ public int getTabWidth() {
+ return 4;
+ }
+ }
+
+ private static List<File> getCompileSourceRoots(
+ final MavenProject project) {
+ final List<File> result = new ArrayList<File>();
+ for (final Object path : project.getCompileSourceRoots()) {
+ result.add(resolvePath(project, (String) path));
+ }
+ return result;
+ }
+
+ private static File resolvePath(final MavenProject project,
+ final String path) {
+ File file = new File(path);
+ if (!file.isAbsolute()) {
+ file = new File(project.getBasedir(), path);
+ }
+ return file;
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.html
new file mode 100644
index 00000000..785131bd
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.html
@@ -0,0 +1 @@
+
RestoreMojoRestoreMojo
| Element | Missed Instructions | Cov. | Missed Branches | Cov. | Missed | Cxty | Missed | Lines | Missed | Methods |
| Total | 7 of 32 | 78% | 0 of 0 | n/a | 0 | 2 | 2 | 8 | 0 | 2 |
| executeMojo() |   | 75% | | n/a | 0 | 1 | 2 | 7 | 0 | 1 |
| RestoreMojo() |  | 100% | | n/a | 0 | 1 | 0 | 1 | 0 | 1 |
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.java.html
new file mode 100644
index 00000000..19de87dd
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RestoreMojo.java.html
@@ -0,0 +1,48 @@
+
RestoreMojo.javaRestoreMojo.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * Restores original classes as they were before offline instrumentation.
+ *
+ * @since 0.6.2
+ */
+@Mojo(name = "restore-instrumented-classes", defaultPhase = LifecyclePhase.PREPARE_PACKAGE, threadSafe = true)
+public class RestoreMojo extends AbstractJacocoMojo {
+
+ @Override
+ protected void executeMojo()
+ throws MojoExecutionException, MojoFailureException {
+ final File originalClassesDir = new File(
+ getProject().getBuild().getDirectory(),
+ "generated-classes/jacoco");
+ final File classesDir = new File(
+ getProject().getBuild().getOutputDirectory());
+ try {
+ FileUtils.copyDirectoryStructure(originalClassesDir, classesDir);
+ } catch (final IOException e) {
+ throw new MojoFailureException("Unable to restore classes.", e);
+ }
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.html
new file mode 100644
index 00000000..af7b65e0
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.html
@@ -0,0 +1 @@
+
RuleConfigurationRuleConfiguration
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.java.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.java.html
new file mode 100644
index 00000000..e57d5152
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/RuleConfiguration.java.html
@@ -0,0 +1,74 @@
+
RuleConfiguration.javaRuleConfiguration.java
/*******************************************************************************
+ * Copyright (c) 2009, 2022 Mountainminds GmbH & Co. KG and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Evgeny Mandrikov - initial API and implementation
+ * Kyle Lieber - implementation of CheckMojo
+ * Marc Hoffmann - redesign using report APIs
+ *
+ *******************************************************************************/
+package org.jacoco.maven;
+
+import java.util.List;
+
+import org.codehaus.plexus.util.StringUtils;
+import org.jacoco.core.analysis.ICoverageNode.ElementType;
+import org.jacoco.report.check.Limit;
+import org.jacoco.report.check.Rule;
+
+/**
+ * Wrapper for {@link Rule} objects to allow Maven style includes/excludes lists
+ *
+ */
+public class RuleConfiguration {
+
+ final Rule rule;
+
+ /**
+ * Create a new configuration instance.
+ */
+ public RuleConfiguration() {
+ rule = new Rule();
+ }
+
+ /**
+ * @param element
+ * element type this rule applies to TODO: use ElementType
+ * directly once Maven 3 is required.
+ */
+ public void setElement(final String element) {
+ rule.setElement(ElementType.valueOf(element));
+ }
+
+ /**
+ * @param includes
+ * includes patterns
+ */
+ public void setIncludes(final List<String> includes) {
+ rule.setIncludes(StringUtils.join(includes.iterator(), ":"));
+ }
+
+ /**
+ *
+ * @param excludes
+ * excludes patterns
+ */
+ public void setExcludes(final List<String> excludes) {
+ rule.setExcludes(StringUtils.join(excludes.iterator(), ":"));
+ }
+
+ /**
+ * @param limits
+ * list of {@link Limit}s configured for this rule
+ */
+ public void setLimits(final List<Limit> limits) {
+ rule.setLimits(limits);
+ }
+
+}
+
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.html
new file mode 100644
index 00000000..9e98165d
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.html
@@ -0,0 +1 @@
+
org.jacoco.mavenorg.jacoco.maven
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.source.html b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.source.html
new file mode 100644
index 00000000..6cf037e9
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-maven-plugin/org.jacoco.maven/index.source.html
@@ -0,0 +1 @@
+
org.jacoco.mavenorg.jacoco.maven
\ No newline at end of file
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchfc.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchfc.gif
new file mode 100644
index 00000000..989b46d3
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchfc.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchnc.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchnc.gif
new file mode 100644
index 00000000..1933e07c
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchnc.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchpc.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchpc.gif
new file mode 100644
index 00000000..cbf711b7
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/branchpc.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/bundle.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/bundle.gif
new file mode 100644
index 00000000..fca9c53e
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/bundle.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/class.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/class.gif
new file mode 100644
index 00000000..eb348fb0
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/class.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/down.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/down.gif
new file mode 100644
index 00000000..440a14db
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/down.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/greenbar.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/greenbar.gif
new file mode 100644
index 00000000..0ba65672
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/greenbar.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/group.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/group.gif
new file mode 100644
index 00000000..a4ea580d
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/group.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/method.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/method.gif
new file mode 100644
index 00000000..7d24707e
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/method.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/package.gif b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/package.gif
new file mode 100644
index 00000000..131c28da
Binary files /dev/null and b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/package.gif differ
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.css b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.css
new file mode 100644
index 00000000..be5166e0
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.css
@@ -0,0 +1,13 @@
+/* Pretty printing styles. Used with prettify.js. */
+
+.str { color: #2A00FF; }
+.kwd { color: #7F0055; font-weight:bold; }
+.com { color: #3F5FBF; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+.tag { color: #008; }
+.atn { color: #606; }
+.atv { color: #080; }
+.dec { color: #606; }
diff --git a/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.js b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.js
new file mode 100644
index 00000000..b2766fe0
--- /dev/null
+++ b/jacoco-0.8.9-20220705.221536-11/coverage/jacoco-resources/prettify.js
@@ -0,0 +1,1510 @@
+// Copyright (C) 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+/**
+ * @fileoverview
+ * some functions for browser-side pretty printing of code contained in html.
+ *
+ *
+ * For a fairly comprehensive set of languages see the
+ * README
+ * file that came with this source. At a minimum, the lexer should work on a
+ * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
+ * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk
+ * and a subset of Perl, but, because of commenting conventions, doesn't work on
+ * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
+ *
+ * Usage:
+ * - include this source file in an html page via
+ * {@code }
+ *
- define style rules. See the example page for examples.
+ *
- mark the {@code
} and {@code } tags in your source with
+ * {@code class=prettyprint.}
+ * You can also use the (html deprecated) {@code } tag, but the pretty
+ * printer needs to do more substantial DOM manipulations to support that, so
+ * some css styles may not be preserved.
+ *
+ * That's it. I wanted to keep the API as simple as possible, so there's no
+ * need to specify which language the code is in, but if you wish, you can add
+ * another class to the {@code
} or {@code } element to specify the
+ * language, as in {@code }. Any class that
+ * starts with "lang-" followed by a file extension, specifies the file type.
+ * See the "lang-*.js" files in this directory for code that implements
+ * per-language file handlers.
+ *
+ * Change log:
+ * cbeust, 2006/08/22
+ *
+ * Java annotations (start with "@") are now captured as literals ("lit")
+ *
+ * @requires console
+ */
+
+// JSLint declarations
+/*global console, document, navigator, setTimeout, window */
+
+/**
+ * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
+ * UI events.
+ * If set to {@code false}, {@code prettyPrint()} is synchronous.
+ */
+window['PR_SHOULD_USE_CONTINUATION'] = true;
+
+/** the number of characters between tab columns */
+window['PR_TAB_WIDTH'] = 8;
+
+/** Walks the DOM returning a properly escaped version of innerHTML.
+ * @param {Node} node
+ * @param {Array.} out output buffer that receives chunks of HTML.
+ */
+window['PR_normalizedHtml']
+
+/** Contains functions for creating and registering new language handlers.
+ * @type {Object}
+ */
+ = window['PR']
+
+/** Pretty print a chunk of code.
+ *
+ * @param {string} sourceCodeHtml code as html
+ * @return {string} code as html, but prettier
+ */
+ = window['prettyPrintOne']
+/** Find all the {@code } and {@code } tags in the DOM with
+ * {@code class=prettyprint} and prettify them.
+ * @param {Function?} opt_whenDone if specified, called when the last entry
+ * has been finished.
+ */
+ = window['prettyPrint'] = void 0;
+
+/** browser detection. @extern @returns false if not IE, otherwise the major version. */
+window['_pr_isIE6'] = function () {
+ var ieVersion = navigator && navigator.userAgent &&
+ navigator.userAgent.match(/\bMSIE ([678])\./);
+ ieVersion = ieVersion ? +ieVersion[1] : false;
+ window['_pr_isIE6'] = function () { return ieVersion; };
+ return ieVersion;
+};
+
+
+(function () {
+ // Keyword lists for various languages.
+ var FLOW_CONTROL_KEYWORDS =
+ "break continue do else for if return while ";
+ var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
+ "double enum extern float goto int long register short signed sizeof " +
+ "static struct switch typedef union unsigned void volatile ";
+ var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
+ "new operator private protected public this throw true try typeof ";
+ var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
+ "concept concept_map const_cast constexpr decltype " +
+ "dynamic_cast explicit export friend inline late_check " +
+ "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
+ "template typeid typename using virtual wchar_t where ";
+ var JAVA_KEYWORDS = COMMON_KEYWORDS +
+ "abstract boolean byte extends final finally implements import " +
+ "instanceof null native package strictfp super synchronized throws " +
+ "transient ";
+ var CSHARP_KEYWORDS = JAVA_KEYWORDS +
+ "as base by checked decimal delegate descending event " +
+ "fixed foreach from group implicit in interface internal into is lock " +
+ "object out override orderby params partial readonly ref sbyte sealed " +
+ "stackalloc string select uint ulong unchecked unsafe ushort var ";
+ var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
+ "debugger eval export function get null set undefined var with " +
+ "Infinity NaN ";
+ var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
+ "goto if import last local my next no our print package redo require " +
+ "sub undef unless until use wantarray while BEGIN END ";
+ var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
+ "elif except exec finally from global import in is lambda " +
+ "nonlocal not or pass print raise try with yield " +
+ "False True None ";
+ var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
+ " defined elsif end ensure false in module next nil not or redo rescue " +
+ "retry self super then true undef unless until when yield BEGIN END ";
+ var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
+ "function in local set then until ";
+ var ALL_KEYWORDS = (
+ CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
+ PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
+
+ // token style names. correspond to css classes
+ /** token style for a string literal */
+ var PR_STRING = 'str';
+ /** token style for a keyword */
+ var PR_KEYWORD = 'kwd';
+ /** token style for a comment */
+ var PR_COMMENT = 'com';
+ /** token style for a type */
+ var PR_TYPE = 'typ';
+ /** token style for a literal value. e.g. 1, null, true. */
+ var PR_LITERAL = 'lit';
+ /** token style for a punctuation string. */
+ var PR_PUNCTUATION = 'pun';
+ /** token style for a punctuation string. */
+ var PR_PLAIN = 'pln';
+
+ /** token style for an sgml tag. */
+ var PR_TAG = 'tag';
+ /** token style for a markup declaration such as a DOCTYPE. */
+ var PR_DECLARATION = 'dec';
+ /** token style for embedded source. */
+ var PR_SOURCE = 'src';
+ /** token style for an sgml attribute name. */
+ var PR_ATTRIB_NAME = 'atn';
+ /** token style for an sgml attribute value. */
+ var PR_ATTRIB_VALUE = 'atv';
+
+ /**
+ * A class that indicates a section of markup that is not code, e.g. to allow
+ * embedding of line numbers within code listings.
+ */
+ var PR_NOCODE = 'nocode';
+
+ /** A set of tokens that can precede a regular expression literal in
+ * javascript.
+ * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
+ * list, but I've removed ones that might be problematic when seen in
+ * languages that don't support regular expression literals.
+ *
+ * Specifically, I've removed any keywords that can't precede a regexp
+ * literal in a syntactically legal javascript program, and I've removed the
+ * "in" keyword since it's not a keyword in many languages, and might be used
+ * as a count of inches.
+ *
+ *
The link a above does not accurately describe EcmaScript rules since
+ * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
+ * very well in practice.
+ *
+ * @private
+ */
+ var REGEXP_PRECEDER_PATTERN = function () {
+ var preceders = [
+ "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
+ "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
+ "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
+ "<", "<<", "<<=", "<=", "=", "==", "===", ">",
+ ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
+ "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
+ "||=", "~" /* handles =~ and !~ */,
+ "break", "case", "continue", "delete",
+ "do", "else", "finally", "instanceof",
+ "return", "throw", "try", "typeof"
+ ];
+ var pattern = '(?:^^|[+-]';
+ for (var i = 0; i < preceders.length; ++i) {
+ pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
+ }
+ pattern += ')\\s*'; // matches at end, and matches empty string
+ return pattern;
+ // CAVEAT: this does not properly handle the case where a regular
+ // expression immediately follows another since a regular expression may
+ // have flags for case-sensitivity and the like. Having regexp tokens
+ // adjacent is not valid in any language I'm aware of, so I'm punting.
+ // TODO: maybe style special characters inside a regexp as punctuation.
+ }();
+
+ // Define regexps here so that the interpreter doesn't have to create an
+ // object each time the function containing them is called.
+ // The language spec requires a new object created even if you don't access
+ // the $1 members.
+ var pr_amp = /&/g;
+ var pr_lt = //g;
+ var pr_quot = /\"/g;
+ /** like textToHtml but escapes double quotes to be attribute safe. */
+ function attribToHtml(str) {
+ return str.replace(pr_amp, '&')
+ .replace(pr_lt, '<')
+ .replace(pr_gt, '>')
+ .replace(pr_quot, '"');
+ }
+
+ /** escapest html special characters to html. */
+ function textToHtml(str) {
+ return str.replace(pr_amp, '&')
+ .replace(pr_lt, '<')
+ .replace(pr_gt, '>');
+ }
+
+
+ var pr_ltEnt = /</g;
+ var pr_gtEnt = />/g;
+ var pr_aposEnt = /'/g;
+ var pr_quotEnt = /"/g;
+ var pr_ampEnt = /&/g;
+ var pr_nbspEnt = / /g;
+ /** unescapes html to plain text. */
+ function htmlToText(html) {
+ var pos = html.indexOf('&');
+ if (pos < 0) { return html; }
+ // Handle numeric entities specially. We can't use functional substitution
+ // since that doesn't work in older versions of Safari.
+ // These should be rare since most browsers convert them to normal chars.
+ for (--pos; (pos = html.indexOf('', pos + 1)) >= 0;) {
+ var end = html.indexOf(';', pos);
+ if (end >= 0) {
+ var num = html.substring(pos + 3, end);
+ var radix = 10;
+ if (num && num.charAt(0) === 'x') {
+ num = num.substring(1);
+ radix = 16;
+ }
+ var codePoint = parseInt(num, radix);
+ if (!isNaN(codePoint)) {
+ html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
+ html.substring(end + 1));
+ }
+ }
+ }
+
+ return html.replace(pr_ltEnt, '<')
+ .replace(pr_gtEnt, '>')
+ .replace(pr_aposEnt, "'")
+ .replace(pr_quotEnt, '"')
+ .replace(pr_nbspEnt, ' ')
+ .replace(pr_ampEnt, '&');
+ }
+
+ /** is the given node's innerHTML normally unescaped? */
+ function isRawContent(node) {
+ return 'XMP' === node.tagName;
+ }
+
+ var newlineRe = /[\r\n]/g;
+ /**
+ * Are newlines and adjacent spaces significant in the given node's innerHTML?
+ */
+ function isPreformatted(node, content) {
+ // PRE means preformatted, and is a very common case, so don't create
+ // unnecessary computed style objects.
+ if ('PRE' === node.tagName) { return true; }
+ if (!newlineRe.test(content)) { return true; } // Don't care
+ var whitespace = '';
+ // For disconnected nodes, IE has no currentStyle.
+ if (node.currentStyle) {
+ whitespace = node.currentStyle.whiteSpace;
+ } else if (window.getComputedStyle) {
+ // Firefox makes a best guess if node is disconnected whereas Safari
+ // returns the empty string.
+ whitespace = window.getComputedStyle(node, null).whiteSpace;
+ }
+ return !whitespace || whitespace === 'pre';
+ }
+
+ function normalizedHtml(node, out, opt_sortAttrs) {
+ switch (node.nodeType) {
+ case 1: // an element
+ var name = node.tagName.toLowerCase();
+
+ out.push('<', name);
+ var attrs = node.attributes;
+ var n = attrs.length;
+ if (n) {
+ if (opt_sortAttrs) {
+ var sortedAttrs = [];
+ for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
+ sortedAttrs.sort(function (a, b) {
+ return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
+ });
+ attrs = sortedAttrs;
+ }
+ for (var i = 0; i < n; ++i) {
+ var attr = attrs[i];
+ if (!attr.specified) { continue; }
+ out.push(' ', attr.name.toLowerCase(),
+ '="', attribToHtml(attr.value), '"');
+ }
+ }
+ out.push('>');
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out, opt_sortAttrs);
+ }
+ if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
+ out.push('<\/', name, '>');
+ }
+ break;
+ case 3: case 4: // text
+ out.push(textToHtml(node.nodeValue));
+ break;
+ }
+ }
+
+ /**
+ * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
+ * matches the union o the sets o strings matched d by the input RegExp.
+ * Since it matches globally, if the input strings have a start-of-input
+ * anchor (/^.../), it is ignored for the purposes of unioning.
+ * @param {Array.} regexs non multiline, non-global regexs.
+ * @return {RegExp} a global regex.
+ */
+ function combinePrefixPatterns(regexs) {
+ var capturedGroupIndex = 0;
+
+ var needToFoldCase = false;
+ var ignoreCase = false;
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.ignoreCase) {
+ ignoreCase = true;
+ } else if (/[a-z]/i.test(regex.source.replace(
+ /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
+ needToFoldCase = true;
+ ignoreCase = false;
+ break;
+ }
+ }
+
+ function decodeEscape(charsetPart) {
+ if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
+ switch (charsetPart.charAt(1)) {
+ case 'b': return 8;
+ case 't': return 9;
+ case 'n': return 0xa;
+ case 'v': return 0xb;
+ case 'f': return 0xc;
+ case 'r': return 0xd;
+ case 'u': case 'x':
+ return parseInt(charsetPart.substring(2), 16)
+ || charsetPart.charCodeAt(1);
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7':
+ return parseInt(charsetPart.substring(1), 8);
+ default: return charsetPart.charCodeAt(1);
+ }
+ }
+
+ function encodeEscape(charCode) {
+ if (charCode < 0x20) {
+ return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
+ }
+ var ch = String.fromCharCode(charCode);
+ if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
+ ch = '\\' + ch;
+ }
+ return ch;
+ }
+
+ function caseFoldCharset(charSet) {
+ var charsetParts = charSet.substring(1, charSet.length - 1).match(
+ new RegExp(
+ '\\\\u[0-9A-Fa-f]{4}'
+ + '|\\\\x[0-9A-Fa-f]{2}'
+ + '|\\\\[0-3][0-7]{0,2}'
+ + '|\\\\[0-7]{1,2}'
+ + '|\\\\[\\s\\S]'
+ + '|-'
+ + '|[^-\\\\]',
+ 'g'));
+ var groups = [];
+ var ranges = [];
+ var inverse = charsetParts[0] === '^';
+ for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
+ var p = charsetParts[i];
+ switch (p) {
+ case '\\B': case '\\b':
+ case '\\D': case '\\d':
+ case '\\S': case '\\s':
+ case '\\W': case '\\w':
+ groups.push(p);
+ continue;
+ }
+ var start = decodeEscape(p);
+ var end;
+ if (i + 2 < n && '-' === charsetParts[i + 1]) {
+ end = decodeEscape(charsetParts[i + 2]);
+ i += 2;
+ } else {
+ end = start;
+ }
+ ranges.push([start, end]);
+ // If the range might intersect letters, then expand it.
+ if (!(end < 65 || start > 122)) {
+ if (!(end < 65 || start > 90)) {
+ ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
+ }
+ if (!(end < 97 || start > 122)) {
+ ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
+ }
+ }
+ }
+
+ // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
+ // -> [[1, 12], [14, 14], [16, 17]]
+ ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1] - a[1]); });
+ var consolidatedRanges = [];
+ var lastRange = [NaN, NaN];
+ for (var i = 0; i < ranges.length; ++i) {
+ var range = ranges[i];
+ if (range[0] <= lastRange[1] + 1) {
+ lastRange[1] = Math.max(lastRange[1], range[1]);
+ } else {
+ consolidatedRanges.push(lastRange = range);
+ }
+ }
+
+ var out = ['['];
+ if (inverse) { out.push('^'); }
+ out.push.apply(out, groups);
+ for (var i = 0; i < consolidatedRanges.length; ++i) {
+ var range = consolidatedRanges[i];
+ out.push(encodeEscape(range[0]));
+ if (range[1] > range[0]) {
+ if (range[1] + 1 > range[0]) { out.push('-'); }
+ out.push(encodeEscape(range[1]));
+ }
+ }
+ out.push(']');
+ return out.join('');
+ }
+
+ function allowAnywhereFoldCaseAndRenumberGroups(regex) {
+ // Split into character sets, escape sequences, punctuation strings
+ // like ('(', '(?:', ')', '^'), and runs of characters that do not
+ // include any of the above.
+ var parts = regex.source.match(
+ new RegExp(
+ '(?:'
+ + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]' // a character set
+ + '|\\\\u[A-Fa-f0-9]{4}' // a unicode escape
+ + '|\\\\x[A-Fa-f0-9]{2}' // a hex escape
+ + '|\\\\[0-9]+' // a back-reference or octal escape
+ + '|\\\\[^ux0-9]' // other escape sequence
+ + '|\\(\\?[:!=]' // start of a non-capturing group
+ + '|[\\(\\)\\^]' // start/emd of a group, or line start
+ + '|[^\\x5B\\x5C\\(\\)\\^]+' // run of other characters
+ + ')',
+ 'g'));
+ var n = parts.length;
+
+ // Maps captured group numbers to the number they will occupy in
+ // the output or to -1 if that has not been determined, or to
+ // undefined if they need not be capturing in the output.
+ var capturedGroups = [];
+
+ // Walk over and identify back references to build the capturedGroups
+ // mapping.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ // groups are 1-indexed, so max group index is count of '('
+ ++groupIndex;
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ capturedGroups[decimalValue] = -1;
+ }
+ }
+ }
+
+ // Renumber groups and reduce capturing groups to non-capturing groups
+ // where possible.
+ for (var i = 1; i < capturedGroups.length; ++i) {
+ if (-1 === capturedGroups[i]) {
+ capturedGroups[i] = ++capturedGroupIndex;
+ }
+ }
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ var p = parts[i];
+ if (p === '(') {
+ ++groupIndex;
+ if (capturedGroups[groupIndex] === undefined) {
+ parts[i] = '(?:';
+ }
+ } else if ('\\' === p.charAt(0)) {
+ var decimalValue = +p.substring(1);
+ if (decimalValue && decimalValue <= groupIndex) {
+ parts[i] = '\\' + capturedGroups[groupIndex];
+ }
+ }
+ }
+
+ // Remove any prefix anchors so that the output will match anywhere.
+ // ^^ really does mean an anchored match though.
+ for (var i = 0, groupIndex = 0; i < n; ++i) {
+ if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
+ }
+
+ // Expand letters to groupts to handle mixing of case-sensitive and
+ // case-insensitive patterns if necessary.
+ if (regex.ignoreCase && needToFoldCase) {
+ for (var i = 0; i < n; ++i) {
+ var p = parts[i];
+ var ch0 = p.charAt(0);
+ if (p.length >= 2 && ch0 === '[') {
+ parts[i] = caseFoldCharset(p);
+ } else if (ch0 !== '\\') {
+ // TODO: handle letters in numeric escapes.
+ parts[i] = p.replace(
+ /[a-zA-Z]/g,
+ function (ch) {
+ var cc = ch.charCodeAt(0);
+ return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
+ });
+ }
+ }
+ }
+
+ return parts.join('');
+ }
+
+ var rewritten = [];
+ for (var i = 0, n = regexs.length; i < n; ++i) {
+ var regex = regexs[i];
+ if (regex.global || regex.multiline) { throw new Error('' + regex); }
+ rewritten.push(
+ '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
+ }
+
+ return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
+ }
+
+ var PR_innerHtmlWorks = null;
+ function getInnerHtml(node) {
+ // inner html is hopelessly broken in Safari 2.0.4 when the content is
+ // an html description of well formed XML and the containing tag is a PRE
+ // tag, so we detect that case and emulate innerHTML.
+ if (null === PR_innerHtmlWorks) {
+ var testNode = document.createElement('PRE');
+ testNode.appendChild(
+ document.createTextNode('\n'));
+ PR_innerHtmlWorks = !/)[\r\n]+/g, '$1')
+ .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
+ }
+ return content;
+ }
+
+ var out = [];
+ for (var child = node.firstChild; child; child = child.nextSibling) {
+ normalizedHtml(child, out);
+ }
+ return out.join('');
+ }
+
+ /** returns a function that expand tabs to spaces. This function can be fed
+ * successive chunks of text, and will maintain its own internal state to
+ * keep track of how tabs are expanded.
+ * @return {function (string) : string} a function that takes
+ * plain text and return the text with tabs expanded.
+ * @private
+ */
+ function makeTabExpander(tabWidth) {
+ var SPACES = ' ';
+ var charInLine = 0;
+
+ return function (plainText) {
+ // walk over each character looking for tabs and newlines.
+ // On tabs, expand them. On newlines, reset charInLine.
+ // Otherwise increment charInLine
+ var out = null;
+ var pos = 0;
+ for (var i = 0, n = plainText.length; i < n; ++i) {
+ var ch = plainText.charAt(i);
+
+ switch (ch) {
+ case '\t':
+ if (!out) { out = []; }
+ out.push(plainText.substring(pos, i));
+ // calculate how much space we need in front of this part
+ // nSpaces is the amount of padding -- the number of spaces needed
+ // to move us to the next column, where columns occur at factors of
+ // tabWidth.
+ var nSpaces = tabWidth - (charInLine % tabWidth);
+ charInLine += nSpaces;
+ for (; nSpaces >= 0; nSpaces -= SPACES.length) {
+ out.push(SPACES.substring(0, nSpaces));
+ }
+ pos = i + 1;
+ break;
+ case '\n':
+ charInLine = 0;
+ break;
+ default:
+ ++charInLine;
+ }
+ }
+ if (!out) { return plainText; }
+ out.push(plainText.substring(pos));
+ return out.join('');
+ };
+ }
+
+ var pr_chunkPattern = new RegExp(
+ '[^<]+' // A run of characters other than '<'
+ + '|<\!--[\\s\\S]*?--\>' // an HTML comment
+ + '|' // a CDATA section
+ // a probable tag that should not be highlighted
+ + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
+ + '|<', // A '<' that does not begin a larger chunk
+ 'g');
+ var pr_commentPrefix = /^<\!--/;
+ var pr_cdataPrefix = /^) into their textual equivalent.
+ *
+ * @param {string} s html where whitespace is considered significant.
+ * @return {Object} source code and extracted tags.
+ * @private
+ */
+ function extractTags(s) {
+ // since the pattern has the 'g' modifier and defines no capturing groups,
+ // this will return a list of all chunks which we then classify and wrap as
+ // PR_Tokens
+ var matches = s.match(pr_chunkPattern);
+ var sourceBuf = [];
+ var sourceBufLen = 0;
+ var extractedTags = [];
+ if (matches) {
+ for (var i = 0, n = matches.length; i < n; ++i) {
+ var match = matches[i];
+ if (match.length > 1 && match.charAt(0) === '<') {
+ if (pr_commentPrefix.test(match)) { continue; }
+ if (pr_cdataPrefix.test(match)) {
+ // strip CDATA prefix and suffix. Don't unescape since it's CDATA
+ sourceBuf.push(match.substring(9, match.length - 3));
+ sourceBufLen += match.length - 12;
+ } else if (pr_brPrefix.test(match)) {
+ //
tags are lexically significant so convert them to text.
+ // This is undone later.
+ sourceBuf.push('\n');
+ ++sourceBufLen;
+ } else {
+ if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
+ // A will start a section that should be
+ // ignored. Continue walking the list until we see a matching end
+ // tag.
+ var name = match.match(pr_tagNameRe)[2];
+ var depth = 1;
+ var j;
+ end_tag_loop:
+ for (j = i + 1; j < n; ++j) {
+ var name2 = matches[j].match(pr_tagNameRe);
+ if (name2 && name2[2] === name) {
+ if (name2[1] === '/') {
+ if (--depth === 0) { break end_tag_loop; }
+ } else {
+ ++depth;
+ }
+ }
+ }
+ if (j < n) {
+ extractedTags.push(
+ sourceBufLen, matches.slice(i, j + 1).join(''));
+ i = j;
+ } else { // Ignore unclosed sections.
+ extractedTags.push(sourceBufLen, match);
+ }
+ } else {
+ extractedTags.push(sourceBufLen, match);
+ }
+ }
+ } else {
+ var literalText = htmlToText(match);
+ sourceBuf.push(literalText);
+ sourceBufLen += literalText.length;
+ }
+ }
+ }
+ return { source: sourceBuf.join(''), tags: extractedTags };
+ }
+
+ /** True if the given tag contains a class attribute with the nocode class. */
+ function isNoCodeTag(tag) {
+ return !!tag
+ // First canonicalize the representation of attributes
+ .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
+ ' $1="$2$3$4"')
+ // Then look for the attribute we want.
+ .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
+ }
+
+ /**
+ * Apply the given language handler to sourceCode and add the resulting
+ * decorations to out.
+ * @param {number} basePos the index of sourceCode within the chunk of source
+ * whose decorations are already present on out.
+ */
+ function appendDecorations(basePos, sourceCode, langHandler, out) {
+ if (!sourceCode) { return; }
+ var job = {
+ source: sourceCode,
+ basePos: basePos
+ };
+ langHandler(job);
+ out.push.apply(out, job.decorations);
+ }
+
+ /** Given triples of [style, pattern, context] returns a lexing function,
+ * The lexing function interprets the patterns to find token boundaries and
+ * returns a decoration list of the form
+ * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
+ * where index_n is an index into the sourceCode, and style_n is a style
+ * constant like PR_PLAIN. index_n-1 <= index_n, and style_n-1 applies to
+ * all characters in sourceCode[index_n-1:index_n].
+ *
+ * The stylePatterns is a list whose elements have the form
+ * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
+ *
+ * Style is a style constant like PR_PLAIN, or can be a string of the
+ * form 'lang-FOO', where FOO is a language extension describing the
+ * language of the portion of the token in $1 after pattern executes.
+ * E.g., if style is 'lang-lisp', and group 1 contains the text
+ * '(hello (world))', then that portion of the token will be passed to the
+ * registered lisp handler for formatting.
+ * The text before and after group 1 will be restyled using this decorator
+ * so decorators should take care that this doesn't result in infinite
+ * recursion. For example, the HTML lexer rule for SCRIPT elements looks
+ * something like ['lang-js', /<[s]cript>(.+?)<\/script>/]. This may match
+ * 'RT