Snap for 8564071 from dca25d5573fcab68eacea5df8ae7aa079b8f252f to mainline-os-statsd-release

Change-Id: I85208ed24f1ac48d095b86c9aca2f2d9be71112d
diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml
new file mode 100644
index 0000000..ef98550
--- /dev/null
+++ b/.azure-pipelines/azure-pipelines.yml
@@ -0,0 +1,87 @@
+jobs:
+- job:
+  strategy:
+    matrix:
+      JDK 5:
+        JDK_VERSION: 5
+      JDK 6:
+        JDK_VERSION: 6
+      JDK 7:
+        JDK_VERSION: 7
+      JDK 8:
+        JDK_VERSION: 8
+      JDK 8 with ECJ:
+        JDK_VERSION: 8
+        ECJ: true
+      JDK 9:
+        JDK_VERSION: 9
+      JDK 10:
+        JDK_VERSION: 10
+      JDK 11:
+        JDK_VERSION: 11
+      JDK 12:
+        JDK_VERSION: 12
+      JDK 13:
+        JDK_VERSION: 13
+      JDK 14:
+        JDK_VERSION: 14
+      JDK 15:
+        JDK_VERSION: 15
+      JDK 16:
+        JDK_VERSION: 16
+      JDK 17:
+        JDK_VERSION: 17
+  pool:
+    vmImage: 'ubuntu-18.04'
+  steps:
+  - bash: |
+      set -e
+      url_var=JDK${JDK_VERSION}_URL
+      JDK_URL=${!url_var}
+      mkdir .jdk
+      curl -L $JDK_URL -o .jdk/jdk.tar.gz
+      tar -xzf .jdk/jdk.tar.gz -C .jdk --strip-components 1
+      .jdk/bin/java -version
+      echo "
+      <toolchains>
+        <toolchain>
+          <type>jdk</type>
+          <provides>
+            <id>$JDK_VERSION</id>
+            <version>$JDK_VERSION</version>
+          </provides>
+          <configuration>
+            <jdkHome>$PWD/.jdk</jdkHome>
+          </configuration>
+        </toolchain>
+      </toolchains>
+      " > toolchains.xml
+    displayName: Setup JDK
+  - bash: |
+      if [[ "$JDK_VERSION" -ge "8" ]]; then
+        export JAVA_HOME=$PWD/.jdk
+      fi
+      if [[ "$BUILD_SOURCEBRANCH" == "refs/heads/master" && "$JDK_VERSION" == "5" ]]; then
+        mvn -V -B -e -f org.jacoco.build \
+          verify -Djdk.version=$JDK_VERSION \
+          deploy:deploy -DdeployAtEnd \
+          --toolchains=toolchains.xml --settings=.azure-pipelines/maven-settings.xml
+      elif [[ "$JDK_VERSION" == "5" ]]; then
+        mvn -V -B -e \
+          verify -Djdk.version=$JDK_VERSION \
+          --toolchains=toolchains.xml
+      elif [[ "$BUILD_SOURCEBRANCH" == "refs/heads/master" && "$JDK_VERSION" == "11" ]]; then
+        mvn -V -B -e -f org.jacoco.build \
+          verify -Djdk.version=$JDK_VERSION -Dbytecode.version=$JDK_VERSION \
+          sonar:sonar \
+          --toolchains=toolchains.xml --settings=.azure-pipelines/maven-settings.xml
+      else
+        mvn -V -B -e \
+          verify -Djdk.version=$JDK_VERSION -Dbytecode.version=$JDK_VERSION -Decj=${ECJ:-} \
+          --toolchains=toolchains.xml
+      fi
+    displayName: Build
+    env:
+      SONARQUBE_TOKEN: $(SONARQUBE_TOKEN)
+      SONATYPE_USERNAME: $(SONATYPE_USERNAME)
+      SONATYPE_PASSWORD: $(SONATYPE_PASSWORD)
diff --git a/.travis/settings.xml b/.azure-pipelines/maven-settings.xml
similarity index 68%
rename from .travis/settings.xml
rename to .azure-pipelines/maven-settings.xml
index 0c27d50..dbce384 100644
--- a/.travis/settings.xml
+++ b/.azure-pipelines/maven-settings.xml
@@ -9,13 +9,15 @@
   </servers>
   <profiles>
     <profile>
-      <id>default</id>
+      <id>SonarCloud</id>
       <properties>
-        <https.protocols>TLSv1</https.protocols>
+        <sonar.host.url>https://sonarcloud.io/</sonar.host.url>
+        <sonar.organization>default</sonar.organization>
+        <sonar.login>${env.SONARQUBE_TOKEN}</sonar.login>
       </properties>
     </profile>
   </profiles>
   <activeProfiles>
-    <activeProfile>default</activeProfile>
+    <activeProfile>SonarCloud</activeProfile>
   </activeProfiles>
 </settings>
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..c6758fd
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,8 @@
+*.java text eol=lf
+*.properties text eol=lf
+*.html text eol=lf
+*.css text eol=lf
+*.js text eol=lf
+*.xml text eol=lf
+*.xsl text eol=lf
+*.dtd text eol=lf
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index 801fe46..ba98663 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -1,17 +1,3 @@
-This is a issue tracker. Please use our mailing list for general questions: 
-https://groups.google.com/forum/?fromgroups=#!forum/jacoco
+PLEASE USE ONE OF THE FOLLOWING TEMPLATES
 
-Also check FAQ before opening an issue: http://www.jacoco.org/jacoco/trunk/doc/faq.html
-
-
-### Steps to reproduce
-
-JaCoCo version:
-Operating system:
-Tool integration: Maven/Ant/API/Other
-
-
-### Expected behaviour
-
-
-### Actual behaviour
+https://github.com/jacoco/jacoco/issues/new/choose
diff --git a/.github/ISSUE_TEMPLATE/1_question.md b/.github/ISSUE_TEMPLATE/1_question.md
new file mode 100644
index 0000000..a40985c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/1_question.md
@@ -0,0 +1,14 @@
+---
+name: 'Question'
+about: 'Questions and requests for support'
+title: 'PLEASE DO NOT USE GITHUB FOR QUESTIONS - CHECK FAQ OR USE FORUM'
+labels: 'declined: question :x:'
+assignes:
+
+---
+
+https://www.jacoco.org/jacoco/trunk/doc/faq.html
+
+https://groups.google.com/forum/?fromgroups=#!forum/jacoco
+
+Thank you!
diff --git a/.github/ISSUE_TEMPLATE/2_bug_report.md b/.github/ISSUE_TEMPLATE/2_bug_report.md
new file mode 100644
index 0000000..dc118fa
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/2_bug_report.md
@@ -0,0 +1,32 @@
+---
+name: 'Bug report'
+about: 'Report a bug in JaCoCo'
+title:
+labels: 'type: bug :bug:'
+assignes:
+
+---
+
+THIS IS A BUG TRACKER ONLY. FOR QUESTIONS PLEASE CHECK FAQ OR USE FORUM:
+
+http://www.jacoco.org/jacoco/trunk/doc/faq.html
+
+https://groups.google.com/forum/?fromgroups=#!forum/jacoco
+
+Please understand that
+ISSUES WITHOUT FOLLOWING INFORMATION WILL BE CLOSED WITHOUT COMMENTS!
+Thank you for filling bug report!
+
+### Steps to reproduce
+
+* JaCoCo version:  (from right bottom corner of JaCoCo report)
+* Operating system:
+* Tool integration: Maven / Ant / CLI / API (for others please report to respective project)
+* Complete executable reproducer: (e.g. GitHub Repo)
+* Steps: (what exactly are you doing with the above reproducer?)
+
+### Expected behaviour
+
+### Actual behaviour
+
+(In case of exceptions provide FULL STACKTRACE)
diff --git a/.github/ISSUE_TEMPLATE/3_feature_request.md b/.github/ISSUE_TEMPLATE/3_feature_request.md
new file mode 100644
index 0000000..05f14f4
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/3_feature_request.md
@@ -0,0 +1,31 @@
+---
+name: 'Feature request'
+about: 'Suggest a feature for JaCoCo'
+title:
+labels: 'type: enhancement'
+assignes:
+
+---
+
+THIS IS A BUG TRACKER ONLY. FOR QUESTIONS PLEASE CHECK FAQ OR USE FORUM:
+
+http://www.jacoco.org/jacoco/trunk/doc/faq.html
+
+https://groups.google.com/forum/?fromgroups=#!forum/jacoco
+
+Please understand that
+ISSUES WITHOUT FOLLOWING INFORMATION WILL BE CLOSED WITHOUT COMMENTS!
+Thank you for filling feature request!
+
+### Scenario
+
+* JaCoCo version: (from right bottom corner of JaCoCo report)
+* Operating system:
+* Tool integration: Maven / Ant / CLI / API (for others please report to respective project)
+* Description of your use case: (detailed description or executable reproducer, e.g. GitHub repo)
+
+### Current Behaviour
+
+### Wanted Behaviour
+
+### Possible Workarounds
diff --git a/.travis.sh b/.travis.sh
deleted file mode 100755
index 5889236..0000000
--- a/.travis.sh
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/bash
-
-set -euo pipefail
-
-# Prevent accidental execution outside of Travis:
-if [ -z "${TRAVIS+false}" ]
-then
-  echo "TRAVIS environment variable is not set"
-  exit 1
-fi
-
-function jdk_switcher {
-  DIR=$1
-  if [ ! -d "$DIR" ]; then
-    echo "Not found: $DIR"
-    exit 1
-  fi
-  export JAVA_HOME="$DIR"
-  export JDK_HOME="${JAVA_HOME}"
-  export JAVAC="${JAVA_HOME}/bin/javac"
-  export PATH="${JAVA_HOME}/bin:${PATH}"
-}
-
-# Switch to desired JDK, download if required:
-function install_jdk {
-  JDK_URL=$1
-
-  FILENAME="${JDK_URL##*/}"
-
-  rm -rf /tmp/jdk/$JDK
-  mkdir -p /tmp/jdk/$JDK
-
-  if [ ! -f "/tmp/jdk/$FILENAME" ]
-  then
-    curl -L $JDK_URL -o /tmp/jdk/$FILENAME
-  fi
-
-  tar -xzf /tmp/jdk/$FILENAME -C /tmp/jdk/$JDK --strip-components 1
-
-  if [ -z "${2+false}" ]
-  then
-    jdk_switcher "/tmp/jdk/$JDK"
-  fi
-}
-
-# Preinstalled JDKs:
-ls -lA /usr/lib/jvm/
-
-
-case "$JDK" in
-5)
-  install_jdk $JDK5_URL false
-  ;;
-6 | 7 | 8)
-  jdk_switcher /usr/lib/jvm/java-8-oracle
-  ;;
-9)
-  jdk_switcher /usr/lib/jvm/java-9-oracle
-  ;;
-10)
-  install_jdk $JDK10_URL
-  ;;
-11)
-  install_jdk $JDK11_URL
-  ;;
-12)
-  install_jdk $JDK12_URL
-  ;;
-13-ea)
-  install_jdk $JDK13_EA_URL
-  ;;
-esac
-
-# Do not use "~/.mavenrc" set by Travis (https://github.com/travis-ci/travis-ci/issues/3893),
-# because it prevents execution of JaCoCo during integration tests for jacoco-maven-plugin,
-# and "-XMaxPermSize" not supported by JDK 9
-export MAVEN_SKIP_RC=true
-
-# Build:
-case "$JDK" in
-5)
-  if [[ ${TRAVIS_PULL_REQUEST} == 'false' && ${TRAVIS_BRANCH} == 'master' ]]
-  then
-    # Travis does shallow clone, but SonarQube performs "git blame" and so requires full history
-    git fetch --unshallow
-
-    # goal "deploy:deploy" used directly instead of "deploy" phase to avoid pollution of Maven repository by "install" phase
-    mvn -V -B -e -f org.jacoco.build verify sonar:sonar deploy:deploy -DdeployAtEnd -Djdk.version=5 --toolchains=./.travis/toolchains.xml --settings=./.travis/settings.xml -Dsonar.host.url=${SONARQUBE_URL} -Dsonar.login=${SONARQUBE_TOKEN}
-    python ./.travis/trigger-site-deployment.py
-  else
-    mvn -V -B -e verify -Djdk.version=5 --toolchains=./.travis/toolchains.xml \
-      --settings=./.travis/settings.xml
-  fi
-  ;;
-6 | 7 | 8 | 9)
-  mvn -V -B -e verify -Djdk.version=${JDK} -Dbytecode.version=${JDK} -Decj=${ECJ:-} --toolchains=./.travis/travis-toolchains.xml \
-    --settings=./.travis/settings.xml
-  ;;
-10 | 11 | 12)
-  mvn -V -B -e verify -Dbytecode.version=${JDK} \
-    --settings=./.travis/settings.xml
-  ;;
-13-ea)
-  mvn -V -B -e verify -Dbytecode.version=13 \
-    --projects \!org.jacoco.core.test.validation.groovy \
-    --settings=./.travis/settings.xml
-  ;;
-*)
-  echo "Incorrect JDK [$JDK]"
-  exit 1;
-  ;;
-esac
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 239d3b2..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-language: java
-
-# Skip "install" stage:
-install: true
-
-# Use container-based infrastructure:
-sudo: false
-
-addons:
-  apt:
-    packages:
-      - openjdk-6-jdk
-
-# Keep Maven local repository between builds:
-cache:
-  directories:
-    - '$HOME/.m2/repository'
-
-env:
-  - JDK=5
-  - JDK=6
-  - JDK=7
-  - JDK=8
-  - JDK=8
-    ECJ=true
-  - JDK=9
-  - JDK=10
-  - JDK=11
-  - JDK=12
-  - JDK=13-ea
-
-script: ./.travis.sh
diff --git a/.travis/toolchains.xml b/.travis/toolchains.xml
deleted file mode 100644
index dcf1b8c..0000000
--- a/.travis/toolchains.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF8"?>
-<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
-
-  <toolchain>
-    <type>jdk</type>
-    <provides>
-      <id>java15</id>
-      <version>5</version>
-      <vendor>sun</vendor>
-    </provides>
-    <configuration>
-      <jdkHome>/tmp/jdk/5</jdkHome>
-    </configuration>
-  </toolchain>
-
-</toolchains>
diff --git a/.travis/travis-toolchains.xml b/.travis/travis-toolchains.xml
deleted file mode 100644
index 8079e74..0000000
--- a/.travis/travis-toolchains.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF8"?>
-<toolchains xmlns="http://maven.apache.org/TOOLCHAINS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/TOOLCHAINS/1.1.0 http://maven.apache.org/xsd/toolchains-1.1.0.xsd">
-
-  <toolchain>
-    <type>jdk</type>
-    <provides>
-      <version>6</version>
-    </provides>
-    <configuration>
-      <jdkHome>/usr/lib/jvm/java-6-openjdk-amd64</jdkHome>
-    </configuration>
-  </toolchain>
-
-  <toolchain>
-    <type>jdk</type>
-    <provides>
-      <version>7</version>
-    </provides>
-    <configuration>
-      <jdkHome>/usr/lib/jvm/java-7-openjdk-amd64</jdkHome>
-    </configuration>
-  </toolchain>
-
-  <toolchain>
-    <type>jdk</type>
-    <provides>
-      <version>8</version>
-    </provides>
-    <configuration>
-      <jdkHome>/usr/lib/jvm/java-8-oracle</jdkHome>
-    </configuration>
-  </toolchain>
-
-  <toolchain>
-    <type>jdk</type>
-    <provides>
-      <version>9</version>
-    </provides>
-    <configuration>
-      <jdkHome>/usr/lib/jvm/java-9-oracle</jdkHome>
-    </configuration>
-  </toolchain>
-
-</toolchains>
diff --git a/.travis/trigger-site-deployment.py b/.travis/trigger-site-deployment.py
deleted file mode 100644
index 6add301..0000000
--- a/.travis/trigger-site-deployment.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-import urllib2
-import json
-
-def request(url, data, token = None):
-  req = urllib2.Request(url, data)
-  req.add_header('User-Agent', 'MyClient/1.0.0')
-  req.add_header('Accept', 'application/vnd.travis-ci.2+json')
-  req.add_header('Content-Type', 'application/json; charset=UTF-8')
-  if token:
-    req.add_header('Travis-API-Version', '3')
-    req.add_header('Authorization', 'token ' + travis_token)
-  p = urllib2.urlopen(req)
-  return json.loads(p.read())
-
-travis_token = request('https://api.travis-ci.org/auth/github', '{"github_token":"' + os.environ['GH_TOKEN'] + '"}')['access_token']
-print(request('https://api.travis-ci.org/repo/jacoco%2Fwww.eclemma.org/requests', '{ "request": { "branch": "master", "message": "New JaCoCo snapshot" } }', travis_token))
diff --git a/Android.bp b/Android.bp
index 726af1d..aad52a3 100644
--- a/Android.bp
+++ b/Android.bp
@@ -95,9 +95,9 @@
     // TODO(b/69671801): there's no bytecode on the device, so these shouldn't
     // be necessary.
     static_libs: [
-        "asm-7.0",
-        "asm-commons-7.0",
-        "asm-tree-7.0",
+        "asm-9.2",
+        "asm-commons-9.2",
+        "asm-tree-9.2",
     ],
 }
 
@@ -138,9 +138,9 @@
     ],
 
     static_libs: [
-        "asm-7.0",
-        "asm-commons-7.0",
-        "asm-tree-7.0",
+        "asm-9.2",
+        "asm-commons-9.2",
+        "asm-tree-9.2",
         "args4j-2.0.28",
     ],
 
diff --git a/LICENSE.md b/LICENSE.md
index 2bb435e..0b1aef1 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,13 +1,13 @@
 License
 =======
 
-Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
+Copyright (c) 2009, 2021 Mountainminds GmbH & Co. KG and Contributors
 
 The JaCoCo Java Code Coverage Library and all included documentation is made
 available by Mountainminds GmbH & Co. KG, Munich. Except indicated below, the
 Content is provided to you under the terms and conditions of the Eclipse Public
-License Version 1.0 ("EPL"). A copy of the EPL is available at
-[http://www.eclipse.org/legal/epl-v10.html](http://www.eclipse.org/legal/epl-v10.html).
+License Version 2.0 ("EPL"). A copy of the EPL is available at
+[https://www.eclipse.org/legal/epl-2.0/](https://www.eclipse.org/legal/epl-2.0/).
 
 Please visit
 [http://www.jacoco.org/jacoco/trunk/doc/license.html](http://www.jacoco.org/jacoco/trunk/doc/license.html)
diff --git a/README.android b/README.android
index 8fa2b90..aa28583 100644
--- a/README.android
+++ b/README.android
@@ -21,3 +21,6 @@
    more lightweight. The Agent is only created when it's actually
    needed. This makes it possible to instrument a lot of more core
    libraries without creating a circular dependency at runtime.
+4) Disable use of 'constant dynamic' bytecode in
+   org.jacoco.core.internal.instr.ProbeArrayStrategyFactory, because R8/D8 doesn't support it.
+   (https://issuetracker.google.com/178172809)
diff --git a/README.md b/README.md
index dc7b572..d2886de 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
 JaCoCo Java Code Coverage Library
 =================================
 
-[![Build Status](https://travis-ci.org/jacoco/jacoco.svg?branch=master)](https://travis-ci.org/jacoco/jacoco)
+[![Build Status](https://dev.azure.com/jacoco-org/JaCoCo/_apis/build/status/JaCoCo?branchName=master)](https://dev.azure.com/jacoco-org/JaCoCo/_build/latest?definitionId=1&branchName=master)
 [![Build status](https://ci.appveyor.com/api/projects/status/g28egytv4tb898d7/branch/master?svg=true)](https://ci.appveyor.com/project/JaCoCo/jacoco/branch/master)
 [![Maven Central](https://img.shields.io/maven-central/v/org.jacoco/jacoco.svg)](http://search.maven.org/#search|ga|1|g%3Aorg.jacoco)
 
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-halt/invoker.properties b/jacoco-maven-plugin.test/it/it-check-fails-halt/invoker.properties
index 324b5fb..fdd3d20 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-halt/invoker.properties
+++ b/jacoco-maven-plugin.test/it/it-check-fails-halt/invoker.properties
@@ -1 +1 @@
-invoker.buildResult=failure
\ No newline at end of file
+invoker.buildResult=failure
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-halt/pom.xml b/jacoco-maven-plugin.test/it/it-check-fails-halt/pom.xml
index ad27b9a..0bf76fb 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-halt/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-check-fails-halt/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-halt/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-check-fails-halt/src/main/java/Example.java
index 937070a..c917290 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-halt/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-check-fails-halt/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -12,8 +13,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-halt/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-check-fails-halt/src/test/java/ExampleTest.java
index 2632110..c0394be 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-halt/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-check-fails-halt/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -14,9 +15,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example();
-  }
+	@Test
+	public void test() {
+		new Example();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-halt/verify.bsh b/jacoco-maven-plugin.test/it/it-check-fails-halt/verify.bsh
index 987843a..eef423b 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-halt/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-check-fails-halt/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/pom.xml b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/pom.xml
index 4979976..104a09f 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/main/java/Example.java
index 937070a..c917290 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -12,8 +13,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/test/java/ExampleTest.java
index 2632110..c0394be 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -14,9 +15,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example();
-  }
+	@Test
+	public void test() {
+		new Example();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/verify.bsh b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/verify.bsh
index cad473c..85f14c7 100644
--- a/jacoco-maven-plugin.test/it/it-check-fails-no-halt/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-check-fails-no-halt/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-check-passes/pom.xml b/jacoco-maven-plugin.test/it/it-check-passes/pom.xml
index 233974f..84e2b59 100644
--- a/jacoco-maven-plugin.test/it/it-check-passes/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-check-passes/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-check-passes/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-check-passes/src/main/java/Example.java
index 937070a..c917290 100644
--- a/jacoco-maven-plugin.test/it/it-check-passes/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-check-passes/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -12,8 +13,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-passes/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-check-passes/src/test/java/ExampleTest.java
index 598c121..78d5872 100644
--- a/jacoco-maven-plugin.test/it/it-check-passes/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-check-passes/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -14,9 +15,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-check-passes/verify.bsh b/jacoco-maven-plugin.test/it/it-check-passes/verify.bsh
index e9bae9b..881e0b5 100644
--- a/jacoco-maven-plugin.test/it/it-check-passes/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-check-passes/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-customize-agent/pom.xml b/jacoco-maven-plugin.test/it/it-customize-agent/pom.xml
index 239ff3d..4ef2c2e 100644
--- a/jacoco-maven-plugin.test/it/it-customize-agent/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-customize-agent/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-customize-agent/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-customize-agent/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-customize-agent/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-customize-agent/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-customize-agent/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-customize-agent/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-customize-agent/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-customize-agent/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-customize-agent/verify.bsh b/jacoco-maven-plugin.test/it/it-customize-agent/verify.bsh
index 2962f35..be81ef8 100644
--- a/jacoco-maven-plugin.test/it/it-customize-agent/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-customize-agent/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-dump/pom.xml b/jacoco-maven-plugin.test/it/it-dump/pom.xml
index a954f88..38a2e33 100644
--- a/jacoco-maven-plugin.test/it/it-dump/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-dump/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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:
     Charles Honton
diff --git a/jacoco-maven-plugin.test/it/it-dump/src/main/java/Server.java b/jacoco-maven-plugin.test/it/it-dump/src/main/java/Server.java
index 2a22ea0..c0c8d3e 100644
--- a/jacoco-maven-plugin.test/it/it-dump/src/main/java/Server.java
+++ b/jacoco-maven-plugin.test/it/it-dump/src/main/java/Server.java
@@ -1,15 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
  *    
  *******************************************************************************/
-
 import java.io.File;
 
 /**
diff --git a/jacoco-maven-plugin.test/it/it-dump/verify.bsh b/jacoco-maven-plugin.test/it/it-dump/verify.bsh
index e9bae9b..881e0b5 100644
--- a/jacoco-maven-plugin.test/it/it-dump/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-dump/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/pom.xml b/jacoco-maven-plugin.test/it/it-includes-excludes/pom.xml
index 3e5739b..2281d2c 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/DatabaseUtil.java b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/DatabaseUtil.java
index 90c30a1..e98d43c 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/DatabaseUtil.java
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/DatabaseUtil.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,9 +12,8 @@
  *******************************************************************************/
 package org.project;
 
-
 public class DatabaseUtil {
-  public void doStuff() {
-    System.out.println("Do DatabaseUtil Stuff");
-  }
+	public void doStuff() {
+		System.out.println("Do DatabaseUtil Stuff");
+	}
 }
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/FileUtil.java b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/FileUtil.java
index b956f16..410d554 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/FileUtil.java
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/FileUtil.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,9 +12,8 @@
  *******************************************************************************/
 package org.project;
 
-
 public class FileUtil {
-  public void doStuff() {
-    System.out.println("Do FileUtil Stuff");
-  }
+	public void doStuff() {
+		System.out.println("Do FileUtil Stuff");
+	}
 }
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/TestUtil.java b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/TestUtil.java
index ace8ec7..5659637 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/TestUtil.java
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/src/main/java/org/project/TestUtil.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,9 +12,8 @@
  *******************************************************************************/
 package org.project;
 
-
 public class TestUtil {
-  public void doStuff() {
-    System.out.println("Do TestUtil Stuff");
-  }
+	public void doStuff() {
+		System.out.println("Do TestUtil Stuff");
+	}
 }
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/src/test/java/org/project/TestDatabaseUtil.java b/jacoco-maven-plugin.test/it/it-includes-excludes/src/test/java/org/project/TestDatabaseUtil.java
index f9a0597..e6409ed 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/src/test/java/org/project/TestDatabaseUtil.java
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/src/test/java/org/project/TestDatabaseUtil.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -14,8 +15,8 @@
 import org.junit.Test;
 
 public class TestDatabaseUtil {
-  @Test
-  public void testDoStuff() {
-    new DatabaseUtil().doStuff();
-  }
+	@Test
+	public void testDoStuff() {
+		new DatabaseUtil().doStuff();
+	}
 }
diff --git a/jacoco-maven-plugin.test/it/it-includes-excludes/verify.bsh b/jacoco-maven-plugin.test/it/it-includes-excludes/verify.bsh
index 0dbe84a..5953f89 100644
--- a/jacoco-maven-plugin.test/it/it-includes-excludes/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-includes-excludes/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/pom.xml b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/pom.xml
index edcec3d..c296bb1 100644
--- a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/module-info.java b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/module-info.java
index e7f9686..4f9f3f1 100644
--- a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/module-info.java
+++ b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/module-info.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/org/example/Example.java b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/org/example/Example.java
index 0873a9f..424b740 100644
--- a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/org/example/Example.java
+++ b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/main/java/org/example/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,8 +14,8 @@
 
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/test/java/org/example/ExampleTest.java b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/test/java/org/example/ExampleTest.java
index d68f5ee..8597086 100644
--- a/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/test/java/org/example/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-java9-offline-instrumentation/src/test/java/org/example/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -15,9 +16,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-java9/pom.xml b/jacoco-maven-plugin.test/it/it-java9/pom.xml
index b44bafd..d728bdb 100644
--- a/jacoco-maven-plugin.test/it/it-java9/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-java9/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-java9/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-java9/src/main/java/Example.java
index 2666e56..9878618 100644
--- a/jacoco-maven-plugin.test/it/it-java9/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-java9/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,9 +12,9 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello(String name) {
-    // http://openjdk.java.net/jeps/280
-    System.out.println("Hello, " + name);
-  }
+	public void sayHello(String name) {
+		// http://openjdk.java.net/jeps/280
+		System.out.println("Hello, " + name);
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-java9/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-java9/src/test/java/ExampleTest.java
index e49e78d..af764a8 100644
--- a/jacoco-maven-plugin.test/it/it-java9/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-java9/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello("test");
-  }
+	@Test
+	public void test() {
+		new Example().sayHello("test");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-merge/pom.xml b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-merge/pom.xml
index 74d181d..82ba3e8 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-merge/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-merge/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/pom.xml b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/pom.xml
index d38548b..5ab6f3e 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/main/java/Example.java
index beaa588..8e91fca 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/test/java/ExampleTest.java
index 3c86bee..52f7c78 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project1/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/pom.xml b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/pom.xml
index fe6b03a..31f48e2 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/main/java/Example.java
index beaa588..8e91fca 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/test/java/ExampleTest.java
index 3c86bee..52f7c78 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/it-merge-passes-project2/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/pom.xml b/jacoco-maven-plugin.test/it/it-merge-passes/pom.xml
index 1cb4206..3c90796 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-merge-passes/verify.bsh b/jacoco-maven-plugin.test/it/it-merge-passes/verify.bsh
index e237161..bac900c 100644
--- a/jacoco-maven-plugin.test/it/it-merge-passes/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-merge-passes/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/child-jar-without-sources/pom.xml b/jacoco-maven-plugin.test/it/it-multi-module/child-jar-without-sources/pom.xml
index fdd3e25..0699088 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/child-jar-without-sources/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-multi-module/child-jar-without-sources/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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:
       Mirko Friedenhagen
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/child/pom.xml b/jacoco-maven-plugin.test/it/it-multi-module/child/pom.xml
index e3c316e..a7d4dbe 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/child/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-multi-module/child/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/somepackage/Example.java b/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/somepackage/Example.java
index 056c63e..308ce11 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/somepackage/Example.java
+++ b/jacoco-maven-plugin.test/it/it-multi-module/child/src/main/java/somepackage/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,8 +14,8 @@
 
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/child/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-multi-module/child/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/child/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-multi-module/child/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/pom.xml b/jacoco-maven-plugin.test/it/it-multi-module/pom.xml
index 673b046..abf54dc 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-multi-module/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/skip-child/pom.xml b/jacoco-maven-plugin.test/it/it-multi-module/skip-child/pom.xml
index b956b2a..f5eff4d 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/skip-child/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-multi-module/skip-child/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/skip-child/src/test/ExampleTest.java b/jacoco-maven-plugin.test/it/it-multi-module/skip-child/src/test/ExampleTest.java
index 2cfb7c7..53ff567 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/skip-child/src/test/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-multi-module/skip-child/src/test/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,8 +14,8 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-  }
+	@Test
+	public void test() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multi-module/verify.bsh b/jacoco-maven-plugin.test/it/it-multi-module/verify.bsh
index 1505316..4e872a1 100644
--- a/jacoco-maven-plugin.test/it/it-multi-module/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-multi-module/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multiple-executions/pom.xml b/jacoco-maven-plugin.test/it/it-multiple-executions/pom.xml
index b8b2fd5..a650a51 100644
--- a/jacoco-maven-plugin.test/it/it-multiple-executions/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-multiple-executions/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-multiple-executions/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-multiple-executions/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-multiple-executions/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-multiple-executions/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multiple-executions/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-multiple-executions/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-multiple-executions/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-multiple-executions/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-multiple-executions/verify.bsh b/jacoco-maven-plugin.test/it/it-multiple-executions/verify.bsh
index 122b0bd..8aebc4a 100644
--- a/jacoco-maven-plugin.test/it/it-multiple-executions/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-multiple-executions/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -35,4 +36,3 @@
 if ( buildLog.indexOf( argLine ) < 0 ) {
     throw new RuntimeException( "Original argLine was overwritten" );
 }
-
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/pom.xml b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/pom.xml
index 34deae5..402d83d 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/src/test/java/ExampleTest.java
index 2cfb7c7..53ff567 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child-without-main-classes/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,8 +14,8 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-  }
+	@Test
+	public void test() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/pom.xml b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/pom.xml
index 86c05f1..2145264 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/DoNotInstrument.java b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/DoNotInstrument.java
index 5d0a189..20a49aa 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/DoNotInstrument.java
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/DoNotInstrument.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class DoNotInstrument {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/child/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/pom.xml b/jacoco-maven-plugin.test/it/it-offline-instrumentation/pom.xml
index 54a8d1f..a5dbc16 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-offline-instrumentation/verify.bsh b/jacoco-maven-plugin.test/it/it-offline-instrumentation/verify.bsh
index 3cf3787..c23e8fd 100644
--- a/jacoco-maven-plugin.test/it/it-offline-instrumentation/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-offline-instrumentation/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-prepend-property-skip/pom.xml b/jacoco-maven-plugin.test/it/it-prepend-property-skip/pom.xml
index e3ec74d..d850d5e 100644
--- a/jacoco-maven-plugin.test/it/it-prepend-property-skip/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-prepend-property-skip/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-prepend-property-skip/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-prepend-property-skip/src/test/java/ExampleTest.java
index 0349a90..8c2b78b 100644
--- a/jacoco-maven-plugin.test/it/it-prepend-property-skip/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-prepend-property-skip/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -15,9 +16,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    assertNotNull(System.getProperty("foo"));
-  }
+	@Test
+	public void test() {
+		assertNotNull(System.getProperty("foo"));
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-prepend-property/pom.xml b/jacoco-maven-plugin.test/it/it-prepend-property/pom.xml
index 3c2ee5a..bf11dd1 100644
--- a/jacoco-maven-plugin.test/it/it-prepend-property/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-prepend-property/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-prepend-property/verify.bsh b/jacoco-maven-plugin.test/it/it-prepend-property/verify.bsh
index 1fac651..571be65 100644
--- a/jacoco-maven-plugin.test/it/it-prepend-property/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-prepend-property/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/pom.xml
index ae63a04..a432f49 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/main/java/package1/Example1.java b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/main/java/package1/Example1.java
index 73ace31..d7982d8 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/main/java/package1/Example1.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/main/java/package1/Example1.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example1 {
 
-  public void a() {
-  }
+	public void a() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/test/java/package1/Example1Test.java b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/test/java/package1/Example1Test.java
index 413fe7d..8d6670d 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/test/java/package1/Example1Test.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child1/src/test/java/package1/Example1Test.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example1Test {
 
-  @Test
-  public void test() {
-    new Example1().a();
-  }
+	@Test
+	public void test() {
+		new Example1().a();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/pom.xml
index 163116c..e4ca10e 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/main/java/package2/Example2.java b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/main/java/package2/Example2.java
index 25e2f9c..3dfc421 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/main/java/package2/Example2.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/main/java/package2/Example2.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example2 {
 
-  public void a() {
-  }
+	public void a() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/test/java/package2/Example2Test.java b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/test/java/package2/Example2Test.java
index ef0df80..7c4ebcd 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/test/java/package2/Example2Test.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/child2/src/test/java/package2/Example2Test.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example2Test {
 
-  @Test
-  public void test() {
-    new Example2().a();
-  }
+	@Test
+	public void test() {
+		new Example2().a();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/pom.xml
index 96392d1..67714f6 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/report/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/report/pom.xml
index 6e2fa30..c8d0a8e 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/report/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/report/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/verify.bsh b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/verify.bsh
index b2835db..6b2a76f 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate-customization/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate-customization/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/pom.xml
index d2e70c3..d11c6c1 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -29,5 +30,5 @@
       <version>${project.version}</version>
     </dependency>
   </dependencies>
-  
+
 </project>
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/src/test/java/package1/Example1bTest.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/src/test/java/package1/Example1bTest.java
index 12049fe..4487ec1 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/src/test/java/package1/Example1bTest.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1-test/src/test/java/package1/Example1bTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example1bTest {
 
-  @Test
-  public void test() {
-    new Example1b().b();
-  }
+	@Test
+	public void test() {
+		new Example1b().b();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/pom.xml
index 9f23871..a260ec0 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -21,5 +22,5 @@
 
   <artifactId>child1</artifactId>
   <packaging>jar</packaging>
-  
+
 </project>
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1a.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1a.java
index 45f0859..b801e56 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1a.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1a.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example1a {
 
-  public void a() {
-  }
+	public void a() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1b.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1b.java
index f4633bb..c41f04b 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1b.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/main/java/package1/Example1b.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example1b {
 
-  public void b() {
-  }
+	public void b() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/test/java/package1/Example1aTest.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/test/java/package1/Example1aTest.java
index 15895a3..6a830fd 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/test/java/package1/Example1aTest.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child1/src/test/java/package1/Example1aTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example1aTest {
 
-  @Test
-  public void test() {
-    new Example1a().a();
-  }
+	@Test
+	public void test() {
+		new Example1a().a();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/pom.xml
index a486857..098b942 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -21,5 +22,5 @@
 
   <artifactId>child2</artifactId>
   <packaging>jar</packaging>
-  
+
 </project>
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/main/java/package2/Example2.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/main/java/package2/Example2.java
index 25e2f9c..3dfc421 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/main/java/package2/Example2.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/main/java/package2/Example2.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example2 {
 
-  public void a() {
-  }
+	public void a() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/test/java/package2/Example2Test.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/test/java/package2/Example2Test.java
index ef0df80..7c4ebcd 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/test/java/package2/Example2Test.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2/src/test/java/package2/Example2Test.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example2Test {
 
-  @Test
-  public void test() {
-    new Example2().a();
-  }
+	@Test
+	public void test() {
+		new Example2().a();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/pom.xml
index 50c70bb..87745a0 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/main/java/package2/Example2.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/main/java/package2/Example2.java
index 25e2f9c..3dfc421 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/main/java/package2/Example2.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/main/java/package2/Example2.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -13,7 +14,7 @@
 
 public class Example2 {
 
-  public void a() {
-  }
+	public void a() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/test/java/package2/Example2Test.java b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/test/java/package2/Example2Test.java
index ef0df80..7c4ebcd 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/test/java/package2/Example2Test.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/child2v2/src/test/java/package2/Example2Test.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
@@ -15,9 +16,9 @@
 
 public class Example2Test {
 
-  @Test
-  public void test() {
-    new Example2().a();
-  }
+	@Test
+	public void test() {
+		new Example2().a();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/pom.xml
index ab67c92..ab18c17 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/report/pom.xml b/jacoco-maven-plugin.test/it/it-report-aggregate/report/pom.xml
index 6d217a8..494a4fd 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/report/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/report/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/report/src/test/java/packagereport/ReportTest.java b/jacoco-maven-plugin.test/it/it-report-aggregate/report/src/test/java/packagereport/ReportTest.java
index 065f71d..b09e455 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/report/src/test/java/packagereport/ReportTest.java
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/report/src/test/java/packagereport/ReportTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -15,8 +16,8 @@
 
 public class ReportTest {
 
-  @Test
-  public void test() {
-  }
+	@Test
+	public void test() {
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-aggregate/verify.bsh b/jacoco-maven-plugin.test/it/it-report-aggregate/verify.bsh
index 72fed73..0c44d49 100644
--- a/jacoco-maven-plugin.test/it/it-report-aggregate/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-aggregate/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, Jan Wloka - initial API and implementation
diff --git a/jacoco-maven-plugin.test/it/it-report-nomatch/pom.xml b/jacoco-maven-plugin.test/it/it-report-nomatch/pom.xml
index 995c510..35966c8 100644
--- a/jacoco-maven-plugin.test/it/it-report-nomatch/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-nomatch/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-nomatch/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-report-nomatch/src/main/java/Example.java
index 0deaeaf..b603539 100644
--- a/jacoco-maven-plugin.test/it/it-report-nomatch/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-report-nomatch/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-nomatch/verify.bsh b/jacoco-maven-plugin.test/it/it-report-nomatch/verify.bsh
index f5419b0..73160e3 100644
--- a/jacoco-maven-plugin.test/it/it-report-nomatch/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-nomatch/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,7 +14,7 @@
 import org.codehaus.plexus.util.*;
 
 String buildLog = FileUtils.fileRead( new File( basedir, "build.log" ) );
-if ( buildLog.indexOf( "Classes in bundle " ) < 0 || buildLog.indexOf(" do no match with execution data." ) < 0 ) {
+if ( buildLog.indexOf( "Classes in bundle " ) < 0 || buildLog.indexOf(" do not match with execution data." ) < 0 ) {
     throw new RuntimeException( "Warning 1 was not printed" );
 }
 if ( buildLog.indexOf( "For report generation the same class files must be used as at runtime." ) < 0 ) {
diff --git a/jacoco-maven-plugin.test/it/it-report-select-formats/pom.xml b/jacoco-maven-plugin.test/it/it-report-select-formats/pom.xml
new file mode 100644
index 0000000..a3520a4
--- /dev/null
+++ b/jacoco-maven-plugin.test/it/it-report-select-formats/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2009, 2021 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>jacoco</groupId>
+    <artifactId>setup-parent</artifactId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>it-report-select-formats</artifactId>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>@project.groupId@</groupId>
+        <artifactId>jacoco-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>prepare-agent</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>report</id>
+            <goals>
+              <goal>report</goal>
+            </goals>
+            <configuration>
+              <formats>
+                <format>XML</format>
+                <format>CSV</format>
+              </formats>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/jacoco-maven-plugin.test/it/it-report-select-formats/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-report-select-formats/src/main/java/Example.java
new file mode 100644
index 0000000..b603539
--- /dev/null
+++ b/jacoco-maven-plugin.test/it/it-report-select-formats/src/main/java/Example.java
@@ -0,0 +1,15 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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
+ *
+ *******************************************************************************/
+public class Example {
+
+}
diff --git a/jacoco-maven-plugin.test/it/it-report-select-formats/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-report-select-formats/src/test/java/ExampleTest.java
new file mode 100644
index 0000000..deb8fde
--- /dev/null
+++ b/jacoco-maven-plugin.test/it/it-report-select-formats/src/test/java/ExampleTest.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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
+ *
+ *******************************************************************************/
+import org.junit.Test;
+
+public class ExampleTest {
+
+	@Test
+	public void test() {
+		new Example();
+	}
+
+}
diff --git a/jacoco-maven-plugin.test/it/it-report-select-formats/verify.bsh b/jacoco-maven-plugin.test/it/it-report-select-formats/verify.bsh
new file mode 100644
index 0000000..9b4f559
--- /dev/null
+++ b/jacoco-maven-plugin.test/it/it-report-select-formats/verify.bsh
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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
+ *
+ *******************************************************************************/
+import java.io.*;
+
+File htmlReportFile = new File( basedir, "target/site/jacoco/index.html" );
+if ( htmlReportFile.isFile() ) {
+    throw new RuntimeException( "Unexpected HTML report was created" );
+}
+
+File xmlReportFile = new File( basedir, "target/site/jacoco/jacoco.xml" );
+if ( !xmlReportFile.isFile() ) {
+    throw new RuntimeException( "XML report was not created" );
+}
+
+File csvReportFile = new File( basedir, "target/site/jacoco/jacoco.csv" );
+if ( !csvReportFile.isFile() ) {
+    throw new RuntimeException( "CSV report was not created" );
+}
diff --git a/jacoco-maven-plugin.test/it/it-report-unreadable-dump/pom.xml b/jacoco-maven-plugin.test/it/it-report-unreadable-dump/pom.xml
index a99c88c..324ce0e 100644
--- a/jacoco-maven-plugin.test/it/it-report-unreadable-dump/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-unreadable-dump/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-unreadable-dump/verify.bsh b/jacoco-maven-plugin.test/it/it-report-unreadable-dump/verify.bsh
index bac7401..6996fb5 100644
--- a/jacoco-maven-plugin.test/it/it-report-unreadable-dump/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-unreadable-dump/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-without-debug/pom.xml b/jacoco-maven-plugin.test/it/it-report-without-debug/pom.xml
index d4ba677..3a756bb 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-debug/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-without-debug/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-without-debug/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-report-without-debug/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-debug/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-report-without-debug/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-without-debug/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-report-without-debug/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-debug/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-report-without-debug/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-report-without-debug/verify.bsh b/jacoco-maven-plugin.test/it/it-report-without-debug/verify.bsh
index 8cb055f..3c541be 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-debug/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-without-debug/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-without-dump/pom.xml b/jacoco-maven-plugin.test/it/it-report-without-dump/pom.xml
index 24bfc6d..894dfc4 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-dump/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-report-without-dump/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-report-without-dump/verify.bsh b/jacoco-maven-plugin.test/it/it-report-without-dump/verify.bsh
index b7cc15e..a126963 100644
--- a/jacoco-maven-plugin.test/it/it-report-without-dump/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-report-without-dump/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-site-failsafe/pom.xml b/jacoco-maven-plugin.test/it/it-site-failsafe/pom.xml
index 9e4d18c..f1dcd04 100644
--- a/jacoco-maven-plugin.test/it/it-site-failsafe/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-site-failsafe/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-site-failsafe/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-site-failsafe/src/main/java/Example.java
index d3b6728..081f836 100644
--- a/jacoco-maven-plugin.test/it/it-site-failsafe/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-site-failsafe/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,12 +12,12 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
-  public void sayHelloIT() {
-    System.out.println("Hello world");
-  }
+	public void sayHelloIT() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleIT.java b/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleIT.java
index a42093e..a5d18f9 100644
--- a/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleIT.java
+++ b/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleIT.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleIT {
 
-  @Test
-  public void test() {
-    new Example().sayHelloIT();
-  }
+	@Test
+	public void test() {
+		new Example().sayHelloIT();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-site-failsafe/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-site-failsafe/verify.bsh b/jacoco-maven-plugin.test/it/it-site-failsafe/verify.bsh
index c933313..0086087 100644
--- a/jacoco-maven-plugin.test/it/it-site-failsafe/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-site-failsafe/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-site/pom.xml b/jacoco-maven-plugin.test/it/it-site/pom.xml
index 3f4035a..0de5c60 100644
--- a/jacoco-maven-plugin.test/it/it-site/pom.xml
+++ b/jacoco-maven-plugin.test/it/it-site/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/it-site/src/main/java/Example.java b/jacoco-maven-plugin.test/it/it-site/src/main/java/Example.java
index d264823..fa9c810 100644
--- a/jacoco-maven-plugin.test/it/it-site/src/main/java/Example.java
+++ b/jacoco-maven-plugin.test/it/it-site/src/main/java/Example.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,8 +12,8 @@
  *******************************************************************************/
 public class Example {
 
-  public void sayHello() {
-    System.out.println("Hello world");
-  }
+	public void sayHello() {
+		System.out.println("Hello world");
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-site/src/test/java/ExampleTest.java b/jacoco-maven-plugin.test/it/it-site/src/test/java/ExampleTest.java
index db0af65..6e2e787 100644
--- a/jacoco-maven-plugin.test/it/it-site/src/test/java/ExampleTest.java
+++ b/jacoco-maven-plugin.test/it/it-site/src/test/java/ExampleTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,9 +14,9 @@
 
 public class ExampleTest {
 
-  @Test
-  public void test() {
-    new Example().sayHello();
-  }
+	@Test
+	public void test() {
+		new Example().sayHello();
+	}
 
 }
diff --git a/jacoco-maven-plugin.test/it/it-site/verify.bsh b/jacoco-maven-plugin.test/it/it-site/verify.bsh
index c3d96ce..5600e5d 100644
--- a/jacoco-maven-plugin.test/it/it-site/verify.bsh
+++ b/jacoco-maven-plugin.test/it/it-site/verify.bsh
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/settings.xml b/jacoco-maven-plugin.test/it/settings.xml
index 31132fe..f3d5bd8 100644
--- a/jacoco-maven-plugin.test/it/settings.xml
+++ b/jacoco-maven-plugin.test/it/settings.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin.test/it/setup-parent/pom.xml b/jacoco-maven-plugin.test/it/setup-parent/pom.xml
index 1e736ff..885384d 100644
--- a/jacoco-maven-plugin.test/it/setup-parent/pom.xml
+++ b/jacoco-maven-plugin.test/it/setup-parent/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -22,7 +23,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.8.2</version>
+      <version>@junit.version@</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/jacoco-maven-plugin.test/pom.xml b/jacoco-maven-plugin.test/pom.xml
index 9325c37..e200fe7 100644
--- a/jacoco-maven-plugin.test/pom.xml
+++ b/jacoco-maven-plugin.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -16,7 +17,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/jacoco-maven-plugin/META-INF/m2e/lifecycle-mapping-metadata.xml b/jacoco-maven-plugin/META-INF/m2e/lifecycle-mapping-metadata.xml
index e895c90..01c08b3 100644
--- a/jacoco-maven-plugin/META-INF/m2e/lifecycle-mapping-metadata.xml
+++ b/jacoco-maven-plugin/META-INF/m2e/lifecycle-mapping-metadata.xml
@@ -1,9 +1,10 @@
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco-maven-plugin/pom.xml b/jacoco-maven-plugin/pom.xml
index c19312c..5a9314f 100644
--- a/jacoco-maven-plugin/pom.xml
+++ b/jacoco-maven-plugin/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -16,12 +17,13 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
   <artifactId>jacoco-maven-plugin</artifactId>
   <packaging>maven-plugin</packaging>
+  <url>https://www.jacoco.org/jacoco/trunk/doc/maven.html</url>
 
   <name>JaCoCo :: Maven Plugin</name>
   <description>The JaCoCo Maven Plugin provides the JaCoCo runtime agent to your tests and allows basic report creation.</description>
@@ -30,22 +32,6 @@
     <maven>3.0</maven>
   </prerequisites>
 
-  <dependencyManagement>
-    <dependencies>
-      <!-- maven-reporting-impl and slight update of version of its transitive dependency on commons-collections -->
-      <dependency>
-        <groupId>org.apache.maven.reporting</groupId>
-        <artifactId>maven-reporting-impl</artifactId>
-        <version>2.1</version>
-      </dependency>
-      <dependency>
-        <groupId>commons-collections</groupId>
-        <artifactId>commons-collections</artifactId>
-        <version>3.2.2</version>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
   <dependencies>
     <dependency>
       <groupId>org.apache.maven</groupId>
@@ -73,10 +59,6 @@
       <artifactId>maven-reporting-api</artifactId>
       <version>${project.prerequisites.maven}</version>
     </dependency>
-    <dependency>
-      <groupId>org.apache.maven.reporting</groupId>
-      <artifactId>maven-reporting-impl</artifactId>
-    </dependency>
 
     <dependency>
       <groupId>${project.groupId}</groupId>
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractAgentMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractAgentMojo.java
index d097c53..74f90ac 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractAgentMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractAgentMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -68,7 +69,10 @@
 
 	/**
 	 * A list of class names to exclude from instrumentation. May use wildcard
-	 * characters (* and ?). When not specified nothing will be excluded.
+	 * 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;
@@ -155,8 +159,8 @@
 		final String name = getEffectivePropertyName();
 		final Properties projectProperties = getProject().getProperties();
 		final String oldValue = projectProperties.getProperty(name);
-		final String newValue = createAgentOptions().prependVMArguments(
-				oldValue, getAgentJarFile());
+		final String newValue = createAgentOptions()
+				.prependVMArguments(oldValue, getAgentJarFile());
 		getLog().info(name + " set to " + newValue);
 		projectProperties.setProperty(name, newValue);
 	}
@@ -196,12 +200,12 @@
 			agentOptions.setExclClassloader(exclClassLoaders);
 		}
 		if (inclBootstrapClasses != null) {
-			agentOptions.setInclBootstrapClasses(inclBootstrapClasses
-					.booleanValue());
+			agentOptions.setInclBootstrapClasses(
+					inclBootstrapClasses.booleanValue());
 		}
 		if (inclNoLocationClasses != null) {
-			agentOptions.setInclNoLocationClasses(inclNoLocationClasses
-					.booleanValue());
+			agentOptions.setInclNoLocationClasses(
+					inclNoLocationClasses.booleanValue());
 		}
 		if (sessionId != null) {
 			agentOptions.setSessionId(sessionId);
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractJacocoMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractJacocoMojo.java
index 8eb55ca..4ea6b5a 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractJacocoMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractJacocoMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -34,8 +35,8 @@
 	@Parameter(property = "jacoco.skip", defaultValue = "false")
 	private boolean skip;
 
-	public final void execute() throws MojoExecutionException,
-			MojoFailureException {
+	public final void execute()
+			throws MojoExecutionException, MojoFailureException {
 		if (skip) {
 			getLog().info(
 					"Skipping JaCoCo execution because property jacoco.skip is set.");
@@ -47,7 +48,7 @@
 
 	/**
 	 * Executes Mojo.
-	 * 
+	 *
 	 * @throws MojoExecutionException
 	 *             if an unexpected problem occurs. Throwing this exception
 	 *             causes a "BUILD ERROR" message to be displayed.
@@ -56,8 +57,8 @@
 	 *             occurs. Throwing this exception causes a "BUILD FAILURE"
 	 *             message to be displayed.
 	 */
-	protected abstract void executeMojo() throws MojoExecutionException,
-			MojoFailureException;
+	protected abstract void executeMojo()
+			throws MojoExecutionException, MojoFailureException;
 
 	/**
 	 * Skips Mojo.
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractReportMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractReportMojo.java
index ecd48ab..097ecb1 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/AbstractReportMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/AbstractReportMojo.java
@@ -1,26 +1,29 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.siterenderer.Renderer;
+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.Component;
 import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.reporting.AbstractMavenReport;
+import org.apache.maven.reporting.MavenMultiPageReport;
 import org.apache.maven.reporting.MavenReportException;
 import org.jacoco.report.IReportGroupVisitor;
 import org.jacoco.report.IReportVisitor;
@@ -29,7 +32,8 @@
  * 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 AbstractMavenReport {
+public abstract class AbstractReportMojo extends AbstractMojo
+		implements MavenMultiPageReport {
 
 	/**
 	 * Encoding of the generated reports.
@@ -38,6 +42,15 @@
 	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
@@ -85,34 +98,21 @@
 	@Parameter(property = "project", readonly = true)
 	MavenProject project;
 
-	/**
-	 * Doxia Site Renderer.
-	 */
-	@Component
-	Renderer siteRenderer;
-
 	public String getDescription(final Locale locale) {
 		return getName(locale) + " Coverage Report.";
 	}
 
-	@Override
 	public boolean isExternalReport() {
 		return true;
 	}
 
-	@Override
-	protected MavenProject getProject() {
-		return project;
-	}
-
-	@Override
-	protected Renderer getSiteRenderer() {
-		return siteRenderer;
+	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() {
@@ -121,14 +121,13 @@
 
 	/**
 	 * 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;
 	}
 
-	@Override
 	public boolean canGenerateReport() {
 		if (skip) {
 			getLog().info(
@@ -152,11 +151,27 @@
 
 	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.
 	 */
-	@Override
 	public void execute() throws MojoExecutionException {
 		if (!canGenerateReport()) {
 			return;
@@ -169,8 +184,7 @@
 		}
 	}
 
-	@Override
-	protected void executeReport(final Locale locale)
+	private void executeReport(final Locale locale)
 			throws MavenReportException {
 		try {
 			final ReportSupport support = new ReportSupport(getLog());
@@ -180,17 +194,22 @@
 			createReport(visitor, support);
 			visitor.visitEnd();
 		} catch (final IOException e) {
-			throw new MavenReportException("Error while creating report: "
-					+ e.getMessage(), 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 addFormatters(final ReportSupport support, final Locale locale)
-			throws IOException;
-
 	abstract void createReport(final IReportGroupVisitor visitor,
 			final ReportSupport support) throws IOException;
 
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/AgentITMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/AgentITMojo.java
index 03422d6..158b46e 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/AgentITMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/AgentITMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -26,7 +27,7 @@
  * <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)
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/AgentMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/AgentMojo.java
index f434c98..accc989 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/AgentMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/AgentMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -24,12 +25,12 @@
  * 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.
@@ -37,9 +38,11 @@
  *
  * <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>:
+ * syntax for <a href=
+ * "http://maven.apache.org/surefire/maven-surefire-plugin/faq.html#late-property-evaluation">late
+ * property evaluation</a>:
  * </p>
- * 
+ *
  * <pre>
  *   &lt;plugin&gt;
  *     &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
@@ -49,17 +52,18 @@
  *     &lt;/configuration&gt;
  *   &lt;/plugin&gt;
  * </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.
+ * 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:
+ * Another way is to define "argLine" as a Maven property rather than as part of
+ * the configuration of maven-surefire-plugin:
  * </p>
- * 
+ *
  * <pre>
  *   &lt;properties&gt;
  *     &lt;argLine&gt;-your -extra -arguments&lt;/argLine&gt;
@@ -73,12 +77,12 @@
  *     &lt;/configuration&gt;
  *   &lt;/plugin&gt;
  * </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)
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/CheckMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/CheckMojo.java
index 68d6aa8..21b7419 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/CheckMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/CheckMojo.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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;
 
@@ -30,7 +31,7 @@
 
 /**
  * Checks that the code coverage metrics are being met.
- * 
+ *
  * @since 0.6.1
  */
 @Mojo(name = "check", defaultPhase = LifecyclePhase.VERIFY, threadSafe = true)
@@ -47,27 +48,27 @@
 	 * 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 the range is 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, the value must end with %.
+	 * 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>
@@ -88,12 +89,12 @@
 	 *   </rule>
 	 * </rules>}
 	 * </pre>
-	 * 
+	 *
 	 * <p>
 	 * This example requires a line coverage minimum of 50% for every class
 	 * except test classes:
 	 * </p>
-	 * 
+	 *
 	 * <pre>
 	 * {@code
 	 * <rules>
@@ -149,8 +150,8 @@
 			getLog().info(MSG_SKIPPING + dataFile);
 			return false;
 		}
-		final File classesDirectory = new File(getProject().getBuild()
-				.getOutputDirectory());
+		final File classesDirectory = new File(
+				getProject().getBuild().getOutputDirectory());
 		if (!classesDirectory.exists()) {
 			getLog().info(
 					"Skipping JaCoCo execution due to missing classes directory:"
@@ -161,8 +162,7 @@
 	}
 
 	@Override
-	public void executeMojo() throws MojoExecutionException,
-			MojoExecutionException {
+	public void executeMojo() throws MojoExecutionException {
 		if (!canCheckCoverage()) {
 			return;
 		}
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/DumpMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/DumpMojo.java
index 64836ee..783c4c7 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/DumpMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/DumpMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -29,13 +30,13 @@
  * 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)
@@ -94,9 +95,8 @@
 			@Override
 			protected void onConnecting(final InetAddress address,
 					final int port) {
-				getLog().info(
-						format("Connecting to %s:%s", address,
-								Integer.valueOf(port)));
+				getLog().info(format("Connecting to %s:%s", address,
+						Integer.valueOf(port)));
 			}
 
 			@Override
@@ -111,9 +111,8 @@
 		try {
 			final ExecFileLoader loader = client.dump(address, port);
 			if (dump) {
-				getLog().info(
-						format("Dumping execution data to %s",
-								destFile.getAbsolutePath()));
+				getLog().info(format("Dumping execution data to %s",
+						destFile.getAbsolutePath()));
 				loader.save(destFile, append);
 			}
 		} catch (final IOException e) {
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/FileFilter.java b/jacoco-maven-plugin/src/org/jacoco/maven/FileFilter.java
index 09029c8..377cbb6 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/FileFilter.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/FileFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -16,7 +17,6 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.apache.commons.collections.CollectionUtils;
 import org.codehaus.plexus.util.FileUtils;
 import org.codehaus.plexus.util.StringUtils;
 
@@ -33,20 +33,21 @@
 
 	/**
 	 * 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) {
+	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
@@ -60,7 +61,7 @@
 
 	/**
 	 * Returns a list of files.
-	 * 
+	 *
 	 * @param directory
 	 *            the directory to scan
 	 * @return a list of files
@@ -73,7 +74,7 @@
 
 	/**
 	 * Get the includes pattern
-	 * 
+	 *
 	 * @return the pattern
 	 */
 	public String getIncludes() {
@@ -82,7 +83,7 @@
 
 	/**
 	 * Get the excludes pattern
-	 * 
+	 *
 	 * @return the pattern
 	 */
 	public String getExcludes() {
@@ -92,7 +93,7 @@
 	private String buildPattern(final List<String> patterns,
 			final String defaultPattern) {
 		String pattern = defaultPattern;
-		if (CollectionUtils.isNotEmpty(patterns)) {
+		if (patterns != null && !patterns.isEmpty()) {
 			pattern = StringUtils.join(patterns.iterator(), ",");
 		}
 		return pattern;
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/InstrumentMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/InstrumentMojo.java
index d99ada7..ac31a10 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/InstrumentMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/InstrumentMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -39,7 +40,7 @@
  * 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)
@@ -54,23 +55,27 @@
 
 	/**
 	 * A list of class files to exclude from instrumentation. May use wildcard
-	 * characters (* and ?). When not specified nothing will be excluded.
+	 * 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");
+	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);
+					"Skipping JaCoCo execution due to missing classes directory:"
+							+ classesDir);
 			return;
 		}
 
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/MergeMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/MergeMojo.java
index 11f9577..f1bb810 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/MergeMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/MergeMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -26,7 +27,7 @@
 
 /**
  * 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)
@@ -42,7 +43,7 @@
 
 	/**
 	 * This mojo accepts any number of execution data file sets.
-	 * 
+	 *
 	 * <pre>
 	 * <code>
 	 * &lt;fileSets&gt;
@@ -60,8 +61,8 @@
 	private List<FileSet> fileSets;
 
 	@Override
-	protected void executeMojo() throws MojoExecutionException,
-			MojoFailureException {
+	protected void executeMojo()
+			throws MojoExecutionException, MojoFailureException {
 		if (!canMergeReports()) {
 			return;
 		}
@@ -95,13 +96,12 @@
 					continue;
 				}
 				try {
-					getLog().info(
-							"Loading execution data file "
-									+ inputFile.getAbsolutePath());
+					getLog().info("Loading execution data file "
+							+ inputFile.getAbsolutePath());
 					loader.load(inputFile);
 				} catch (final IOException e) {
-					throw new MojoExecutionException("Unable to read "
-							+ inputFile.getAbsolutePath(), e);
+					throw new MojoExecutionException(
+							"Unable to read " + inputFile.getAbsolutePath(), e);
 				}
 			}
 		}
@@ -113,14 +113,14 @@
 			getLog().info(MSG_SKIPPING);
 			return;
 		}
-		getLog().info(
-				"Writing merged execution data to "
-						+ destFile.getAbsolutePath());
+		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);
+			throw new MojoExecutionException(
+					"Unable to write merged file " + destFile.getAbsolutePath(),
+					e);
 		}
 	}
 
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/ReportAggregateMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/ReportAggregateMojo.java
index 5b1f12f..c63569f 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/ReportAggregateMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/ReportAggregateMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -38,18 +39,18 @@
  * 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)
@@ -106,7 +107,7 @@
 
 		final FileFilter filter = new FileFilter(dataFileIncludes,
 				dataFileExcludes);
-		loadExecutionData(support, filter, getProject().getBasedir());
+		loadExecutionData(support, filter, project.getBasedir());
 		for (final MavenProject dependency : findDependencies(
 				Artifact.SCOPE_COMPILE, Artifact.SCOPE_RUNTIME,
 				Artifact.SCOPE_PROVIDED, Artifact.SCOPE_TEST)) {
@@ -122,10 +123,8 @@
 	}
 
 	@Override
-	void addFormatters(final ReportSupport support, final Locale locale)
-			throws IOException {
-		support.addAllFormatters(outputDirectory, outputEncoding, footer,
-				locale);
+	File getOutputDirectory() {
+		return outputDirectory;
 	}
 
 	@Override
@@ -140,16 +139,13 @@
 		}
 	}
 
-	@Override
-	protected String getOutputDirectory() {
-		return outputDirectory.getAbsolutePath();
+	public File getReportOutputDirectory() {
+		return outputDirectory;
 	}
 
-	@Override
 	public void setReportOutputDirectory(final File reportOutputDirectory) {
-		if (reportOutputDirectory != null
-				&& !reportOutputDirectory.getAbsolutePath().endsWith(
-						"jacoco-aggregate")) {
+		if (reportOutputDirectory != null && !reportOutputDirectory
+				.getAbsolutePath().endsWith("jacoco-aggregate")) {
 			outputDirectory = new File(reportOutputDirectory,
 					"jacoco-aggregate");
 		} else {
@@ -168,7 +164,7 @@
 	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 : getProject().getDependencies()) {
+		for (final Object dependencyObject : project.getDependencies()) {
 			final Dependency dependency = (Dependency) dependencyObject;
 			if (scopeList.contains(dependency.getScope())) {
 				final MavenProject project = findProjectFromReactor(dependency);
@@ -192,7 +188,7 @@
 		try {
 			depVersionAsRange = VersionRange
 					.createFromVersionSpec(d.getVersion());
-		} catch (InvalidVersionSpecificationException e) {
+		} catch (final InvalidVersionSpecificationException e) {
 			throw new AssertionError(e);
 		}
 
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/ReportFormat.java b/jacoco-maven-plugin/src/org/jacoco/maven/ReportFormat.java
new file mode 100644
index 0000000..9406996
--- /dev/null
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/ReportFormat.java
@@ -0,0 +1,80 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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;
+
+}
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/ReportITMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/ReportITMojo.java
index ba4dde2..0ca4970 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/ReportITMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/ReportITMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -28,7 +29,7 @@
  * <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)
@@ -57,7 +58,7 @@
 
 	@Override
 	boolean canGenerateReportRegardingClassesDirectory() {
-		return new File(getProject().getBuild().getOutputDirectory()).exists();
+		return new File(project.getBuild().getOutputDirectory()).exists();
 	}
 
 	@Override
@@ -66,29 +67,24 @@
 	}
 
 	@Override
-	void addFormatters(final ReportSupport support, final Locale locale)
-			throws IOException {
-		support.addAllFormatters(outputDirectory, outputEncoding, footer,
-				locale);
+	File getOutputDirectory() {
+		return outputDirectory;
 	}
 
 	@Override
 	void createReport(final IReportGroupVisitor visitor,
 			final ReportSupport support) throws IOException {
-		support.processProject(visitor, title, getProject(), getIncludes(),
+		support.processProject(visitor, title, project, getIncludes(),
 				getExcludes(), sourceEncoding);
 	}
 
-	@Override
-	protected String getOutputDirectory() {
-		return outputDirectory.getAbsolutePath();
+	public File getReportOutputDirectory() {
+		return outputDirectory;
 	}
 
-	@Override
 	public void setReportOutputDirectory(final File reportOutputDirectory) {
-		if (reportOutputDirectory != null
-				&& !reportOutputDirectory.getAbsolutePath().endsWith(
-						"jacoco-it")) {
+		if (reportOutputDirectory != null && !reportOutputDirectory
+				.getAbsolutePath().endsWith("jacoco-it")) {
 			outputDirectory = new File(reportOutputDirectory, "jacoco-it");
 		} else {
 			outputDirectory = reportOutputDirectory;
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/ReportMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/ReportMojo.java
index 002e540..522fec3 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/ReportMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/ReportMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -23,7 +24,7 @@
 /**
  * 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)
@@ -52,7 +53,7 @@
 
 	@Override
 	boolean canGenerateReportRegardingClassesDirectory() {
-		return new File(getProject().getBuild().getOutputDirectory()).exists();
+		return new File(project.getBuild().getOutputDirectory()).exists();
 	}
 
 	@Override
@@ -61,28 +62,24 @@
 	}
 
 	@Override
-	void addFormatters(final ReportSupport support, final Locale locale)
-			throws IOException {
-		support.addAllFormatters(outputDirectory, outputEncoding, footer,
-				locale);
+	File getOutputDirectory() {
+		return outputDirectory;
 	}
 
 	@Override
 	void createReport(final IReportGroupVisitor visitor,
 			final ReportSupport support) throws IOException {
-		support.processProject(visitor, title, getProject(), getIncludes(),
+		support.processProject(visitor, title, project, getIncludes(),
 				getExcludes(), sourceEncoding);
 	}
 
-	@Override
-	protected String getOutputDirectory() {
-		return outputDirectory.getAbsolutePath();
+	public File getReportOutputDirectory() {
+		return outputDirectory;
 	}
 
-	@Override
 	public void setReportOutputDirectory(final File reportOutputDirectory) {
-		if (reportOutputDirectory != null
-				&& !reportOutputDirectory.getAbsolutePath().endsWith("jacoco")) {
+		if (reportOutputDirectory != null && !reportOutputDirectory
+				.getAbsolutePath().endsWith("jacoco")) {
 			outputDirectory = new File(reportOutputDirectory, "jacoco");
 		} else {
 			outputDirectory = reportOutputDirectory;
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/ReportSupport.java b/jacoco-maven-plugin/src/org/jacoco/maven/ReportSupport.java
index 1cdf847..c484309 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/ReportSupport.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/ReportSupport.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -16,14 +17,12 @@
 
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileOutputStream;
 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 java.util.Locale;
 
 import org.apache.maven.plugin.logging.Log;
 import org.apache.maven.project.MavenProject;
@@ -32,7 +31,6 @@
 import org.jacoco.core.analysis.IBundleCoverage;
 import org.jacoco.core.analysis.IClassCoverage;
 import org.jacoco.core.tools.ExecFileLoader;
-import org.jacoco.report.FileMultiReportOutput;
 import org.jacoco.report.IReportGroupVisitor;
 import org.jacoco.report.IReportVisitor;
 import org.jacoco.report.ISourceFileLocator;
@@ -40,17 +38,15 @@
 import org.jacoco.report.check.IViolationsOutput;
 import org.jacoco.report.check.Rule;
 import org.jacoco.report.check.RulesChecker;
-import org.jacoco.report.csv.CSVFormatter;
-import org.jacoco.report.html.HTMLFormatter;
-import org.jacoco.report.xml.XMLFormatter;
 
 /**
  * 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>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>
@@ -64,7 +60,7 @@
 
 	/**
 	 * Construct a new instance with the given log output.
-	 * 
+	 *
 	 * @param log
 	 *            for log output
 	 */
@@ -76,7 +72,7 @@
 
 	/**
 	 * Loads the given execution data file.
-	 * 
+	 *
 	 * @param execFile
 	 *            execution data file to load
 	 * @throws IOException
@@ -87,38 +83,8 @@
 		loader.load(execFile);
 	}
 
-	public void addXmlFormatter(final File targetfile, final String encoding)
-			throws IOException {
-		final XMLFormatter xml = new XMLFormatter();
-		xml.setOutputEncoding(encoding);
-		formatters.add(xml.createVisitor(new FileOutputStream(targetfile)));
-	}
-
-	public void addCsvFormatter(final File targetfile, final String encoding)
-			throws IOException {
-		final CSVFormatter csv = new CSVFormatter();
-		csv.setOutputEncoding(encoding);
-		formatters.add(csv.createVisitor(new FileOutputStream(targetfile)));
-	}
-
-	public void addHtmlFormatter(final File targetdir, final String encoding,
-			final String footer, final Locale locale) throws IOException {
-		final HTMLFormatter htmlFormatter = new HTMLFormatter();
-		htmlFormatter.setOutputEncoding(encoding);
-		htmlFormatter.setLocale(locale);
-		if (footer != null) {
-			htmlFormatter.setFooterText(footer);
-		}
-		formatters.add(htmlFormatter.createVisitor(new FileMultiReportOutput(
-				targetdir)));
-	}
-
-	public void addAllFormatters(final File targetdir, final String encoding,
-			final String footer, final Locale locale) throws IOException {
-		targetdir.mkdirs();
-		addXmlFormatter(new File(targetdir, "jacoco.xml"), encoding);
-		addCsvFormatter(new File(targetdir, "jacoco.csv"), encoding);
-		addHtmlFormatter(targetdir, encoding, footer, locale);
+	public void addVisitor(final IReportVisitor visitor) {
+		formatters.add(visitor);
 	}
 
 	public void addRulesChecker(final List<Rule> rules,
@@ -130,15 +96,15 @@
 
 	public IReportVisitor initRootVisitor() throws IOException {
 		final IReportVisitor visitor = new MultiReportVisitor(formatters);
-		visitor.visitInfo(loader.getSessionInfoStore().getInfos(), loader
-				.getExecutionDataStore().getContents());
+		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
@@ -160,10 +126,10 @@
 	/**
 	 * 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 bundeName
+	 * @param bundleName
 	 *            name for this project in the report
 	 * @param project
 	 *            the MavenProject
@@ -177,20 +143,20 @@
 	 *             if class files can't be read
 	 */
 	public void processProject(final IReportGroupVisitor visitor,
-			final String bundeName, final MavenProject project,
+			final String bundleName, final MavenProject project,
 			final List<String> includes, final List<String> excludes,
 			final String srcEncoding) throws IOException {
-		processProject(visitor, bundeName, project, includes, excludes,
+		processProject(visitor, bundleName, project, includes, excludes,
 				new SourceFileCollection(project, srcEncoding));
 	}
 
 	private void processProject(final IReportGroupVisitor visitor,
-			final String bundeName, final MavenProject project,
+			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());
+		final File classesDir = new File(
+				project.getBuild().getOutputDirectory());
 
 		if (classesDir.isDirectory()) {
 			final Analyzer analyzer = new Analyzer(
@@ -201,7 +167,7 @@
 			}
 		}
 
-		final IBundleCoverage bundle = builder.getBundle(bundeName);
+		final IBundleCoverage bundle = builder.getBundle(bundleName);
 		logBundleInfo(bundle, builder.getNoMatchClasses());
 
 		visitor.visitBundle(bundle, locator);
@@ -214,7 +180,7 @@
 				Integer.valueOf(bundle.getClassCounter().getTotalCount())));
 		if (!nomatch.isEmpty()) {
 			log.warn(format(
-					"Classes in bundle '%s' do no match with execution data. "
+					"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) {
@@ -275,7 +241,8 @@
 		}
 	}
 
-	private static List<File> getCompileSourceRoots(final MavenProject project) {
+	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));
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/RestoreMojo.java b/jacoco-maven-plugin/src/org/jacoco/maven/RestoreMojo.java
index 0e238d6..13e8690 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/RestoreMojo.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/RestoreMojo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -22,19 +23,20 @@
 
 /**
  * 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());
+	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) {
diff --git a/jacoco-maven-plugin/src/org/jacoco/maven/RuleConfiguration.java b/jacoco-maven-plugin/src/org/jacoco/maven/RuleConfiguration.java
index be4e5a1..f9d711c 100644
--- a/jacoco-maven-plugin/src/org/jacoco/maven/RuleConfiguration.java
+++ b/jacoco-maven-plugin/src/org/jacoco/maven/RuleConfiguration.java
@@ -1,15 +1,16 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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;
 
@@ -22,7 +23,7 @@
 
 /**
  * Wrapper for {@link Rule} objects to allow Maven style includes/excludes lists
- * 
+ *
  */
 public class RuleConfiguration {
 
@@ -37,8 +38,8 @@
 
 	/**
 	 * @param element
-	 *            element type this rule applies to
-	 * TODO: use ElementType directly once Maven 3 is required.
+	 *            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));
@@ -53,7 +54,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param excludes
 	 *            excludes patterns
 	 */
diff --git a/jacoco/assembly.xml b/jacoco/assembly.xml
index 056ede4..47e7bd9 100644
--- a/jacoco/assembly.xml
+++ b/jacoco/assembly.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/jacoco/pom.xml b/jacoco/pom.xml
index 9afefc0..62ecad1 100644
--- a/jacoco/pom.xml
+++ b/jacoco/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
@@ -110,7 +111,7 @@
             <configuration>
               <rules>
                 <requireFilesSize>
-                  <maxsize>4400000</maxsize>
+                  <maxsize>4500000</maxsize>
                   <minsize>3400000</minsize>
                   <files>
                     <file>${project.build.directory}/jacoco-${qualified.bundle.version}.zip</file>
diff --git a/org.jacoco.agent.rt.test/about.html b/org.jacoco.agent.rt.test/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.agent.rt.test/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.agent.rt.test/pom.xml b/org.jacoco.agent.rt.test/pom.xml
index 5394ee7..a76aacb 100644
--- a/org.jacoco.agent.rt.test/pom.xml
+++ b/org.jacoco.agent.rt.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/AgentTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/AgentTest.java
index f21968c..95f2f13 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/AgentTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/AgentTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -19,7 +20,6 @@
 import static org.junit.Assert.fail;
 
 import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.lang.management.ManagementFactory;
 
 import javax.management.InstanceNotFoundException;
@@ -107,8 +107,9 @@
 	}
 
 	@Test
-	public void startup_should_log_exception() throws Exception {
+	public void startup_should_log_and_rethrow_exception() throws Exception {
 		final Exception expected = new Exception();
+
 		Agent agent = new Agent(options, this) {
 			@Override
 			IAgentOutput createAgentOutput() {
@@ -127,9 +128,13 @@
 			}
 		};
 
-		agent.startup();
-
-		assertSame(expected, loggedException);
+		try {
+			agent.startup();
+			fail("Exception expected");
+		} catch (Exception actual) {
+			assertSame(expected, actual);
+			assertSame(expected, loggedException);
+		}
 	}
 
 	@Test
@@ -244,7 +249,7 @@
 	}
 
 	@Test
-	public void getSessionId_should_return_session_id() throws IOException {
+	public void getSessionId_should_return_session_id() throws Exception {
 		Agent agent = createAgent();
 
 		agent.startup();
@@ -253,7 +258,7 @@
 	}
 
 	@Test
-	public void setSessionId_should_modify_session_id() throws IOException {
+	public void setSessionId_should_modify_session_id() throws Exception {
 		Agent agent = createAgent();
 		agent.startup();
 
@@ -277,7 +282,7 @@
 
 	@Test
 	public void getExecutionData_should_return_probes_and_session_id()
-			throws IOException {
+			throws Exception {
 		Agent agent = createAgent();
 		agent.startup();
 		agent.getData().getExecutionData(Long.valueOf(0x12345678), "Foo", 1)
@@ -295,7 +300,7 @@
 
 	@Test
 	public void getExecutionData_should_reset_probes_when_enabled()
-			throws IOException {
+			throws Exception {
 		Agent agent = createAgent();
 		agent.startup();
 		final boolean[] probes = agent.getData()
@@ -310,7 +315,7 @@
 
 	@Test
 	public void getExecutionData_should_not_reset_probes_when_disabled()
-			throws IOException {
+			throws Exception {
 		Agent agent = createAgent();
 		agent.startup();
 		final boolean[] probes = agent.getData()
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ClassFileDumperTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ClassFileDumperTest.java
index 4d63684..814c80b 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ClassFileDumperTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ClassFileDumperTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ConfigLoaderTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ConfigLoaderTest.java
index f99c185..2dc2320 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ConfigLoaderTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ConfigLoaderTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/CoverageTransformerTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/CoverageTransformerTest.java
index 5429570..2faae3b 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/CoverageTransformerTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/CoverageTransformerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -103,31 +104,33 @@
 	@Test
 	public void testFilterClassLoaderNegative1() {
 		options.setInclBootstrapClasses(false);
-		options.setExclClassloader("org.jacoco.agent.rt.internal.CoverageTransformerTest$*");
+		options.setExclClassloader(
+				"org.jacoco.agent.rt.internal.CoverageTransformerTest$*");
 		CoverageTransformer t = createTransformer();
 		ClassLoader myClassLoader = new ClassLoader(null) {
 		};
-		assertFalse(t
-				.filter(myClassLoader, "org/example/Foo", protectionDomain));
+		assertFalse(
+				t.filter(myClassLoader, "org/example/Foo", protectionDomain));
 	}
 
 	@Test
 	public void testFilterClassLoaderNegative2() {
 		options.setInclBootstrapClasses(true);
-		options.setExclClassloader("org.jacoco.agent.rt.internal.CoverageTransformerTest$*");
+		options.setExclClassloader(
+				"org.jacoco.agent.rt.internal.CoverageTransformerTest$*");
 		CoverageTransformer t = createTransformer();
 		ClassLoader myClassLoader = new ClassLoader(null) {
 		};
-		assertFalse(t
-				.filter(myClassLoader, "org/example/Foo", protectionDomain));
+		assertFalse(
+				t.filter(myClassLoader, "org/example/Foo", protectionDomain));
 	}
 
 	@Test
 	public void testFilterIncludedClassPositive() {
 		options.setIncludes("org.jacoco.core.*:org.jacoco.agent.rt.*");
 		CoverageTransformer t = createTransformer();
-		assertTrue(t.filter(classLoader, "org/jacoco/core/Foo",
-				protectionDomain));
+		assertTrue(
+				t.filter(classLoader, "org/jacoco/core/Foo", protectionDomain));
 	}
 
 	@Test
@@ -158,8 +161,8 @@
 	public void testFilterExcludedClassNegative() {
 		options.setExcludes("*Test");
 		CoverageTransformer t = createTransformer();
-		assertTrue(t.filter(classLoader, "org/jacoco/core/Foo",
-				protectionDomain));
+		assertTrue(
+				t.filter(classLoader, "org/jacoco/core/Foo", protectionDomain));
 	}
 
 	@Test
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ExceptionRecorder.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ExceptionRecorder.java
index 7e8f5d2..cd706f8 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ExceptionRecorder.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/ExceptionRecorder.java
@@ -1,21 +1,20 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
-import org.jacoco.agent.rt.internal.IExceptionLogger;
-
 /**
  * {@link IExceptionLogger} implementation for testing purposes.
  */
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-subst-test.properties b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-subst-test.properties
index 62588a1..0d4ff20 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-subst-test.properties
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-subst-test.properties
@@ -2,4 +2,4 @@
 key1=${user.home}/coverage/jacoco-${java.version}.exec
 key2=$${user.home}
 key3=${user.home}}}
-key4=${does.not.exist}
\ No newline at end of file
+key4=${does.not.exist}
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-test.properties b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-test.properties
index 62cb680..ba3207b 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-test.properties
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/agent-test.properties
@@ -1,2 +1,2 @@
 output=tcpclient
-port=3333
\ No newline at end of file
+port=3333
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/ExecutorTestBase.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/ExecutorTestBase.java
index b276eef..8e38dff 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/ExecutorTestBase.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/ExecutorTestBase.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -43,7 +44,7 @@
 
 	/**
 	 * Asserts that the given future blocks.
-	 * 
+	 *
 	 * @param future
 	 *            future to test
 	 * @throws Exception
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/FileOutputTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/FileOutputTest.java
index 7e29dde..fbb5a8c 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/FileOutputTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/FileOutputTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.agent.rt.internal.output;
 
@@ -17,7 +18,6 @@
 import java.io.File;
 import java.io.IOException;
 
-import org.jacoco.agent.rt.internal.output.FileOutput;
 import org.jacoco.core.runtime.AgentOptions;
 import org.jacoco.core.runtime.RuntimeData;
 import org.junit.Rule;
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocket.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocket.java
index 18e58cb..9257f24 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocket.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocket.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -43,7 +44,7 @@
 	/**
 	 * Establishes a new mock connection. This method blocks until the other end
 	 * of the connection has been accepted.
-	 * 
+	 *
 	 * @return remote end of the mock connection
 	 */
 	public Socket connect() throws Exception {
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocketTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocketTest.java
index 942ce1a..2915063 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocketTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockServerSocketTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
index a06d07f..e158816 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnection.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnectionTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnectionTest.java
index 3f78178..b272730 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnectionTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/MockSocketConnectionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
index 849e7a8..435129e 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpClientOutputTest.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
  *    Marc R. Hoffmann - migration to mock socket
- *    
+ *
  *******************************************************************************/
 package org.jacoco.agent.rt.internal.output;
 
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
index 514675e..2b40ee4 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpConnectionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -102,7 +103,7 @@
 
 	/**
 	 * Local socket is closed while waiting for commands.
-	 * 
+	 *
 	 * @throws Exception
 	 */
 	@Test
diff --git a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpServerOutputTest.java b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpServerOutputTest.java
index 6efeb67..fb47b51 100644
--- a/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpServerOutputTest.java
+++ b/org.jacoco.agent.rt.test/src/org/jacoco/agent/rt/internal/output/TcpServerOutputTest.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
  *    Marc R. Hoffmann - migration to mock socket
- *    
+ *
  *******************************************************************************/
 package org.jacoco.agent.rt.internal.output;
 
@@ -84,7 +85,8 @@
 
 	@Test
 	public void testWriteExecutionData() throws Exception {
-		data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42).getProbes()[0] = true;
+		data.getExecutionData(Long.valueOf(0x12345678), "Foo", 42)
+				.getProbes()[0] = true;
 		data.setSessionId("stubid");
 
 		final Socket socket = serverSocket.connect();
diff --git a/org.jacoco.agent.rt/about.html b/org.jacoco.agent.rt/about.html
index 801516b..858277f 100644
--- a/org.jacoco.agent.rt/about.html
+++ b/org.jacoco.agent.rt/about.html
@@ -9,17 +9,17 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
@@ -30,44 +30,7 @@
   out below.
 </p>
 
-<h4>ASM 3.x</h4>
-
-<p>
-  This plug-in contains the <a href="http://asm.objectweb.org/">ASM</a> library
-  which is subject to the terms and conditions of the following license: 
-</p>
-
-<pre>
-Copyright (c) 2000-2005 INRIA, France Telecom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
+${asm.license}
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.agent.rt/pom.xml b/org.jacoco.agent.rt/pom.xml
index 605f449..7fab4ce 100644
--- a/org.jacoco.agent.rt/pom.xml
+++ b/org.jacoco.agent.rt/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.agent.rt/src/com/vladium/emma/rt/RT.java b/org.jacoco.agent.rt/src/com/vladium/emma/rt/RT.java
index f2f86a1..34ed71b 100644
--- a/org.jacoco.agent.rt/src/com/vladium/emma/rt/RT.java
+++ b/org.jacoco.agent.rt/src/com/vladium/emma/rt/RT.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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 com.vladium.emma.rt;
 
@@ -20,7 +21,7 @@
  * Compatibility layer for the EMMA runtime which allows to trigger dumps
  * through EMMA APIs. Note that even this class emulates an EMMA API the files
  * written are in JaCoCo execution data format.
- * 
+ *
  * @deprecated Use {@link org.jacoco.agent.rt.IAgent} instead.
  */
 @Deprecated
@@ -32,7 +33,7 @@
 	/**
 	 * Writes the current execution data to the given file in JaCoCo execution
 	 * data format.
-	 * 
+	 *
 	 * @param outFile
 	 *            file to write execution data to
 	 * @param merge
@@ -44,12 +45,12 @@
 	 *             in case of problems with the file output
 	 */
 	@SuppressWarnings("unused")
-	public static void dumpCoverageData(final File outFile,
-			final boolean merge, final boolean stopDataCollection)
-			throws IOException {
+	public static void dumpCoverageData(final File outFile, final boolean merge,
+			final boolean stopDataCollection) throws IOException {
 		final OutputStream out = new FileOutputStream(outFile, merge);
 		try {
-			out.write(org.jacoco.agent.rt.RT.getAgent().getExecutionData(false));
+			out.write(
+					org.jacoco.agent.rt.RT.getAgent().getExecutionData(false));
 		} finally {
 			out.close();
 		}
@@ -58,7 +59,7 @@
 	/**
 	 * Writes the current execution data to the given file in JaCoCo execution
 	 * data format. If the file already exists new data is appended.
-	 * 
+	 *
 	 * @param outFile
 	 *            file to write execution data to
 	 * @param stopDataCollection
diff --git a/org.jacoco.agent.rt/src/com/vladium/emma/rt/package-info.java b/org.jacoco.agent.rt/src/com/vladium/emma/rt/package-info.java
index 0da2e7c..454e9d0 100644
--- a/org.jacoco.agent.rt/src/com/vladium/emma/rt/package-info.java
+++ b/org.jacoco.agent.rt/src/com/vladium/emma/rt/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/IAgent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/IAgent.java
index 4320ae3..6f2087e 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/IAgent.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/IAgent.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -20,21 +21,21 @@
 
 	/**
 	 * Returns version of JaCoCo.
-	 * 
+	 *
 	 * @return version of JaCoCo
 	 */
 	String getVersion();
 
 	/**
 	 * Returns current a session identifier.
-	 * 
+	 *
 	 * @return current session identifier
 	 */
 	String getSessionId();
 
 	/**
 	 * Sets a session identifier.
-	 * 
+	 *
 	 * @param id
 	 *            new session identifier
 	 */
@@ -47,7 +48,7 @@
 
 	/**
 	 * Returns current execution data.
-	 * 
+	 *
 	 * @param reset
 	 *            if <code>true</code> the current execution data is cleared
 	 *            afterwards
@@ -58,7 +59,7 @@
 	/**
 	 * Triggers a dump of the current execution data through the configured
 	 * output.
-	 * 
+	 *
 	 * @param reset
 	 *            if <code>true</code> the current execution data is cleared
 	 *            afterwards
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/RT.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/RT.java
index c99b807..9474dc0 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/RT.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/RT.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt;
 
@@ -23,7 +24,7 @@
 
 	/**
 	 * Returns the agent instance of the JaCoCo runtime in this JVM.
-	 * 
+	 *
 	 * @return agent instance
 	 * @throws IllegalStateException
 	 *             if no Agent has been started yet
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
index b6debe1..3d8e5f6 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -34,17 +35,16 @@
  */
 public class Agent implements IAgent {
 
-	private static Agent singleton;
-
 	/**
 	 * Returns a global instance which is already started. If the method is
 	 * called the first time the instance is created with the given options.
-	 * 
+	 *
 	 * @param options
 	 *            options to configure the instance
 	 * @return global instance
 	 */
-	public static synchronized Agent getInstance(final AgentOptions options) {
+	public static synchronized Agent getInstance(final AgentOptions options)
+			throws Exception {
 		// BEGIN android-change
 		return getInstance(options, new RuntimeData());
 		// END android-change
@@ -62,19 +62,17 @@
 	 *            the runtime data to reuse
 	 * @return global instance
 	 */
-	public static synchronized Agent getInstance(final AgentOptions options, RuntimeData data) {
-		if (singleton == null) {
-			final Agent agent = new Agent(options, IExceptionLogger.SYSTEM_ERR, data);
-			agent.startup();
-			Runtime.getRuntime().addShutdownHook(new Thread() {
-				@Override
-				public void run() {
-					agent.shutdown();
-				}
-			});
-			singleton = agent;
-		}
-		return singleton;
+	public static synchronized Agent getInstance(final AgentOptions options, RuntimeData data)
+			throws Exception {
+		final Agent agent = new Agent(options, IExceptionLogger.SYSTEM_ERR, data);
+		agent.startup();
+		Runtime.getRuntime().addShutdownHook(new Thread() {
+			@Override
+			public void run() {
+				agent.shutdown();
+			}
+		});
+		return agent;
 	}
 	// END android-change
 
@@ -91,13 +89,10 @@
 	 */
 	// END android-change
 	public static synchronized Agent getInstance() throws IllegalStateException {
-		if (singleton == null) {
-			// BEGIN android-change
-			// throw new IllegalStateException("JaCoCo agent not started.");
-			singleton = Offline.createAgent();
-			// END android-change
-		}
-		return singleton;
+		// BEGIN android-change
+		// throw new IllegalStateException("JaCoCo agent not started.");
+		return Offline.createAgent();
+		// END android-change
 	}
 
 	private final AgentOptions options;
@@ -112,7 +107,7 @@
 
 	/**
 	 * Creates a new agent with the given agent options.
-	 * 
+	 *
 	 * @param options
 	 *            agent options
 	 * @param logger
@@ -144,7 +139,7 @@
 
 	/**
 	 * Returns the runtime data object created by this agent
-	 * 
+	 *
 	 * @return runtime data for this agent instance
 	 */
 	public RuntimeData getData() {
@@ -153,9 +148,11 @@
 
 	/**
 	 * Initializes this agent.
-	 * 
+	 *
+	 * @throws Exception
+	 *             in case something cannot be initialized
 	 */
-	public void startup() {
+	public void startup() throws Exception {
 		try {
 			String sessionId = options.getSessionId();
 			if (sessionId == null) {
@@ -171,6 +168,7 @@
 			}
 		} catch (final Exception e) {
 			logger.logExeption(e);
+			throw e;
 		}
 	}
 
@@ -193,7 +191,7 @@
 
 	/**
 	 * Create output implementation as given by the agent options.
-	 * 
+	 *
 	 * @return configured controller implementation
 	 */
 	IAgentOutput createAgentOutput() {
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ClassFileDumper.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ClassFileDumper.java
index 56f74c2..1336fc2 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ClassFileDumper.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ClassFileDumper.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -27,7 +28,7 @@
 
 	/**
 	 * Create a new dumper for the given location.
-	 * 
+	 *
 	 * @param location
 	 *            relative path to dump directory. <code>null</code> if no dumps
 	 *            should be written
@@ -43,7 +44,7 @@
 	/**
 	 * Dumps the given binary content under the given name if a non-
 	 * <code>null</code> location has been specified.
-	 * 
+	 *
 	 * @param name
 	 *            qualified class name in VM notation
 	 * @param contents
@@ -65,8 +66,8 @@
 			}
 			outputdir.mkdirs();
 			final Long id = Long.valueOf(CRC64.classId(contents));
-			final File file = new File(outputdir, String.format(
-					"%s.%016x.class", localname, id));
+			final File file = new File(outputdir,
+					String.format("%s.%016x.class", localname, id));
 			final OutputStream out = new FileOutputStream(file);
 			out.write(contents);
 			out.close();
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ConfigLoader.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ConfigLoader.java
index 9020c2f..3925d03 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ConfigLoader.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/ConfigLoader.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
index ef3300c..0fa6c3f 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/CoverageTransformer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -51,7 +52,7 @@
 
 	/**
 	 * New transformer with the given delegates.
-	 * 
+	 *
 	 * @param runtime
 	 *            coverage runtime
 	 * @param options
@@ -101,7 +102,7 @@
 
 	/**
 	 * Checks whether this class should be instrumented.
-	 * 
+	 *
 	 * @param loader
 	 *            loader for the class
 	 * @param classname
@@ -117,7 +118,8 @@
 				return false;
 			}
 		} else {
-			if (!inclNoLocationClasses && !hasSourceLocation(protectionDomain)) {
+			if (!inclNoLocationClasses
+					&& !hasSourceLocation(protectionDomain)) {
 				return false;
 			}
 			if (exclClassloader.matches(loader.getClass().getName())) {
@@ -127,15 +129,15 @@
 
 		return !classname.startsWith(AGENT_PREFIX) &&
 
-		includes.matches(classname) &&
+				includes.matches(classname) &&
 
-		!excludes.matches(classname);
+				!excludes.matches(classname);
 	}
 
 	/**
 	 * Checks whether this protection domain is associated with a source
 	 * location.
-	 * 
+	 *
 	 * @param protectionDomain
 	 *            protection domain to check (or <code>null</code>)
 	 * @return <code>true</code> if a source location is defined
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/IExceptionLogger.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/IExceptionLogger.java
index 82cd19b..8733f0f 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/IExceptionLogger.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/IExceptionLogger.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Logs the given exception.
-	 * 
+	 *
 	 * @param ex
 	 *            exception to log
 	 */
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java
index 6c49c0c..f9adf57 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/JmxRegistration.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
index 99a054e..b2bfab4 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java
@@ -1,16 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
+// BEGIN android-change
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
@@ -18,14 +20,17 @@
 import java.nio.ByteBuffer;
 import java.util.HashMap;
 import java.util.Map;
+// END android-change
 import java.util.Properties;
 
+// BEGIN android-change
 import org.jacoco.core.data.ExecutionData;
 import org.jacoco.core.data.ExecutionDataWriter;
 import org.jacoco.core.data.ExecutionDataDelegate;
 import org.jacoco.core.data.IExecutionData;
 import org.jacoco.core.data.ExecutionDataStore;
 import org.jacoco.core.data.MappedExecutionData;
+// END android-change
 import org.jacoco.core.runtime.AgentOptions;
 import org.jacoco.core.runtime.RuntimeData;
 
@@ -36,28 +41,35 @@
 public final class Offline {
 
 	// BEGIN android-change
-	// private static final RuntimeData DATA;
 	private static final Map<Long, ExecutionDataDelegate> DATA = new HashMap<Long, ExecutionDataDelegate>();
 	private static FileChannel CHANNEL;
 	// END android-change
 	private static final String CONFIG_RESOURCE = "/jacoco-agent.properties";
 
-	// BEGIN android-change
-	// static {
-	//	 final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
-	//			System.getProperties());
-	//	 DATA = Agent.getInstance(new AgentOptions(config)).getData();
-	// }
-	// END android-change
-
 	private Offline() {
 		// no instances
 	}
 
 	// BEGIN android-change
+	//private static RuntimeData data;
+	/*
+	private static synchronized RuntimeData getRuntimeData() {
+		if (data == null) {
+			final Properties config = ConfigLoader.load(CONFIG_RESOURCE,
+					System.getProperties());
+			try {
+				data = Agent.getInstance(new AgentOptions(config)).getData();
+			} catch (final Exception e) {
+				throw new RuntimeException("Failed to initialize JaCoCo.", e);
+			}
+		}
+		return data;
+	}
+	*/
+
 	/**
 	 * API for offline instrumented classes.
-	 * 
+	 *
 	 * @param classid
 	 *            class identifier
 	 * @param classname
@@ -68,8 +80,9 @@
 	 */
 	public static IExecutionData getExecutionData(final long classid,
 			final String classname, final int probecount) {
-		// return DATA.getExecutionData(Long.valueOf(classid), classname,
-		//		probecount).getProbes();
+		//return getRuntimeData()
+		//		.getExecutionData(Long.valueOf(classid), classname, probecount)
+		//		.getProbes();
 		synchronized (DATA) {
 			ExecutionDataDelegate entry = DATA.get(classid);
 			if (entry == null) {
@@ -125,7 +138,6 @@
 		// Read /proc/self and resolve it to obtain its pid.
 		return Integer.parseInt(new File("/proc/self").getCanonicalFile().getName());
 	}
-	// END android-change
 
 	/**
 	 * Creates a default agent, using config loaded from the classpath resource and the system
@@ -143,7 +155,11 @@
 			for (IExecutionData data : DATA.values()) {
 				store.put(data);
 			}
-			return Agent.getInstance(new AgentOptions(config), new RuntimeData(store));
+			try {
+				return Agent.getInstance(new AgentOptions(config), new RuntimeData(store));
+			} catch (final Exception e) {
+				throw new RuntimeException("Failed to initialize JaCoCo.", e);
+			}
 		}
 	}
 	// END android-change
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/PreMain.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/PreMain.java
index 205fa5b..31da3ad 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/PreMain.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/PreMain.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal;
 
@@ -33,7 +34,7 @@
 
 	/**
 	 * This method is called by the JVM to initialize Java agents.
-	 * 
+	 *
 	 * @param options
 	 *            agent options
 	 * @param inst
@@ -61,7 +62,8 @@
 			return new InjectedClassRuntime(Object.class, "$JaCoCo");
 		}
 
-		return ModifiedSystemClassRuntime.createFor(inst, "java/lang/UnknownError");
+		return ModifiedSystemClassRuntime.createFor(inst,
+				"java/lang/UnknownError");
 	}
 
 	/**
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/FileOutput.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/FileOutput.java
index dde7860..21b994f 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/FileOutput.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/FileOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.agent.rt.internal.output;
 
@@ -36,8 +37,8 @@
 
 	private boolean append;
 
-	public final void startup(final AgentOptions options, final RuntimeData data)
-			throws IOException {
+	public final void startup(final AgentOptions options,
+			final RuntimeData data) throws IOException {
 		this.data = data;
 		this.destFile = new File(options.getDestfile()).getAbsoluteFile();
 		this.append = options.getAppend();
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/IAgentOutput.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/IAgentOutput.java
index b3d0e17..5f48217 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/IAgentOutput.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/IAgentOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.agent.rt.internal.output;
 
@@ -25,7 +26,7 @@
 	/**
 	 * Configure the agent controller with the supplied options and connect it
 	 * to the coverage runtime
-	 * 
+	 *
 	 * @param options
 	 *            Options used to configure the agent controller
 	 * @param data
@@ -37,7 +38,7 @@
 
 	/**
 	 * Shutdown the agent controller and clean up any resources it has created.
-	 * 
+	 *
 	 * @throws Exception
 	 *             in case shutdown fails
 	 */
@@ -46,7 +47,7 @@
 	/**
 	 * Write all execution data in the runtime to a location determined by the
 	 * agent controller. This method should only be called by the Agent
-	 * 
+	 *
 	 * @param reset
 	 *            if <code>true</code> execution data is cleared afterwards
 	 * @throws IOException
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/NoneOutput.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/NoneOutput.java
index 85a0055..27066e5 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/NoneOutput.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/NoneOutput.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Mandrikov Evgeny - initial API and implementation
@@ -19,7 +20,8 @@
  */
 public class NoneOutput implements IAgentOutput {
 
-	public final void startup(final AgentOptions options, final RuntimeData data) {
+	public final void startup(final AgentOptions options,
+			final RuntimeData data) {
 		// Nothing to do
 	}
 
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpClientOutput.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpClientOutput.java
index a3b027f..f88a279 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpClientOutput.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpClientOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal.output;
 
@@ -19,8 +20,8 @@
 import org.jacoco.core.runtime.RuntimeData;
 
 /**
- * Output that connects to a TCP port. This controller uses the following
- * agent options:
+ * Output that connects to a TCP port. This controller uses the following agent
+ * options:
  * <ul>
  * <li>address</li>
  * <li>port</li>
@@ -36,7 +37,7 @@
 
 	/**
 	 * New controller instance.
-	 * 
+	 *
 	 * @param logger
 	 *            logger to use in case of exceptions is spawned threads
 	 */
@@ -74,7 +75,7 @@
 
 	/**
 	 * Open a socket based on the given configuration.
-	 * 
+	 *
 	 * @param options
 	 *            address and port configuration
 	 * @return opened socket
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpConnection.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpConnection.java
index ccba1f2..bc0de09 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpConnection.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpConnection.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal.output;
 
@@ -50,7 +51,7 @@
 
 	/**
 	 * Processes all requests for this session until the socket is closed.
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of problems whith the connection
 	 */
@@ -72,7 +73,7 @@
 	/**
 	 * Dumps the current execution data if the connection is already initialized
 	 * and the underlying socket is still open.
-	 * 
+	 *
 	 * @param reset
 	 *            if <code>true</code> execution data is cleared afterwards
 	 * @throws IOException
@@ -85,7 +86,7 @@
 
 	/**
 	 * Closes the underlying socket if not closed yet.
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	public void close() throws IOException {
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpServerOutput.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpServerOutput.java
index eeaf4a3..a2be3c5 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpServerOutput.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/output/TcpServerOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent.rt.internal.output;
 
@@ -40,7 +41,7 @@
 
 	/**
 	 * New controller instance.
-	 * 
+	 *
 	 * @param logger
 	 *            logger to use in case of exceptions is spawned threads
 	 */
@@ -94,7 +95,7 @@
 
 	/**
 	 * Open a server socket based on the given configuration.
-	 * 
+	 *
 	 * @param options
 	 *            address and port configuration
 	 * @return opened server socket
@@ -108,7 +109,7 @@
 
 	/**
 	 * Returns the {@link InetAddress} object to open the server socket on.
-	 * 
+	 *
 	 * @param address
 	 *            address specified as a string
 	 * @return address to open the server socket
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/package-info.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/package-info.java
index 08a182c..fb51418 100644
--- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/package-info.java
+++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.agent.test/about.html b/org.jacoco.agent.test/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.agent.test/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.agent.test/pom.xml b/org.jacoco.agent.test/pom.xml
index da758be..3eafa81 100644
--- a/org.jacoco.agent.test/pom.xml
+++ b/org.jacoco.agent.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.agent.test/src/org/jacoco/agent/AgentJarTest.java b/org.jacoco.agent.test/src/org/jacoco/agent/AgentJarTest.java
index c127489..dd385d4 100644
--- a/org.jacoco.agent.test/src/org/jacoco/agent/AgentJarTest.java
+++ b/org.jacoco.agent.test/src/org/jacoco/agent/AgentJarTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent;
 
diff --git a/org.jacoco.agent/about.html b/org.jacoco.agent/about.html
index ebd8147..858277f 100644
--- a/org.jacoco.agent/about.html
+++ b/org.jacoco.agent/about.html
@@ -9,17 +9,17 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
@@ -30,44 +30,7 @@
   out below.
 </p>
 
-<h4>ASM</h4>
-
-<p>
-  This plug-in contains the <a href="http://asm.objectweb.org/">ASM</a> library
-  which is subject to the terms and conditions of the following license: 
-</p>
-
-<pre>
-Copyright (c) 2012 France Télécom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
+${asm.license}
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.agent/pom.xml b/org.jacoco.agent/pom.xml
index ac18eca..3ebc5f7 100644
--- a/org.jacoco.agent/pom.xml
+++ b/org.jacoco.agent/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.agent/src/org/jacoco/agent/AgentJar.java b/org.jacoco.agent/src/org/jacoco/agent/AgentJar.java
index 9e34dd9..93c41f26 100644
--- a/org.jacoco.agent/src/org/jacoco/agent/AgentJar.java
+++ b/org.jacoco.agent/src/org/jacoco/agent/AgentJar.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.agent;
 
@@ -37,7 +38,7 @@
 
 	/**
 	 * Returns a URL pointing to the JAR file.
-	 * 
+	 *
 	 * @return URL of the JAR file
 	 */
 	public static URL getResource() {
@@ -50,7 +51,7 @@
 
 	/**
 	 * Returns the content of the JAR file as a stream.
-	 * 
+	 *
 	 * @return content of the JAR file
 	 */
 	public static InputStream getResourceAsStream() {
@@ -64,7 +65,7 @@
 	/**
 	 * Extract the JaCoCo agent JAR and put it into a temporary location. This
 	 * file should be deleted on exit, but may not if the VM is terminated
-	 * 
+	 *
 	 * @return Location of the Agent Jar file in the local file system. The file
 	 *         should exist and be readable.
 	 * @throws IOException
@@ -81,7 +82,7 @@
 
 	/**
 	 * Extract the JaCoCo agent JAR and put it into the specified location.
-	 * 
+	 *
 	 * @param destination
 	 *            Location to write JaCoCo Agent Jar to. Must be writeable
 	 * @throws IOException
@@ -109,7 +110,7 @@
 
 	/**
 	 * Close a stream ignoring any error
-	 * 
+	 *
 	 * @param closeable
 	 *            stream to be closed
 	 */
@@ -122,8 +123,8 @@
 		}
 	}
 
-	private static final String ERRORMSG = String.format(
-			"The resource %s has not been found. Please see "
+	private static final String ERRORMSG = String
+			.format("The resource %s has not been found. Please see "
 					+ "/org.jacoco.agent/README.TXT for details.", RESOURCE);
 
 }
diff --git a/org.jacoco.agent/src/org/jacoco/agent/package-info.java b/org.jacoco.agent/src/org/jacoco/agent/package-info.java
index 15254a2..350948e 100644
--- a/org.jacoco.agent/src/org/jacoco/agent/package-info.java
+++ b/org.jacoco.agent/src/org/jacoco/agent/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.ant.test/pom.xml b/org.jacoco.ant.test/pom.xml
index 6686ae2..27bcb73 100644
--- a/org.jacoco.ant.test/pom.xml
+++ b/org.jacoco.ant.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
@@ -42,8 +43,16 @@
     </dependency>
     <dependency>
       <groupId>org.apache.ant</groupId>
+      <artifactId>ant-launcher</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.ant</groupId>
       <artifactId>ant-junit</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.ant</groupId>
+      <artifactId>ant-junit4</artifactId>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/org.jacoco.ant.test/src/TestTargetInDefault.java b/org.jacoco.ant.test/src/TestTargetInDefault.java
index a3ef958..75bdd9d 100644
--- a/org.jacoco.ant.test/src/TestTargetInDefault.java
+++ b/org.jacoco.ant.test/src/TestTargetInDefault.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.java
index 820be37..692b03a 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class AgentTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.xml
index 4049b76..516c4ca 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/AgentTaskTest.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
 
 <project name="JaCoCo Agent Task Tests" xmlns:au="antlib:org.apache.ant.antunit" xmlns:jacoco="antlib:org.jacoco.ant">
-			
+
 	<target name="testCoverageAgent">
 		<jacoco:agent property="jacocoagent" append="false" destfile="test.exec"
 			exclClassLoader="EvilClassLoader" includes="org.example.*" excludes="*Test"
@@ -39,12 +40,12 @@
 		<property name="dump.dir" location="target/dump"/>
 		<au:assertPropertyContains name="jacocoagent" value="classdumpdir=${dump.dir}"/>
 	</target>
-	
+
 	<target name="testCoverageAgentDisabled">
 		<jacoco:agent enabled="false" property="jacocoagent" append="false" destfile="${basedir}/test.exec" exclClassLoader="sun.reflect.DelegatingClassLoader"/>
 		<au:assertPropertyEquals name="jacocoagent" value=""/>
 	</target>
-	
+
 	<target name="testCoverageAgentWithNoProperty">
 		<au:expectfailure expectedMessage="Property is mandatory">
 			<jacoco:agent/>
@@ -62,5 +63,5 @@
 		<jacoco:agent property="agent2"/>
 		<au:assertEquals expected="${agent1}" actual="${agent2}"/>
 	</target>
-	
+
 </project>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/AntFilesLocatorTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/AntFilesLocatorTest.java
index cba5f1a..7fb047a 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/AntFilesLocatorTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/AntFilesLocatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
@@ -62,8 +63,8 @@
 	private Resource createFile(String path) throws IOException {
 		final File file = new File(folder.getRoot(), path);
 		file.getParentFile().mkdirs();
-		final Writer writer = new OutputStreamWriter(
-				new FileOutputStream(file), "UTF-8");
+		final Writer writer = new OutputStreamWriter(new FileOutputStream(file),
+				"UTF-8");
 		writer.write("Source");
 		writer.close();
 		return new FileResource(folder.getRoot(), path);
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/AntResourcesLocatorTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/AntResourcesLocatorTest.java
index 50e3118..f6b8dcb 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/AntResourcesLocatorTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/AntResourcesLocatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
@@ -120,11 +121,12 @@
 		assertContent("BBB", source);
 	}
 
-	private Resource createFile(String path, String content) throws IOException {
+	private Resource createFile(String path, String content)
+			throws IOException {
 		final File file = new File(folder.getRoot(), path);
 		file.getParentFile().mkdirs();
-		final Writer writer = new OutputStreamWriter(
-				new FileOutputStream(file), "UTF-8");
+		final Writer writer = new OutputStreamWriter(new FileOutputStream(file),
+				"UTF-8");
 		writer.write(content);
 		writer.close();
 		return new FileResource(folder.getRoot(), path);
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.java
index 3ee4454..7002431 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class CoverageTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.xml
index 4e34e89..de7cb09 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/CoverageTaskTest.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
 
 <project name="JaCoCo Coverage Task Tests" xmlns:au="antlib:org.apache.ant.antunit" xmlns:jacoco="antlib:org.jacoco.ant">
-	
+
 	<target name="setUp">
 		<tempfile property="temp.dir" prefix="jacocoTest" destdir="${java.io.tmpdir}" />
 		<mkdir dir="${temp.dir}"/>
@@ -22,7 +23,7 @@
 	<target name="tearDown">
 		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
 	</target>
-			
+
 	<target name="testNoSubTasks">
 		<au:expectfailure expectedMessage="A child task must be supplied for the coverage task">
 			<jacoco:coverage/>
@@ -40,10 +41,10 @@
 				</java>
 			</jacoco:coverage>
 		</au:expectfailure>
-		
+
 		<au:assertLogDoesntContain text="Target executed"/>
 	</target>
-	
+
 	<target name="testInvalidSubTask">
 		<au:expectfailure expectedMessage="jar is not a valid child of the coverage task">
 			<jacoco:coverage>
@@ -58,7 +59,7 @@
 				<classpath path="${org.jacoco.ant.coverageTaskTest.classes.dir}"/>
 			</java>
 		</jacoco:coverage>
-		
+
 		<au:assertLogContains text="Enhancing java with coverage"/>
 		<au:assertFileExists file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
@@ -71,19 +72,19 @@
 				<classpath path="${org.jacoco.ant.coverageTaskTest.classes.dir}"/>
 			</java>
 		</jacoco:coverage>
-		
+
 		<au:assertLogContains text="Enhancing java with coverage"/>
 		<au:assertFileExists file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
 	</target>
-	
+
 	<target name="testCoverageOfForkedJavaDisabled">
 		<jacoco:coverage enabled="false" destfile="${exec.file}">
 			<java classname="org.jacoco.ant.TestTarget" fork="true" failonerror="true">
 				<classpath path="${org.jacoco.ant.coverageTaskTest.classes.dir}"/>
 			</java>
 		</jacoco:coverage>
-		
+
 		<au:assertLogDoesntContain text="Enhancing java with coverage"/>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
@@ -97,7 +98,7 @@
 				</java>
 			</jacoco:coverage>
 		</au:expectfailure>
-		
+
 		<au:assertLogDoesntContain text="Target executed"/>
 	</target>
 
@@ -108,12 +109,12 @@
 				<test name="org.jacoco.ant.TestTarget" />
 			</junit>
 		</jacoco:coverage>
-		
+
 		<au:assertLogContains text="Enhancing junit with coverage"/>
 		<au:assertFileExists file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
 	</target>
-	
+
 	<target name="testCoverageOfForkedJUnitDisabled">
 		<jacoco:coverage enabled="false" destfile="${exec.file}">
 			<junit fork="true" haltonfailure="true" showoutput="true">
@@ -121,7 +122,7 @@
 				<test name="org.jacoco.ant.TestTarget" />
 			</junit>
 		</jacoco:coverage>
-		
+
 		<au:assertLogDoesntContain text="Enhancing junit with coverage"/>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
@@ -136,7 +137,7 @@
 				</junit>
 			</jacoco:coverage>
 		</au:expectfailure>
-		
+
 		<au:assertLogDoesntContain text="Target executed"/>
 	</target>
 
@@ -146,11 +147,11 @@
 				<classpath path="${org.jacoco.ant.coverageTaskTest.classes.dir}"/>
 			</java>
 		</jacoco:coverage>
-		
+
 		<au:assertLogContains text="Enhancing java with coverage"/>
 		<au:assertFileExists file="${exec.file}"/>
 		<au:assertLogContains text="Target executed"/>
-		
+
 		<java classname="org.jacoco.ant.DumpExecClassNames" classpath="${java.class.path}" failonerror="true">
 			<arg value="${exec.file}" />
 		</java>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/CreateExecFiles.java b/org.jacoco.ant.test/src/org/jacoco/ant/CreateExecFiles.java
index d7787eb..ad308e9 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/CreateExecFiles.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/CreateExecFiles.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/DumpExecClassNames.java b/org.jacoco.ant.test/src/org/jacoco/ant/DumpExecClassNames.java
index de45b2b..f1dbc45 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/DumpExecClassNames.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/DumpExecClassNames.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.java
index a145f88..5d50445 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class DumpTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.xml
index 419ba23..d3b23b3 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskTest.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
@@ -22,15 +23,15 @@
 	<target name="tearDown">
 		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
 	</target>
-	
-	
+
+
 	<target name="testNoServer">
 		<au:expectfailure expectedMessage="Unable to dump coverage data">
 			<jacoco:dump dump="true" destfile="${exec.file}" retryCount="0"/>
 		</au:expectfailure>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 	</target>
-	
+
 	<target name="testUnknownHost">
 		<au:expectfailure expectedMessage="Unable to dump coverage data">
 			<!--
@@ -49,12 +50,12 @@
 		</au:expectfailure>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 	</target>
-	
+
 	<target name="testNoDestFile">
 		<au:expectfailure expectedMessage="Destination file is required when dumping execution data">
 			<jacoco:dump dump="true"/>
 		</au:expectfailure>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 	</target>
-	
+
 </project>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.java
index 1e4277d..e6a3728 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class DumpTaskWithServerTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.xml
index 6a3b9dd..89924e3 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/DumpTaskWithServerTest.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
@@ -18,7 +19,7 @@
 		<mkdir dir="${temp.dir}"/>
 		<property name="exec.file" location="${temp.dir}/exec.file" />
 		<property name="term.file" location="${temp.dir}/term.file" />
-		
+
 		<jacoco:coverage output="tcpserver" port="6300">
 			<java classname="org.jacoco.ant.TestTarget" spawn="true" fork="true" maxmemory="16m">
 				<classpath path="${org.jacoco.ant.dumpTaskWithServerTest.classes.dir}"/>
@@ -26,30 +27,32 @@
 				<arg value="${term.file}"/>
 			</java>
 		</jacoco:coverage>
-		
-		<waitfor maxwait="1" maxwaitunit="second" checkevery="10" checkeveryunit="millisecond">
+
+		<waitfor maxwait="60" maxwaitunit="second" checkevery="10" checkeveryunit="millisecond" timeoutproperty="timeout">
 			<socket server="localhost" port="6300"/>
 		</waitfor>
+		<fail message="Server startup timeout." if="timeout"/>
 	</target>
 
 	<target name="tearDown">
 		<touch file="${term.file}"/>
-		<waitfor maxwait="5" maxwaitunit="second" checkevery="10" checkeveryunit="millisecond">
+		<waitfor maxwait="60" maxwaitunit="second" checkevery="10" checkeveryunit="millisecond" timeoutproperty="timeout">
 			<not>
 				<socket server="localhost" port="6300"/>
 			</not>
 		</waitfor>
+		<fail message="Server shutdown timeout." if="timeout"/>
 		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
 	</target>
-	
-	
+
+
 	<target name="testDump">
 		<jacoco:dump dump="true" destfile="${exec.file}"/>
-		
+
 		<au:assertFileExists file="${exec.file}"/>
 		<au:assertLogContains text="Dumping execution data to ${exec.file}"/>
 	</target>
-	
+
 	<target name="testNoDumpOrReset">
 		<jacoco:dump dump="false" reset="false"/>
 
@@ -58,15 +61,15 @@
 
 	<target name="testResetOnly">
 		<jacoco:dump dump="false" reset="true"/>
-		
+
 		<au:assertLogDoesntContain text="Dumping execution data to"/>
 	</target>
-	
+
 	<target name="testNoDumpWithFileSet">
 		<jacoco:dump dump="false" destfile="${exec.file}"/>
-		
+
 		<au:assertLogDoesntContain text="Dumping execution data to"/>
 		<au:assertFileDoesntExist file="${exec.file}"/>
 	</target>
-	
+
 </project>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.java
index 14ca20b..073b9d2 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.java
@@ -1,26 +1,27 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 import java.io.IOException;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.jacoco.agent.AgentJar;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class InstrumentTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml
index dbe2306..110d375 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/InstrumentTaskTest.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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
 -->
@@ -22,7 +23,7 @@
 	<target name="tearDown">
 		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
 	</target>
-	
+
 	<target name="testInstrumentNoDestination">
 		<au:expectfailure expectedMessage="Destination directory must be supplied">
 			<jacoco:instrument/>
@@ -47,18 +48,18 @@
 			<dirset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**"/>
 		</jacoco:instrument>
 	</target>
-	
+
 	<target name="testInstrumentRemoveSignatures">
 		<property name="lib.dir" location="${temp.dir}/lib"/>
 		<property name="instr.dir" location="${temp.dir}/instr"/>
 		<mkdir dir="${lib.dir}"/>
 		<mkdir dir="${instr.dir}"/>
-		
+
 		<jar destfile="${lib.dir}/test.jar">
 			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
 		</jar>
 		<signjar jar="${lib.dir}/test.jar" keystore="${basedir}/data/keystore.jks" alias="test" storepass="password"/>
-		
+
 		<jacoco:instrument destdir="${instr.dir}">
 			<fileset dir="${lib.dir}" includes="*.jar"/>
 		</jacoco:instrument>
@@ -67,19 +68,19 @@
 		<unzip src="${instr.dir}/test.jar" dest="${instr.dir}"/>
 		<au:assertFileDoesntExist file="${instr.dir}/META-INF/TEST.RSA" />
 		<au:assertFileDoesntExist file="${instr.dir}/META-INF/TEST.SF" />
-	</target>	
+	</target>
 
 	<target name="testInstrumentKeepSignatures">
 		<property name="lib.dir" location="${temp.dir}/lib"/>
 		<property name="instr.dir" location="${temp.dir}/instr"/>
 		<mkdir dir="${lib.dir}"/>
 		<mkdir dir="${instr.dir}"/>
-		
+
 		<jar destfile="${lib.dir}/test.jar">
 			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
 		</jar>
 		<signjar jar="${lib.dir}/test.jar" keystore="${basedir}/data/keystore.jks" alias="test" storepass="password"/>
-		
+
 		<jacoco:instrument destdir="${instr.dir}" removesignatures="false">
 			<fileset dir="${lib.dir}" includes="*.jar"/>
 		</jacoco:instrument>
@@ -88,8 +89,8 @@
 		<unzip src="${instr.dir}/test.jar" dest="${instr.dir}"/>
 		<au:assertFileExists file="${instr.dir}/META-INF/TEST.RSA" />
 		<au:assertFileExists file="${instr.dir}/META-INF/TEST.SF" />
-	</target>	
-	
+	</target>
+
 	<target name="testInstrumentAndRunWithConfigFile">
 		<jacoco:instrument destdir="${temp.dir}">
 			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
@@ -106,7 +107,7 @@
 		</java>
 		<au:assertFileExists file="${temp.dir}/test.exec" />
 	</target>
-	
+
 	<target name="testInstrumentAndRunWithSystemProperties">
 		<jacoco:instrument destdir="${temp.dir}">
 			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
@@ -123,5 +124,24 @@
 		</java>
 		<au:assertFileExists file="${temp.dir}/test.exec" />
 	</target>
-	
+
+	<target name="testInstrumentWithRuntimeStartupFailure">
+		<jacoco:instrument destdir="${temp.dir}">
+			<fileset dir="${org.jacoco.ant.instrumentTaskTest.classes.dir}" includes="**/*.class"/>
+		</jacoco:instrument>
+		<au:assertLogContains text="Instrumented 15 classes to ${temp.dir}"/>
+		<au:assertFileExists file="${temp.dir}/org/jacoco/ant/InstrumentTaskTest.class" />
+
+		<java classname="org.jacoco.ant.TestTarget" failonerror="false" fork="true">
+			<sysproperty key="jacoco-agent.output" value="tcpserver"/>
+			<sysproperty key="jacoco-agent.port" value="foo"/>
+			<classpath>
+				<pathelement path="${org.jacoco.ant.instrumentTaskTest.agent.file}"/>
+				<pathelement path="${temp.dir}"/>
+			</classpath>
+		</java>
+		<au:assertLogContains text="java.lang.RuntimeException: Failed to initialize JaCoCo."/>
+		<au:assertLogContains text="java.lang.NumberFormatException: For input string: &quot;foo&quot;"/>
+	</target>
+
 </project>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.java
index 43615bb..c5732ec 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class MergeTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.xml
index d61f922..8ad47eb 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/MergeTaskTest.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
@@ -22,30 +23,30 @@
 	<target name="tearDown">
 		<delete dir="${temp.dir}" quiet="false" failonerror="true"/>
 	</target>
-	
+
 	<target name="testMergeNoDestination">
 		<au:expectfailure expectedMessage="Destination file must be supplied">
 			<jacoco:merge/>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testMergeToDirectory">
 		<au:expectfailure expectedMessage="Unable to write merged file ${temp.dir}">
 			<jacoco:merge destfile="${temp.dir}"/>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testMergeEmptySet">
 		<jacoco:merge destfile="${exec.file}"/>
-		
+
 		<au:assertFileExists file="${exec.file}"/>
 	</target>
-	
+
 	<target name="testMergeMultipleFiles">
 		<jacoco:merge destfile="${exec.file}">
 			<fileset dir="${basedir}/data" includes="*.exec"/>
 		</jacoco:merge>
-		
+
 		<property name="sample1.file" location="${basedir}/data/sample1.exec"/>
 		<property name="sample2.file" location="${basedir}/data/sample2.exec"/>
 		<au:assertLogContains text="Loading execution data file ${sample1.file}"/>
@@ -53,7 +54,7 @@
 		<au:assertLogContains text="Writing merged execution data to ${exec.file}"/>
 		<au:assertFileExists file="${exec.file}"/>
 	</target>
-	
+
 	<target name="testMergeBadFiles">
 		<property name="bad.file" location="${basedir}/data/sample.bad"/>
 		<au:expectfailure expectedMessage="Unable to read ${bad.file}">
@@ -62,7 +63,7 @@
 		</jacoco:merge>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testMergeDirectory">
 		<jacoco:merge destfile="${exec.file}">
 			<dirset dir="${basedir}/data"/>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java b/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java
index 7f9eb8d..20f9d5a 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/RemoveDebugInfos.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskLocaleTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskLocaleTest.java
index 782675e..fbb96c7 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskLocaleTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskLocaleTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.java b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.java
index 6f16442..c3059ec 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.java
@@ -1,24 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
 import java.io.File;
 
-import junit.framework.TestSuite;
-
 import org.apache.ant.antunit.junit3.AntUnitSuite;
 import org.apache.ant.antunit.junit4.AntUnitSuiteRunner;
 import org.junit.runner.RunWith;
 
+import junit.framework.TestSuite;
+
 @RunWith(AntUnitSuiteRunner.class)
 public class ReportTaskTest {
 
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
index 055fa0d..0481c21 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/ReportTaskTest.xml
@@ -1,19 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
       Dominik Stadler - source folder support
 -->
 
 <project name="JaCoCo Report Task Tests" xmlns:au="antlib:org.apache.ant.antunit" xmlns:jacoco="antlib:org.jacoco.ant">
-			
+
 	<target name="setUp">
 		<tempfile property="temp.dir" prefix="jacocoTest" destdir="${java.io.tmpdir}" />
 		<mkdir dir="${temp.dir}"/>
@@ -22,8 +23,8 @@
 	<target name="tearDown">
 		<delete dir="${temp.dir}" quiet="false" failonerror="true" />
 	</target>
-	
-	
+
+
 	<target name="testReportNoStructureElement">
 		<au:expectfailure expectedMessage="Group name must be supplied">
 			<jacoco:report/>
@@ -56,7 +57,7 @@
 			<structure name="root"/>
 		</jacoco:report>
 	</target>
-	
+
 	<target name="testReportInvalidExecutionDataFile">
 		<property name="doesnotexist.file" location="doesnotexist.exec"/>
 		<au:expectfailure expectedMessage="Unable to read execution data file ${doesnotexist.file}">
@@ -68,7 +69,7 @@
 			</jacoco:report>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testReportWithSourceButNoDebug">
 		<java classname="org.jacoco.ant.RemoveDebugInfos" classpath="${java.class.path}" failonerror="true">
 			<arg value="${org.jacoco.ant.reportTaskTest.classes.dir}/org/jacoco/ant/TestTarget.class" />
@@ -86,7 +87,7 @@
 		</jacoco:report>
 		<au:assertLogContains level="warn" text="To enable source code annotation class files for bundle 'root' have to be compiled with debug information"/>
 	</target>
-	
+
 	<target name="testReportWithSourceDirButNoDebug">
 		<java classname="org.jacoco.ant.RemoveDebugInfos" classpath="${java.class.path}" failonerror="true">
 			<arg value="${org.jacoco.ant.reportTaskTest.classes.dir}/org/jacoco/ant/TestTarget.class" />
@@ -128,14 +129,14 @@
 				</classfiles>
 			</structure>
 		</jacoco:report>
-		<au:assertLogContains level="warn" text="Classes in bundle 'root' do no match with execution data."/>
+		<au:assertLogContains level="warn" text="Classes in bundle 'root' do not match with execution data."/>
 		<au:assertLogContains level="warn" text="For report generation the same class files must be used as at runtime."/>
 		<au:assertLogContains level="warn" text="Execution data for class org/jacoco/ant/TestTarget does not match."/>
 	</target>
 
-	
+
 	<!-- HTML Output -->
-	
+
 	<target name="testReportHtmlNoDestdirOrDestfile">
 		<au:expectfailure expectedMessage="Destination directory or file must be supplied for html report">
 			<jacoco:report>
@@ -153,7 +154,7 @@
 			</jacoco:report>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testReportHtmlWithClassFileSet">
 		<jacoco:report>
 			<structure name="Test">
@@ -165,10 +166,10 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/>
 	</target>
-	
+
 	<target name="testReportHtmlWithPath">
 		<jacoco:report>
 			<structure name="Test">
@@ -180,10 +181,10 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/>
 	</target>
-	
+
 	<target name="testReportHtmlWithJAR">
 		<property name="testReportHtmlWithJAR.jarfile" location="${temp.dir}/testclasses.jar"/>
 		<jar destfile="${testReportHtmlWithJAR.jarfile}">
@@ -199,16 +200,16 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/Group/org.jacoco.ant/TestTarget.html"/>
 	</target>
-	
+
 	<target name="testReportHtmlFooter">
 		<jacoco:report>
 			<structure name="Test"/>
 			<html footer="ExampleFooter" destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlFooter.content" srcfile="${temp.dir}/index.html" encoding="UTF-8"/>
 		<au:assertTrue message="Footer not included in ${testReportHtmlFooter.content}">
 			<contains string="${testReportHtmlFooter.content}" substring="ExampleFooter"/>
@@ -220,7 +221,7 @@
 			<structure name="Test"/>
 			<html encoding="UTF-16" destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlEncoding.content" srcfile="${temp.dir}/index.html" encoding="UTF-16"/>
 		<au:assertTrue message="Encoding not set in ${testReportHtmlEncoding.content}">
 			<contains string="${testReportHtmlEncoding.content}" substring="encoding=&quot;UTF-16&quot;"/>
@@ -239,7 +240,7 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlTabWidth.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/>
 		<au:assertTrue message="Tab width not set in ${testReportHtmlTabWidth.content}">
 			<contains string="${testReportHtmlTabWidth.content}" substring="window['PR_TAB_WIDTH']=4"/>
@@ -258,7 +259,7 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlTabWidth.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/>
 		<au:assertTrue message="Tab width not set in ${testReportHtmlTabWidth.content}">
 			<contains string="${testReportHtmlTabWidth.content}" substring="window['PR_TAB_WIDTH']=13"/>
@@ -280,7 +281,7 @@
 			</jacoco:report>
 		</au:expectfailure>
 	</target>
-			
+
 	<target name="testReportHtmlZipFile">
 		<jacoco:report>
 			<structure name="Test">
@@ -290,7 +291,7 @@
 			</structure>
 			<html destfile="${temp.dir}/report.zip"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/report.zip"/>
 	</target>
 
@@ -306,11 +307,11 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/>
 		<au:assertFileExists file="${temp.dir}/default/TestTargetInDefault.java.html"/>
 	</target>
-	
+
 	<target name="testReportHtmlWithSourcesDir">
 		<jacoco:report>
 			<structure name="Test">
@@ -323,11 +324,11 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${temp.dir}/org.jacoco.ant/TestTarget.java.html"/>
 		<au:assertFileExists file="${temp.dir}/default/TestTargetInDefault.java.html"/>
 	</target>
-	
+
 	<target name="testReportHtmlWithSourceEncoding">
 		<mkdir dir="${temp.dir}/org/jacoco/ant"/>
 		<echo file="${temp.dir}/org/jacoco/ant/TestTarget.java" encoding="UTF-16">Source Code</echo>
@@ -342,7 +343,7 @@
 			</structure>
 			<html destdir="${temp.dir}"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlWithSourceEncoding.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html" encoding="UTF-8"/>
 		<au:assertTrue message="Report does not contain expected text.">
 			<contains string="${testReportHtmlWithSourceEncoding.content}" substring="Source Code"/>
@@ -361,13 +362,13 @@
 			</structure>
 			<html destdir="${temp.dir}" locale="gr"/>
 		</jacoco:report>
-		
+
 		<loadfile property="testReportHtmlLocale.content" srcfile="${temp.dir}/org.jacoco.ant/TestTarget.java.html" encoding="UTF-8"/>
 		<au:assertTrue message="Report does not contain expected language tag.">
 			<contains string="${testReportHtmlLocale.content}" substring="lang=&quot;gr&quot;"/>
 		</au:assertTrue>
 	</target>
-	
+
 	<!-- CSV Output -->
 
 	<target name="testReportCsvNoDestfile">
@@ -378,14 +379,14 @@
 			</jacoco:report>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testReportCsvEncoding">
 		<property name="testReportCsvEncoding.destfile" location="${temp.dir}/report.csv"/>
 		<jacoco:report>
 			<structure name="Test"/>
 			<csv encoding="UTF-16" destfile="${testReportCsvEncoding.destfile}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${testReportCsvEncoding.destfile}"/>
 		<loadfile property="testReportCsvEncoding.content" srcfile="${testReportCsvEncoding.destfile}" encoding="UTF-16"/>
 		<au:assertTrue message="Encoding not set in ${testReportCsvEncoding.content}">
@@ -393,9 +394,9 @@
 		</au:assertTrue>
 	</target>
 
-	
+
 	<!-- XML Output -->
-	
+
 	<target name="testReportXmlNoDestfile">
 		<au:expectfailure expectedMessage="Destination file must be supplied for xml report">
 			<jacoco:report>
@@ -413,21 +414,21 @@
 			</jacoco:report>
 		</au:expectfailure>
 	</target>
-	
+
 	<target name="testReportXmlEncoding">
 		<property name="testReportXmlEncoding.destfile" location="${temp.dir}/report.xml"/>
 		<jacoco:report>
 			<structure name="Test"/>
 			<xml encoding="UTF-16" destfile="${testReportXmlEncoding.destfile}"/>
 		</jacoco:report>
-		
+
 		<au:assertFileExists file="${testReportXmlEncoding.destfile}"/>
 		<loadfile property="testReportXmlEncoding.content" srcfile="${testReportXmlEncoding.destfile}" encoding="UTF-16"/>
 		<au:assertTrue message="Encoding not set in ${testReportXmlEncoding.content}">
 			<contains string="${testReportXmlEncoding.content}" substring="encoding=&quot;UTF-16&quot;"/>
 		</au:assertTrue>
 	</target>
-	
+
 	<!-- Coverage Check -->
 
 	<target name="testReportCheckOk">
@@ -436,9 +437,6 @@
 				<classfiles>
 					<fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/>
 				</classfiles>
-				<sourcefiles encoding="UTF-8">
-					<fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" />
-				</sourcefiles>
 			</structure>
 			<check>
 				<rule element="CLASS">
@@ -455,9 +453,6 @@
 					<classfiles>
 						<fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/>
 					</classfiles>
-					<sourcefiles encoding="UTF-8">
-						<fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" />
-					</sourcefiles>
 				</structure>
 				<check>
 					<rule element="BUNDLE">
@@ -469,15 +464,30 @@
 		<au:assertLogContains level="error" text="instructions covered ratio is 0.00, but expected minimum is 0.90"/>
 	</target>
 
+	<target name="testReportInvalidConfiguration">
+		<au:expectfailure expectedMessage="Coverage check failed due to violated rules.">
+			<jacoco:report>
+				<structure name="Test">
+					<classfiles>
+						<fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/>
+					</classfiles>
+				</structure>
+				<check>
+					<rule element="BUNDLE">
+						<limit counter="INSTRUCTION" value="COVEREDRATIO" minimum="80"/>
+					</rule>
+				</check>
+			</jacoco:report>
+		</au:expectfailure>
+		<au:assertLogContains level="error" text="given minimum ratio is 80, but must be between 0.0 and 1.0"/>
+	</target>
+
 	<target name="testReportCheckSetPropertyOnly">
 		<jacoco:report>
 			<structure name="Test">
 				<classfiles>
 					<fileset dir="${org.jacoco.ant.reportTaskTest.classes.dir}" includes="**/*.class"/>
 				</classfiles>
-				<sourcefiles encoding="UTF-8">
-					<fileset dir="${org.jacoco.ant.reportTaskTest.sources.dir}" />
-				</sourcefiles>
 			</structure>
 			<check failonviolation="false" violationsproperty="violation">
 				<rule element="BUNDLE">
@@ -496,5 +506,5 @@
 		</au:assertTrue>
 	</target>
 
-	
+
 </project>
diff --git a/org.jacoco.ant.test/src/org/jacoco/ant/TestTarget.java b/org.jacoco.ant.test/src/org/jacoco/ant/TestTarget.java
index a78218f..970b2e2 100644
--- a/org.jacoco.ant.test/src/org/jacoco/ant/TestTarget.java
+++ b/org.jacoco.ant.test/src/org/jacoco/ant/TestTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
diff --git a/org.jacoco.ant/about.html b/org.jacoco.ant/about.html
index ebd8147..4b9ecb3 100644
--- a/org.jacoco.ant/about.html
+++ b/org.jacoco.ant/about.html
@@ -9,17 +9,17 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
@@ -30,44 +30,8 @@
   out below.
 </p>
 
-<h4>ASM</h4>
-
-<p>
-  This plug-in contains the <a href="http://asm.objectweb.org/">ASM</a> library
-  which is subject to the terms and conditions of the following license: 
-</p>
-
-<pre>
-Copyright (c) 2012 France Télécom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
+${asm.license}
+${googlecodeprettify.license}
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.ant/pom.xml b/org.jacoco.ant/pom.xml
index cba37bd..201960e 100644
--- a/org.jacoco.ant/pom.xml
+++ b/org.jacoco.ant/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.ant/src/org/jacoco/ant/AbstractCoverageTask.java b/org.jacoco.ant/src/org/jacoco/ant/AbstractCoverageTask.java
index 709358f..28770c1 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/AbstractCoverageTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/AbstractCoverageTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -50,7 +51,7 @@
 
 	/**
 	 * Sets whether or not the current task is enabled
-	 * 
+	 *
 	 * @param enabled
 	 *            Enablement state of the task
 	 */
@@ -61,7 +62,7 @@
 	/**
 	 * Sets the location to write coverage execution data to. Default is
 	 * <code>jacoco.exec</code>.
-	 * 
+	 *
 	 * @param file
 	 *            Location to write coverage execution data to
 	 */
@@ -72,7 +73,7 @@
 	/**
 	 * Append execution coverage data if a coverage file is already present.
 	 * Default is <code>true</code>
-	 * 
+	 *
 	 * @param append
 	 *            <code>true</code> to append execution data to an existing file
 	 */
@@ -83,7 +84,7 @@
 	/**
 	 * List of wildcard patterns classes to include for instrumentation. Default
 	 * is <code>*</code>
-	 * 
+	 *
 	 * @param includes
 	 *            Wildcard pattern of included classes
 	 */
@@ -94,7 +95,7 @@
 	/**
 	 * List of wildcard patterns classes to exclude from instrumentation.
 	 * Default is the empty string, no classes excluded
-	 * 
+	 *
 	 * @param excludes
 	 *            Wildcard pattern of excluded classes
 	 */
@@ -106,7 +107,7 @@
 	 * List of wildcard patterns for classloaders that JaCoCo will not
 	 * instrument classes from. Default is
 	 * <code>sun.reflect.DelegatingClassLoader</code>
-	 * 
+	 *
 	 * @param exclClassLoader
 	 *            Wildcard pattern of class loaders to exclude
 	 */
@@ -117,7 +118,7 @@
 	/**
 	 * Sets whether classes from the bootstrap classloader should be
 	 * instrumented.
-	 * 
+	 *
 	 * @param include
 	 *            <code>true</code> if bootstrap classes should be instrumented
 	 */
@@ -127,7 +128,7 @@
 
 	/**
 	 * Sets whether classes without source location should be instrumented.
-	 * 
+	 *
 	 * @param include
 	 *            <code>true</code> if classes without source location should be
 	 *            instrumented
@@ -138,7 +139,7 @@
 
 	/**
 	 * Sets the session identifier. Default is a auto-generated id
-	 * 
+	 *
 	 * @param id
 	 *            session identifier
 	 */
@@ -148,7 +149,7 @@
 
 	/**
 	 * Dump coverage data on VM termination. Default is <code>true</code>
-	 * 
+	 *
 	 * @param dumpOnExit
 	 *            <code>true</code> to write coverage data on VM termination
 	 */
@@ -158,7 +159,7 @@
 
 	/**
 	 * Sets the output method. Default is <code>file</code>
-	 * 
+	 *
 	 * @param output
 	 *            Output method
 	 */
@@ -170,7 +171,7 @@
 	 * Sets the IP address or hostname to bind to when output method is tcp
 	 * server or connect to when the output method is tcp client. Default is
 	 * <code>localhost</code>
-	 * 
+	 *
 	 * @param address
 	 *            Address to bind or connect to
 	 */
@@ -181,7 +182,7 @@
 	/**
 	 * Sets the Port to bind to when the output method is tcp server or connect
 	 * to when the output method is tcp client. Default is <code>6300</code>
-	 * 
+	 *
 	 * @param port
 	 *            port to bind to or connect to
 	 */
@@ -192,7 +193,7 @@
 	/**
 	 * Sets the directory where all class files seen by the agent should be
 	 * dumped to.
-	 * 
+	 *
 	 * @param dir
 	 *            dump output location
 	 */
@@ -202,7 +203,7 @@
 
 	/**
 	 * Sets whether the agent should expose functionality via JMX.
-	 * 
+	 *
 	 * @param jmx
 	 *            <code>true</code> if JMX should be enabled
 	 */
@@ -213,7 +214,7 @@
 	/**
 	 * Creates JVM argument to launch with the specified JaCoCo agent jar and
 	 * the current options
-	 * 
+	 *
 	 * @return JVM Argument to pass to new VM
 	 */
 	protected String getLaunchingArgument() {
@@ -230,8 +231,8 @@
 	private File getAgentFile() {
 		try {
 			File agentFile = null;
-			final String agentFileLocation = getProject().getProperty(
-					"_jacoco.agentFile");
+			final String agentFileLocation = getProject()
+					.getProperty("_jacoco.agentFile");
 			if (agentFileLocation != null) {
 				agentFile = new File(agentFileLocation);
 			} else {
diff --git a/org.jacoco.ant/src/org/jacoco/ant/AgentTask.java b/org.jacoco.ant/src/org/jacoco/ant/AgentTask.java
index a02b809..9c1eb9c 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/AgentTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/AgentTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -23,7 +24,7 @@
 
 	/**
 	 * Sets the name of the property to hold the agent JVM options
-	 * 
+	 *
 	 * @param property
 	 *            Name of the property to be populated
 	 */
diff --git a/org.jacoco.ant/src/org/jacoco/ant/AntFilesLocator.java b/org.jacoco.ant/src/org/jacoco/ant/AntFilesLocator.java
index 6e771f6..e757af9 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/AntFilesLocator.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/AntFilesLocator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
@@ -27,15 +28,14 @@
 
 	private final Map<String, Resource> resources;
 
-	public AntFilesLocator(final String encoding,
-			final int tabWidth) {
+	public AntFilesLocator(final String encoding, final int tabWidth) {
 		super(encoding, tabWidth);
 		this.resources = new HashMap<String, Resource>();
 	}
 
 	/**
 	 * Adds the given file resource as a potential source file.
-	 * 
+	 *
 	 * @param file
 	 *            file resource to add
 	 */
@@ -44,7 +44,8 @@
 	}
 
 	@Override
-	protected InputStream getSourceStream(final String path) throws IOException {
+	protected InputStream getSourceStream(final String path)
+			throws IOException {
 		final Resource file = resources.get(path);
 		if (file == null) {
 			return null;
diff --git a/org.jacoco.ant/src/org/jacoco/ant/AntResourcesLocator.java b/org.jacoco.ant/src/org/jacoco/ant/AntResourcesLocator.java
index 41c8352..88c34b9 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/AntResourcesLocator.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/AntResourcesLocator.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
  *    Dominik Stadler - source folder support
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -44,7 +45,7 @@
 
 	/**
 	 * Adds the given file or directory resource to the locator.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to add
 	 */
@@ -67,7 +68,7 @@
 
 	/**
 	 * Checks, whether resources have been added.
-	 * 
+	 *
 	 * @return <code>true</code>, if no resources have been added
 	 */
 	boolean isEmpty() {
diff --git a/org.jacoco.ant/src/org/jacoco/ant/CoverageTask.java b/org.jacoco.ant/src/org/jacoco/ant/CoverageTask.java
index c5b1092..6115b11 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/CoverageTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/CoverageTask.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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 - TestNG support
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -33,7 +34,8 @@
  * <li>Task must be using a forked VM (so vm args can be passed)</li>
  * </ul>
  */
-public class CoverageTask extends AbstractCoverageTask implements TaskContainer {
+public class CoverageTask extends AbstractCoverageTask
+		implements TaskContainer {
 
 	private final Collection<TaskEnhancer> taskEnhancers = new ArrayList<TaskEnhancer>();
 	private Task childTask;
@@ -65,9 +67,10 @@
 
 		final TaskEnhancer enhancer = findEnhancerForTask(subTaskTypeName);
 		if (enhancer == null) {
-			throw new BuildException(format(
-					"%s is not a valid child of the coverage task",
-					subTaskTypeName), getLocation());
+			throw new BuildException(
+					format("%s is not a valid child of the coverage task",
+							subTaskTypeName),
+					getLocation());
 		}
 
 		if (isEnabled()) {
@@ -161,8 +164,8 @@
 			runtimeConfigurableWrapper.setAttribute("value",
 					getLaunchingArgument());
 
-			task.getRuntimeConfigurableWrapper().addChild(
-					runtimeConfigurableWrapper);
+			task.getRuntimeConfigurableWrapper()
+					.addChild(runtimeConfigurableWrapper);
 
 			((UnknownElement) task).addChild(el);
 		}
@@ -184,7 +187,7 @@
 		/**
 		 * Attempt to enhance the supplied task with coverage information. This
 		 * operation may fail if the task is being executed in the current VM
-		 * 
+		 *
 		 * @param task
 		 *            Task instance to enhance (usually an
 		 *            {@link UnknownElement})
diff --git a/org.jacoco.ant/src/org/jacoco/ant/DumpTask.java b/org.jacoco.ant/src/org/jacoco/ant/DumpTask.java
index 5aa20fd..3782fd9 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/DumpTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/DumpTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -41,7 +42,7 @@
 	 * Sets the location of the execution data file to write. This parameter is
 	 * required when dump is <code>true</code>. Default is
 	 * <code>jacoco.exec</code>
-	 * 
+	 *
 	 * @param destfile
 	 *            Location to write execution data to
 	 */
@@ -51,7 +52,7 @@
 
 	/**
 	 * IP Address or hostname to connect to. Defaults to <code>localhost</code>
-	 * 
+	 *
 	 * @param address
 	 *            IP Address or hostname to connect to
 	 */
@@ -61,7 +62,7 @@
 
 	/**
 	 * Port number to connect to. Default is <code>6300</code>
-	 * 
+	 *
 	 * @param port
 	 *            Port to connect to
 	 */
@@ -72,7 +73,7 @@
 	/**
 	 * 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.
-	 * 
+	 *
 	 * @param retryCount
 	 *            number of retries
 	 */
@@ -83,7 +84,7 @@
 	/**
 	 * <code>true</code> if the destination file it to be appended to.
 	 * <code>false</code> if the file is to be overwritten
-	 * 
+	 *
 	 * @param append
 	 *            <code>true</code> if the destination file should be appended
 	 *            to
@@ -95,7 +96,7 @@
 	/**
 	 * Sets whether execution data should be downloaded from the remote host.
 	 * Defaults to <code>true</code>
-	 * 
+	 *
 	 * @param dump
 	 *            <code>true</code> to download execution data
 	 */
@@ -106,7 +107,7 @@
 	/**
 	 * Sets whether a reset command should be sent after the execution data has
 	 * been dumped. Defaults to <code>false</code>
-	 * 
+	 *
 	 * @param reset
 	 *            <code>true</code> to reset execution data
 	 */
diff --git a/org.jacoco.ant/src/org/jacoco/ant/InstrumentTask.java b/org.jacoco.ant/src/org/jacoco/ant/InstrumentTask.java
index 6ba16ec..df143a0 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/InstrumentTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/InstrumentTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -41,7 +42,7 @@
 
 	/**
 	 * Sets the location of the instrumented classes.
-	 * 
+	 *
 	 * @param destdir
 	 *            destination folder for instrumented classes
 	 */
@@ -51,7 +52,7 @@
 
 	/**
 	 * Sets whether signatures should be removed from JAR files.
-	 * 
+	 *
 	 * @param removesignatures
 	 *            <code>true</code> if signatures should be removed
 	 */
@@ -61,7 +62,7 @@
 
 	/**
 	 * This task accepts any number of class file resources.
-	 * 
+	 *
 	 * @param resources
 	 *            Execution data resources
 	 */
@@ -109,8 +110,9 @@
 			}
 		} catch (final Exception e) {
 			file.delete();
-			throw new BuildException(format("Error while instrumenting %s",
-					resource), e, getLocation());
+			throw new BuildException(
+					format("Error while instrumenting %s", resource), e,
+					getLocation());
 		}
 	}
 }
diff --git a/org.jacoco.ant/src/org/jacoco/ant/MergeTask.java b/org.jacoco.ant/src/org/jacoco/ant/MergeTask.java
index de6897e..373e96a 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/MergeTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/MergeTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.ant;
 
@@ -37,7 +38,7 @@
 
 	/**
 	 * Sets the location of the merged data store
-	 * 
+	 *
 	 * @param destfile
 	 *            Destination data store location
 	 */
@@ -47,7 +48,7 @@
 
 	/**
 	 * This task accepts any number of execution data resources.
-	 * 
+	 *
 	 * @param resources
 	 *            Execution data resources
 	 */
diff --git a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
index bbcb348..1416a5e 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
+++ b/org.jacoco.ant/src/org/jacoco/ant/ReportTask.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.ant;
 
@@ -71,7 +72,7 @@
 		/**
 		 * Defines the optional source file encoding. If not set the platform
 		 * default is used.
-		 * 
+		 *
 		 * @param encoding
 		 *            source file encoding
 		 */
@@ -81,7 +82,7 @@
 
 		/**
 		 * Sets the tab stop width for the source pages. Default value is 4.
-		 * 
+		 *
 		 * @param tabWidth
 		 *            number of characters per tab stop
 		 */
@@ -109,7 +110,7 @@
 
 		/**
 		 * Sets the name of the group.
-		 * 
+		 *
 		 * @param name
 		 *            name of the group
 		 */
@@ -119,7 +120,7 @@
 
 		/**
 		 * Creates a new child group.
-		 * 
+		 *
 		 * @return new child group
 		 */
 		public GroupElement createGroup() {
@@ -130,7 +131,7 @@
 
 		/**
 		 * Returns the nested resource collection for class files.
-		 * 
+		 *
 		 * @return resource collection for class files
 		 */
 		public Union createClassfiles() {
@@ -139,7 +140,7 @@
 
 		/**
 		 * Returns the nested resource collection for source files.
-		 * 
+		 *
 		 * @return resource collection for source files
 		 */
 		public SourceFilesElement createSourcefiles() {
@@ -176,7 +177,7 @@
 
 		/**
 		 * Sets the output directory for the report.
-		 * 
+		 *
 		 * @param destdir
 		 *            output directory
 		 */
@@ -186,7 +187,7 @@
 
 		/**
 		 * Sets the Zip output file for the report.
-		 * 
+		 *
 		 * @param destfile
 		 *            Zip output file
 		 */
@@ -197,7 +198,7 @@
 		/**
 		 * Sets an optional footer text that will be displayed on every report
 		 * page.
-		 * 
+		 *
 		 * @param text
 		 *            footer text
 		 */
@@ -207,7 +208,7 @@
 
 		/**
 		 * Sets the output encoding for generated HTML files. Default is UTF-8.
-		 * 
+		 *
 		 * @param encoding
 		 *            output encoding
 		 */
@@ -218,7 +219,7 @@
 		/**
 		 * Sets the locale for generated text output. By default the platform
 		 * locale is used.
-		 * 
+		 *
 		 * @param locale
 		 *            text locale
 		 */
@@ -266,7 +267,7 @@
 
 		/**
 		 * Sets the output file for the report.
-		 * 
+		 *
 		 * @param destfile
 		 *            output file
 		 */
@@ -288,7 +289,7 @@
 
 		/**
 		 * Sets the output encoding for generated XML file. Default is UTF-8.
-		 * 
+		 *
 		 * @param encoding
 		 *            output encoding
 		 */
@@ -309,7 +310,7 @@
 
 		/**
 		 * Sets the output file for the report.
-		 * 
+		 *
 		 * @param destfile
 		 *            output file
 		 */
@@ -319,7 +320,7 @@
 
 		/**
 		 * Sets the output encoding for generated XML file. Default is UTF-8.
-		 * 
+		 *
 		 * @param encoding
 		 *            output encoding
 		 */
@@ -344,8 +345,8 @@
 	/**
 	 * Formatter element for coverage checks.
 	 */
-	public class CheckFormatterElement extends FormatterElement implements
-			IViolationsOutput {
+	public class CheckFormatterElement extends FormatterElement
+			implements IViolationsOutput {
 
 		private final List<Rule> rules = new ArrayList<Rule>();
 		private boolean violations = false;
@@ -354,7 +355,7 @@
 
 		/**
 		 * Creates and adds a new rule.
-		 * 
+		 *
 		 * @return new rule
 		 */
 		public Rule createRule() {
@@ -366,7 +367,7 @@
 		/**
 		 * Sets whether the build should fail in case of a violation. Default is
 		 * <code>true</code>.
-		 * 
+		 *
 		 * @param flag
 		 *            if <code>true</code> the build fails on violation
 		 */
@@ -376,7 +377,7 @@
 
 		/**
 		 * Sets the name of a property to append the violation messages to.
-		 * 
+		 *
 		 * @param property
 		 *            name of a property
 		 */
@@ -397,8 +398,8 @@
 			violations = true;
 			if (violationsPropery != null) {
 				final String old = getProject().getProperty(violationsPropery);
-				final String value = old == null ? message : String.format(
-						"%s\n%s", old, message);
+				final String value = old == null ? message
+						: String.format("%s\n%s", old, message);
 				getProject().setProperty(violationsPropery, value);
 			}
 		}
@@ -425,7 +426,7 @@
 
 	/**
 	 * Returns the nested resource collection for execution data files.
-	 * 
+	 *
 	 * @return resource collection for execution files
 	 */
 	public Union createExecutiondata() {
@@ -434,7 +435,7 @@
 
 	/**
 	 * Returns the root group element that defines the report structure.
-	 * 
+	 *
 	 * @return root group element
 	 */
 	public GroupElement createStructure() {
@@ -443,7 +444,7 @@
 
 	/**
 	 * Creates a new HTML report element.
-	 * 
+	 *
 	 * @return HTML report element
 	 */
 	public HTMLFormatterElement createHtml() {
@@ -454,7 +455,7 @@
 
 	/**
 	 * Creates a new CSV report element.
-	 * 
+	 *
 	 * @return CSV report element
 	 */
 	public CSVFormatterElement createCsv() {
@@ -465,7 +466,7 @@
 
 	/**
 	 * Creates a new coverage check element.
-	 * 
+	 *
 	 * @return coverage check element
 	 */
 	public CheckFormatterElement createCheck() {
@@ -476,7 +477,7 @@
 
 	/**
 	 * Creates a new XML report element.
-	 * 
+	 *
 	 * @return CSV report element
 	 */
 	public XMLFormatterElement createXml() {
@@ -505,7 +506,8 @@
 
 	private void loadExecutionData() {
 		final ExecFileLoader loader = new ExecFileLoader();
-		for (final Iterator<?> i = executiondataElement.iterator(); i.hasNext();) {
+		for (final Iterator<?> i = executiondataElement.iterator(); i
+				.hasNext();) {
 			final Resource resource = (Resource) i.next();
 			log(format("Loading execution data file %s", resource));
 			InputStream in = null;
@@ -513,9 +515,10 @@
 				in = resource.getInputStream();
 				loader.load(in);
 			} catch (final IOException e) {
-				throw new BuildException(format(
-						"Unable to read execution data file %s", resource), e,
-						getLocation());
+				throw new BuildException(
+						format("Unable to read execution data file %s",
+								resource),
+						e, getLocation());
 			} finally {
 				FileUtils.close(in);
 			}
@@ -582,7 +585,7 @@
 				Integer.valueOf(bundle.getClassCounter().getTotalCount())));
 		if (!nomatch.isEmpty()) {
 			log(format(
-					"Classes in bundle '%s' do no match with execution data. "
+					"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()), Project.MSG_WARN);
 			for (final IClassCoverage c : nomatch) {
@@ -604,7 +607,7 @@
 	 * Splits a given underscore "_" separated string and creates a Locale. This
 	 * method is implemented as the method Locale.forLanguageTag() was not
 	 * available in Java 5.
-	 * 
+	 *
 	 * @param locale
 	 *            String representation of a Locate
 	 * @return Locale instance
diff --git a/org.jacoco.ant/src/org/jacoco/ant/antlib.xml b/org.jacoco.ant/src/org/jacoco/ant/antlib.xml
index bcedf36..757874d 100644
--- a/org.jacoco.ant/src/org/jacoco/ant/antlib.xml
+++ b/org.jacoco.ant/src/org/jacoco/ant/antlib.xml
@@ -1,12 +1,13 @@
 <?xml version="1.0"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
 -->
diff --git a/org.jacoco.build/licenses/args4j-2.0.28.html b/org.jacoco.build/licenses/args4j-2.0.28.html
new file mode 100644
index 0000000..ede3adb
--- /dev/null
+++ b/org.jacoco.build/licenses/args4j-2.0.28.html
@@ -0,0 +1,28 @@
+<h3>args4j</h3>
+
+<p>
+  <a href="http://args4j.kohsuke.org/">args4j 2.0.28</a> is subject to the
+  terms and conditions of the following license:
+</p>
+
+<pre>
+Copyright (c) 2013 Kohsuke Kawaguchi and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+</pre>
diff --git a/org.jacoco.build/licenses/asm-9.1.html b/org.jacoco.build/licenses/asm-9.1.html
new file mode 100644
index 0000000..849f693
--- /dev/null
+++ b/org.jacoco.build/licenses/asm-9.1.html
@@ -0,0 +1,36 @@
+<h4>ASM</h4>
+
+<p>
+  <a href="http://asm.objectweb.org/">ASM 9.1</a> is subject to the terms and
+  conditions of the following license:
+</p>
+
+<pre>
+ASM: a very small and fast Java bytecode manipulation framework
+Copyright (c) 2000-2011 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the copyright holders nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
diff --git a/org.jacoco.ant.test/about.html b/org.jacoco.build/licenses/googlecodeprettify-20100721.html
similarity index 88%
rename from org.jacoco.ant.test/about.html
rename to org.jacoco.build/licenses/googlecodeprettify-20100721.html
index d684ed0..11a8a1d 100644
--- a/org.jacoco.ant.test/about.html
+++ b/org.jacoco.build/licenses/googlecodeprettify-20100721.html
@@ -1,45 +1,13 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
+<h3>Google Code Prettify</h3>
 
 <p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-<h3>Third Party Content</h3>
-
-<p>
-  The Content includes items that have been sourced from third parties as set
-  out below.
-</p>
-
-<h4>Apache AntUnit 1.1</h4>
-
-<p>
-  This plug-in contains the <a href="http://ant.apache.org/antlibs/antunit/">AntUnit</a>
-  library developed by The Apache Software Foundation
-  (<a href="http://www.apache.org/">http://www.apache.org/</a>) which is subject
-  to the terms and conditions of the following license: 
+  <a href="https://github.com/google/code-prettify">Google Code Prettify 2010/07/21</a>
+  is subject to the terms and conditions of the following license:
 </p>
 
 <pre>
+Copyright 2011 Mike Samuel et al
+
                                  Apache License
                            Version 2.0, January 2004
                         http://www.apache.org/licenses/
@@ -215,6 +183,3 @@
       incurred by, or claims asserted against, such Contributor by reason
       of your accepting any such warranty or additional liability.
 </pre>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.build/pom.xml b/org.jacoco.build/pom.xml
index 18ac6a5..32f2969 100644
--- a/org.jacoco.build/pom.xml
+++ b/org.jacoco.build/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -14,7 +15,7 @@
 
   <groupId>org.jacoco</groupId>
   <artifactId>org.jacoco.build</artifactId>
-  <version>0.8.4</version>
+  <version>0.8.7</version>
   <packaging>pom</packaging>
 
   <name>JaCoCo</name>
@@ -26,8 +27,8 @@
   </organization>
   <licenses>
     <license>
-      <name>Eclipse Public License v1.0</name>
-      <url>http://www.eclipse.org/legal/epl-v10.html</url>
+      <name>Eclipse Public License 2.0</name>
+      <url>https://www.eclipse.org/legal/epl-2.0/</url>
       <distribution>repo</distribution>
     </license>
   </licenses>
@@ -128,7 +129,7 @@
 
     <maven.build.timestamp.format>yyyyMMddhhmm</maven.build.timestamp.format>
     <jacoco.home.url>http://www.jacoco.org/jacoco</jacoco.home.url>
-    <copyright.years>${project.inceptionYear}, 2019</copyright.years>
+    <copyright.years>${project.inceptionYear}, 2021</copyright.years>
 
     <bytecode.version>1.5</bytecode.version>
     <maven.compiler.source>${bytecode.version}</maven.compiler.source>
@@ -138,15 +139,16 @@
     <argLine>${jvm.args}</argLine>
 
     <!-- Dependencies versions -->
-    <asm.version>7.1</asm.version>
-    <ant.version>1.7.1</ant.version>
+    <asm.version>9.1</asm.version>
+    <ant.version>1.9.15</ant.version>
     <args4j.version>2.0.28</args4j.version>
-    <junit.version>4.8.2</junit.version>
+    <junit.version>4.13.1</junit.version>
+    <googlecodeprettify.version>20100721</googlecodeprettify.version>
 
     <!-- ================== -->
     <!-- For SonarQube analysis -->
     <!-- ================== -->
-    <sonar.jacoco.reportPath>../${project.artifactId}.test/target/jacoco.exec</sonar.jacoco.reportPath>
+    <sonar.coverage.jacoco.xmlReportPaths>../org.jacoco.doc/target/site/jacoco-aggregate/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths>
     <sonar.surefire.reportsPath>../${project.artifactId}.test/target/surefire-reports/</sonar.surefire.reportsPath>
 
     <!-- See http://jira.codehaus.org/browse/SONAR-2096 -->
@@ -242,8 +244,18 @@
       </dependency>
       <dependency>
         <groupId>org.apache.ant</groupId>
+        <artifactId>ant-junit4</artifactId>
+        <version>${ant.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.ant</groupId>
+        <artifactId>ant-launcher</artifactId>
+        <version>${ant.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.ant</groupId>
         <artifactId>ant-antunit</artifactId>
-        <version>1.2</version>
+        <version>1.4</version>
       </dependency>
       <dependency>
         <groupId>args4j</groupId>
@@ -267,6 +279,7 @@
           <exclude>**/*.java</exclude>
           <exclude>**/*.kt</exclude>
           <exclude>**/*.groovy</exclude>
+          <exclude>**/*.scala</exclude>
           <exclude>**/*.properties</exclude>
         </excludes>
       </resource>
@@ -276,6 +289,16 @@
         <includes>
           <include>**/*.properties</include>
         </includes>
+        <excludes>
+          <exclude>**/*-test.properties</exclude>
+        </excludes>
+      </resource>
+      <resource>
+        <directory>src</directory>
+        <filtering>false</filtering>
+        <includes>
+          <include>**/*-test.properties</include>
+        </includes>
       </resource>
       <resource>
         <directory>.</directory>
@@ -376,7 +399,7 @@
           <version>2.1</version>
           <configuration>
             <autoVersionSubmodules>true</autoVersionSubmodules>
-            <mavenExecutorId>forked-path</mavenExecutorId> 
+            <mavenExecutorId>forked-path</mavenExecutorId>
             <useReleaseProfile>false</useReleaseProfile>
             <!--
             Allows to activate release profile during release.
@@ -461,6 +484,11 @@
           <artifactId>maven-bundle-plugin</artifactId>
           <version>3.5.1</version>
         </plugin>
+        <plugin>
+          <groupId>com.diffplug.spotless</groupId>
+          <artifactId>spotless-maven-plugin</artifactId>
+          <version>1.24.3</version>
+       </plugin>
       </plugins>
     </pluginManagement>
 
@@ -476,21 +504,6 @@
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-resources-plugin</artifactId>
-        <configuration>
-          <!-- We can't use delimiters "${*}" and "$*$" together - probably it's bug in plugin -->
-          <!-- so for now we will define only our delimiters in compliance with https://sourceforge.net/apps/trac/eclemma/changeset/1229 -->
-          <!-- but it would be better to use defaults -->
-          <useDefaultDelimiters>false</useDefaultDelimiters>
-          <delimiters>
-            <delimiter>@*@</delimiter>
-            <delimiter>$*$</delimiter>
-          </delimiters>
-        </configuration>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
         <configuration>
           <filters>
@@ -556,6 +569,52 @@
       </plugin>
 
       <plugin>
+        <groupId>com.diffplug.spotless</groupId>
+        <artifactId>spotless-maven-plugin</artifactId>
+        <configuration>
+          <java>
+            <lineEndings>UNIX</lineEndings>
+            <includes>
+              <include>src/**/*.java</include>
+            </includes>
+            <eclipse>
+              <version>4.12.0</version>
+              <file>../org.jacoco.core/.settings/org.eclipse.jdt.core.prefs</file>
+            </eclipse>
+            <trimTrailingWhitespace/>
+            <endWithNewline/>
+          </java>
+          <formats>
+            <format>
+              <includes>
+                <include>**/*.properties</include>
+                <include>**/*.html</include>
+                <include>**/*.css</include>
+                <include>**/*.js</include>
+                <include>**/*.xml</include>
+                <include>**/*.xsl</include>
+                <include>**/*.dtd</include>
+              </includes>
+              <excludes>
+                <exclude>target/**</exclude>
+              </excludes>
+              <lineEndings>UNIX</lineEndings>
+              <trimTrailingWhitespace/>
+              <endWithNewline/>
+            </format>
+          </formats>
+        </configuration>
+        <executions>
+          <execution>
+            <phase>prepare-package</phase>
+            <goals>
+              <goal>check</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-antrun-plugin</artifactId>
         <executions>
@@ -570,13 +629,14 @@
                 <fileset dir="${basedir}" includes="**/*.java,**/*.xml,**/*.bsh" excludes="target/**,.idea/**,nb-configuration.xml" id="missinglicense.fileset">
                   <include name="**/*.kt"/>
                   <include name="**/*.groovy"/>
+                  <include name="**/*.scala"/>
                   <not>
                     <and>
-                      <contains text="Copyright (c) 2009, 2019 Mountainminds GmbH &amp; Co. KG and Contributors"/>
-                      <contains text="All rights reserved. This program and the accompanying materials"/>
-                      <contains text="are made available under the terms of the Eclipse Public License v1.0"/>
-                      <contains text="which accompanies this distribution, and is available at"/>
-                      <contains text="http://www.eclipse.org/legal/epl-v10.html"/>
+                      <contains text="Copyright (c) 2009, 2021 Mountainminds GmbH &amp; Co. KG and Contributors"/>
+                      <contains text="This program and the accompanying materials are made available under"/>
+                      <contains text="the terms of the Eclipse Public License 2.0 which is available at"/>
+                      <contains text="http://www.eclipse.org/legal/epl-2.0"/>
+                      <contains text="SPDX-License-Identifier: EPL-2.0"/>
                     </and>
                   </not>
                 </fileset>
@@ -658,6 +718,16 @@
                 buildNumber = project.getProperties().get("buildNumber");
                 pkgName = buildNumber.substring(buildNumber.length() - 7, buildNumber.length());
                 project.getProperties().setProperty("jacoco.runtime.package.name", "org.jacoco.agent.rt.internal_" + pkgName);
+
+                void loadLicense(String libraryId) {
+                    version = project.getProperties().get(libraryId + ".version");
+                    path = project.getBasedir().toPath().resolve("../org.jacoco.build/licenses/" + libraryId + "-" + version + ".html");
+                    license = new String(java.nio.file.Files.readAllBytes(path), "UTF-8");
+                    project.getProperties().setProperty(libraryId + ".license", license);
+                }
+                loadLicense("args4j");
+                loadLicense("asm");
+                loadLicense("googlecodeprettify");
               ]]>
               </script>
             </configuration>
@@ -746,6 +816,69 @@
       </build>
     </profile>
 
+    <!--
+    Following profiles enable compilation into bytecode version 13
+    when requested "bytecode.version" greater than 13,
+    because this is maximum that can be processed by
+    maven-shade-plugin and maven-plugin-plugin.
+    This is overridden for tests.
+    -->
+    <profile>
+      <id>java14-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>14</value>
+        </property>
+      </activation>
+      <properties>
+        <maven.compiler.source>13</maven.compiler.source>
+        <maven.compiler.target>13</maven.compiler.target>
+      </properties>
+    </profile>
+
+    <profile>
+      <id>java15-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>15</value>
+        </property>
+      </activation>
+      <properties>
+        <maven.compiler.source>13</maven.compiler.source>
+        <maven.compiler.target>13</maven.compiler.target>
+      </properties>
+    </profile>
+
+    <profile>
+      <id>java16-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>16</value>
+        </property>
+      </activation>
+      <properties>
+        <maven.compiler.source>13</maven.compiler.source>
+        <maven.compiler.target>13</maven.compiler.target>
+      </properties>
+    </profile>
+
+    <profile>
+      <id>java17-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>17</value>
+        </property>
+      </activation>
+      <properties>
+        <maven.compiler.source>13</maven.compiler.source>
+        <maven.compiler.target>13</maven.compiler.target>
+      </properties>
+    </profile>
+
     <!-- This profile enables use of ECJ -->
     <profile>
       <id>ecj</id>
diff --git a/org.jacoco.cli.test/about.html b/org.jacoco.cli.test/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.cli.test/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.cli.test/pom.xml b/org.jacoco.cli.test/pom.xml
index fc6356d..a02f8a0 100644
--- a/org.jacoco.cli.test/pom.xml
+++ b/org.jacoco.cli.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/CommandTestBase.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/CommandTestBase.java
index ba570b6..1497e12 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/CommandTestBase.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/CommandTestBase.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/MainTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/MainTest.java
index 41807a6..763c0c5 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/MainTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/MainTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/XmlDocumentationTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/XmlDocumentationTest.java
index c902fb0..10b6556 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/XmlDocumentationTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/XmlDocumentationTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ClassInfoTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ClassInfoTest.java
index f1b9df1..65e879b 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ClassInfoTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ClassInfoTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java
index 70aeced..00d808f 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/DumpTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -86,7 +87,9 @@
 		} catch (IOException ignore) {
 		}
 
-		assertContains("[WARN] Connection refused", err);
+		// Locale independent parts of error message:
+		assertContains("[WARN]", err);
+		assertContains("Connection refused", err);
 	}
 
 	private int startMockServer() throws IOException {
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ExecInfoTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ExecInfoTest.java
index 5308937..e486f67 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ExecInfoTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ExecInfoTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/InstrumentTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/InstrumentTest.java
index 76f31b8..f676e8d 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/InstrumentTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/InstrumentTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -67,7 +68,9 @@
 				+ destdir.getAbsolutePath(), out);
 
 		// non class-file resources are copied:
-		assertTrue(new File(destdir, "about.html").isFile());
+		assertTrue(new File(destdir,
+				"org/jacoco/cli/internal/commands/test-resource.properties")
+						.isFile());
 
 		assertInstrumented(new File(destdir,
 				"org/jacoco/cli/internal/commands/InstrumentTest.class"));
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/MergeTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/MergeTest.java
index d2dc119..8f3b319 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/MergeTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/MergeTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ReportTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ReportTest.java
index bff4296..5ad6045 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ReportTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/ReportTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/VersionTest.java b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/VersionTest.java
index dab8955..91d5869 100644
--- a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/VersionTest.java
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/VersionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/test-resource.properties b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/test-resource.properties
new file mode 100644
index 0000000..42ba86c
--- /dev/null
+++ b/org.jacoco.cli.test/src/org/jacoco/cli/internal/commands/test-resource.properties
@@ -0,0 +1 @@
+x=42
diff --git a/org.jacoco.cli/about.html b/org.jacoco.cli/about.html
index af7ff88..0d1c520 100644
--- a/org.jacoco.cli/about.html
+++ b/org.jacoco.cli/about.html
@@ -9,17 +9,17 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
@@ -28,13 +28,9 @@
   out below.
 </p>
 
-<h4>args4j</h4>
-
-<p>
-  This plug-in contains <a href="http://args4j.kohsuke.org/">args4j</a>
-  which is subject to the terms and conditions of the
-  <a href="http://www.opensource.org/licenses/mit-license.php">the MIT license</a>. 
-</p>
+${args4j.license}
+${asm.license}
+${googlecodeprettify.license}
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.cli/pom.xml b/org.jacoco.cli/pom.xml
index 1b975fe..1221d8c 100644
--- a/org.jacoco.cli/pom.xml
+++ b/org.jacoco.cli/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java b/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
index 4d35722..4b05c25 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -63,7 +64,7 @@
 
 	/**
 	 * Executes the given command.
-	 * 
+	 *
 	 * @param out
 	 *            std out
 	 * @param err
@@ -77,7 +78,7 @@
 
 	/**
 	 * Prints textual help for this command.
-	 * 
+	 *
 	 * @param writer
 	 *            output destination
 	 */
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java
index 02bcbbe..4184b95 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -30,7 +31,7 @@
 
 	/**
 	 * This constructor is required by the args4j framework.
-	 * 
+	 *
 	 * @param parser
 	 * @param option
 	 * @param setter
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java
index a918a7f..d06bf96 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java b/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java
index 8c3fb11..3980ebd 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -91,7 +92,7 @@
 
 	/**
 	 * Main entry point for program invocations.
-	 * 
+	 *
 	 * @param args
 	 *            program arguments
 	 * @throws Exception
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java b/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java
index 3ef4aca..b410832 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -54,7 +55,7 @@
 
 	/**
 	 * Called during the build process.
-	 * 
+	 *
 	 * @param args
 	 *            exactly one argument expected with the target location
 	 * @throws IOException
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/AllCommands.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/AllCommands.java
index c8d713a..c443d66 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/AllCommands.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/AllCommands.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ClassInfo.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ClassInfo.java
index 4e33b35..ca658de 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ClassInfo.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ClassInfo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Dump.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Dump.java
index c63cc8a..be6cff8 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Dump.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Dump.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
index 4519d28..fee57bf 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Instrument.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Instrument.java
index b628c5b..62f8aab 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Instrument.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Instrument.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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 Keeping - initial implementation
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Merge.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Merge.java
index 229ccba..1b76cb4 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Merge.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Merge.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Report.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Report.java
index ef984f7..79998b2 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Report.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Report.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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 Keeping - initial implementation
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Version.java b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Version.java
index 273fc6e..59ed725 100644
--- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Version.java
+++ b/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Version.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.groovy/.classpath b/org.jacoco.core.test.validation.groovy/.classpath
new file mode 100644
index 0000000..ebe550b
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/.classpath
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.jacoco.core.test.validation.groovy/.project b/org.jacoco.core.test.validation.groovy/.project
new file mode 100644
index 0000000..b4033cb
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/.project
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.jacoco.core.test.validation.groovy</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>.settings</name>
+			<type>2</type>
+			<locationURI>PARENT-1-PROJECT_LOC/org.jacoco.core.test/.settings</locationURI>
+		</link>
+	</linkedResources>
+</projectDescription>
diff --git a/org.jacoco.core.test.validation.groovy/pom.xml b/org.jacoco.core.test.validation.groovy/pom.xml
index a30cb44..549c1df 100644
--- a/org.jacoco.core.test.validation.groovy/pom.xml
+++ b/org.jacoco.core.test.validation.groovy/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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:
       Andres Almiray - initial API and implementation
@@ -16,7 +17,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.core.test.validation</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.core.test.validation</relativePath>
   </parent>
 
@@ -25,8 +26,8 @@
   <name>JaCoCo :: Test :: Core :: Validation Groovy</name>
 
   <properties>
-    <gmaven.version>1.6.2</gmaven.version>
-    <groovy.version>2.5.3</groovy.version>
+    <gmaven.version>1.11.0</gmaven.version>
+    <groovy.version>3.0.7</groovy.version>
   </properties>
 
   <dependencies>
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoCloneClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoCloneClassTest.java
new file mode 100644
index 0000000..537c0d5
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoCloneClassTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Oliver Nautsch - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyAutoCloneClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.AutoClone} annotation.
+ */
+public class GroovyAutoCloneClassTest extends ValidationTestBase {
+	public GroovyAutoCloneClassTest() {
+		super(GroovyAutoCloneClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoExternalizeClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoExternalizeClassTest.java
new file mode 100644
index 0000000..f2e218e
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyAutoExternalizeClassTest.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyAutoExternalizeClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.AutoExternalize} annotation.
+ */
+public class GroovyAutoExternalizeClassTest extends ValidationTestBase {
+	public GroovyAutoExternalizeClassTest() {
+		super(GroovyAutoExternalizeClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBindableClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBindableClassTest.java
new file mode 100644
index 0000000..f70b7f4
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBindableClassTest.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyBindableClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.beans.Bindable} annotation.
+ */
+public class GroovyBindableClassTest extends ValidationTestBase {
+	public GroovyBindableClassTest() {
+		super(GroovyBindableClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBuilderClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBuilderClassTest.java
new file mode 100644
index 0000000..66972c2
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyBuilderClassTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Jan Wloka - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyBuilderClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.builder.Builder} annotation.
+ */
+public class GroovyBuilderClassTest extends ValidationTestBase {
+	public GroovyBuilderClassTest() {
+		super(GroovyBuilderClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyCanonicalClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyCanonicalClassTest.java
new file mode 100644
index 0000000..72f3628
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyCanonicalClassTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Andres Almiray - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyCanonicalClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.Canonical} annotation.
+ */
+public class GroovyCanonicalClassTest extends ValidationTestBase {
+	public GroovyCanonicalClassTest() {
+		super(GroovyCanonicalClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDataClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDataClassTest.java
deleted file mode 100644
index f13fc43..0000000
--- a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDataClassTest.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Andres Almiray - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation.groovy;
-
-import org.jacoco.core.test.validation.ValidationTestBase;
-import org.jacoco.core.test.validation.groovy.targets.GroovyDataClassTarget;
-import org.junit.Test;
-
-/**
- * Test of <code>data class</code>es.
- */
-public class GroovyDataClassTest extends ValidationTestBase {
-    public GroovyDataClassTest() {
-        super(GroovyDataClassTarget.class);
-    }
-
-    @Test
-    public void test_method_count() {
-        assertMethodCount(1);
-    }
-}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDelegateClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDelegateClassTest.java
new file mode 100644
index 0000000..1761d0c
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyDelegateClassTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Jan Wloka - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyDelegateClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with field annotated by {@link groovy.lang.Delegate}.
+ */
+public class GroovyDelegateClassTest extends ValidationTestBase {
+	public GroovyDelegateClassTest() {
+		super(GroovyDelegateClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(4);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyImmutableClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyImmutableClassTest.java
new file mode 100644
index 0000000..5efe749
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyImmutableClassTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Oliver Nautsch - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyImmutableClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.Immutable} annotation.
+ */
+public class GroovyImmutableClassTest extends ValidationTestBase {
+	public GroovyImmutableClassTest() {
+		super(GroovyImmutableClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyIndexPropertyClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyIndexPropertyClassTest.java
new file mode 100644
index 0000000..32f0e4e
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyIndexPropertyClassTest.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyIndexPropertyClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with fields annotated by
+ * {@link groovy.transform.IndexedProperty} annotation.
+ */
+public class GroovyIndexPropertyClassTest extends ValidationTestBase {
+	public GroovyIndexPropertyClassTest() {
+		super(GroovyIndexPropertyClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovySortableClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovySortableClassTest.java
new file mode 100644
index 0000000..810ed1d
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovySortableClassTest.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovySortableClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.transform.Sortable} annotation.
+ */
+public class GroovySortableClassTest extends ValidationTestBase {
+	public GroovySortableClassTest() {
+		super(GroovySortableClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		// main method and static initializer
+		assertMethodCount(2);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyVetoableClassTest.java b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyVetoableClassTest.java
new file mode 100644
index 0000000..7ad2443
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/GroovyVetoableClassTest.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.groovy.targets.GroovyVetoableClassTarget;
+import org.junit.Test;
+
+/**
+ * Test of class with {@link groovy.beans.Vetoable} annotation.
+ */
+public class GroovyVetoableClassTest extends ValidationTestBase {
+	public GroovyVetoableClassTest() {
+		super(GroovyVetoableClassTarget.class);
+	}
+
+	@Test
+	public void test_method_count() {
+		assertMethodCount(1);
+	}
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoCloneClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoCloneClassTarget.groovy
new file mode 100644
index 0000000..554921d
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoCloneClassTarget.groovy
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Oliver Nautsch - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.AutoClone
+
+@AutoClone
+class GroovyAutoCloneClassTarget { // assertEmpty()
+    static void main(String[] args) {
+        new GroovyAutoCloneClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoExternalizeClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoExternalizeClassTarget.groovy
new file mode 100644
index 0000000..6217388
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyAutoExternalizeClassTarget.groovy
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.AutoExternalize
+
+@AutoExternalize
+class GroovyAutoExternalizeClassTarget { // assertEmpty()
+
+    String first    // assertEmpty()
+    List favItems     // assertEmpty()
+    Date since    // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyAutoExternalizeClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBindableClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBindableClassTarget.groovy
new file mode 100644
index 0000000..af9e8bb
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBindableClassTarget.groovy
@@ -0,0 +1,29 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.beans.Bindable
+
+class GroovyBindableClassTarget { // assertEmpty()
+
+    @Bindable
+    String firstName    // assertEmpty()
+
+    @Bindable
+    def zipCode    // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyBindableClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBuilderClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBuilderClassTarget.groovy
new file mode 100644
index 0000000..36990f6
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyBuilderClassTarget.groovy
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Jan Wloka - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.builder.Builder
+import groovy.transform.builder.SimpleStrategy
+
+@Builder(builderStrategy = SimpleStrategy)
+class GroovyBuilderClassTarget { // assertEmpty()
+
+    String name // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyBuilderClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyCanonicalClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyCanonicalClassTarget.groovy
new file mode 100644
index 0000000..bf0da0e
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyCanonicalClassTarget.groovy
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Andres Almiray - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.Canonical
+
+@Canonical
+class GroovyCanonicalClassTarget { // assertEmpty()
+
+    int valRead // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyCanonicalClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDataClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDataClassTarget.groovy
deleted file mode 100644
index c51b1e5..0000000
--- a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDataClassTarget.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Andres Almiray - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.test.validation.groovy.targets
-
-/* This annotation generates the following
- * - a constructor that takes an int as argument
- * - a suitable implementation of toString()
- * - a suitable implementation of hashCode()
- * - a suitable implementation of equals(Object)
- * - a public method named canEqual(Object)
- * - a getter & setter for the valRead property
- */
-@groovy.transform.Canonical
-class GroovyDataClassTarget { // assertEmpty()
-
-    int valRead // assertEmpty()
-
-    static void main(String[] args) {
-        new GroovyDataClassTarget() // assertFullyCovered()
-    }
-}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDelegateClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDelegateClassTarget.groovy
new file mode 100644
index 0000000..6024efd
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyDelegateClassTarget.groovy
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Jan Wloka - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+class GroovyDelegateClassTarget { // assertEmpty()
+
+    static class D {
+        void m1() {
+        } // assertFullyCovered()
+
+        void m2() {
+        } // assertFullyCovered()
+    }
+
+    @Delegate
+    D delegate = new D() // assertEmpty()
+
+    void m2() {
+        delegate.m2() // assertFullyCovered()
+    }
+
+    static void main(String[] args) {
+        new GroovyDelegateClassTarget().m1()
+        new GroovyDelegateClassTarget().m2()
+    }
+
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyImmutableClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyImmutableClassTarget.groovy
new file mode 100644
index 0000000..ebe8e7b
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyImmutableClassTarget.groovy
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Oliver Nautsch - initial API and implementation
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.Immutable
+
+@Immutable
+class GroovyImmutableClassTarget { // assertEmpty()
+
+    String name // assertEmpty()
+    int age     // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyImmutableClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyIndexPropertyClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyIndexPropertyClassTarget.groovy
new file mode 100644
index 0000000..dd9b84e
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyIndexPropertyClassTarget.groovy
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.io.FileType
+import groovy.transform.IndexedProperty
+
+class GroovyIndexPropertyClassTarget { // assertEmpty()
+
+    @IndexedProperty
+    FileType[] someField  // assertEmpty()
+    @IndexedProperty
+    List otherField     // assertEmpty()
+    @IndexedProperty
+    List furtherField   // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyIndexPropertyClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovySortableClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovySortableClassTarget.groovy
new file mode 100644
index 0000000..b3f04f0
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovySortableClassTarget.groovy
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.transform.Sortable
+
+@Sortable
+class GroovySortableClassTarget { // assertEmpty()
+
+    String first    // assertEmpty()
+    String last     // assertEmpty()
+    Integer born    // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovySortableClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyVetoableClassTarget.groovy b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyVetoableClassTarget.groovy
new file mode 100644
index 0000000..436079b
--- /dev/null
+++ b/org.jacoco.core.test.validation.groovy/src/org/jacoco/core/test/validation/groovy/targets/GroovyVetoableClassTarget.groovy
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Stephan Classen
+ *    Vadim Bauer
+ *
+ *******************************************************************************/
+package org.jacoco.core.test.validation.groovy.targets
+
+import groovy.beans.Vetoable
+
+@Vetoable
+class GroovyVetoableClassTarget { // assertEmpty()
+
+    String firstName    // assertEmpty()
+    def zipCode    // assertEmpty()
+
+    static void main(String[] args) {
+        new GroovyVetoableClassTarget() // assertFullyCovered()
+    }
+}
diff --git a/org.jacoco.core.test.validation.java14/.classpath b/org.jacoco.core.test.validation.java14/.classpath
new file mode 100644
index 0000000..8521cd5
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/.classpath
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-14">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.jacoco.core.test.validation.java14/.project b/org.jacoco.core.test.validation.java14/.project
new file mode 100644
index 0000000..fd583c6
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/.project
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.jacoco.core.test.validation.java14</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>.settings</name>
+			<type>2</type>
+			<locationURI>PARENT-1-PROJECT_LOC/org.jacoco.core.test/.settings</locationURI>
+		</link>
+	</linkedResources>
+</projectDescription>
diff --git a/org.jacoco.core.test.validation.java14/pom.xml b/org.jacoco.core.test.validation.java14/pom.xml
new file mode 100644
index 0000000..61701c4
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2009, 2021 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.jacoco</groupId>
+    <artifactId>org.jacoco.core.test.validation</artifactId>
+    <version>0.8.7</version>
+    <relativePath>../org.jacoco.core.test.validation</relativePath>
+  </parent>
+
+  <artifactId>org.jacoco.core.test.validation.java14</artifactId>
+
+  <name>JaCoCo :: Test :: Core :: Validation Java 14</name>
+
+  <properties>
+    <bytecode.version>14</bytecode.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.jacoco.core.test</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <configuration>
+          <compilerArgs>
+            <arg>--enable-preview</arg>
+          </compilerArgs>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <argLine>--enable-preview</argLine>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/InstanceofTest.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/InstanceofTest.java
new file mode 100644
index 0000000..09a7db3
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/InstanceofTest.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14;
+
+import org.jacoco.core.test.validation.Source.Line;
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java14.targets.InstanceofTarget;
+
+/**
+ * Test of code coverage in {@link InstanceofTarget}.
+ */
+public class InstanceofTest extends ValidationTestBase {
+
+	public InstanceofTest() {
+		super(InstanceofTarget.class);
+	}
+
+	public void assertInstanceof(final Line line) {
+		if (isJDKCompiler && JAVA_VERSION.isBefore("15")) {
+			// https://bugs.openjdk.java.net/browse/JDK-8237528
+			assertFullyCovered(line, 1, 3);
+		} else {
+			assertFullyCovered(line, 0, 2);
+		}
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/RecordsTest.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/RecordsTest.java
new file mode 100644
index 0000000..7e93f50
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/RecordsTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java14.targets.RecordsTarget;
+
+/**
+ * Test of code coverage for records.
+ */
+public class RecordsTest extends ValidationTestBase {
+
+	public RecordsTest() {
+		super(RecordsTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/SwitchExpressionsTest.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/SwitchExpressionsTest.java
new file mode 100644
index 0000000..b2821ff
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/SwitchExpressionsTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.java14.targets.SwitchExpressionsTarget;
+
+/**
+ * Test of code coverage for switch expressions.
+ */
+public class SwitchExpressionsTest extends ValidationTestBase {
+
+	public SwitchExpressionsTest() {
+		super(SwitchExpressionsTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/InstanceofTarget.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/InstanceofTarget.java
new file mode 100644
index 0000000..3058295
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/InstanceofTarget.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+/**
+ * This target exercises pattern matching for instanceof (JEP 305).
+ */
+public class InstanceofTarget {
+
+	private static void ifInstanceof(Object e) {
+		if (e instanceof String s) { // assertInstanceof()
+			nop(s);
+		}
+	}
+
+	public static void main(String[] args) {
+		ifInstanceof(new Object());
+		ifInstanceof("string");
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/RecordsTarget.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/RecordsTarget.java
new file mode 100644
index 0000000..4667c5b
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/RecordsTarget.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14.targets;
+
+/**
+ * This target exercises records.
+ */
+public class RecordsTarget {
+
+	record WithoutFields() { // assertFullyCovered()
+	}
+
+	record WithFields( // assertPartlyCovered()
+			int x // assertEmpty()
+	) {
+	}
+
+	record WithCustomMethods(int x) { // assertFullyCovered()
+		public int x() {
+			return x; // assertNotCovered()
+		}
+
+		public String toString() {
+			return ""; // assertNotCovered()
+		}
+
+		public int hashCode() {
+			return 0; // assertNotCovered()
+		}
+
+		public boolean equals(Object object) {
+			return false; // assertNotCovered()
+		}
+	}
+
+	public static void main(String[] args) {
+		new WithoutFields();
+		new WithFields(42);
+		new WithCustomMethods(42);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/SwitchExpressionsTarget.java b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/SwitchExpressionsTarget.java
new file mode 100644
index 0000000..ec32758
--- /dev/null
+++ b/org.jacoco.core.test.validation.java14/src/org/jacoco/core/test/validation/java14/targets/SwitchExpressionsTarget.java
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.java14.targets;
+
+import static org.jacoco.core.test.validation.targets.Stubs.Enum.A;
+import static org.jacoco.core.test.validation.targets.Stubs.Enum.B;
+import static org.jacoco.core.test.validation.targets.Stubs.Enum.C;
+import static org.jacoco.core.test.validation.targets.Stubs.enumA;
+import static org.jacoco.core.test.validation.targets.Stubs.i1;
+import static org.jacoco.core.test.validation.targets.Stubs.i2;
+import static org.jacoco.core.test.validation.targets.Stubs.nop;
+
+/**
+ * This target exercises switch expressions.
+ */
+public class SwitchExpressionsTarget {
+
+	public static void main(String[] args) {
+
+		switchExpressionWithArrows();
+		multiValueSwitchExpressionWithArrows();
+		switchExpressionWithArrowsAndYield();
+		switchExpressionWithYield();
+		exhaustiveSwitchExpression();
+
+	}
+
+	private static void switchExpressionWithArrows() {
+
+		nop(switch (i2()) { // assertFullyCovered(3, 1)
+		case 1 -> i1(); // assertNotCovered()
+		case 2 -> i1(); // assertFullyCovered()
+		case 3 -> i1(); // assertNotCovered()
+		default -> i1(); // assertNotCovered()
+		});
+
+	}
+
+	private static void multiValueSwitchExpressionWithArrows() {
+
+		nop(switch (i2()) { // assertFullyCovered(2, 1)
+		case 1, 2 -> i1(); // assertFullyCovered()
+		case 3, 4 -> i1(); // assertNotCovered()
+		default -> i1(); // assertNotCovered()
+		});
+
+	}
+
+	private static void switchExpressionWithArrowsAndYield() {
+
+		nop(switch (i2()) { // assertFullyCovered(3, 1)
+		case 1 -> {
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		}
+		case 2 -> {
+			nop(); // assertFullyCovered()
+			yield i1(); // assertFullyCovered()
+		}
+		case 3 -> {
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		}
+		default -> {
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		}
+		});
+
+	}
+
+	private static void switchExpressionWithYield() {
+
+		nop(switch (i2()) { // assertFullyCovered(3, 1)
+		case 1:
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		case 2:
+			nop(); // assertFullyCovered()
+			yield i1(); // assertFullyCovered()
+		case 3:
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		default:
+			nop(); // assertNotCovered()
+			yield i1(); // assertNotCovered()
+		});
+
+	}
+
+	private static void exhaustiveSwitchExpression() {
+
+		nop(switch (enumA()) { // assertPartlyCovered(3, 1)
+		case A -> i1(); // assertFullyCovered()
+		case B -> i1(); // assertNotCovered()
+		case C -> i1(); // assertNotCovered()
+		});
+
+	}
+}
diff --git a/org.jacoco.core.test.validation.java5/pom.xml b/org.jacoco.core.test.validation.java5/pom.xml
index 4591189..b65b14f 100644
--- a/org.jacoco.core.test.validation.java5/pom.xml
+++ b/org.jacoco.core.test.validation.java5/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.core.test.validation</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.core.test.validation</relativePath>
   </parent>
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationGeneratedTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationGeneratedTest.java
index c56e612..c3232d4 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationGeneratedTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationGeneratedTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java
index 01a721f..ad47961 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/AnnotationInitializerTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java
index cb6758b..e833120 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BadCycleClassTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java
index 366730e..2db1e79 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/BooleanExpressionsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java
index cefd5bb..8c94568 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ClassInitializerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java
index 674b3df..15e00e2 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ConstructorsTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java
index 5381ae2..94b9c6a 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructureBeforeSuperConstructorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java
index 350bbe0..28ed001 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ControlStructuresTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java
index 6bc1614..61a1e13 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/CyclomaticComplexityTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java
index f11a8b4..c3e9b34 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumConstructorTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java
index 2653606..fd30d31 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumImplicitMethodsTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java
index 920c39a..eb87bb5 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/EnumSwitchTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java
index 5e0b78c..6050e4b 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExceptionsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java
index 8b64541..37b0425 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ExplicitInitialFrameTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java
index 069e35b..a7f40b5 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FieldInitializationInTwoConstructorsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java
index 91a8124..d23d225 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FinallyTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -202,8 +203,7 @@
 				continue;
 			}
 			int lineNumber = -1;
-			for (AbstractInsnNode i = m.instructions
-					.getFirst(); i != null; i = i.getNext()) {
+			for (AbstractInsnNode i : m.instructions) {
 				if (AbstractInsnNode.LINE == i.getType()) {
 					lineNumber = ((LineNumberNode) i).line;
 				}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java
index 88e3903..921b261 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/FramesTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java
index b46e9c2..d18471a 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/ImplicitFieldInitializationTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java
index ed4843b..791691d 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/InterfaceClassInitializerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java
index 7e13e65..3676fc8 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/StructuredLockingTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5;
 
@@ -43,7 +44,7 @@
  * Tests that the invariants specified in <a href=
  * "https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-2.html#jvms-2.11.10">chapter
  * 2.11.10 of the JVM Spec</a> do also hold for instrumented classes.
- * 
+ *
  * This is important because JIT compiler in HotSpot JVM ignores methods with
  * unstructured locking, so that they executed by interpreter. Android Runtime
  * also doesn't optimize such methods.
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java
index e4a841d..dc5c2fe 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SynchronizedTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java
index ce690bf..f272172 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/SyntheticTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -13,6 +14,7 @@
 
 import org.jacoco.core.test.validation.ValidationTestBase;
 import org.jacoco.core.test.validation.java5.targets.SyntheticTarget;
+import org.junit.Test;
 
 /**
  * Test of filtering of synthetic methods.
@@ -23,6 +25,7 @@
 		super(SyntheticTarget.class);
 	}
 
+	@Test
 	public void test_method_count() {
 		assertMethodCount(5);
 	}
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationGeneratedTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationGeneratedTarget.java
index 7effe60..d05581a 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationGeneratedTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationGeneratedTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java
index 841f096..91fe856 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/AnnotationInitializerTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java
index c37fa8a..138b385 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BadCycleClassTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java
index 6015cea..49c8ab0 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/BooleanExpressionsTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java
index 5b1f554..f7d7278 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ClassInitializerTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java
index f818440..20362c1 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ConstructorsTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java
index 3af4047..5c334df 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructureBeforeSuperConstructorTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java
index 571adca..7b7c521 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ControlStructuresTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java
index 5b526b9..e4685ed 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumConstructorTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java
index 687bc4e..6f36f30 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumImplicitMethodsTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java
index 51ca47e..0ca4389 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/EnumSwitchTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java
index efac5a6..8bec674 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExceptionsTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java
index 475de0a..98a35e7 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ExplicitInitialFrameTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java
index b79b922..9b6ed3b 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FieldInitializationInTwoConstructorsTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java
index 66aeabe..7944b29 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/FinallyTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java
index 4643345..54ea1c5 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/ImplicitFieldInitializationTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java
index 81bcda8..936d3e2 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/InterfaceClassInitializerTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java
index 76b57f9..0dd59bb 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/StructuredLockingTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java5.targets;
 
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java
index b9b9ce6..bf99984 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SynchronizedTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java
index efede92..5cededa 100644
--- a/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java
+++ b/org.jacoco.core.test.validation.java5/src/org/jacoco/core/test/validation/java5/targets/SyntheticTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java7/pom.xml b/org.jacoco.core.test.validation.java7/pom.xml
index 3f58d8b..c857a97 100644
--- a/org.jacoco.core.test.validation.java7/pom.xml
+++ b/org.jacoco.core.test.validation.java7/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.core.test.validation</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.core.test.validation</relativePath>
   </parent>
 
diff --git a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/StringSwitchTest.java b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/StringSwitchTest.java
index 2e42946..9d996f9 100644
--- a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/StringSwitchTest.java
+++ b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/StringSwitchTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/TryWithResourcesTest.java b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/TryWithResourcesTest.java
index 47b09d4..cdc535c 100644
--- a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/TryWithResourcesTest.java
+++ b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/TryWithResourcesTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/StringSwitchTarget.java b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/StringSwitchTarget.java
index a3b57bc..b685b72 100644
--- a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/StringSwitchTarget.java
+++ b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/StringSwitchTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/TryWithResourcesTarget.java b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/TryWithResourcesTarget.java
index 061db23..9e67092 100644
--- a/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/TryWithResourcesTarget.java
+++ b/org.jacoco.core.test.validation.java7/src/org/jacoco/core/test/validation/java7/targets/TryWithResourcesTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/pom.xml b/org.jacoco.core.test.validation.java8/pom.xml
index 5edd498..adbcf5a 100644
--- a/org.jacoco.core.test.validation.java8/pom.xml
+++ b/org.jacoco.core.test.validation.java8/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.core.test.validation</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.core.test.validation</relativePath>
   </parent>
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/AnnotationOnLocalVariableTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/AnnotationOnLocalVariableTest.java
index e3a3221..767c85f 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/AnnotationOnLocalVariableTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/AnnotationOnLocalVariableTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BadCycleInterfaceTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BadCycleInterfaceTest.java
index 96896f6..82bdc54 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BadCycleInterfaceTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BadCycleInterfaceTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BootstrapMethodReferenceTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BootstrapMethodReferenceTest.java
index e723afa..90076dc 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BootstrapMethodReferenceTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/BootstrapMethodReferenceTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceDefaultMethodsTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceDefaultMethodsTest.java
index b047ceb..d754bd1 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceDefaultMethodsTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceDefaultMethodsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8;
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceOnlyDefaultMethodsTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceOnlyDefaultMethodsTest.java
index 6915ec9..b976ddd 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceOnlyDefaultMethodsTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/InterfaceOnlyDefaultMethodsTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaExpressionsTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaExpressionsTest.java
index 1128f70..e84fa2c 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaExpressionsTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaExpressionsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8;
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaInInterfaceTest.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaInInterfaceTest.java
index 9e24240..153c30e 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaInInterfaceTest.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/LambdaInInterfaceTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8;
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/AnnotationOnLocalVariableTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/AnnotationOnLocalVariableTarget.java
index 976825b..9a8bfa2 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/AnnotationOnLocalVariableTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/AnnotationOnLocalVariableTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/BadCycleInterfaceTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/BadCycleInterfaceTarget.java
index 24515a0..c5fbb86 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/BadCycleInterfaceTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/BadCycleInterfaceTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceDefaultMethodsTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceDefaultMethodsTarget.java
index 6b44830..8956e15 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceDefaultMethodsTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceDefaultMethodsTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8.targets;
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceOnlyDefaultMethodsTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceOnlyDefaultMethodsTarget.java
index bd50d43..a1de2b0 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceOnlyDefaultMethodsTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/InterfaceOnlyDefaultMethodsTarget.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaExpressionsTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaExpressionsTarget.java
index 719237f..c167e7d 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaExpressionsTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaExpressionsTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8.targets;
 
diff --git a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaInInterfaceTarget.java b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaInInterfaceTarget.java
index 0bafd43..1b5aac4 100644
--- a/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaInInterfaceTarget.java
+++ b/org.jacoco.core.test.validation.java8/src/org/jacoco/core/test/validation/java8/targets/LambdaInInterfaceTarget.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.java8.targets;
 
diff --git a/org.jacoco.core.test.validation.kotlin/pom.xml b/org.jacoco.core.test.validation.kotlin/pom.xml
index 0541e00..5e29138 100644
--- a/org.jacoco.core.test.validation.kotlin/pom.xml
+++ b/org.jacoco.core.test.validation.kotlin/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.core.test.validation</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.core.test.validation</relativePath>
   </parent>
 
@@ -24,8 +25,7 @@
   <name>JaCoCo :: Test :: Core :: Validation Kotlin</name>
 
   <properties>
-    <bytecode.version>6</bytecode.version>
-    <kotlin.version>1.3.31</kotlin.version>
+    <kotlin.version>1.5.0</kotlin.version>
   </properties>
 
   <dependencies>
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCallableReferenceTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCallableReferenceTest.java
index 321c717..600ff2a 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCallableReferenceTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCallableReferenceTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinControlStructuresTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinControlStructuresTest.java
new file mode 100644
index 0000000..877ee91
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinControlStructuresTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.kotlin.targets.KotlinControlStructuresTarget;
+
+/**
+ * Tests of Kotlin control structures.
+ */
+public class KotlinControlStructuresTest extends ValidationTestBase {
+
+	public KotlinControlStructuresTest() {
+		super(KotlinControlStructuresTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCoroutineTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCoroutineTest.java
index aa537d7..de807dc 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCoroutineTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinCoroutineTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDataClassTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDataClassTest.java
index 2bb94d9..660c624 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDataClassTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDataClassTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultArgumentsTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultArgumentsTest.java
index 660cd9c..0bb0bce 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultArgumentsTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultArgumentsTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultMethodsTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultMethodsTest.java
new file mode 100644
index 0000000..1cba4a2
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDefaultMethodsTest.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.kotlin.targets.KotlinDefaultMethodsTarget;
+
+/**
+ * Test of code coverage in {@link KotlinDefaultMethodsTarget}.
+ */
+public class KotlinDefaultMethodsTest extends ValidationTestBase {
+
+	public KotlinDefaultMethodsTest() {
+		super(KotlinDefaultMethodsTarget.class);
+	}
+
+	@Override
+	public void all_missed_instructions_should_have_line_number() {
+		// instructions without line numbers
+		// corresponding to non-executed default implementations
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDelegatesTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDelegatesTest.java
new file mode 100644
index 0000000..1809128
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinDelegatesTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.kotlin.targets.KotlinDelegatesTarget;
+
+/**
+ * Test of code coverage in {@link KotlinDelegatesTarget}.
+ */
+public class KotlinDelegatesTest extends ValidationTestBase {
+
+	public KotlinDelegatesTest() {
+		super(KotlinDelegatesTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinElvisOperatorTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinElvisOperatorTest.java
index 8a0ae78..386c9b6 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinElvisOperatorTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinElvisOperatorTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinInlineTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinInlineTest.java
index 2027611..3466027 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinInlineTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinInlineTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -23,4 +24,9 @@
 		super(KotlinInlineTargetKt.class);
 	}
 
+	@Override
+	public void all_missed_instructions_should_have_line_number() {
+		// missed instructions without line number in inline function
+	}
+
 }
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLambdaExpressionsTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLambdaExpressionsTest.java
new file mode 100644
index 0000000..cd44726
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLambdaExpressionsTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.kotlin.targets.KotlinLambdaExpressionsTarget;
+
+/**
+ * Test of code coverage in {@link KotlinLambdaExpressionsTarget}.
+ */
+public class KotlinLambdaExpressionsTest extends ValidationTestBase {
+
+	public KotlinLambdaExpressionsTest() {
+		super(KotlinLambdaExpressionsTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLateinitTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLateinitTest.java
index b770ddb..a2503ac 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLateinitTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinLateinitTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinNotNullOperatorTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinNotNullOperatorTest.java
index e92cee9..4843f1b 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinNotNullOperatorTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinNotNullOperatorTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCallOperatorTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCallOperatorTest.java
index 2feb555..f3e775f 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCallOperatorTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCallOperatorTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCastTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCastTest.java
index 0fc1e65..e79383f 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCastTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinSafeCastTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinTopLevelFunctionTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinTopLevelFunctionTest.java
index 473c9bb..5b15231 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinTopLevelFunctionTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinTopLevelFunctionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinUnsafeCastOperatorTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinUnsafeCastOperatorTest.java
index f7c10fd..45bf3ee 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinUnsafeCastOperatorTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinUnsafeCastOperatorTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinWhenExpressionTest.java b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinWhenExpressionTest.java
index ae07b48..084b186 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinWhenExpressionTest.java
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/KotlinWhenExpressionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCallableReferenceTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCallableReferenceTarget.kt
index b024067..4b9aa3c 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCallableReferenceTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCallableReferenceTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinControlStructuresTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinControlStructuresTarget.kt
new file mode 100644
index 0000000..cc8825d
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinControlStructuresTarget.kt
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin.targets
+
+import org.jacoco.core.test.validation.targets.Stubs.*
+
+/**
+ * Test target for Kotlin control structures.
+ */
+object KotlinControlStructuresTarget {
+
+    private fun unconditionalExecution() {
+
+        nop() // assertFullyCovered()
+
+    }
+
+    private fun missedIfBlock() {
+
+        if (f()) { // assertFullyCovered(1, 1)
+            nop() // assertNotCovered()
+        } else {
+            nop() // assertFullyCovered()
+        }
+
+    }
+
+    private fun executedIfBlock() {
+
+        if (t()) { // assertFullyCovered(1, 1)
+            nop() // assertFullyCovered()
+        } else {
+            nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun missedWhileBlock() {
+
+        while (f()) { // assertFullyCovered(1, 1)
+            nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun executedWhileBlock() {
+
+        var i = 0
+        while (i++ < 3) { // assertFullyCovered(0, 2)
+            nop() // assertFullyCovered()
+        }
+
+    }
+
+    private fun executedDoWhileBlock() {
+
+        do {
+            nop() // assertFullyCovered()
+        } while (f()) // assertFullyCovered(1, 1)
+
+    }
+
+    private fun missedForBlock() {
+
+        for (j in i2()..i1()) { // assertPartlyCovered(3, 1)
+            nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun executedForBlock() {
+
+        for (j in i1()..i2()) { // assertFullyCovered(1, 3)
+            nop() // assertFullyCovered()
+        }
+
+    }
+
+    private fun missedForEachBlock() {
+
+        for (o in emptyList<Any>()) { // assertPartlyCovered(1, 1)
+            nop(o) // assertNotCovered()
+        }
+
+    }
+
+    private fun executedForEachBlock() {
+
+        for (o in setOf(Any())) { // assertFullyCovered(0,2)
+            nop(o) // assertFullyCovered()
+        }
+
+    }
+
+    private fun whenExpression() {
+
+        when (i2()) { // assertFullyCovered(2, 1)
+            1 -> nop() // assertNotCovered()
+            2 -> nop() // assertFullyCovered()
+            else -> nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun breakStatement() {
+
+        while (true) {
+            if (t()) {
+                break // assertFullyCovered()
+            }
+            nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun continueStatement() {
+
+        for (j in i1()..i2()) {
+            if (t()) {
+                continue // assertFullyCovered()
+            }
+            nop() // assertNotCovered()
+        }
+
+    }
+
+    private fun implicitReturn() {
+    } // assertFullyCovered()
+
+    private fun explicitReturn() {
+
+        return // assertFullyCovered()
+
+    } // assertEmpty()
+
+    @JvmStatic
+    fun main(args: Array<String>) {
+        unconditionalExecution()
+        missedIfBlock()
+        executedIfBlock()
+        missedWhileBlock()
+        executedWhileBlock()
+        executedDoWhileBlock()
+        missedForBlock()
+        executedForBlock()
+        missedForEachBlock()
+        executedForEachBlock()
+        whenExpression()
+        breakStatement()
+        continueStatement()
+        implicitReturn()
+        explicitReturn()
+    }
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCoroutineTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCoroutineTarget.kt
index 6a56570..e242d78 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCoroutineTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinCoroutineTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -24,6 +25,11 @@
         nop() // assertFullyCovered()
     } // assertFullyCovered()
 
+    private suspend fun suspendingFunctionWithTailCallOptimization() { // assertEmpty()
+        nop() // assertFullyCovered()
+        anotherSuspendingFunction() // assertFullyCovered()
+    } // assertFullyCovered()
+
     private suspend fun anotherSuspendingFunction() {
         nop() // assertFullyCovered()
     }
@@ -36,6 +42,7 @@
             nop(x) // assertFullyCovered()
             suspendingFunction() // assertFullyCovered()
             nop(x) // assertFullyCovered()
+            suspendingFunctionWithTailCallOptimization()
         } // assertFullyCovered()
 
     }
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDataClassTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDataClassTarget.kt
index 2af6fb0..67abe0f 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDataClassTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDataClassTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
@@ -19,9 +20,9 @@
 object KotlinDataClassTarget {
 
     data class DataClass( // assertFullyCovered()
-            val valNoRead: Int, // assertNotCovered()
+            val valNoRead: Int, // assertPartlyCovered()
             val valRead: Int,  // assertFullyCovered()
-            var varNoReadNoWrite: Int, // assertNotCovered()
+            var varNoReadNoWrite: Int, // assertPartlyCovered()
             var varNoWrite: Int, // assertPartlyCovered()
             var varNoRead: Int, // assertPartlyCovered()
             var varReadWrite: Int  // assertFullyCovered()
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultArgumentsTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultArgumentsTarget.kt
index 0a11d7d..59c07c7 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultArgumentsTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultArgumentsTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -19,9 +20,21 @@
     private fun f(a: String = "a", b: String = "b") { // assertFullyCovered(0, 0)
     }
 
+    private fun longParameter(x: Long = 0) { // assertFullyCovered()
+    }
+
     private fun branch(a: Boolean, b: String = if (a) "a" else "b") { // assertFullyCovered(0, 2)
     }
 
+    open class Open {
+        open fun f(a: String = "a") { // assertFullyCovered()
+        }
+    }
+
+    class Constructor() {
+        constructor(a: Boolean, b: String = if (a) "a" else "b") : this() // assertFullyCovered(0, 2)
+    }
+
     @JvmStatic
     fun main(args: Array<String>) {
         f(a = "a")
@@ -29,8 +42,16 @@
         /* next invocation doesn't use synthetic method: */
         f("a", "b")
 
+        longParameter()
+        longParameter(1)
+
         branch(false)
         branch(true)
+
+        Open().f()
+
+        Constructor(false)
+        Constructor(true)
     }
 
 }
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultMethodsTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultMethodsTarget.kt
new file mode 100644
index 0000000..5325e84
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDefaultMethodsTarget.kt
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin.targets
+
+/**
+ * This test target contains class implementing interface with default methods.
+ */
+object KotlinDefaultMethodsTarget {
+
+    interface I {
+        fun m1() = Unit // assertNotCovered()
+        fun m2() = Unit // assertFullyCovered()
+        fun m3() = Unit // assertNotCovered()
+    }
+
+    class C : I { // assertFullyCovered()
+        override fun m1() = Unit // assertFullyCovered()
+    }
+
+    @JvmStatic
+    fun main(args: Array<String>) {
+        C().m1()
+        C().m2()
+    }
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDelegatesTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDelegatesTarget.kt
new file mode 100644
index 0000000..1d828ef
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinDelegatesTarget.kt
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin.targets
+
+/**
+ * This test target contains different delegates.
+ */
+object KotlinDelegatesTarget {
+
+    class DelegatedList : List<Int> by ArrayList() // assertFullyCovered()
+
+    @JvmStatic
+    fun main(args: Array<String>) {
+        DelegatedList()
+    }
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinElvisOperatorTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinElvisOperatorTarget.kt
index 5457433..c316b07 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinElvisOperatorTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinElvisOperatorTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinInlineTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinInlineTarget.kt
index e6344f5..a123449 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinInlineTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinInlineTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLambdaExpressionsTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLambdaExpressionsTarget.kt
new file mode 100644
index 0000000..0fc7caa
--- /dev/null
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLambdaExpressionsTarget.kt
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.kotlin.targets
+
+import org.jacoco.core.test.validation.targets.Stubs.*
+
+/**
+ * This test target contains different lambda expressions.
+ */
+object KotlinLambdaExpressionsTarget {
+
+    @JvmStatic
+    fun main(args: Array<String>) {
+
+        exec { // assertFullyCovered()
+            nop() // assertFullyCovered()
+        } // assertFullyCovered()
+
+        noexec { // assertFullyCovered()
+            nop() // assertNotCovered()
+        } // assertNotCovered()
+
+        noexec { nop() } // assertPartlyCovered()
+
+    }
+
+}
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLateinitTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLateinitTarget.kt
index 349a230..050fbb5 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLateinitTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinLateinitTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinNotNullOperatorTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinNotNullOperatorTarget.kt
index 91f5420..11204df 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinNotNullOperatorTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinNotNullOperatorTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCallOperatorTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCallOperatorTarget.kt
index d29e5eb..d59d31d 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCallOperatorTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCallOperatorTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCastTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCastTarget.kt
index ddcc7b0..7a4beae 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCastTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinSafeCastTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinTopLevelFunctionTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinTopLevelFunctionTarget.kt
index e9e5264..2e7d831 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinTopLevelFunctionTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinTopLevelFunctionTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinUnsafeCastOperatorTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinUnsafeCastOperatorTarget.kt
index aa493d7..7f9e79e 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinUnsafeCastOperatorTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinUnsafeCastOperatorTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinWhenExpressionTarget.kt b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinWhenExpressionTarget.kt
index 00ea5e2..09572d2 100644
--- a/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinWhenExpressionTarget.kt
+++ b/org.jacoco.core.test.validation.kotlin/src/org/jacoco/core/test/validation/kotlin/targets/KotlinWhenExpressionTarget.kt
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -29,8 +30,8 @@
     @Suppress("REDUNDANT_ELSE_IN_WHEN")
     private fun whenSealedRedundantElse(p: Sealed): Int = when (p) { // assertFullyCovered()
         is Sealed.Sealed1 -> 1 // assertFullyCovered(0, 2)
-        is Sealed.Sealed2 -> 2 // assertFullyCovered(1, 1)
-        else -> throw NoWhenBranchMatchedException() // assertNotCovered()
+        is Sealed.Sealed2 -> 2 // assertFullyCovered(0, 0)
+        else -> throw NoWhenBranchMatchedException() // assertEmpty()
     } // assertFullyCovered()
 
     private enum class Enum {
@@ -43,18 +44,33 @@
     } // assertFullyCovered()
 
     @Suppress("REDUNDANT_ELSE_IN_WHEN")
-    private fun whenEnumRedundantElse(p: Enum): Int = when (p) { // assertFullyCovered(1, 2)
+    private fun whenEnumRedundantElse(p: Enum): Int = when (p) { // assertFullyCovered(0, 2)
         Enum.A -> 1 // assertFullyCovered()
         Enum.B -> 2 // assertFullyCovered()
-        else -> throw NoWhenBranchMatchedException() // assertNotCovered()
+        else -> throw NoWhenBranchMatchedException() // assertEmpty()
     } // assertFullyCovered()
 
-    private fun whenString(p: String): Int = when (p) { // assertFullyCovered(0, 5)
+    private fun whenString(p: String): Int = when (p) { // assertFullyCovered(0, 7)
         "a" -> 1 // assertFullyCovered()
         "b" -> 2 // assertFullyCovered()
-        "\u0000a" -> 3 // assertFullyCovered()
-        "\u0000b" -> 4 // assertFullyCovered()
-        else -> 5 // assertFullyCovered()
+        "c" -> 3 // assertFullyCovered()
+        "\u0000a" -> 4 // assertFullyCovered()
+        "\u0000b" -> 5 // assertFullyCovered()
+        "\u0000c" -> 6 // assertFullyCovered()
+        else -> 7 // assertFullyCovered()
+    } // assertFullyCovered()
+
+    /**
+     * Unlike [whenString]
+     * in this example first case is the only case with biggest hashCode value.
+     */
+    private fun whenStringBiggestHashCodeFirst(p: String): Int = when (p) { // assertFullyCovered(0, 6)
+        "c" -> 1 // assertFullyCovered()
+        "b" -> 2 // assertFullyCovered()
+        "\u0000b" -> 3 // assertFullyCovered()
+        "a" -> 4 // assertFullyCovered()
+        "\u0000a" -> 5 // assertFullyCovered()
+        else -> 6 // assertFullyCovered()
     } // assertFullyCovered()
 
     @JvmStatic
@@ -74,8 +90,17 @@
         whenString("")
         whenString("a")
         whenString("b")
+        whenString("c")
         whenString("\u0000a")
         whenString("\u0000b")
+        whenString("\u0000c")
+
+        whenStringBiggestHashCodeFirst("")
+        whenStringBiggestHashCodeFirst("a")
+        whenStringBiggestHashCodeFirst("b")
+        whenStringBiggestHashCodeFirst("c")
+        whenStringBiggestHashCodeFirst("\u0000a")
+        whenStringBiggestHashCodeFirst("\u0000b")
     }
 
 }
diff --git a/org.jacoco.core.test.validation.scala/.classpath b/org.jacoco.core.test.validation.scala/.classpath
new file mode 100644
index 0000000..ebe550b
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/.classpath
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="src">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/org.jacoco.core.test.validation.scala/.project b/org.jacoco.core.test.validation.scala/.project
new file mode 100644
index 0000000..b742da8
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/.project
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.jacoco.core.test.validation.scala</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+	<linkedResources>
+		<link>
+			<name>.settings</name>
+			<type>2</type>
+			<locationURI>PARENT-1-PROJECT_LOC/org.jacoco.core.test/.settings</locationURI>
+		</link>
+	</linkedResources>
+</projectDescription>
diff --git a/org.jacoco.core.test.validation.scala/pom.xml b/org.jacoco.core.test.validation.scala/pom.xml
new file mode 100644
index 0000000..8df2e19
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2009, 2021 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.jacoco</groupId>
+    <artifactId>org.jacoco.core.test.validation</artifactId>
+    <version>0.8.7</version>
+    <relativePath>../org.jacoco.core.test.validation</relativePath>
+  </parent>
+
+  <artifactId>org.jacoco.core.test.validation.scala</artifactId>
+
+  <name>JaCoCo :: Test :: Core :: Validation Scala</name>
+
+  <properties>
+    <scala.version>2.13.4</scala.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>org.jacoco.core.test</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.scala-lang</groupId>
+      <artifactId>scala-library</artifactId>
+      <version>${scala.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>net.alchim31.maven</groupId>
+        <artifactId>scala-maven-plugin</artifactId>
+        <version>4.4.0</version>
+        <executions>
+          <execution>
+            <id>compile</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaAnonymousFunctionTest.java b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaAnonymousFunctionTest.java
new file mode 100644
index 0000000..2792e69
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaAnonymousFunctionTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.scala.targets.ScalaAnonymousFunctionTarget;
+
+/**
+ * Test of anonymous functions.
+ */
+public class ScalaAnonymousFunctionTest extends ValidationTestBase {
+
+	public ScalaAnonymousFunctionTest() {
+		super(ScalaAnonymousFunctionTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSingletonObjectTest.java b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSingletonObjectTest.java
new file mode 100644
index 0000000..45536a5
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSingletonObjectTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.scala.targets.ScalaSingletonObjectTarget;
+
+/**
+ * Test of singleton object.
+ */
+public class ScalaSingletonObjectTest extends ValidationTestBase {
+
+	public ScalaSingletonObjectTest() {
+		super(ScalaSingletonObjectTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSynchronizedTest.java b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSynchronizedTest.java
new file mode 100644
index 0000000..d028822
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/ScalaSynchronizedTest.java
@@ -0,0 +1,27 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala;
+
+import org.jacoco.core.test.validation.ValidationTestBase;
+import org.jacoco.core.test.validation.scala.targets.ScalaSynchronizedTarget;
+
+/**
+ * Test of synchronized block.
+ */
+public class ScalaSynchronizedTest extends ValidationTestBase {
+
+	public ScalaSynchronizedTest() {
+		super(ScalaSynchronizedTarget.class);
+	}
+
+}
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaAnonymousFunctionTarget.scala b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaAnonymousFunctionTarget.scala
new file mode 100644
index 0000000..020a9d5
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaAnonymousFunctionTarget.scala
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala.targets
+
+import org.jacoco.core.test.validation.targets.Stubs.{exec, noexec, nop}
+
+/**
+ * Test target for anonymous functions.
+ */
+object ScalaAnonymousFunctionTarget {
+
+  def main(args: Array[String]): Unit = {
+
+    exec(() => {
+      nop() // assertFullyCovered()
+    })
+
+    noexec(() => {
+      nop() // assertNotCovered()
+    })
+
+  }
+
+}
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSingletonObjectTarget.scala b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSingletonObjectTarget.scala
new file mode 100644
index 0000000..bf1e8cc
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSingletonObjectTarget.scala
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala.targets
+
+/**
+ * This test target is singleton object.
+ */
+object ScalaSingletonObjectTarget { // assertFullyCovered()
+
+  def main(args: Array[String]): Unit = { // assertFullyCovered()
+  } // assertEmpty()
+
+}
diff --git a/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSynchronizedTarget.scala b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSynchronizedTarget.scala
new file mode 100644
index 0000000..987a63c
--- /dev/null
+++ b/org.jacoco.core.test.validation.scala/src/org/jacoco/core/test/validation/scala/targets/ScalaSynchronizedTarget.scala
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation.scala.targets
+
+import org.jacoco.core.test.validation.targets.Stubs.nop
+
+/**
+ * Test target for synchronized block.
+ */
+object ScalaSynchronizedTarget {
+
+  private val lock: Object = new Object()
+
+  def main(args: Array[String]): Unit = {
+    nop()
+    lock.synchronized { // assertFullyCovered()
+      /* Without filter next line covered partly */
+      nop() // assertFullyCovered()
+    } // assertEmpty()
+    nop()
+  }
+
+}
diff --git a/org.jacoco.core.test.validation/pom.xml b/org.jacoco.core.test.validation/pom.xml
index 7d9abf3..a83c94d 100644
--- a/org.jacoco.core.test.validation/pom.xml
+++ b/org.jacoco.core.test.validation/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -16,7 +17,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
@@ -31,7 +32,10 @@
 
   <properties>
     <jacoco.skip>true</jacoco.skip>
-    <groovy.targetBytecode>${maven.compiler.target}</groovy.targetBytecode>
+
+    <!-- when bytecode.version not specified -->
+    <kotlin.compiler.jvmTarget>1.6</kotlin.compiler.jvmTarget>
+    <groovy.targetBytecode>1.8</groovy.targetBytecode>
   </properties>
 
   <profiles>
@@ -63,6 +67,9 @@
           <value>6</value>
         </property>
       </activation>
+      <properties>
+        <kotlin.compiler.jvmTarget>1.6</kotlin.compiler.jvmTarget>
+      </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
       </modules>
@@ -90,12 +97,12 @@
         </property>
       </activation>
       <properties>
-        <groovy.targetBytecode>1.7</groovy.targetBytecode>
+        <!-- Kotlin 1.5.0 doesn't support compilation into 1.7 -->
+        <kotlin.compiler.jvmTarget>1.6</kotlin.compiler.jvmTarget>
       </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
         <module>../org.jacoco.core.test.validation.java7</module>
-        <module>../org.jacoco.core.test.validation.groovy</module>
       </modules>
     </profile>
 
@@ -107,20 +114,29 @@
           <value>7</value>
         </property>
       </activation>
-      <properties>
-        <groovy.targetBytecode>1.7</groovy.targetBytecode>
-      </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
         <module>../org.jacoco.core.test.validation.java7</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>default</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
         <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
       </modules>
     </profile>
 
     <profile>
       <id>java8-bytecode</id>
       <activation>
-        <activeByDefault>true</activeByDefault>
         <property>
           <name>bytecode.version</name>
           <value>8</value>
@@ -135,6 +151,27 @@
         <module>../org.jacoco.core.test.validation.java7</module>
         <module>../org.jacoco.core.test.validation.java8</module>
         <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>java9-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>9</value>
+        </property>
+      </activation>
+      <properties>
+        <kotlin.compiler.jvmTarget>9</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>9</groovy.targetBytecode>
+      </properties>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
+        <module>../org.jacoco.core.test.validation.groovy</module>
       </modules>
     </profile>
 
@@ -147,7 +184,8 @@
         </property>
       </activation>
       <properties>
-        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
+        <kotlin.compiler.jvmTarget>10</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>10</groovy.targetBytecode>
       </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
@@ -166,13 +204,15 @@
         </property>
       </activation>
       <properties>
-        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
+        <kotlin.compiler.jvmTarget>11</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>11</groovy.targetBytecode>
       </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
         <module>../org.jacoco.core.test.validation.java7</module>
         <module>../org.jacoco.core.test.validation.java8</module>
         <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
       </modules>
     </profile>
 
@@ -185,13 +225,118 @@
         </property>
       </activation>
       <properties>
-        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
+        <kotlin.compiler.jvmTarget>12</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>12</groovy.targetBytecode>
       </properties>
       <modules>
         <module>../org.jacoco.core.test.validation.kotlin</module>
         <module>../org.jacoco.core.test.validation.java7</module>
         <module>../org.jacoco.core.test.validation.java8</module>
         <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>java14-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>14</value>
+        </property>
+      </activation>
+      <properties>
+        <kotlin.compiler.jvmTarget>14</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>14</groovy.targetBytecode>
+        <!-- see respective profile in org.jacoco.build about this override -->
+        <maven.compiler.source>14</maven.compiler.source>
+        <maven.compiler.target>14</maven.compiler.target>
+      </properties>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
+        <module>../org.jacoco.core.test.validation.java14</module>
+        <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>java15-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>15</value>
+        </property>
+      </activation>
+      <properties>
+        <kotlin.compiler.jvmTarget>15</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>15</groovy.targetBytecode>
+        <!-- see respective profile in org.jacoco.build about this override -->
+        <maven.compiler.source>15</maven.compiler.source>
+        <maven.compiler.target>15</maven.compiler.target>
+      </properties>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
+        <module>../org.jacoco.core.test.validation.java14</module>
+        <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>java16-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>16</value>
+        </property>
+      </activation>
+      <properties>
+        <kotlin.compiler.jvmTarget>16</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>16</groovy.targetBytecode>
+        <!-- see respective profile in org.jacoco.build about this override -->
+        <maven.compiler.source>16</maven.compiler.source>
+        <maven.compiler.target>16</maven.compiler.target>
+      </properties>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
+        <module>../org.jacoco.core.test.validation.java14</module>
+        <module>../org.jacoco.core.test.validation.groovy</module>
+        <module>../org.jacoco.core.test.validation.scala</module>
+      </modules>
+    </profile>
+
+    <profile>
+      <id>java17-bytecode</id>
+      <activation>
+        <property>
+          <name>bytecode.version</name>
+          <value>17</value>
+        </property>
+      </activation>
+      <properties>
+        <!-- Kotlin 1.5.0 doesn't support compilation into 17 -->
+        <kotlin.compiler.jvmTarget>16</kotlin.compiler.jvmTarget>
+        <groovy.targetBytecode>17</groovy.targetBytecode>
+        <!-- see respective profile in org.jacoco.build about this override -->
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+      </properties>
+      <modules>
+        <module>../org.jacoco.core.test.validation.kotlin</module>
+        <module>../org.jacoco.core.test.validation.java7</module>
+        <module>../org.jacoco.core.test.validation.java8</module>
+        <module>../org.jacoco.core.test.validation.java14</module>
+        <!-- Groovy 3.0.7 does not support Java 17
+        <module>../org.jacoco.core.test.validation.groovy</module>
+        -->
+        <module>../org.jacoco.core.test.validation.scala</module>
       </modules>
     </profile>
   </profiles>
diff --git a/org.jacoco.core.test/.settings/org.eclipse.jdt.ui.prefs b/org.jacoco.core.test/.settings/org.eclipse.jdt.ui.prefs
index ec625f5..815f01e 100644
--- a/org.jacoco.core.test/.settings/org.eclipse.jdt.ui.prefs
+++ b/org.jacoco.core.test/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Thu Jul 02 08:45:19 CEST 2009

 eclipse.preferences.version=1

 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true

 formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile

@@ -10,15 +9,18 @@
 sp_cleanup.add_missing_methods=false

 sp_cleanup.add_missing_nls_tags=false

 sp_cleanup.add_missing_override_annotations=true

+sp_cleanup.add_missing_override_annotations_interface_methods=false

 sp_cleanup.add_serial_version_id=false

 sp_cleanup.always_use_blocks=true

 sp_cleanup.always_use_parentheses_in_expressions=false

 sp_cleanup.always_use_this_for_non_static_field_access=false

 sp_cleanup.always_use_this_for_non_static_method_access=false

+sp_cleanup.convert_functional_interfaces=false

 sp_cleanup.convert_to_enhanced_for_loop=false

 sp_cleanup.correct_indentation=false

 sp_cleanup.format_source_code=true

 sp_cleanup.format_source_code_changes_only=false

+sp_cleanup.insert_inferred_type_arguments=false

 sp_cleanup.make_local_variable_final=false

 sp_cleanup.make_parameters_final=false

 sp_cleanup.make_private_fields_final=true

@@ -31,10 +33,13 @@
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false

 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true

 sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true

-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false

+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true

 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false

 sp_cleanup.remove_private_constructors=true

-sp_cleanup.remove_trailing_whitespaces=false

+sp_cleanup.remove_redundant_modifiers=false

+sp_cleanup.remove_redundant_semicolons=false

+sp_cleanup.remove_redundant_type_arguments=false

+sp_cleanup.remove_trailing_whitespaces=true

 sp_cleanup.remove_trailing_whitespaces_all=true

 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false

 sp_cleanup.remove_unnecessary_casts=true

@@ -47,10 +52,14 @@
 sp_cleanup.remove_unused_private_types=true

 sp_cleanup.sort_members=false

 sp_cleanup.sort_members_all=false

+sp_cleanup.use_anonymous_class_creation=false

+sp_cleanup.use_autoboxing=false

 sp_cleanup.use_blocks=false

 sp_cleanup.use_blocks_only_for_return_and_throw=false

+sp_cleanup.use_lambda=false

 sp_cleanup.use_parentheses_in_expressions=false

 sp_cleanup.use_this_for_non_static_field_access=false

 sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true

 sp_cleanup.use_this_for_non_static_method_access=false

 sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true

+sp_cleanup.use_unboxing=false

diff --git a/org.jacoco.core.test/about.html b/org.jacoco.core.test/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.core.test/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.core.test/pom.xml b/org.jacoco.core.test/pom.xml
index 843ebc8..e79b62c 100644
--- a/org.jacoco.core.test/pom.xml
+++ b/org.jacoco.core.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/JaCoCoTest.java b/org.jacoco.core.test/src/org/jacoco/core/JaCoCoTest.java
index bb37e06..4d1f549 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/JaCoCoTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/JaCoCoTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
index 1e95a5d..5bebb12 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/AnalyzerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -22,23 +23,24 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
-import java.util.jar.JarInputStream;
-import java.util.jar.Pack200;
 import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 import org.jacoco.core.data.ExecutionDataStore;
+import org.jacoco.core.internal.Pack200Streams;
 import org.jacoco.core.internal.data.CRC64;
 import org.jacoco.core.test.TargetLoader;
+import org.junit.AssumptionViolatedException;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -106,7 +108,7 @@
 	@Test
 	public void should_not_modify_class_bytes_to_support_next_version()
 			throws Exception {
-		final byte[] originalBytes = createClass(Opcodes.V12 + 1);
+		final byte[] originalBytes = createClass(Opcodes.V16);
 		final byte[] bytes = new byte[originalBytes.length];
 		System.arraycopy(originalBytes, 0, bytes, 0, originalBytes.length);
 		final long expectedClassId = CRC64.classId(bytes);
@@ -124,6 +126,23 @@
 		return cw.toByteArray();
 	}
 
+	/**
+	 * @see #analyzeAll_should_throw_exception_for_unsupported_class_file_version()
+	 */
+	@Test
+	public void analyzeClass_should_throw_exception_for_unsupported_class_file_version() {
+		final byte[] bytes = createClass(Opcodes.V16 + 2);
+		try {
+			analyzer.analyzeClass(bytes, "UnsupportedVersion");
+			fail("exception expected");
+		} catch (IOException e) {
+			assertEquals("Error while analyzing UnsupportedVersion.",
+					e.getMessage());
+			assertEquals("Unsupported class file major version 62",
+					e.getCause().getMessage());
+		}
+	}
+
 	@Test
 	public void testAnalyzeClassFromStream() throws IOException {
 		analyzer.analyzeClass(TargetLoader.getClassData(AnalyzerTest.class),
@@ -182,8 +201,7 @@
 	}
 
 	/**
-	 * Triggers exception in
-	 * {@link Analyzer#analyzeClass(InputStream, String)}.
+	 * Triggers exception in {@link Analyzer#analyzeClass(InputStream, String)}.
 	 */
 	@Test
 	public void testAnalyzeClass_BrokenStream() throws IOException {
@@ -195,6 +213,24 @@
 		}
 	}
 
+	/**
+	 * @see #analyzeClass_should_throw_exception_for_unsupported_class_file_version()
+	 */
+	@Test
+	public void analyzeAll_should_throw_exception_for_unsupported_class_file_version() {
+		final byte[] bytes = createClass(Opcodes.V16 + 2);
+		try {
+			analyzer.analyzeAll(new ByteArrayInputStream(bytes),
+					"UnsupportedVersion");
+			fail("exception expected");
+		} catch (IOException e) {
+			assertEquals("Error while analyzing UnsupportedVersion.",
+					e.getMessage());
+			assertEquals("Unsupported class file major version 62",
+					e.getCause().getMessage());
+		}
+	}
+
 	@Test
 	public void testAnalyzeAll_Class() throws IOException {
 		final int count = analyzer.analyzeAll(
@@ -207,8 +243,8 @@
 	public void testAnalyzeAll_Zip() throws IOException {
 		final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
 		final ZipOutputStream zip = new ZipOutputStream(buffer);
-		zip.putNextEntry(new ZipEntry(
-				"org/jacoco/core/analysis/AnalyzerTest.class"));
+		zip.putNextEntry(
+				new ZipEntry("org/jacoco/core/analysis/AnalyzerTest.class"));
 		zip.write(TargetLoader.getClassDataAsBytes(AnalyzerTest.class));
 		zip.finish();
 		final int count = analyzer.analyzeAll(
@@ -259,22 +295,27 @@
 
 	@Test
 	public void testAnalyzeAll_Pack200() throws IOException {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
 		final ByteArrayOutputStream zipbuffer = new ByteArrayOutputStream();
 		final ZipOutputStream zip = new ZipOutputStream(zipbuffer);
-		zip.putNextEntry(new ZipEntry(
-				"org/jacoco/core/analysis/AnalyzerTest.class"));
+		zip.putNextEntry(
+				new ZipEntry("org/jacoco/core/analysis/AnalyzerTest.class"));
 		zip.write(TargetLoader.getClassDataAsBytes(AnalyzerTest.class));
 		zip.finish();
 
 		final ByteArrayOutputStream pack200buffer = new ByteArrayOutputStream();
 		GZIPOutputStream gzipOutput = new GZIPOutputStream(pack200buffer);
-		Pack200.newPacker().pack(
-				new JarInputStream(new ByteArrayInputStream(
-						zipbuffer.toByteArray())), gzipOutput);
+		Pack200Streams.pack(zipbuffer.toByteArray(), gzipOutput);
 		gzipOutput.finish();
 
-		final int count = analyzer.analyzeAll(new ByteArrayInputStream(
-				pack200buffer.toByteArray()), "Test");
+		final int count = analyzer.analyzeAll(
+				new ByteArrayInputStream(pack200buffer.toByteArray()), "Test");
 		assertEquals(1, count);
 		assertClasses("org/jacoco/core/analysis/AnalyzerTest");
 	}
@@ -298,8 +339,8 @@
 
 	@Test
 	public void testAnalyzeAll_Empty() throws IOException {
-		final int count = analyzer.analyzeAll(new ByteArrayInputStream(
-				new byte[0]), "Test");
+		final int count = analyzer
+				.analyzeAll(new ByteArrayInputStream(new byte[0]), "Test");
 		assertEquals(0, count);
 		assertEquals(Collections.emptyMap(), classes);
 	}
@@ -345,12 +386,12 @@
 
 	/**
 	 * With JDK 5 triggers exception in
-	 * {@link Analyzer#nextEntry(ZipInputStream, String)},
-	 * i.e. message will contain only "broken.zip".
+	 * {@link Analyzer#nextEntry(ZipInputStream, String)}, i.e. message will
+	 * contain only "broken.zip".
 	 *
 	 * With JDK > 5 triggers exception in
-	 * {@link Analyzer#analyzeAll(java.io.InputStream, String)},
-	 * i.e. message will contain only "broken.zip@brokenentry.txt".
+	 * {@link Analyzer#analyzeAll(java.io.InputStream, String)}, i.e. message
+	 * will contain only "broken.zip@brokenentry.txt".
 	 */
 	@Test
 	public void testAnalyzeAll_BrokenZipEntry() throws IOException {
@@ -377,8 +418,8 @@
 	public void testAnalyzeAll_BrokenClassFileInZip() throws IOException {
 		final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
 		final ZipOutputStream zip = new ZipOutputStream(buffer);
-		zip.putNextEntry(new ZipEntry(
-				"org/jacoco/core/analysis/AnalyzerTest.class"));
+		zip.putNextEntry(
+				new ZipEntry("org/jacoco/core/analysis/AnalyzerTest.class"));
 		final byte[] brokenclass = TargetLoader
 				.getClassDataAsBytes(AnalyzerTest.class);
 		brokenclass[10] = 0x23;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
index 0523abe..d488117 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CounterComparatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -110,12 +111,14 @@
 
 	private void assertCmpLess(Comparator<ICounter> cmp, int missed1,
 			int covered1, int missed2, int covered2) {
-		assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) < 0);
+		assertTrue(cmp.compare(ctr(missed1, covered1),
+				ctr(missed2, covered2)) < 0);
 	}
 
 	private void assertCmpGreater(Comparator<ICounter> cmp, int missed1,
 			int covered1, int missed2, int covered2) {
-		assertTrue(cmp.compare(ctr(missed1, covered1), ctr(missed2, covered2)) > 0);
+		assertTrue(cmp.compare(ctr(missed1, covered1),
+				ctr(missed2, covered2)) > 0);
 	}
 
 	private CounterImpl ctr(int missed, int covered) {
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
index f29bb74..b89582e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageBuilderTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -141,13 +142,13 @@
 
 	@Test
 	public void testCreateSourceFile() {
-		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
 		addClass(123L, false, "Sample", "Sample.java", method1);
 
-		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
 		addClass(234L, false, "Second", "Sample.java", method2);
 
@@ -162,13 +163,13 @@
 
 	@Test
 	public void testCreateSourceFileDuplicateClassNameIdentical() {
-		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
 		addClass(123L, false, "Sample", "Sample.java", method1);
 
-		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
 		addClass(123L, false, "Sample", "Sample.java", method2);
 
@@ -183,18 +184,18 @@
 
 	@Test
 	public void testGetBundle() {
-		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method1 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
 		addClass(1, false, "org/jacoco/examples/Sample1", null, method1);
 
-		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method2 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 6);
 		addClass(2, false, "org/jacoco/examples/Sample2", null, method2);
 
-		final MethodCoverageImpl method3 = new MethodCoverageImpl("doit",
-				"()V", null);
+		final MethodCoverageImpl method3 = new MethodCoverageImpl("doit", "()V",
+				null);
 		method3.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
 		addClass(3, false, "Sample3", null, method3);
 
@@ -211,8 +212,7 @@
 		IPackageCoverage p1 = packagesByName.get("org/jacoco/examples");
 		assertNotNull(p1);
 		assertEquals(
-				new HashSet<String>(Arrays.asList(
-						"org/jacoco/examples/Sample1",
+				new HashSet<String>(Arrays.asList("org/jacoco/examples/Sample1",
 						"org/jacoco/examples/Sample2")),
 				getNames(p1.getClasses()));
 
@@ -236,9 +236,10 @@
 		m.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 3);
 		addClass(3, false, "Sample3", null, m);
 
-		final Set<String> actual = getNames(coverageBuilder.getNoMatchClasses());
-		final Set<String> expected = new HashSet<String>(Arrays.asList(
-				"Sample1", "Sample2"));
+		final Set<String> actual = getNames(
+				coverageBuilder.getNoMatchClasses());
+		final Set<String> expected = new HashSet<String>(
+				Arrays.asList("Sample1", "Sample2"));
 
 		assertEquals(expected, actual);
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
index be1afdf..0777bc9 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/CoverageNodeImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -52,7 +53,8 @@
 	public void testIncrement() {
 		CoverageNodeImpl parent = new CoverageNodeImpl(ElementType.GROUP,
 				"sample");
-		ICoverageNode child = new CoverageNodeImpl(ElementType.GROUP, "sample") {
+		ICoverageNode child = new CoverageNodeImpl(ElementType.GROUP,
+				"sample") {
 			{
 				instructionCounter = CounterImpl.getInstance(1, 41);
 				branchCounter = CounterImpl.getInstance(10, 15);
@@ -67,8 +69,10 @@
 				parent.getCounter(INSTRUCTION));
 		assertEquals(CounterImpl.getInstance(1, 41),
 				parent.getInstructionCounter());
-		assertEquals(CounterImpl.getInstance(10, 15), parent.getCounter(BRANCH));
-		assertEquals(CounterImpl.getInstance(10, 15), parent.getBranchCounter());
+		assertEquals(CounterImpl.getInstance(10, 15),
+				parent.getCounter(BRANCH));
+		assertEquals(CounterImpl.getInstance(10, 15),
+				parent.getBranchCounter());
 		assertEquals(CounterImpl.getInstance(5, 3), parent.getCounter(LINE));
 		assertEquals(CounterImpl.getInstance(5, 3), parent.getLineCounter());
 		assertEquals(CounterImpl.getInstance(4, 2),
@@ -85,12 +89,14 @@
 	public void testIncrementCollection() {
 		CoverageNodeImpl parent = new CoverageNodeImpl(ElementType.GROUP,
 				"sample");
-		ICoverageNode child1 = new CoverageNodeImpl(ElementType.GROUP, "sample") {
+		ICoverageNode child1 = new CoverageNodeImpl(ElementType.GROUP,
+				"sample") {
 			{
 				branchCounter = CounterImpl.getInstance(5, 2);
 			}
 		};
-		ICoverageNode child2 = new CoverageNodeImpl(ElementType.GROUP, "sample") {
+		ICoverageNode child2 = new CoverageNodeImpl(ElementType.GROUP,
+				"sample") {
 			{
 				branchCounter = CounterImpl.getInstance(3, 3);
 			}
@@ -120,7 +126,8 @@
 		assertEquals(CounterImpl.getInstance(4, 4),
 				copy.getInstructionCounter());
 		assertEquals(CounterImpl.getInstance(5, 5), copy.getLineCounter());
-		assertEquals(CounterImpl.getInstance(6, 6), copy.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(6, 6),
+				copy.getComplexityCounter());
 	}
 
 	@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
index 97c8b2f..f3eca2c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/analysis/NodeComparatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -34,9 +35,9 @@
 		ICoverageNode d3 = new MockNode(30);
 		ICoverageNode d4 = new MockNode(60);
 		ICoverageNode d5 = new MockNode(99);
-		final List<ICoverageNode> result = CounterComparator.TOTALITEMS.on(
-				CounterEntity.INSTRUCTION).sort(
-				Arrays.asList(d3, d5, d1, d4, d2));
+		final List<ICoverageNode> result = CounterComparator.TOTALITEMS
+				.on(CounterEntity.INSTRUCTION)
+				.sort(Arrays.asList(d3, d5, d1, d4, d2));
 		assertEquals(Arrays.asList(d1, d2, d3, d4, d5), result);
 	}
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataReaderWriterTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataReaderWriterTest.java
index f337994..2cc2c97 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataReaderWriterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataReaderWriterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -151,8 +152,8 @@
 	@Test(expected = IOException.class)
 	public void testMissingHeader() throws IOException {
 		buffer.reset();
-		writer.visitClassExecution(new ExecutionData(Long.MIN_VALUE, "Sample",
-				createData(8)));
+		writer.visitClassExecution(
+				new ExecutionData(Long.MIN_VALUE, "Sample", createData(8)));
 		createReaderWithVisitors().read();
 	}
 
@@ -164,8 +165,8 @@
 
 	@Test(expected = EOFException.class)
 	public void testTruncatedFile() throws IOException {
-		writer.visitClassExecution(new ExecutionData(Long.MIN_VALUE, "Sample",
-				createData(8)));
+		writer.visitClassExecution(
+				new ExecutionData(Long.MIN_VALUE, "Sample", createData(8)));
 		final byte[] content = buffer.toByteArray();
 		buffer.reset();
 		buffer.write(content, 0, content.length - 1);
@@ -216,16 +217,16 @@
 
 	@Test(expected = IOException.class)
 	public void testNoExecutionDataVisitor() throws IOException {
-		writer.visitClassExecution(new ExecutionData(Long.MIN_VALUE, "Sample",
-				createData(8)));
+		writer.visitClassExecution(
+				new ExecutionData(Long.MIN_VALUE, "Sample", createData(8)));
 		createReader().read();
 	}
 
 	@Test
 	public void testMinClassId() throws IOException {
 		final boolean[] data = createData(8);
-		writer.visitClassExecution(new ExecutionData(Long.MIN_VALUE, "Sample",
-				data));
+		writer.visitClassExecution(
+				new ExecutionData(Long.MIN_VALUE, "Sample", data));
 		assertFalse(createReaderWithVisitors().read());
 		assertArrayEquals(data, store.get(Long.MIN_VALUE).getProbes());
 	}
@@ -233,8 +234,8 @@
 	@Test
 	public void testMaxClassId() throws IOException {
 		final boolean[] data = createData(8);
-		writer.visitClassExecution(new ExecutionData(Long.MAX_VALUE, "Sample",
-				data));
+		writer.visitClassExecution(
+				new ExecutionData(Long.MAX_VALUE, "Sample", data));
 		assertFalse(createReaderWithVisitors().read());
 		assertArrayEquals(data, store.get(Long.MAX_VALUE).getProbes());
 	}
@@ -294,7 +295,8 @@
 			}
 		});
 		broken[0] = true;
-		writer.visitClassExecution(new ExecutionData(3, "Sample", createData(1)));
+		writer.visitClassExecution(
+				new ExecutionData(3, "Sample", createData(1)));
 	}
 
 	private ExecutionDataReader createReaderWithVisitors() throws IOException {
@@ -327,8 +329,8 @@
 	}
 
 	protected ExecutionDataReader createReader() throws IOException {
-		return new ExecutionDataReader(new ByteArrayInputStream(
-				buffer.toByteArray()));
+		return new ExecutionDataReader(
+				new ByteArrayInputStream(buffer.toByteArray()));
 	}
 
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
index a54544d..a34f067 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataStoreTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -205,8 +206,8 @@
 	}
 
 	@Test
-	public void testReset() throws InstantiationException,
-			IllegalAccessException {
+	public void testReset()
+			throws InstantiationException, IllegalAccessException {
 		final boolean[] data1 = new boolean[] { true, true, false };
 		store.put(new ExecutionData(1000, "Sample", data1));
 		store.reset();
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataTest.java
index 12773df..be57a63 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/ExecutionDataTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -45,8 +46,8 @@
 
 	@Test
 	public void testReset() {
-		final ExecutionData e = new ExecutionData(5, "Example", new boolean[] {
-				true, false, true });
+		final ExecutionData e = new ExecutionData(5, "Example",
+				new boolean[] { true, false, true });
 		e.reset();
 		assertFalse(e.getProbes()[0]);
 		assertFalse(e.getProbes()[1]);
@@ -71,10 +72,10 @@
 
 	@Test
 	public void testMerge() {
-		final ExecutionData a = new ExecutionData(5, "Example", new boolean[] {
-				false, true, false, true });
-		final ExecutionData b = new ExecutionData(5, "Example", new boolean[] {
-				false, false, true, true });
+		final ExecutionData a = new ExecutionData(5, "Example",
+				new boolean[] { false, true, false, true });
+		final ExecutionData b = new ExecutionData(5, "Example",
+				new boolean[] { false, false, true, true });
 		a.merge(b);
 
 		// b is merged into a:
@@ -92,10 +93,10 @@
 
 	@Test
 	public void testMergeSubtract() {
-		final ExecutionData a = new ExecutionData(5, "Example", new boolean[] {
-				false, true, false, true });
-		final ExecutionData b = new ExecutionData(5, "Example", new boolean[] {
-				false, false, true, true });
+		final ExecutionData a = new ExecutionData(5, "Example",
+				new boolean[] { false, true, false, true });
+		final ExecutionData b = new ExecutionData(5, "Example",
+				new boolean[] { false, false, true, true });
 		a.merge(b, false);
 
 		// b is subtracted from a:
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/IncompatibleExecDataVersionExceptionTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/IncompatibleExecDataVersionExceptionTest.java
index d4179e0..de1607d 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/IncompatibleExecDataVersionExceptionTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/IncompatibleExecDataVersionExceptionTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoStoreTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoStoreTest.java
index 508d4d9..7a2ca49 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoStoreTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoStoreTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoTest.java b/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoTest.java
index 568c4fa..dfd7c98 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/data/SessionInfoTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -35,15 +36,12 @@
 
 	@Test
 	public void testCompare() {
-		assertEquals(0,
-				new SessionInfo("id", 1000, 2000).compareTo(new SessionInfo(
-						"id", 1234, 2000)));
-		assertEquals(-1,
-				new SessionInfo("id", 3333, 1999).compareTo(new SessionInfo(
-						"id", 1234, 2000)));
-		assertEquals(+1,
-				new SessionInfo("id", 1234, 2001).compareTo(new SessionInfo(
-						"id", 2222, 2000)));
+		assertEquals(0, new SessionInfo("id", 1000, 2000)
+				.compareTo(new SessionInfo("id", 1234, 2000)));
+		assertEquals(-1, new SessionInfo("id", 3333, 1999)
+				.compareTo(new SessionInfo("id", 1234, 2000)));
+		assertEquals(+1, new SessionInfo("id", 1234, 2001)
+				.compareTo(new SessionInfo("id", 2222, 2000)));
 	}
 
 	@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java
index 9a9bd55..264c23a 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/instr/ClassFileVersionsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.instr;
 
@@ -26,6 +27,10 @@
 import static org.objectweb.asm.Opcodes.V10;
 import static org.objectweb.asm.Opcodes.V11;
 import static org.objectweb.asm.Opcodes.V12;
+import static org.objectweb.asm.Opcodes.V13;
+import static org.objectweb.asm.Opcodes.V14;
+import static org.objectweb.asm.Opcodes.V15;
+import static org.objectweb.asm.Opcodes.V16;
 import static org.objectweb.asm.Opcodes.V1_1;
 import static org.objectweb.asm.Opcodes.V1_2;
 import static org.objectweb.asm.Opcodes.V1_3;
@@ -116,7 +121,22 @@
 
 	@Test
 	public void test_13() throws IOException {
-		testVersion(V12 + 1, true);
+		testVersion(V13, true);
+	}
+
+	@Test
+	public void test_14() throws IOException {
+		testVersion(V14, true);
+	}
+
+	@Test
+	public void test_15() throws IOException {
+		testVersion(V15, true);
+	}
+
+	@Test
+	public void test_16() throws IOException {
+		testVersion(V16, true);
 	}
 
 	private void testVersion(int version, boolean frames) throws IOException {
@@ -167,7 +187,7 @@
 	/**
 	 * Creates a class that requires a frame before the return statement. Also
 	 * for this class instrumentation should insert another frame.
-	 * 
+	 *
 	 * <code><pre>
 	 * public class Sample {
 	 *   public Sample(boolean b){
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
index d5104bc..a3a4906 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/instr/InstrumenterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.instr;
 
@@ -25,9 +26,7 @@
 import java.io.OutputStream;
 import java.io.Serializable;
 import java.util.Arrays;
-import java.util.jar.JarInputStream;
-import java.util.jar.JarOutputStream;
-import java.util.jar.Pack200;
+import java.util.zip.CRC32;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
@@ -35,10 +34,12 @@
 import java.util.zip.ZipOutputStream;
 
 import org.jacoco.core.analysis.AnalyzerTest;
+import org.jacoco.core.internal.Pack200Streams;
 import org.jacoco.core.internal.data.CRC64;
 import org.jacoco.core.internal.instr.InstrSupport;
 import org.jacoco.core.runtime.IExecutionDataAccessorGenerator;
 import org.jacoco.core.test.TargetLoader;
+import org.junit.AssumptionViolatedException;
 import org.junit.Before;
 import org.junit.Test;
 import org.objectweb.asm.ClassWriter;
@@ -98,7 +99,7 @@
 	@Test
 	public void should_not_modify_class_bytes_to_support_next_version()
 			throws Exception {
-		final byte[] originalBytes = createClass(Opcodes.V12 + 1);
+		final byte[] originalBytes = createClass(Opcodes.V16);
 		final byte[] bytes = new byte[originalBytes.length];
 		System.arraycopy(originalBytes, 0, bytes, 0, originalBytes.length);
 		final long expectedClassId = CRC64.classId(bytes);
@@ -116,6 +117,23 @@
 		return cw.toByteArray();
 	}
 
+	/**
+	 * @see #instrumentAll_should_throw_exception_for_unsupported_class_file_version()
+	 */
+	@Test
+	public void instrument_should_throw_exception_for_unsupported_class_file_version() {
+		final byte[] bytes = createClass(Opcodes.V16 + 2);
+		try {
+			instrumenter.instrument(bytes, "UnsupportedVersion");
+			fail("exception expected");
+		} catch (final IOException e) {
+			assertEquals("Error while instrumenting UnsupportedVersion.",
+					e.getMessage());
+			assertEquals("Unsupported class file major version 62",
+					e.getCause().getMessage());
+		}
+	}
+
 	@Test
 	public void testInstrumentClass() throws Exception {
 		byte[] bytes = instrumenter.instrument(
@@ -196,11 +214,29 @@
 		new ObjectOutputStream(buffer).writeObject(obj1);
 
 		// Deserialize with original class definition:
-		Object obj2 = new ObjectInputStream(new ByteArrayInputStream(
-				buffer.toByteArray())).readObject();
+		Object obj2 = new ObjectInputStream(
+				new ByteArrayInputStream(buffer.toByteArray())).readObject();
 		assertEquals("Hello42", obj2.toString());
 	}
 
+	/**
+	 * @see #instrument_should_throw_exception_for_unsupported_class_file_version()
+	 */
+	@Test
+	public void instrumentAll_should_throw_exception_for_unsupported_class_file_version() {
+		final byte[] bytes = createClass(Opcodes.V16 + 2);
+		try {
+			instrumenter.instrumentAll(new ByteArrayInputStream(bytes),
+					new ByteArrayOutputStream(), "UnsupportedVersion");
+			fail("exception expected");
+		} catch (final IOException e) {
+			assertEquals("Error while instrumenting UnsupportedVersion.",
+					e.getMessage());
+			assertEquals("Unsupported class file major version 62",
+					e.getCause().getMessage());
+		}
+	}
+
 	@Test
 	public void testInstrumentAll_Class() throws IOException {
 		InputStream in = TargetLoader.getClassData(getClass());
@@ -215,18 +251,38 @@
 	public void testInstrumentAll_Zip() throws IOException {
 		ByteArrayOutputStream buffer = new ByteArrayOutputStream();
 		ZipOutputStream zipout = new ZipOutputStream(buffer);
-		zipout.putNextEntry(new ZipEntry("Test.class"));
+
+		// Compressed Entry
+		ZipEntry entry = new ZipEntry("TestCompressed.class");
+		entry.setMethod(ZipEntry.DEFLATED);
+		zipout.putNextEntry(entry);
 		zipout.write(TargetLoader.getClassDataAsBytes(getClass()));
+
+		// Uncompressed Entry
+		entry = new ZipEntry("TestUncompressed.class");
+		entry.setMethod(ZipEntry.STORED);
+		entry.setSize(TargetLoader.getClassDataAsBytes(getClass()).length);
+		CRC32 crc = new CRC32();
+		crc.update(TargetLoader.getClassDataAsBytes(getClass()));
+		entry.setCrc(crc.getValue());
+		zipout.putNextEntry(entry);
+		zipout.write(TargetLoader.getClassDataAsBytes(getClass()));
+
 		zipout.finish();
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
 
 		int count = instrumenter.instrumentAll(
 				new ByteArrayInputStream(buffer.toByteArray()), out, "Test");
 
-		assertEquals(1, count);
-		ZipInputStream zipin = new ZipInputStream(new ByteArrayInputStream(
-				out.toByteArray()));
-		assertEquals("Test.class", zipin.getNextEntry().getName());
+		assertEquals(2, count);
+		ZipInputStream zipin = new ZipInputStream(
+				new ByteArrayInputStream(out.toByteArray()));
+		entry = zipin.getNextEntry();
+		assertEquals("TestCompressed.class", entry.getName());
+		assertEquals(ZipEntry.DEFLATED, entry.getMethod());
+		entry = zipin.getNextEntry();
+		assertEquals("TestUncompressed.class", entry.getName());
+		assertEquals(ZipEntry.STORED, entry.getMethod());
 		assertNull(zipin.getNextEntry());
 	}
 
@@ -362,6 +418,13 @@
 
 	@Test
 	public void testInstrumentAll_Pack200() throws IOException {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
 		ByteArrayOutputStream jarbuffer = new ByteArrayOutputStream();
 		ZipOutputStream zipout = new ZipOutputStream(jarbuffer);
 		zipout.putNextEntry(new ZipEntry("Test.class"));
@@ -370,23 +433,18 @@
 
 		ByteArrayOutputStream pack200buffer = new ByteArrayOutputStream();
 		GZIPOutputStream gzipOutput = new GZIPOutputStream(pack200buffer);
-		Pack200.newPacker().pack(
-				new JarInputStream(new ByteArrayInputStream(
-						jarbuffer.toByteArray())), gzipOutput);
+		Pack200Streams.pack(jarbuffer.toByteArray(), gzipOutput);
 		gzipOutput.finish();
 
 		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		int count = instrumenter.instrumentAll(new ByteArrayInputStream(
-				pack200buffer.toByteArray()), out, "Test");
-
-		jarbuffer.reset();
-		Pack200.newUnpacker()
-				.unpack(new GZIPInputStream(new ByteArrayInputStream(
-						out.toByteArray())), new JarOutputStream(jarbuffer));
+		int count = instrumenter.instrumentAll(
+				new ByteArrayInputStream(pack200buffer.toByteArray()), out,
+				"Test");
 
 		assertEquals(1, count);
-		ZipInputStream zipin = new ZipInputStream(new ByteArrayInputStream(
-				jarbuffer.toByteArray()));
+		ZipInputStream zipin = new ZipInputStream(
+				Pack200Streams.unpack(new GZIPInputStream(
+						new ByteArrayInputStream(out.toByteArray()))));
 		assertEquals("Test.class", zipin.getNextEntry().getName());
 		assertNull(zipin.getNextEntry());
 	}
@@ -433,8 +491,8 @@
 				new ByteArrayInputStream(buffer.toByteArray()), out, "Test");
 
 		assertEquals(0, count);
-		ZipInputStream zipin = new ZipInputStream(new ByteArrayInputStream(
-				out.toByteArray()));
+		ZipInputStream zipin = new ZipInputStream(
+				new ByteArrayInputStream(out.toByteArray()));
 		assertEquals("META-INF/MANIFEST.MF", zipin.getNextEntry().getName());
 		assertNull(zipin.getNextEntry());
 	}
@@ -452,8 +510,8 @@
 				new ByteArrayInputStream(buffer.toByteArray()), out, "Test");
 
 		assertEquals(0, count);
-		ZipInputStream zipin = new ZipInputStream(new ByteArrayInputStream(
-				out.toByteArray()));
+		ZipInputStream zipin = new ZipInputStream(
+				new ByteArrayInputStream(out.toByteArray()));
 		assertEquals("META-INF/ALIAS.SF", zipin.getNextEntry().getName());
 		assertNull(zipin.getNextEntry());
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/MethodRecorder.java b/org.jacoco.core.test/src/org/jacoco/core/instr/MethodRecorder.java
index 49a88be..2f9f58f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/instr/MethodRecorder.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/instr/MethodRecorder.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.instr;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/instr/ResizeInstructionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/instr/ResizeInstructionsTest.java
index 1a8137c..d162631 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/instr/ResizeInstructionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/instr/ResizeInstructionsTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -131,7 +132,7 @@
 	/**
 	 * Adds code that requires
 	 * {@link ClassWriter#getCommonSuperClass(String, String)}.
-	 * 
+	 *
 	 * <pre>
 	 * Object o = this;
 	 * while (true) {
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/ContentTypeDetectorTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/ContentTypeDetectorTest.java
index a631b52..30398c7 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/ContentTypeDetectorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/ContentTypeDetectorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal;
 
@@ -18,13 +19,12 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.jar.JarInputStream;
-import java.util.jar.Pack200;
 import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
 import org.jacoco.core.test.TargetLoader;
+import org.junit.AssumptionViolatedException;
 import org.junit.Test;
 
 /**
@@ -159,13 +159,44 @@
 	}
 
 	@Test
-	public void should_detect_java_13_with_preview_features() throws IOException {
+	public void should_detect_java_13_with_preview_features()
+			throws IOException {
 		initData(0xCA, 0xFE, 0xBA, 0xBE, 0xFF, 0xFF, 0x00, 0x39);
 		assertEquals(ContentTypeDetector.CLASSFILE, detector.getType());
 		assertContent();
 	}
 
 	@Test
+	public void should_detect_java_14() throws IOException {
+		initData(0xCA, 0xFE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x3A);
+		assertEquals(ContentTypeDetector.CLASSFILE, detector.getType());
+		assertContent();
+	}
+
+	@Test
+	public void should_detect_java_14_with_preview_features()
+			throws IOException {
+		initData(0xCA, 0xFE, 0xBA, 0xBE, 0xFF, 0xFF, 0x00, 0x3A);
+		assertEquals(ContentTypeDetector.CLASSFILE, detector.getType());
+		assertContent();
+	}
+
+	@Test
+	public void should_detect_java_42() throws IOException {
+		initData(0xCA, 0xFE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x56);
+		assertEquals(ContentTypeDetector.CLASSFILE, detector.getType());
+		assertContent();
+	}
+
+	@Test
+	public void should_not_detect_MachO_fat_binary_with_44_architectures()
+			throws IOException {
+		initData(0xCA, 0xFE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x2C);
+		assertEquals(ContentTypeDetector.UNKNOWN, detector.getType());
+		assertContent();
+	}
+
+	@Test
 	public void testMachObjectFile() throws IOException {
 		initData(0xCA, 0xFE, 0xBA, 0xBE, 0x00, 0x00, 0x00, 0x02);
 		assertEquals(ContentTypeDetector.UNKNOWN, detector.getType());
@@ -186,6 +217,13 @@
 
 	@Test
 	public void testPack200File() throws IOException {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
 		final ByteArrayOutputStream zipbuffer = new ByteArrayOutputStream();
 		final ZipOutputStream zip = new ZipOutputStream(zipbuffer);
 		zip.putNextEntry(new ZipEntry("hello.txt"));
@@ -193,9 +231,7 @@
 		zip.close();
 
 		final ByteArrayOutputStream pack200buffer = new ByteArrayOutputStream();
-		Pack200.newPacker().pack(
-				new JarInputStream(new ByteArrayInputStream(
-						zipbuffer.toByteArray())), pack200buffer);
+		Pack200Streams.pack(zipbuffer.toByteArray(), pack200buffer);
 		initData(pack200buffer.toByteArray());
 		assertEquals(ContentTypeDetector.PACK200FILE, detector.getType());
 		assertContent();
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/Pack200StreamsTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/Pack200StreamsTest.java
index ce5676c..8548cf0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/Pack200StreamsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/Pack200StreamsTest.java
@@ -1,18 +1,20 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.ByteArrayInputStream;
@@ -24,12 +26,12 @@
 import java.io.OutputStream;
 import java.util.jar.JarInputStream;
 import java.util.jar.JarOutputStream;
-import java.util.jar.Pack200;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 import java.util.zip.ZipOutputStream;
 
 import org.jacoco.core.test.TargetLoader;
+import org.junit.AssumptionViolatedException;
 import org.junit.Test;
 
 /**
@@ -38,7 +40,14 @@
 public class Pack200StreamsTest {
 
 	@Test
-	public void testPack() throws IOException {
+	public void pack_should_pack() throws Exception {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
 		ByteArrayOutputStream jarbuffer = new ByteArrayOutputStream();
 		ZipOutputStream zipout = new ZipOutputStream(jarbuffer);
 		zipout.putNextEntry(new ZipEntry("Test.class"));
@@ -46,22 +55,71 @@
 		zipout.finish();
 
 		ByteArrayOutputStream pack200buffer = new ByteArrayOutputStream();
-		Pack200Streams.pack(jarbuffer.toByteArray(), new NoCloseOutputStream(
-				pack200buffer));
+		Pack200Streams.pack(jarbuffer.toByteArray(),
+				new NoCloseOutputStream(pack200buffer));
 
 		jarbuffer.reset();
-		Pack200.newUnpacker().unpack(
-				new ByteArrayInputStream(pack200buffer.toByteArray()),
-				new JarOutputStream(jarbuffer));
+		final Object unpacker = Class.forName("java.util.jar.Pack200")
+				.getMethod("newUnpacker").invoke(null);
+		Class.forName("java.util.jar.Pack200$Unpacker")
+				.getMethod("unpack", InputStream.class, JarOutputStream.class)
+				.invoke(unpacker,
+						new ByteArrayInputStream(pack200buffer.toByteArray()),
+						new JarOutputStream(jarbuffer));
 
-		ZipInputStream zipin = new ZipInputStream(new ByteArrayInputStream(
-				jarbuffer.toByteArray()));
+		ZipInputStream zipin = new ZipInputStream(
+				new ByteArrayInputStream(jarbuffer.toByteArray()));
 		assertEquals("Test.class", zipin.getNextEntry().getName());
 		assertNull(zipin.getNextEntry());
 	}
 
 	@Test
-	public void testUnpack() throws IOException {
+	public void pack_should_throw_IOException_when_can_not_write_to_OutputStream() {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
+		final OutputStream outputStream = new BrokenOutputStream();
+		try {
+			Pack200Streams.pack(new byte[0], outputStream);
+			fail("expected exception");
+		} catch (IOException e) {
+			assertTrue(e.getCause() instanceof IOException);
+			assertEquals("fake broken output stream",
+					e.getCause().getMessage());
+		}
+	}
+
+	@Test
+	public void pack_should_throw_IOException_when_Pack200_not_available_in_JDK() {
+		try {
+			Class.forName("java.util.jar.Pack200");
+			throw new AssumptionViolatedException(
+					"this test requires JDK without Pack200");
+		} catch (ClassNotFoundException ignore) {
+		}
+
+		try {
+			Pack200Streams.pack(new byte[0], new ByteArrayOutputStream());
+			fail("expected exception");
+		} catch (IOException e) {
+			assertNull(e.getMessage());
+			assertTrue(e.getCause() instanceof ClassNotFoundException);
+		}
+	}
+
+	@Test
+	public void unpack_should_unpack() throws Exception {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
 		ByteArrayOutputStream jarbuffer = new ByteArrayOutputStream();
 		ZipOutputStream zipout = new ZipOutputStream(jarbuffer);
 		zipout.putNextEntry(new ZipEntry("Test.class"));
@@ -69,9 +127,13 @@
 		zipout.finish();
 
 		ByteArrayOutputStream pack200buffer = new ByteArrayOutputStream();
-		Pack200.newPacker().pack(
-				new JarInputStream(new ByteArrayInputStream(
-						jarbuffer.toByteArray())), pack200buffer);
+		final Object packer = Class.forName("java.util.jar.Pack200")
+				.getMethod("newPacker").invoke(null);
+		Class.forName("java.util.jar.Pack200$Packer")
+				.getMethod("pack", JarInputStream.class, OutputStream.class)
+				.invoke(packer, new JarInputStream(
+						new ByteArrayInputStream(jarbuffer.toByteArray())),
+						pack200buffer);
 
 		InputStream result = Pack200Streams.unpack(new NoCloseInputStream(
 				new ByteArrayInputStream(pack200buffer.toByteArray())));
@@ -81,6 +143,43 @@
 		assertNull(zipin.getNextEntry());
 	}
 
+	@Test
+	public void unpack_should_throw_IOException_when_can_not_read_from_InputStream() {
+		try {
+			Class.forName("java.util.jar.Pack200");
+		} catch (ClassNotFoundException e) {
+			throw new AssumptionViolatedException(
+					"this test requires JDK with Pack200");
+		}
+
+		final InputStream inputStream = new BrokenInputStream();
+		try {
+			Pack200Streams.unpack(inputStream);
+			fail("expected exception");
+		} catch (IOException e) {
+			assertTrue(e.getCause() instanceof IOException);
+			assertEquals("fake broken input stream", e.getCause().getMessage());
+		}
+	}
+
+	@Test
+	public void unpack_should_throw_IOException_when_Pack200_not_available_in_JDK() {
+		try {
+			Class.forName("java.util.jar.Pack200");
+			throw new AssumptionViolatedException(
+					"this test requires JDK without Pack200");
+		} catch (ClassNotFoundException ignore) {
+		}
+
+		try {
+			Pack200Streams.unpack(new ByteArrayInputStream(new byte[0]));
+			fail("expected exception");
+		} catch (IOException e) {
+			assertNull(e.getMessage());
+			assertTrue(e.getCause() instanceof ClassNotFoundException);
+		}
+	}
+
 	static class NoCloseInputStream extends FilterInputStream {
 		public NoCloseInputStream(InputStream in) {
 			super(in);
@@ -103,4 +202,18 @@
 		}
 	}
 
+	private static class BrokenInputStream extends InputStream {
+		@Override
+		public int read() throws IOException {
+			throw new IOException("fake broken input stream");
+		}
+	}
+
+	private static class BrokenOutputStream extends OutputStream {
+		@Override
+		public void write(int b) throws IOException {
+			throw new IOException("fake broken output stream");
+		}
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/BundleCoverageImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/BundleCoverageImplTest.java
index 71d8e15..7ecf529 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/BundleCoverageImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/BundleCoverageImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassAnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassAnalyzerTest.java
index 372c602..c4565cc 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassAnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassAnalyzerTest.java
@@ -1,22 +1,25 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import org.jacoco.core.internal.flow.MethodProbesVisitor;
 import org.jacoco.core.internal.instr.InstrSupport;
 import org.junit.Before;
 import org.junit.Test;
+import org.objectweb.asm.Attribute;
 import org.objectweb.asm.Opcodes;
 
 /**
@@ -57,4 +60,12 @@
 		assertEquals(0, coverage.getMethods().size());
 	}
 
+	@Test
+	public void should_collect_attributes() {
+		assertTrue(analyzer.getClassAttributes().isEmpty());
+		analyzer.visitAttribute(new Attribute("foo") {
+		});
+		assertTrue(analyzer.getClassAttributes().contains("foo"));
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassCoverageImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassCoverageImplTest.java
index 7a53abf..a59150b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassCoverageImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/ClassCoverageImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -115,8 +116,7 @@
 	private MethodCoverageImpl createMethod(boolean covered) {
 		final MethodCoverageImpl m = new MethodCoverageImpl("sample", "()V",
 				null);
-		m.increment(
-				covered ? CounterImpl.COUNTER_0_1 : CounterImpl.COUNTER_1_0,
+		m.increment(covered ? CounterImpl.COUNTER_0_1 : CounterImpl.COUNTER_1_0,
 				CounterImpl.COUNTER_0_0, ISourceNode.UNKNOWN_LINE);
 		m.incrementMethodCounter();
 		return m;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/CounterImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/CounterImplTest.java
index 9e55820..13f2c5e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/CounterImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/CounterImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionTest.java
index e7e167e..1d3f1d3 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionsBuilderTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionsBuilderTest.java
index b938caa..eb430d1 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionsBuilderTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/InstructionsBuilderTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -15,7 +16,7 @@
 
 import java.util.Map;
 
-import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.core.analysis.ISourceNode;
 import org.jacoco.core.internal.flow.LabelInfo;
 import org.junit.Before;
 import org.junit.Test;
@@ -52,7 +53,7 @@
 		builder.addInstruction(i4);
 
 		Map<AbstractInsnNode, Instruction> map = builder.getInstructions();
-		assertEquals(ISourceFileCoverage.UNKNOWN_LINE, map.get(i1).getLine());
+		assertEquals(ISourceNode.UNKNOWN_LINE, map.get(i1).getLine());
 		assertEquals(10, map.get(i2).getLine());
 		assertEquals(10, map.get(i3).getLine());
 		assertEquals(20, map.get(i4).getLine());
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java
index 115c72e..add6a46 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/LineImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java
index 01b29db..b25d4ce 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodAnalyzerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageCalculatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageCalculatorTest.java
index 306bc79..4ef23cd 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageCalculatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageCalculatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -18,7 +19,7 @@
 import java.util.HashSet;
 import java.util.Map;
 
-import org.jacoco.core.analysis.ISourceFileCoverage;
+import org.jacoco.core.analysis.ISourceNode;
 import org.junit.Before;
 import org.junit.Test;
 import org.objectweb.asm.Opcodes;
@@ -204,15 +205,15 @@
 
 	@Test
 	public void should_work_without_lines() {
-		addInsn(ISourceFileCoverage.UNKNOWN_LINE, false);
-		addInsn(ISourceFileCoverage.UNKNOWN_LINE, false);
-		addInsn(ISourceFileCoverage.UNKNOWN_LINE, true);
+		addInsn(ISourceNode.UNKNOWN_LINE, false);
+		addInsn(ISourceNode.UNKNOWN_LINE, false);
+		addInsn(ISourceNode.UNKNOWN_LINE, true);
 
 		MethodCoverageCalculator c = new MethodCoverageCalculator(instructions);
 		c.calculate(coverage);
 
-		assertEquals(ISourceFileCoverage.UNKNOWN_LINE, coverage.getFirstLine());
-		assertEquals(ISourceFileCoverage.UNKNOWN_LINE, coverage.getLastLine());
+		assertEquals(ISourceNode.UNKNOWN_LINE, coverage.getFirstLine());
+		assertEquals(ISourceNode.UNKNOWN_LINE, coverage.getLastLine());
 		assertEquals(CounterImpl.getInstance(2, 1),
 				coverage.getInstructionCounter());
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageImplTest.java
index 5a100b0..0300d72 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/MethodCoverageImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -59,8 +60,8 @@
 	@Test
 	public void testIncrementCoveredInstructions() {
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
-		node.increment(CounterImpl.getInstance(12, 13),
-				CounterImpl.COUNTER_0_0, 3);
+		node.increment(CounterImpl.getInstance(12, 13), CounterImpl.COUNTER_0_0,
+				3);
 		node.incrementMethodCounter();
 		assertEquals(CounterImpl.COUNTER_0_1, node.getMethodCounter());
 		assertEquals(CounterImpl.COUNTER_0_1, node.getComplexityCounter());
@@ -78,7 +79,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(2, 0),
 				3);
-		assertEquals(CounterImpl.getInstance(1, 0), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(1, 0),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -86,7 +88,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(1, 1),
 				3);
-		assertEquals(CounterImpl.getInstance(1, 0), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(1, 0),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -94,7 +97,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(0, 2),
 				3);
-		assertEquals(CounterImpl.getInstance(0, 1), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(0, 1),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -102,7 +106,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(3, 0),
 				3);
-		assertEquals(CounterImpl.getInstance(2, 0), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(2, 0),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -110,7 +115,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(2, 1),
 				3);
-		assertEquals(CounterImpl.getInstance(2, 0), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(2, 0),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -118,7 +124,8 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(1, 2),
 				3);
-		assertEquals(CounterImpl.getInstance(1, 1), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(1, 1),
+				node.getComplexityCounter());
 	}
 
 	@Test
@@ -126,6 +133,7 @@
 		MethodCoverageImpl node = new MethodCoverageImpl("sample", "()V", null);
 		node.increment(CounterImpl.COUNTER_0_0, CounterImpl.getInstance(0, 3),
 				3);
-		assertEquals(CounterImpl.getInstance(0, 2), node.getComplexityCounter());
+		assertEquals(CounterImpl.getInstance(0, 2),
+				node.getComplexityCounter());
 	}
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/PackageCoverageTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/PackageCoverageTest.java
index 1d81a02..0a39099 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/PackageCoverageTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/PackageCoverageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -28,12 +29,12 @@
 
 	@Test
 	public void testProperties() {
-		Collection<IClassCoverage> classes = Collections
-				.singleton((IClassCoverage) new ClassCoverageImpl(
-						"org/jacoco/test/Sample", 0, false));
-		Collection<ISourceFileCoverage> sourceFiles = Collections
-				.singleton((ISourceFileCoverage) new SourceFileCoverageImpl(
-						"Sample.java", "org/jacoco/test/Sample"));
+		Collection<IClassCoverage> classes = Collections.singleton(
+				(IClassCoverage) new ClassCoverageImpl("org/jacoco/test/Sample",
+						0, false));
+		Collection<ISourceFileCoverage> sourceFiles = Collections.singleton(
+				(ISourceFileCoverage) new SourceFileCoverageImpl("Sample.java",
+						"org/jacoco/test/Sample"));
 		PackageCoverageImpl data = new PackageCoverageImpl("org/jacoco/test",
 				classes, sourceFiles);
 		assertEquals(ICoverageNode.ElementType.PACKAGE, data.getElementType());
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceFileCoverageImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceFileCoverageImplTest.java
index ed83eba..207d008 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceFileCoverageImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceFileCoverageImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java
index 2501042..d6d8738 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/SourceNodeImplTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -24,7 +25,8 @@
 
 	@Test
 	public void testInit() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		assertEquals(ElementType.CLASS, node.getElementType());
 		assertEquals("Foo", node.getName());
 		assertEquals(ISourceNode.UNKNOWN_LINE, node.getFirstLine());
@@ -34,7 +36,8 @@
 
 	@Test
 	public void testGetLine() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.ensureCapacity(10, 20);
 		assertEquals(LineImpl.EMPTY, node.getLine(5));
 		assertEquals(LineImpl.EMPTY, node.getLine(15));
@@ -43,21 +46,24 @@
 
 	@Test
 	public void testEnsureCapacityUnknown1() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.ensureCapacity(10, ISourceNode.UNKNOWN_LINE);
 		assertEquals(LineImpl.EMPTY, node.getLine(10));
 	}
 
 	@Test
 	public void testEnsureCapacityUnknown2() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.ensureCapacity(ISourceNode.UNKNOWN_LINE, 10);
 		assertEquals(LineImpl.EMPTY, node.getLine(10));
 	}
 
 	@Test
 	public void testIncrementLineUnknown() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.increment(CounterImpl.getInstance(1, 2),
 				CounterImpl.getInstance(3, 4), ISourceNode.UNKNOWN_LINE);
 		assertEquals(CounterImpl.getInstance(1, 2),
@@ -68,18 +74,19 @@
 
 	@Test
 	public void testIncrementLines() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.increment(CounterImpl.getInstance(1, 1), CounterImpl.COUNTER_0_0,
 				10);
 		node.increment(CounterImpl.getInstance(2, 2), CounterImpl.COUNTER_0_0,
 				12);
 
-		assertEquals(CounterImpl.getInstance(1, 1), node.getLine(10)
-				.getInstructionCounter());
-		assertEquals(CounterImpl.COUNTER_0_0, node.getLine(11)
-				.getInstructionCounter());
-		assertEquals(CounterImpl.getInstance(2, 2), node.getLine(12)
-				.getInstructionCounter());
+		assertEquals(CounterImpl.getInstance(1, 1),
+				node.getLine(10).getInstructionCounter());
+		assertEquals(CounterImpl.COUNTER_0_0,
+				node.getLine(11).getInstructionCounter());
+		assertEquals(CounterImpl.getInstance(2, 2),
+				node.getLine(12).getInstructionCounter());
 	}
 
 	@Test
@@ -164,20 +171,22 @@
 
 	private void testIncrementLine(int mi1, int ci1, int mi2, int ci2,
 			int expectedMissedLines, int expectedCoveredLines) {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		node.increment(CounterImpl.getInstance(mi1, ci1),
 				CounterImpl.COUNTER_0_0, 33);
 		node.increment(CounterImpl.getInstance(mi2, ci2),
 				CounterImpl.COUNTER_0_0, 33);
 		assertEquals(CounterImpl.getInstance(expectedMissedLines,
 				expectedCoveredLines), node.getLineCounter());
-		assertEquals(CounterImpl.getInstance(mi1 + mi2, ci1 + ci2), node
-				.getLine(33).getInstructionCounter());
+		assertEquals(CounterImpl.getInstance(mi1 + mi2, ci1 + ci2),
+				node.getLine(33).getInstructionCounter());
 	}
 
 	@Test
 	public void testIncrementChildNoLines() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 		final SourceNodeImpl child = new SourceNodeImpl(ElementType.CLASS,
 				"Foo") {
 			{
@@ -197,7 +206,8 @@
 
 	@Test
 	public void testIncrementChildWithLines() {
-		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS, "Foo");
+		final SourceNodeImpl node = new SourceNodeImpl(ElementType.CLASS,
+				"Foo");
 
 		final SourceNodeImpl child = new SourceNodeImpl(ElementType.CLASS,
 				"Foo");
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/StringPoolTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/StringPoolTest.java
index eca2460..b6c21f8 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/StringPoolTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/StringPoolTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
index f659632..be11d7e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AbstractMatcherTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -201,6 +202,10 @@
 
 	@Test
 	public void firstIsALoad0() {
+		// should set cursor to null when no opcodes are present
+		matcher.firstIsALoad0(m);
+		assertNull(matcher.cursor);
+
 		// should set cursor to null when opcode mismatch
 		m.visitInsn(Opcodes.NOP);
 		matcher.firstIsALoad0(m);
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilterTest.java
index b8a0331..5ce20a7 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/BridgeFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/BridgeFilterTest.java
new file mode 100644
index 0000000..d7308fe
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/BridgeFilterTest.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.jacoco.core.internal.instr.InstrSupport;
+import org.junit.Test;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Unit tests for {@link BridgeFilter}.
+ */
+public class BridgeFilterTest extends FilterTestBase {
+
+	private final BridgeFilter filter = new BridgeFilter();
+
+	@Test
+	public void should_filter_bridge_methods() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_BRIDGE, "m", "()Ljava/lang/Object;", null, null);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_non_bridge_methods() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"m", "()Ljava/lang/Object;", null, null);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilterTest.java
index 32bc9df..2bc447e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -38,7 +39,8 @@
 
 		filter.filter(m, context, output);
 
-		assertIgnored(new Range(m.instructions.getFirst(), m.instructions.getLast()));
+		assertIgnored(
+				new Range(m.instructions.getFirst(), m.instructions.getLast()));
 	}
 
 	/**
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java
index 23f69f4..ff11cda 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/EnumFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterContextMock.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterContextMock.java
index a6c881d..c39bd18 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterContextMock.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterContextMock.java
@@ -1,48 +1,54 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.internal.analysis.filter;

-

-import java.util.HashSet;

-import java.util.Set;

-

-/**

- * {@link IFilterContext} mock for unit tests.

- */

-public class FilterContextMock implements IFilterContext {

-

-	public String className = "Foo";

-	public String superClassName = "java/lang/Object";

-	public Set<String> classAnnotations = new HashSet<String>();

-	public String sourceFileName = "Foo.java";

-	public String sourceDebugExtension;

-

-	public String getClassName() {

-		return className;

-	}

-

-	public String getSuperClassName() {

-		return superClassName;

-	}

-

-	public Set<String> getClassAnnotations() {

-		return classAnnotations;

-	}

-

-	public String getSourceFileName() {

-		return sourceFileName;

-	}

-

-	public String getSourceDebugExtension() {

-		return sourceDebugExtension;

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * {@link IFilterContext} mock for unit tests.
+ */
+public class FilterContextMock implements IFilterContext {
+
+	public String className = "Foo";
+	public String superClassName = "java/lang/Object";
+	public Set<String> classAnnotations = new HashSet<String>();
+	public Set<String> classAttributes = new HashSet<String>();
+	public String sourceFileName = "Foo.java";
+	public String sourceDebugExtension;
+
+	public String getClassName() {
+		return className;
+	}
+
+	public String getSuperClassName() {
+		return superClassName;
+	}
+
+	public Set<String> getClassAnnotations() {
+		return classAnnotations;
+	}
+
+	public Set<String> getClassAttributes() {
+		return classAttributes;
+	}
+
+	public String getSourceFileName() {
+		return sourceFileName;
+	}
+
+	public String getSourceDebugExtension() {
+		return sourceDebugExtension;
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterTestBase.java
index 2378bee..4408c58 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FilterTestBase.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FinallyFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FinallyFilterTest.java
index 6a9cf67..6fc23ec 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FinallyFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/FinallyFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -239,7 +240,7 @@
 
 	/**
 	 * javac >= 1.8
-	 * 
+	 *
 	 * Probably related to https://bugs.openjdk.java.net/browse/JDK-7093325
 	 */
 	@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
index 127ae30..f96ed78 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -32,12 +33,11 @@
 		context.classAnnotations
 				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
 
-		m.visitLabel(new Label());
-		final Range range1 = new Range();
-		range1.fromInclusive = m.instructions.getLast();
 		m.visitMethodInsn(Opcodes.INVOKESTATIC,
 				"kotlin/coroutines/intrinsics/IntrinsicsKt",
 				"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+		final Range range1 = new Range();
+		range1.fromInclusive = m.instructions.getLast();
 		m.visitVarInsn(Opcodes.ASTORE, 4);
 
 		m.visitVarInsn(Opcodes.ALOAD, 0);
@@ -128,12 +128,11 @@
 		context.classAnnotations
 				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
 
-		m.visitLabel(new Label());
-		final Range range1 = new Range();
-		range1.fromInclusive = m.instructions.getLast();
 		m.visitMethodInsn(Opcodes.INVOKESTATIC,
 				"kotlin/coroutines/intrinsics/IntrinsicsKt",
 				"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+		final Range range1 = new Range();
+		range1.fromInclusive = m.instructions.getLast();
 		m.visitVarInsn(Opcodes.ASTORE, 4);
 
 		m.visitVarInsn(Opcodes.ALOAD, 0);
@@ -373,4 +372,80 @@
 		assertIgnored(range0, range1, range2);
 	}
 
+	/**
+	 * <pre>
+	 *     suspend fun example(b: Boolean) {
+	 *         if (b)
+	 *             suspendingFunction()
+	 *         else
+	 *             suspendingFunction()
+	 *     }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_suspending_functions_with_tail_call_optimization() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"example",
+				"(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;", null,
+				null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+
+		final Label exit = new Label();
+
+		m.visitVarInsn(Opcodes.ILOAD, 1);
+		final Label next = new Label();
+		m.visitJumpInsn(Opcodes.IFEQ, next);
+
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "", "suspendingFunction",
+				"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false);
+		final Range range1 = new Range();
+		{
+			m.visitInsn(Opcodes.DUP);
+			range1.fromInclusive = m.instructions.getLast();
+			m.visitMethodInsn(Opcodes.INVOKESTATIC,
+					"kotlin/coroutines/intrinsics/IntrinsicsKt",
+					"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+			final Label label = new Label();
+			m.visitJumpInsn(Opcodes.IF_ACMPNE, label);
+			m.visitInsn(Opcodes.ARETURN);
+			m.visitLabel(label);
+			m.visitInsn(Opcodes.POP);
+			range1.toInclusive = m.instructions.getLast();
+		}
+
+		m.visitJumpInsn(Opcodes.GOTO, exit);
+		m.visitLabel(next);
+
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "", "suspendingFunction",
+				"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false);
+		final Range range2 = new Range();
+		{
+			m.visitInsn(Opcodes.DUP);
+			range2.fromInclusive = m.instructions.getLast();
+			m.visitMethodInsn(Opcodes.INVOKESTATIC,
+					"kotlin/coroutines/intrinsics/IntrinsicsKt",
+					"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;", false);
+			final Label label = new Label();
+			m.visitJumpInsn(Opcodes.IF_ACMPNE, label);
+			m.visitInsn(Opcodes.ARETURN);
+			m.visitLabel(label);
+			m.visitInsn(Opcodes.POP);
+			range2.toInclusive = m.instructions.getLast();
+		}
+
+		m.visitLabel(exit);
+		m.visitFieldInsn(Opcodes.GETSTATIC, "kotlin/Unit", "INSTANCE",
+				"Lkotlin/Unit;");
+		m.visitInsn(Opcodes.ARETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(range1, range2);
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilterTest.java
index 8dfa765..2e33173 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -95,4 +96,127 @@
 		assertIgnored();
 	}
 
+	/**
+	 * <pre>
+	 * open class Open {
+	 *     open fun foo(a: Int = 42) {
+	 *     }
+	 * }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_open_functions() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "foo$default",
+				"(LOpen;IILjava/lang/Object;)V", null, null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		{
+			m.visitVarInsn(Opcodes.ALOAD, 3);
+			final Label label = new Label();
+			m.visitJumpInsn(Opcodes.IFNULL, label);
+			m.visitTypeInsn(Opcodes.NEW,
+					"java/lang/UnsupportedOperationException");
+			m.visitInsn(Opcodes.DUP);
+			m.visitLdcInsn(
+					"Super calls with default arguments not supported in this target, function: foo");
+			m.visitMethodInsn(Opcodes.INVOKESPECIAL,
+					"java/lang/UnsupportedOperationException", "<init>",
+					"(Ljava/lang/String;)V", false);
+			m.visitInsn(Opcodes.ATHROW);
+			m.visitLabel(label);
+		}
+		{
+			m.visitVarInsn(Opcodes.ILOAD, 2);
+			m.visitInsn(Opcodes.ICONST_1);
+			m.visitInsn(Opcodes.IAND);
+			final Label label = new Label();
+			m.visitJumpInsn(Opcodes.IFEQ, label);
+			// default argument
+			m.visitLdcInsn(Integer.valueOf(42));
+			m.visitVarInsn(Opcodes.ISTORE, 1);
+			m.visitLabel(label);
+
+			m.visitVarInsn(Opcodes.ALOAD, 0);
+			m.visitVarInsn(Opcodes.ILOAD, 1);
+			m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Open", "foo", "(I)V",
+					false);
+			m.visitInsn(Opcodes.RETURN);
+		}
+
+		filter.filter(m, context, output);
+
+		assertIgnored(
+				new Range(m.instructions.getFirst(), m.instructions.get(6)),
+				new Range(m.instructions.get(11), m.instructions.get(11)));
+	}
+
+	/**
+	 * <pre>
+	 * class C(a: Int = 42)
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_constructors() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "<init>",
+				"(IILkotlin/jvm/internal/DefaultConstructorMarker;)V", null,
+				null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+
+		m.visitVarInsn(Opcodes.ILOAD, 2);
+		m.visitInsn(Opcodes.ICONST_1);
+		m.visitInsn(Opcodes.IAND);
+		Label label = new Label();
+		m.visitJumpInsn(Opcodes.IFEQ, label);
+		// default argument
+		m.visitLdcInsn(Integer.valueOf(42));
+		m.visitVarInsn(Opcodes.ISTORE, 1);
+		m.visitLabel(label);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitVarInsn(Opcodes.ILOAD, 1);
+		m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Owner", "<init>", "(I)V",
+				false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(m.instructions.get(3), m.instructions.get(3)));
+	}
+
+	/**
+	 * <pre>
+	 * data class C(val x: Long = 42)
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_methods_with_parameters_that_consume_two_slots() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "<init>",
+				"(JILkotlin/jvm/internal/DefaultConstructorMarker;)V", null,
+				null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+
+		m.visitVarInsn(Opcodes.ILOAD, 3);
+		m.visitInsn(Opcodes.ICONST_1);
+		m.visitInsn(Opcodes.IAND);
+		final Label label = new Label();
+		m.visitJumpInsn(Opcodes.IFEQ, label);
+		// default argument
+		m.visitLdcInsn(Integer.valueOf(42));
+		m.visitVarInsn(Opcodes.ISTORE, 1);
+		m.visitLabel(label);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitVarInsn(Opcodes.ILOAD, 1);
+		m.visitMethodInsn(Opcodes.INVOKESPECIAL, "Owner", "<init>", "(J)V",
+				false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(m.instructions.get(3), m.instructions.get(3)));
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilterTest.java
new file mode 100644
index 0000000..0c9e40a
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilterTest.java
@@ -0,0 +1,86 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.jacoco.core.internal.instr.InstrSupport;
+import org.junit.Test;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Unit test for {@link KotlinDefaultMethodsFilter}.
+ */
+public class KotlinDefaultMethodsFilterTest extends FilterTestBase {
+
+	private final IFilter filter = new KotlinDefaultMethodsFilter();
+
+	@Test
+	public void should_filter() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"m", "()V", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitMethodInsn(Opcodes.INVOKESTATIC, "Target$DefaultImpls", "m",
+				"(LTarget;)V", false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_when_invokestatic_owner_does_not_match() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"m", "()V", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitMethodInsn(Opcodes.INVOKESTATIC, "Target", "m", "(LTarget;)V",
+				false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_when_instructions_do_not_match() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"m", "()V", null, null);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_when_not_kotlin() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"m", "()V", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitMethodInsn(Opcodes.INVOKESTATIC, "Target$DefaultImpls", "m",
+				"(LTarget;)V", false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilterTest.java
index 8a6e835..287ac56 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Nikolay Krasko - initial API and implementation
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilterTest.java
index fe3b955..beb4981 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -162,6 +163,47 @@
 		assertIgnored(expectedRanges.toArray(new Range[0]));
 	}
 
+	/**
+	 * See <a href="https://youtrack.jetbrains.com/issue/KT-37704">KT-37704</a>
+	 *
+	 * <pre>
+	 * inline fun f() {}
+	 * fun g() = f()
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_without_parsing_KotlinDebug_stratum() {
+		context.sourceFileName = "Example.kt";
+		context.sourceDebugExtension = "" //
+				+ "SMAP\n" //
+				+ "Example.kt\n" // OutputFileName=Example.kt
+				+ "Kotlin\n" // DefaultStratumId=Kotlin
+				+ "*S Kotlin\n" // StratumID=Kotlin
+				+ "*F\n" // FileSection
+				+ "+ 1 Example.kt\n" // FileID=1,FileName=Example.kt
+				+ "ExampleKt\n" //
+				+ "*L\n" // LineSection
+				+ "1#1,3:1\n" // InputStartLine=1,LineFileID=1,RepeatCount=3,OutputStartLine=1
+				+ "1#1:4\n" // InputStartLine=1,LineFileID=1,OutputStartLine=4
+				+ "*S KotlinDebug\n"; // StratumID=KotlinDebug
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+
+		m.visitLineNumber(2, new Label());
+		m.visitInsn(Opcodes.ICONST_0);
+		m.visitVarInsn(Opcodes.ISTORE, 0);
+		m.visitLineNumber(4, new Label());
+		shouldIgnorePrevious(m);
+		m.visitInsn(Opcodes.NOP);
+		shouldIgnorePrevious(m);
+		m.visitLineNumber(3, new Label());
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(expectedRanges.toArray(new Range[0]));
+	}
+
 	@Test
 	public void should_not_parse_SourceDebugExtension_attribute_when_no_kotlin_metadata_annotation() {
 		context.sourceDebugExtension = "SMAP";
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
index c9e34ba..85cbd16 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
@@ -58,4 +59,41 @@
 		assertIgnored(new Range(expectedFrom, expectedTo));
 	}
 
+	/**
+	 * <pre>
+	 * class Example {
+	 *   private lateinit var x: String
+	 *   fun example() = x
+	 * }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_Kotlin_1_5() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"example", "()Ljava/lang/String;", null, null);
+		Label label = new Label();
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitFieldInsn(Opcodes.GETFIELD, "Example", "x",
+				"Ljava/lang/String;");
+		m.visitVarInsn(Opcodes.ASTORE, 1);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitJumpInsn(Opcodes.IFNONNULL, label);
+		final AbstractInsnNode expectedFrom = m.instructions.getLast();
+		m.visitLdcInsn("x");
+		m.visitMethodInsn(Opcodes.INVOKESTATIC,
+				"kotlin/jvm/internal/Intrinsics",
+				"throwUninitializedPropertyAccessException",
+				"(Ljava/lang/String;)V", false);
+		m.visitInsn(Opcodes.ACONST_NULL);
+		m.visitInsn(Opcodes.ATHROW);
+		final AbstractInsnNode expectedTo = m.instructions.getLast();
+		m.visitLabel(label);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitInsn(Opcodes.ARETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(expectedFrom, expectedTo));
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilterTest.java
index 0d08ae3..263fe47 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilterTest.java
index 9fc3b3d..308b866 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -30,6 +31,8 @@
 
 	@Test
 	public void should_filter() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
 		final Label label = new Label();
 
 		m.visitInsn(Opcodes.DUP);
@@ -49,4 +52,92 @@
 		assertIgnored(new Range(expectedFrom, expectedTo));
 	}
 
+	@Test
+	public void should_filter_Kotlin_1_4() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		final Label label = new Label();
+
+		m.visitInsn(Opcodes.DUP);
+		m.visitJumpInsn(Opcodes.IFNONNULL, label);
+		final AbstractInsnNode expectedFrom = m.instructions.getLast();
+		m.visitTypeInsn(Opcodes.NEW, "java/lang/NullPointerException");
+		m.visitInsn(Opcodes.DUP);
+		m.visitLdcInsn("null cannot be cast to non-null type kotlin.String");
+		m.visitMethodInsn(Opcodes.INVOKESPECIAL,
+				"java/lang/NullPointerException", "<init>",
+				"(Ljava/lang/String;)V", false);
+		m.visitInsn(Opcodes.ATHROW);
+		final AbstractInsnNode expectedTo = m.instructions.getLast();
+		m.visitLabel(label);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(expectedFrom, expectedTo));
+	}
+
+	/**
+	 * For
+	 *
+	 * <pre>
+	 *   fun f(s: String?): String {
+	 * 	   return s as String
+	 *   }
+	 * </pre>
+	 *
+	 * bytecode generated by Kotlin compiler version 1.4 is different from
+	 * bytecode generated by version 1.5, unfortunately bytecode generated by
+	 * later is the same as bytecode that both versions generate for
+	 *
+	 * <pre>
+	 *   fun f(s: String?): String {
+	 *     if (s == null)
+	 *       throw NullPointerException("null cannot be cast to non-null type kotlin.String")
+	 *     return s
+	 *   }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_Kotlin_1_5() {
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+
+		final Label label = new Label();
+		m.visitJumpInsn(Opcodes.IFNONNULL, label);
+		final AbstractInsnNode expectedFrom = m.instructions.getLast();
+		m.visitTypeInsn(Opcodes.NEW, "java/lang/NullPointerException");
+		m.visitInsn(Opcodes.DUP);
+		m.visitLdcInsn("null cannot be cast to non-null type kotlin.String");
+		m.visitMethodInsn(Opcodes.INVOKESPECIAL,
+				"java/lang/NullPointerException", "<init>",
+				"(Ljava/lang/String;)V", false);
+		m.visitInsn(Opcodes.ATHROW);
+		final AbstractInsnNode expectedTo = m.instructions.getLast();
+		m.visitLabel(label);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(expectedFrom, expectedTo));
+	}
+
+	@Test
+	public void should_not_filter_when_not_kotlin() {
+		m.visitInsn(Opcodes.DUP);
+		final Label label = new Label();
+		m.visitJumpInsn(Opcodes.IFNONNULL, label);
+		m.visitTypeInsn(Opcodes.NEW, "java/lang/NullPointerException");
+		m.visitInsn(Opcodes.DUP);
+		m.visitLdcInsn("null cannot be cast to non-null type kotlin.String");
+		m.visitMethodInsn(Opcodes.INVOKESPECIAL,
+				"java/lang/NullPointerException", "<init>",
+				"(Ljava/lang/String;)V", false);
+		m.visitInsn(Opcodes.ATHROW);
+		m.visitLabel(label);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilterTest.java
index 04d40a0..447cc27 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilterTest.java
index df42803..f3a548c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -105,4 +106,97 @@
 		assertIgnored(new Range(expectedFromInclusive, expectedToInclusive));
 	}
 
+	/**
+	 * <pre>
+	 * fun example(p: String) {
+	 *   when (p) {
+	 *     "b" -> return
+	 *     "a" -> return
+	 *     "\u0000a" -> return
+	 *   }
+	 * }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_when_biggest_hashCode_first() {
+		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
+
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"example", "(Ljava/lang/String;)V", null, null);
+
+		final Label h1 = new Label();
+		final Label sameHash = new Label();
+		final Label h2 = new Label();
+		final Label case1 = new Label();
+		final Label case2 = new Label();
+		final Label case3 = new Label();
+		final Label defaultCase = new Label();
+
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		m.visitTableSwitchInsn(97, 98, defaultCase, h1, h2);
+
+		m.visitLabel(h1);
+		final AbstractInsnNode expectedFromInclusive = m.instructions.getLast();
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFEQ, sameHash);
+		m.visitJumpInsn(Opcodes.GOTO, case2);
+
+		m.visitLabel(sameHash);
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("\u0000a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFEQ, defaultCase);
+		m.visitJumpInsn(Opcodes.GOTO, case3);
+
+		m.visitLabel(h2);
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("b");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFEQ, defaultCase);
+		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
+
+		m.visitLabel(case1);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case2);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case3);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(defaultCase);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(expectedFromInclusive, expectedToInclusive));
+		assertReplacedBranches(expectedFromInclusive.getPrevious(),
+				expectedNewTargets);
+	}
+
+	@Test
+	public void should_not_filter_empty_lookup_switch() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"name", "(Ljava/lang/String;)V", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		final Label defaultCase = new Label();
+		m.visitLookupSwitchInsn(defaultCase, null, new Label[] {});
+		m.visitLabel(defaultCase);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java
index ac42e64..8f7cc44 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/RecordsFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/RecordsFilterTest.java
new file mode 100644
index 0000000..48fd63c
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/RecordsFilterTest.java
@@ -0,0 +1,175 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.jacoco.core.internal.instr.InstrSupport;
+import org.junit.Test;
+import org.objectweb.asm.Handle;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Unit tests for {@link RecordsFilter}.
+ */
+public class RecordsFilterTest extends FilterTestBase {
+
+	private final RecordsFilter filter = new RecordsFilter();
+
+	@Test
+	public void should_filter_generated_toString_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"toString", "()Ljava/lang/String;", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitInvokeDynamicInsn("toString", "(LPoint;)Ljava/lang/String;",
+				new Handle(Opcodes.H_INVOKESTATIC,
+						"java/lang/runtime/ObjectMethods", "bootstrap",
+						"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;",
+						false));
+		m.visitInsn(Opcodes.ARETURN);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_custom_toString_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"toString", "()Ljava/lang/String;", null, null);
+		m.visitLdcInsn("");
+		m.visitInsn(Opcodes.ARETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_non_toString_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"toString", "()V", null, null);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_filter_generated_hashCode_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"hashCode", "()I", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitInvokeDynamicInsn("hashCode", "(LPoint;)I", new Handle(
+				Opcodes.H_INVOKESTATIC, "java/lang/runtime/ObjectMethods",
+				"bootstrap",
+				"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;",
+				false));
+		m.visitInsn(Opcodes.IRETURN);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_custom_hashCode_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"hashCode", "()I", null, null);
+		m.visitInsn(Opcodes.ICONST_0);
+		m.visitInsn(Opcodes.IRETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_non_hashCode_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"hashCode", "()V", null, null);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_filter_generated_equals_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"equals", "(Ljava/lang/Object;)Z", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitInvokeDynamicInsn("equals", "(LPoint;Ljava/lang/Object;)Z",
+				new Handle(Opcodes.H_INVOKESTATIC,
+						"java/lang/runtime/ObjectMethods", "bootstrap",
+						"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;",
+						false));
+		m.visitInsn(Opcodes.IRETURN);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_custom_equals_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"equals", "(Ljava/lang/Object;)Z", null, null);
+		m.visitInsn(Opcodes.ICONST_0);
+		m.visitInsn(Opcodes.IRETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_non_equals_method() {
+		context.superClassName = "java/lang/Record";
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"equals", "()V", null, null);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_non_records() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"toString", "()Ljava/lang/String;", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitInvokeDynamicInsn("toString", "(LPoint;)Ljava/lang/String;",
+				new Handle(Opcodes.H_INVOKESTATIC,
+						"java/lang/runtime/ObjectMethods", "bootstrap",
+						"(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/TypeDescriptor;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/invoke/MethodHandle;)Ljava/lang/Object;",
+						false));
+		m.visitInsn(Opcodes.ARETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilterTest.java
deleted file mode 100644
index 3f72618..0000000
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilterTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Evgeny Mandrikov - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.internal.analysis.filter;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.jacoco.core.internal.instr.InstrSupport;
-import org.junit.Test;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-
-/**
- * Unit tests for {@link StringSwitchEcjFilter}.
- */
-public class StringSwitchEcjFilterTest extends FilterTestBase {
-
-	private final IFilter filter = new StringSwitchEcjFilter();
-
-	@Test
-	public void should_filter() {
-		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
-
-		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
-				"name", "()V", null, null);
-
-		final Label case1 = new Label();
-		final Label case2 = new Label();
-		final Label case3 = new Label();
-		final Label caseDefault = new Label();
-		final Label h1 = new Label();
-		final Label h2 = new Label();
-
-		// filter should not remember this unrelated slot
-		m.visitLdcInsn("");
-		m.visitVarInsn(Opcodes.ASTORE, 1);
-		m.visitVarInsn(Opcodes.ALOAD, 1);
-
-		// switch (...)
-		m.visitInsn(Opcodes.DUP);
-		m.visitVarInsn(Opcodes.ASTORE, 2);
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
-				"()I", false);
-		m.visitTableSwitchInsn(97, 98, caseDefault, h1, h2);
-		final AbstractInsnNode switchNode = m.instructions.getLast();
-
-		m.visitLabel(h1);
-
-		m.visitVarInsn(Opcodes.ALOAD, 2);
-		m.visitLdcInsn("a");
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
-				"(Ljava/lang/Object;)Z", false);
-		// if equal "a", then goto its case
-		m.visitJumpInsn(Opcodes.IFNE, case1);
-
-		m.visitVarInsn(Opcodes.ALOAD, 2);
-		m.visitLdcInsn("\0a");
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
-				"(Ljava/lang/Object;)Z", false);
-		// if equal "\0a", then goto its case
-		m.visitJumpInsn(Opcodes.IFNE, case2);
-
-		// goto default case
-		m.visitJumpInsn(Opcodes.GOTO, caseDefault);
-
-		m.visitLabel(h2);
-
-		m.visitVarInsn(Opcodes.ALOAD, 2);
-		m.visitLdcInsn("b");
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
-				"(Ljava/lang/Object;)Z", false);
-		// if equal "b", then goto its case
-		m.visitJumpInsn(Opcodes.IFNE, case3);
-
-		// goto default case
-		m.visitJumpInsn(Opcodes.GOTO, caseDefault);
-		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
-
-		m.visitLabel(case1);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-		m.visitLabel(case2);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-		m.visitLabel(case3);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-		m.visitLabel(caseDefault);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-
-		filter.filter(m, context, output);
-
-		assertReplacedBranches(switchNode, expectedNewTargets);
-		assertIgnored(new Range(switchNode.getNext(), expectedToInclusive));
-	}
-
-	@Test
-	public void should_filter_when_default_is_first() {
-		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
-
-		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
-				"name", "()V", null, null);
-
-		final Label case1 = new Label();
-		final Label caseDefault = new Label();
-		final Label h1 = new Label();
-
-		// filter should not remember this unrelated slot
-		m.visitLdcInsn("");
-		m.visitVarInsn(Opcodes.ASTORE, 1);
-		m.visitVarInsn(Opcodes.ALOAD, 1);
-
-		// switch (...)
-		m.visitInsn(Opcodes.DUP);
-		m.visitVarInsn(Opcodes.ASTORE, 2);
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
-				"()I", false);
-		m.visitLookupSwitchInsn(caseDefault, new int[] { 97 },
-				new Label[] { h1 });
-		final AbstractInsnNode switchNode = m.instructions.getLast();
-
-		m.visitLabel(h1);
-
-		m.visitVarInsn(Opcodes.ALOAD, 2);
-		m.visitLdcInsn("a");
-		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
-				"(Ljava/lang/Object;)Z", false);
-		// if equal "a", then goto its case
-		m.visitJumpInsn(Opcodes.IFNE, case1);
-
-		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
-
-		m.visitLabel(caseDefault);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-		m.visitLabel(case1);
-		m.visitInsn(Opcodes.RETURN);
-		expectedNewTargets.add(m.instructions.getLast());
-
-		filter.filter(m, context, output);
-
-		assertReplacedBranches(switchNode, expectedNewTargets);
-		assertIgnored(new Range(switchNode.getNext(), expectedToInclusive));
-	}
-
-}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilterTest.java
new file mode 100644
index 0000000..44bb10f
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilterTest.java
@@ -0,0 +1,290 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.jacoco.core.internal.instr.InstrSupport;
+import org.junit.Test;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Unit tests for {@link StringSwitchFilter}.
+ */
+public class StringSwitchFilterTest extends FilterTestBase {
+
+	private final IFilter filter = new StringSwitchFilter();
+
+	@Test
+	public void should_filter() {
+		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
+
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"name", "()V", null, null);
+
+		final Label case1 = new Label();
+		final Label case2 = new Label();
+		final Label case3 = new Label();
+		final Label caseDefault = new Label();
+		final Label h1 = new Label();
+		final Label h2 = new Label();
+
+		// filter should not remember this unrelated slot
+		m.visitLdcInsn("");
+		m.visitVarInsn(Opcodes.ASTORE, 1);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+
+		// switch (...)
+		m.visitInsn(Opcodes.DUP);
+		m.visitVarInsn(Opcodes.ASTORE, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		m.visitTableSwitchInsn(97, 98, caseDefault, h1, h2);
+		final AbstractInsnNode switchNode = m.instructions.getLast();
+
+		m.visitLabel(h1);
+
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		// if equal "a", then goto its case
+		m.visitJumpInsn(Opcodes.IFNE, case1);
+
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("\0a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		// if equal "\0a", then goto its case
+		m.visitJumpInsn(Opcodes.IFNE, case2);
+
+		// goto default case
+		m.visitJumpInsn(Opcodes.GOTO, caseDefault);
+
+		m.visitLabel(h2);
+
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("b");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		// if equal "b", then goto its case
+		m.visitJumpInsn(Opcodes.IFNE, case3);
+
+		// goto default case
+		m.visitJumpInsn(Opcodes.GOTO, caseDefault);
+		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
+
+		m.visitLabel(case1);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case2);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case3);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(caseDefault);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+
+		filter.filter(m, context, output);
+
+		assertReplacedBranches(switchNode, expectedNewTargets);
+		assertIgnored(new Range(switchNode.getNext(), expectedToInclusive));
+	}
+
+	@Test
+	public void should_filter_when_default_is_first() {
+		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
+
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"name", "()V", null, null);
+
+		final Label case1 = new Label();
+		final Label caseDefault = new Label();
+		final Label h1 = new Label();
+
+		// filter should not remember this unrelated slot
+		m.visitLdcInsn("");
+		m.visitVarInsn(Opcodes.ASTORE, 1);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+
+		// switch (...)
+		m.visitInsn(Opcodes.DUP);
+		m.visitVarInsn(Opcodes.ASTORE, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		m.visitLookupSwitchInsn(caseDefault, new int[] { 97 },
+				new Label[] { h1 });
+		final AbstractInsnNode switchNode = m.instructions.getLast();
+
+		m.visitLabel(h1);
+
+		m.visitVarInsn(Opcodes.ALOAD, 2);
+		m.visitLdcInsn("a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		// if equal "a", then goto its case
+		m.visitJumpInsn(Opcodes.IFNE, case1);
+
+		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
+
+		m.visitLabel(caseDefault);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case1);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+
+		filter.filter(m, context, output);
+
+		assertReplacedBranches(switchNode, expectedNewTargets);
+		assertIgnored(new Range(switchNode.getNext(), expectedToInclusive));
+	}
+
+	/**
+	 * <pre>
+	 * fun example(p: String) {
+	 *   when (p) {
+	 *     "a" -> return
+	 *     "\u0000a" -> return
+	 *     "b" -> return
+	 *     "\u0000b" -> return
+	 *     "c" -> return
+	 *     "\u0000c" -> return
+	 *   }
+	 * }
+	 * </pre>
+	 */
+	@Test
+	public void should_filter_Kotlin_1_5() {
+		final Set<AbstractInsnNode> expectedNewTargets = new HashSet<AbstractInsnNode>();
+
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"example", "()V", null, null);
+
+		final Label h1 = new Label();
+		final Label h2 = new Label();
+		final Label h3 = new Label();
+		final Label defaultCase = new Label();
+		final Label case1 = new Label();
+		final Label case2 = new Label();
+		final Label case3 = new Label();
+		final Label case4 = new Label();
+		final Label case5 = new Label();
+		final Label case6 = new Label();
+
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		m.visitTableSwitchInsn(97, 99, defaultCase, h1, h2, h3);
+
+		m.visitLabel(h1);
+		final AbstractInsnNode expectedFromInclusive = m.instructions.getLast();
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case1);
+
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("\u0000a");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case2);
+
+		m.visitJumpInsn(Opcodes.GOTO, defaultCase);
+
+		m.visitLabel(h2);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("b");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case3);
+
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("\u0000b");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case4);
+
+		m.visitJumpInsn(Opcodes.GOTO, defaultCase);
+
+		m.visitLabel(h3);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("c");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case5);
+
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitLdcInsn("\u0000c");
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "equals",
+				"(Ljava/lang/Object;)Z", false);
+		m.visitJumpInsn(Opcodes.IFNE, case6);
+
+		m.visitJumpInsn(Opcodes.GOTO, defaultCase);
+		final AbstractInsnNode expectedToInclusive = m.instructions.getLast();
+
+		m.visitLabel(case1);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case2);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case3);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case4);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case5);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(case6);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+		m.visitLabel(defaultCase);
+		m.visitInsn(Opcodes.RETURN);
+		expectedNewTargets.add(m.instructions.getLast());
+
+		filter.filter(m, context, output);
+
+		assertIgnored(new Range(expectedFromInclusive, expectedToInclusive));
+		assertReplacedBranches(expectedFromInclusive.getPrevious(),
+				expectedNewTargets);
+	}
+
+	@Test
+	public void should_not_filter_empty_lookup_switch() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION, 0,
+				"name", "(Ljava/lang/String;)V", null, null);
+		m.visitVarInsn(Opcodes.ALOAD, 1);
+		m.visitVarInsn(Opcodes.ASTORE, 2);
+		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/String", "hashCode",
+				"()I", false);
+		final Label defaultCase = new Label();
+		m.visitLookupSwitchInsn(defaultCase, null, new Label[] {});
+		m.visitLabel(defaultCase);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java
index 592c699..8b47302 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java
index a40b234..34a0439 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -152,7 +153,7 @@
 		filter.filter(m, context, output);
 
 		assertIgnored(new Range((LabelNode) handler.info,
-			((LabelNode) exit.info).getPrevious()));
+				((LabelNode) exit.info).getPrevious()));
 	}
 
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java
index 5bbae98..affc39b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/SyntheticFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -57,6 +58,38 @@
 	}
 
 	@Test
+	public void should_filter_synthetic_method_with_prefix_anonfun_in_non_Scala_classes() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "$anonfun$main$1", "()V", null, null);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+		assertMethodIgnored(m);
+	}
+
+	@Test
+	public void should_not_filter_synthetic_method_with_prefix_anonfun_in_Scala_classes() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "$anonfun$main$1", "()V", null, null);
+		m.visitInsn(Opcodes.RETURN);
+
+		context.classAttributes.add("ScalaSig");
+		filter.filter(m, context, output);
+		assertIgnored();
+	}
+
+	@Test
+	public void should_not_filter_synthetic_method_with_prefix_anonfun_in_Scala_inner_classes() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "$anonfun$main$1", "()V", null, null);
+		m.visitInsn(Opcodes.RETURN);
+
+		context.classAttributes.add("Scala");
+		filter.filter(m, context, output);
+		assertIgnored();
+	}
+
+	@Test
 	public void should_not_filter_method_with_suffix_default_in_kotlin_classes() {
 		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
 				Opcodes.ACC_SYNTHETIC | Opcodes.ACC_BRIDGE, "example$default",
@@ -83,6 +116,32 @@
 	}
 
 	@Test
+	public void should_not_filter_synthetic_constructor_containing_default_arguments_in_kotlin_classes() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_SYNTHETIC, "<init>",
+				"(IILkotlin/jvm/internal/DefaultConstructorMarker;)V", null,
+				null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		m.visitInsn(Opcodes.NOP);
+
+		filter.filter(m, context, output);
+
+		assertIgnored();
+	}
+
+	/**
+	 * For private suspending function Kotlin compiler versions prior to 1.5
+	 * produce package-local synthetic method that should not be filtered
+	 *
+	 * <pre>
+	 * private suspend fun example() {
+	 * }
+	 * </pre>
+	 *
+	 * @see #should_filter_synthetic_methods_whose_name_starts_with_access_dollar_even_if_last_argument_is_kotlin_coroutine_continuation()
+	 */
+	@Test
 	public void should_not_filter_synthetic_methods_whose_last_argument_is_kotlin_coroutine_continuation() {
 		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
 				Opcodes.ACC_SYNTHETIC | Opcodes.ACC_STATIC, "example",
@@ -97,4 +156,36 @@
 		assertIgnored();
 	}
 
+	/**
+	 * For private suspending function Kotlin compiler versions starting from
+	 * 1.5 produce additional public synthetic method with name starting with
+	 * "access$" that should be filtered
+	 *
+	 * <pre>
+	 * private suspend fun example() {
+	 * }
+	 * </pre>
+	 *
+	 * @see #should_not_filter_synthetic_methods_whose_last_argument_is_kotlin_coroutine_continuation()
+	 */
+	@Test
+	public void should_filter_synthetic_methods_whose_name_starts_with_access_dollar_even_if_last_argument_is_kotlin_coroutine_continuation() {
+		final MethodNode m = new MethodNode(InstrSupport.ASM_API_VERSION,
+				Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_FINAL
+						| Opcodes.ACC_SYNTHETIC,
+				"access$example",
+				"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", null,
+				null);
+		context.classAnnotations
+				.add(KotlinGeneratedFilter.KOTLIN_METADATA_DESC);
+		m.visitVarInsn(Opcodes.ALOAD, 0);
+		m.visitMethodInsn(Opcodes.INVOKESTATIC, "ExampleKt", "example",
+				"(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", false);
+		m.visitInsn(Opcodes.RETURN);
+
+		filter.filter(m, context, output);
+
+		assertMethodIgnored(m);
+	}
+
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java
index 2a930d0..45b9135 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -313,7 +314,7 @@
 
 	/**
 	 * ECJ for
-	 * 
+	 *
 	 * <pre>
 	 *     try (r1 = ...; r2 = ...; r3 = ...) {
 	 *         return ...
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11FilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11FilterTest.java
index cab9ee1..5f20c8e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11FilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11FilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -49,8 +50,8 @@
 
 		m.visitVarInsn(Opcodes.ALOAD, 0);
 		range1.fromInclusive = m.instructions.getLast();
-		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close",
-			"()V", false);
+		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close", "()V",
+				false);
 		m.visitJumpInsn(Opcodes.GOTO, e);
 		range1.toInclusive = m.instructions.getLast();
 
@@ -58,15 +59,15 @@
 		range2.fromInclusive = m.instructions.getLast();
 		m.visitVarInsn(Opcodes.ASTORE, 1);
 		m.visitVarInsn(Opcodes.ALOAD, 0);
-		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close",
-			"()V", false);
+		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close", "()V",
+				false);
 		m.visitJumpInsn(Opcodes.GOTO, t);
 
 		m.visitVarInsn(Opcodes.ASTORE, 2);
 		m.visitVarInsn(Opcodes.ALOAD, 1);
 		m.visitVarInsn(Opcodes.ALOAD, 2);
 		m.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Throwable",
-			"addSuppressed", "(Ljava/lang/Throwable;)V", false);
+				"addSuppressed", "(Ljava/lang/Throwable;)V", false);
 		m.visitLabel(t);
 		m.visitVarInsn(Opcodes.ALOAD, 1);
 		m.visitInsn(Opcodes.ATHROW);
@@ -103,8 +104,8 @@
 		range1.fromInclusive = m.instructions.getLast();
 		m.visitJumpInsn(Opcodes.IFNULL, e);
 		m.visitVarInsn(Opcodes.ALOAD, 0);
-		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close",
-				"()V", false);
+		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close", "()V",
+				false);
 		m.visitJumpInsn(Opcodes.GOTO, e);
 		range1.toInclusive = m.instructions.getLast();
 
@@ -114,8 +115,8 @@
 		m.visitVarInsn(Opcodes.ALOAD, 0);
 		m.visitJumpInsn(Opcodes.IFNULL, t);
 		m.visitVarInsn(Opcodes.ALOAD, 0);
-		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close",
-				"()V", false);
+		m.visitMethodInsn(Opcodes.INVOKEINTERFACE, "Resource", "close", "()V",
+				false);
 		m.visitJumpInsn(Opcodes.GOTO, t);
 
 		m.visitVarInsn(Opcodes.ASTORE, 2);
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java
index 002ad33..8e414f2 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilterTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -222,7 +223,7 @@
 
 	/**
 	 * javac 7 and 8 for
-	 * 
+	 *
 	 * <pre>
 	 *     try (r0 = ...; r1 = ...) {
 	 *         return ...
@@ -539,7 +540,7 @@
 
 	/**
 	 * javac 9 for
-	 * 
+	 *
 	 * <pre>
 	 *     try (r = new ...) {
 	 *         ...
@@ -705,7 +706,7 @@
 
 	/**
 	 * javac 9 for
-	 * 
+	 *
 	 * <pre>
 	 *     try (r = new ...) {
 	 *       throw ...
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/data/CRC64Test.java b/org.jacoco.core.test/src/org/jacoco/core/internal/data/CRC64Test.java
index 821e2fa..d477b74 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/data/CRC64Test.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/data/CRC64Test.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.data;
 
@@ -60,7 +61,7 @@
 
 	/**
 	 * Example taken from http://swissknife.sourceforge.net/docs/CRC64.html
-	 * 
+	 *
 	 * @throws UnsupportedEncodingException
 	 */
 	@Test
@@ -71,26 +72,26 @@
 
 	/**
 	 * Example generated with http://fsumfe.sourceforge.net/
-	 * 
+	 *
 	 * @throws UnsupportedEncodingException
 	 */
 	@Test
 	public void test2() {
-		final long sum = CRC64.classId(new byte[] { (byte) 0xff, (byte) 0xff,
-				(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
-				(byte) 0xff, (byte) 0xff });
+		final long sum = CRC64.classId(
+				new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
+						(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff });
 		assertEquals(0x5300000000000000L, sum);
 	}
 
 	/**
 	 * Example generated with http://fsumfe.sourceforge.net/
-	 * 
+	 *
 	 * @throws UnsupportedEncodingException
 	 */
 	@Test
 	public void test3() throws UnsupportedEncodingException {
-		final long sum = CRC64.classId("JACOCO_JACOCO_JACOCO_JACOCO"
-				.getBytes("ASCII"));
+		final long sum = CRC64
+				.classId("JACOCO_JACOCO_JACOCO_JACOCO".getBytes("ASCII"));
 		assertEquals(0xD8016B38AAD48308L, sum);
 	}
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/data/CompactDataInputOutputTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/data/CompactDataInputOutputTest.java
index 798bf0d..26bbef9 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/data/CompactDataInputOutputTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/data/CompactDataInputOutputTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.data;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/ClassProbesAdapterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/ClassProbesAdapterTest.java
index bc9be31..211433e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/ClassProbesAdapterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/ClassProbesAdapterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -31,14 +32,14 @@
 		boolean frame = false;
 
 		@Override
-		public void visitJumpInsnWithProbe(int opcode, Label label,
-				int probeId, IFrame frame) {
+		public void visitJumpInsnWithProbe(int opcode, Label label, int probeId,
+				IFrame frame) {
 			frame.accept(this);
 		}
 
 		@Override
-		public void visitTableSwitchInsnWithProbes(int min, int max,
-				Label dflt, Label[] labels, IFrame frame) {
+		public void visitTableSwitchInsnWithProbes(int min, int max, Label dflt,
+				Label[] labels, IFrame frame) {
 			frame.accept(this);
 		}
 
@@ -49,8 +50,8 @@
 		}
 
 		@Override
-		public void visitFrame(int type, int nLocal, Object[] local,
-				int nStack, Object[] stack) {
+		public void visitFrame(int type, int nLocal, Object[] local, int nStack,
+				Object[] stack) {
 			frame = true;
 		}
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/FrameSnapshotTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/FrameSnapshotTest.java
index c78fe44..f757808 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/FrameSnapshotTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/FrameSnapshotTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelFlowAnalyzerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelFlowAnalyzerTest.java
index b7ac258..ff6c4ed 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelFlowAnalyzerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelFlowAnalyzerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -127,8 +128,8 @@
 	public void testFlowScenario11() {
 		// Even if the same label is referenced multiple times but from the same
 		// source instruction this is only counted as one target.
-		analyzer.visitLookupSwitchInsn(label, new int[] { 0, 1 }, new Label[] {
-				label, label });
+		analyzer.visitLookupSwitchInsn(label, new int[] { 0, 1 },
+				new Label[] { label, label });
 		assertFalse(LabelInfo.isMultiTarget(label));
 		assertFalse(LabelInfo.isSuccessor(label));
 	}
@@ -137,7 +138,8 @@
 	public void testFlowScenario12() {
 		// Even if the same label is referenced multiple times but from the same
 		// source instruction this is only counted as one target.
-		analyzer.visitTableSwitchInsn(0, 1, label, new Label[] { label, label });
+		analyzer.visitTableSwitchInsn(0, 1, label,
+				new Label[] { label, label });
 		assertFalse(LabelInfo.isMultiTarget(label));
 		assertFalse(LabelInfo.isSuccessor(label));
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelInfoTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelInfoTest.java
index 2ca1339..ea7c17c 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelInfoTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/LabelInfoTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodProbesAdapterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodProbesAdapterTest.java
index ad32aea..3333790 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodProbesAdapterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodProbesAdapterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -63,16 +64,16 @@
 		}
 
 		@Override
-		public void visitJumpInsnWithProbe(int opcode, Label label,
-				int probeId, IFrame frame) {
+		public void visitJumpInsnWithProbe(int opcode, Label label, int probeId,
+				IFrame frame) {
 			rec("visitJumpInsnWithProbe", Integer.valueOf(opcode), label,
 					Integer.valueOf(probeId));
 			frame.accept(this);
 		}
 
 		@Override
-		public void visitTableSwitchInsnWithProbes(int min, int max,
-				Label dflt, Label[] labels, IFrame frame) {
+		public void visitTableSwitchInsnWithProbes(int min, int max, Label dflt,
+				Label[] labels, IFrame frame) {
 			rec("visitTableSwitchInsnWithProbes", Integer.valueOf(min),
 					Integer.valueOf(max), dflt, labels);
 			frame.accept(this);
@@ -170,10 +171,10 @@
 
 		adapter.visitJumpInsn(Opcodes.GOTO, label);
 
-		expectedVisitor
-				.visitJumpInsnWithProbe(Opcodes.GOTO, label, 1000, frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitJumpInsnWithProbe(Opcodes.GOTO, label, 1000,
+				frame);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 	}
 
 	@Test
@@ -185,10 +186,10 @@
 		adapter.visitJumpInsn(Opcodes.IFLT, label);
 
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
-		expectedVisitor
-				.visitJumpInsnWithProbe(Opcodes.IFLT, label, 1000, frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitJumpInsnWithProbe(Opcodes.IFLT, label, 1000,
+				frame);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 	}
 
 	@Test
@@ -213,8 +214,8 @@
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
 		expectedVisitor.visitJumpInsnWithProbe(Opcodes.IF_ICMPEQ, label, 1000,
 				frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 	}
 
 	@Test
@@ -230,8 +231,8 @@
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
 		expectedVisitor.visitLookupSwitchInsnWithProbes(label, keys, labels,
 				frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 		assertEquals(1000, LabelInfo.getProbeId(label));
 	}
 
@@ -249,8 +250,8 @@
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
 		expectedVisitor.visitLookupSwitchInsnWithProbes(label, keys, labels,
 				frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 		assertEquals(LabelInfo.NO_PROBE, LabelInfo.getProbeId(label));
 		assertEquals(1000, LabelInfo.getProbeId(label2));
 	}
@@ -278,8 +279,8 @@
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
 		expectedVisitor.visitTableSwitchInsnWithProbes(0, 1, label, labels,
 				frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 		assertEquals(1000, LabelInfo.getProbeId(label));
 	}
 
@@ -296,8 +297,8 @@
 		expectedVisitor.visitInsn(Opcodes.ICONST_0);
 		expectedVisitor.visitTableSwitchInsnWithProbes(0, 1, label, labels,
 				frame);
-		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" },
-				0, null);
+		expectedVisitor.visitFrame(Opcodes.F_FULL, 1, new Object[] { "Foo" }, 0,
+				null);
 		assertEquals(LabelInfo.NO_PROBE, LabelInfo.getProbeId(label));
 		assertEquals(1000, LabelInfo.getProbeId(label2));
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodSanitizerTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodSanitizerTest.java
index d472405..08ac10d 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodSanitizerTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/flow/MethodSanitizerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ClassInstrumenterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ClassInstrumenterTest.java
index c5ef820..7ae215d 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ClassInstrumenterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ClassInstrumenterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -27,9 +28,9 @@
 
 	@Before
 	public void setup() {
-		instrumenter = new ClassInstrumenter(this, new ClassVisitor(
-				InstrSupport.ASM_API_VERSION) {
-		});
+		instrumenter = new ClassInstrumenter(this,
+				new ClassVisitor(InstrSupport.ASM_API_VERSION) {
+				});
 	}
 
 	@Test(expected = IllegalStateException.class)
@@ -48,14 +49,15 @@
 
 	@Test
 	public void testNoMethodVisitor() {
-		instrumenter = new ClassInstrumenter(this, new ClassVisitor(
-				InstrSupport.ASM_API_VERSION) {
-			@Override
-			public MethodVisitor visitMethod(int access, String name,
-					String desc, String signature, String[] exceptions) {
-				return null;
-			}
-		});
+		instrumenter = new ClassInstrumenter(this,
+				new ClassVisitor(InstrSupport.ASM_API_VERSION) {
+					@Override
+					public MethodVisitor visitMethod(int access, String name,
+							String desc, String signature,
+							String[] exceptions) {
+						return null;
+					}
+				});
 		assertNull(instrumenter.visitMethod(0, "foo", "()V", null, null));
 	}
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategyTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategyTest.java
index 6397a59..af97add 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategyTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategyTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/DuplicateFrameEliminatorTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/DuplicateFrameEliminatorTest.java
index 4098189..8183e8f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/DuplicateFrameEliminatorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/DuplicateFrameEliminatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -82,14 +83,14 @@
 
 	@Test
 	public void testTypeInsn() {
-		testInstructionBetweenFrames(new TypeInsnNode(Opcodes.NEW,
-				"java/lang/Object"));
+		testInstructionBetweenFrames(
+				new TypeInsnNode(Opcodes.NEW, "java/lang/Object"));
 	}
 
 	@Test
 	public void testFieldInsn() {
-		testInstructionBetweenFrames(new FieldInsnNode(Opcodes.GETFIELD, "Foo",
-				"f", "I"));
+		testInstructionBetweenFrames(
+				new FieldInsnNode(Opcodes.GETFIELD, "Foo", "f", "I"));
 	}
 
 	@Test
@@ -106,8 +107,8 @@
 
 	@Test
 	public void testJumpInsn() {
-		testInstructionBetweenFrames(new JumpInsnNode(Opcodes.GOTO,
-				new LabelNode()));
+		testInstructionBetweenFrames(
+				new JumpInsnNode(Opcodes.GOTO, new LabelNode()));
 	}
 
 	@Test
@@ -134,8 +135,8 @@
 
 	@Test
 	public void testMultiANewArrayInsn() {
-		testInstructionBetweenFrames(new MultiANewArrayInsnNode(
-				"java/lang/String", 4));
+		testInstructionBetweenFrames(
+				new MultiANewArrayInsnNode("java/lang/String", 4));
 	}
 
 	private void testInstructionBetweenFrames(AbstractInsnNode node) {
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java
index 8345ac1..6a47d55 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/InstrSupportTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -15,11 +16,10 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
@@ -36,9 +36,6 @@
 	private Printer printer;
 	private TraceMethodVisitor trace;
 
-	@Rule
-	public ExpectedException exception = ExpectedException.none();
-
 	@Before
 	public void setup() {
 		printer = new Textifier();
@@ -46,8 +43,8 @@
 	}
 
 	@Test
-	public void classReaderFor_should_read_java_13_class() {
-		final byte[] bytes = createJava13Class();
+	public void classReaderFor_should_read_java_16_class() {
+		final byte[] bytes = createJava16Class();
 
 		final ClassReader classReader = InstrSupport.classReaderFor(bytes);
 
@@ -56,16 +53,16 @@
 			public void visit(final int version, final int access,
 					final String name, final String signature,
 					final String superName, final String[] interfaces) {
-				assertEquals(Opcodes.V12 + 1, version);
+				assertEquals(Opcodes.V16, version);
 			}
 		}, 0);
 
-		assertArrayEquals(createJava13Class(), bytes);
+		assertArrayEquals(createJava16Class(), bytes);
 	}
 
-	private static byte[] createJava13Class() {
+	private static byte[] createJava16Class() {
 		final ClassWriter cw = new ClassWriter(0);
-		cw.visit(Opcodes.V12 + 1, 0, "Foo", null, "java/lang/Object", null);
+		cw.visit(Opcodes.V16, 0, "Foo", null, "java/lang/Object", null);
 		cw.visitEnd();
 		return cw.toByteArray();
 	}
@@ -127,7 +124,10 @@
 		assertTrue(InstrSupport.needsFrames(Opcodes.V10));
 		assertTrue(InstrSupport.needsFrames(Opcodes.V11));
 		assertTrue(InstrSupport.needsFrames(Opcodes.V12));
-		assertTrue(InstrSupport.needsFrames(Opcodes.V12 + 1));
+		assertTrue(InstrSupport.needsFrames(Opcodes.V13));
+		assertTrue(InstrSupport.needsFrames(Opcodes.V14));
+		assertTrue(InstrSupport.needsFrames(Opcodes.V15));
+		assertTrue(InstrSupport.needsFrames(Opcodes.V16));
 
 		assertTrue(InstrSupport.needsFrames(0x0100));
 	}
@@ -139,20 +139,26 @@
 
 	@Test
 	public void assertNotIntrumented_should_throw_exception_when_jacoco_data_field_is_present() {
-		exception.expect(IllegalStateException.class);
-		exception.expectMessage(
-				"Cannot process instrumented class Foo. Please supply original non-instrumented classes.");
-
-		InstrSupport.assertNotInstrumented("$jacocoData", "Foo");
+		try {
+			InstrSupport.assertNotInstrumented("$jacocoData", "Foo");
+			fail("exception expected");
+		} catch (IllegalStateException e) {
+			assertEquals(
+					"Cannot process instrumented class Foo. Please supply original non-instrumented classes.",
+					e.getMessage());
+		}
 	}
 
 	@Test
 	public void assertNotIntrumented_should_throw_exception_when_jacoco_init_method_is_present() {
-		exception.expect(IllegalStateException.class);
-		exception.expectMessage(
-				"Cannot process instrumented class Foo. Please supply original non-instrumented classes.");
-
-		InstrSupport.assertNotInstrumented("$jacocoInit", "Foo");
+		try {
+			InstrSupport.assertNotInstrumented("$jacocoInit", "Foo");
+			fail("exception expected");
+		} catch (IllegalStateException e) {
+			assertEquals(
+					"Cannot process instrumented class Foo. Please supply original non-instrumented classes.",
+					e.getMessage());
+		}
 	}
 
 	@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/MethodInstrumenterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/MethodInstrumenterTest.java
index 0d253fc..0c5658b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/MethodInstrumenterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/MethodInstrumenterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -195,8 +196,8 @@
 		final Label L2 = new Label();
 		LabelInfo.setProbeId(L0, 0);
 		LabelInfo.setProbeId(L1, 1);
-		instrumenter.visitTableSwitchInsnWithProbes(3, 5, L0, new Label[] { L1,
-				L1, L2 }, frame);
+		instrumenter.visitTableSwitchInsnWithProbes(3, 5, L0,
+				new Label[] { L1, L1, L2 }, frame);
 
 		expectedVisitor.visitTableSwitchInsn(3, 4, L0,
 				new Label[] { L1, L1, L2 });
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategyTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategyTest.java
index 0c21f02..682dd97 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategyTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategyTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactoryTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactoryTest.java
index f1d1282..dab3bf0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactoryTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactoryTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeCounterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeCounterTest.java
index 8695625..6ed002a 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeCounterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeCounterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
index c086f51..fa42be8 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/ProbeInserterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -18,8 +19,10 @@
 import org.junit.Before;
 import org.junit.Test;
 import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.TypeReference;
 
 /**
  * Unit tests for {@link ProbeInserter}.
@@ -39,7 +42,8 @@
 		expected = new MethodRecorder();
 		expectedVisitor = expected.getVisitor();
 		arrayStrategy = new IProbeArrayStrategy() {
-			public int storeInstance(MethodVisitor mv, boolean clinit, int variable) {
+			public int storeInstance(MethodVisitor mv, boolean clinit,
+					int variable) {
 				mv.visitLdcInsn(clinit ? "clinit" : "init");
 				return 5;
 			}
@@ -183,6 +187,28 @@
 	}
 
 	@Test
+	public void should_remap_LocalVariableAnnotation() {
+		ProbeInserter pi = new ProbeInserter(0, "m", "(I)V", actualVisitor,
+				arrayStrategy);
+
+		final Label start = new Label();
+		pi.visitLabel(start);
+		final Label end = new Label();
+		pi.visitLabel(end);
+
+		pi.visitLocalVariableAnnotation(TypeReference.LOCAL_VARIABLE, null,
+				new Label[] { start }, new Label[] { end }, new int[] { 2 },
+				"LNonNull;", false);
+
+		expectedVisitor.visitLabel(start);
+		expectedVisitor.visitLabel(end);
+		// Local variables are shifted by one:
+		expectedVisitor.visitLocalVariableAnnotation(
+				TypeReference.LOCAL_VARIABLE, null, new Label[] { start },
+				new Label[] { end }, new int[] { 3 }, "LNonNull;", false);
+	}
+
+	@Test
 	public void testVisitMaxs1() {
 		ProbeInserter pi = new ProbeInserter(0, "m", "(II)V", actualVisitor,
 				arrayStrategy);
@@ -209,11 +235,13 @@
 		ProbeInserter pi = new ProbeInserter(0, "m", "(J)V", actualVisitor,
 				arrayStrategy);
 
-		pi.visitFrame(Opcodes.F_NEW, 3, new Object[] { "Foo", Opcodes.LONG,
-				"java/lang/String" }, 0, new Object[0]);
+		pi.visitFrame(Opcodes.F_NEW, 3,
+				new Object[] { "Foo", Opcodes.LONG, "java/lang/String" }, 0,
+				new Object[0]);
 
-		expectedVisitor.visitFrame(Opcodes.F_NEW, 4, new Object[] { "Foo",
-				Opcodes.LONG, "[Z", "java/lang/String" }, 0, new Object[0]);
+		expectedVisitor.visitFrame(Opcodes.F_NEW, 4,
+				new Object[] { "Foo", Opcodes.LONG, "[Z", "java/lang/String" },
+				0, new Object[0]);
 	}
 
 	@Test
@@ -235,8 +263,8 @@
 		pi.visitFrame(Opcodes.F_NEW, 2, new Object[] { Opcodes.DOUBLE, "Foo" },
 				0, new Object[0]);
 
-		expectedVisitor.visitFrame(Opcodes.F_NEW, 3, new Object[] { "[Z",
-				Opcodes.DOUBLE, "Foo" }, 0, new Object[0]);
+		expectedVisitor.visitFrame(Opcodes.F_NEW, 3,
+				new Object[] { "[Z", Opcodes.DOUBLE, "Foo" }, 0, new Object[0]);
 	}
 
 	@Test
@@ -247,8 +275,8 @@
 		pi.visitFrame(Opcodes.F_NEW, 0, new Object[] {}, 0, new Object[] {});
 
 		// The locals in this frame are filled with TOP up to the probe variable
-		expectedVisitor.visitFrame(Opcodes.F_NEW, 2, new Object[] {
-				Opcodes.TOP, "[Z", }, 0, new Object[] {});
+		expectedVisitor.visitFrame(Opcodes.F_NEW, 2,
+				new Object[] { Opcodes.TOP, "[Z", }, 0, new Object[] {});
 	}
 
 	@Test
@@ -259,8 +287,9 @@
 		pi.visitFrame(Opcodes.F_NEW, 0, new Object[] {}, 0, new Object[] {});
 
 		// The locals in this frame are filled with TOP up to the probe variable
-		expectedVisitor.visitFrame(Opcodes.F_NEW, 3, new Object[] {
-				Opcodes.TOP, Opcodes.TOP, "[Z", }, 0, new Object[] {});
+		expectedVisitor.visitFrame(Opcodes.F_NEW, 3,
+				new Object[] { Opcodes.TOP, Opcodes.TOP, "[Z", }, 0,
+				new Object[] {});
 	}
 
 	@Test
@@ -272,9 +301,11 @@
 				new Object[] {});
 
 		// The locals in this frame are filled with TOP up to the probe variable
-		expectedVisitor.visitFrame(Opcodes.F_NEW, 5, new Object[] {
-				Opcodes.DOUBLE, Opcodes.TOP, Opcodes.TOP, Opcodes.TOP, "[Z", },
-				0, new Object[] {});
+		expectedVisitor
+				.visitFrame(
+						Opcodes.F_NEW, 5, new Object[] { Opcodes.DOUBLE,
+								Opcodes.TOP, Opcodes.TOP, Opcodes.TOP, "[Z", },
+						0, new Object[] {});
 	}
 
 	@Test(expected = IllegalArgumentException.class)
diff --git a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/SignatureRemoverTest.java b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/SignatureRemoverTest.java
index 1500b7c..2c6078b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/internal/instr/SignatureRemoverTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/internal/instr/SignatureRemoverTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -111,14 +112,12 @@
 				+ "Name: org/jacoco/example/B.class\r\n" //
 				+ "OtherInfo: keep this\r\n" //
 				+ "\r\n";
-		assertEquals(
-				createManifest(expected.getBytes("ISO-8859-1")),
+		assertEquals(createManifest(expected.getBytes("ISO-8859-1")),
 				createManifest(out.toByteArray()));
 	}
 
 	private static Manifest createManifest(final byte[] bytes)
 			throws IOException {
-		return new Manifest(
-				new ByteArrayInputStream(bytes));
+		return new Manifest(new ByteArrayInputStream(bytes));
 	}
 }
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/AgentOptionsTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/AgentOptionsTest.java
index b811b52..5518c81 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/AgentOptionsTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/AgentOptionsTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -95,7 +96,8 @@
 		assertFalse(options.getAppend());
 		assertEquals("org.*:com.*", options.getIncludes());
 		assertEquals("*Test", options.getExcludes());
-		assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader());
+		assertEquals("org.jacoco.test.TestLoader",
+				options.getExclClassloader());
 		assertTrue(options.getInclBootstrapClasses());
 		assertTrue(options.getInclNoLocationClasses());
 		assertEquals("testsession", options.getSessionId());
@@ -159,14 +161,16 @@
 	public void testGetExclClassloader() {
 		AgentOptions options = new AgentOptions(
 				"exclclassloader=org.jacoco.test.TestLoader");
-		assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader());
+		assertEquals("org.jacoco.test.TestLoader",
+				options.getExclClassloader());
 	}
 
 	@Test
 	public void testSetExclClassloader() {
 		AgentOptions options = new AgentOptions();
 		options.setExclClassloader("org.jacoco.test.TestLoader");
-		assertEquals("org.jacoco.test.TestLoader", options.getExclClassloader());
+		assertEquals("org.jacoco.test.TestLoader",
+				options.getExclClassloader());
 		assertEquals("exclclassloader=org.jacoco.test.TestLoader",
 				options.toString());
 	}
@@ -417,9 +421,8 @@
 
 		String vmArgument = options.getVMArgument(defaultAgentJarFile);
 
-		assertEquals(
-				String.format("-javaagent:%s=append=true",
-						defaultAgentJarFile.toString()), vmArgument);
+		assertEquals(String.format("-javaagent:%s=append=true",
+				defaultAgentJarFile.toString()), vmArgument);
 	}
 
 	@Test
@@ -452,22 +455,21 @@
 		String vmArgument = options.prependVMArguments("a b c",
 				defaultAgentJarFile);
 
-		assertEquals(
-				String.format("-javaagent:%s= a b c",
-						defaultAgentJarFile.toString()), vmArgument);
+		assertEquals(String.format("-javaagent:%s= a b c",
+				defaultAgentJarFile.toString()), vmArgument);
 	}
 
 	@Test
 	public void testPrependVMArgumentsReplace() {
 		AgentOptions options = new AgentOptions();
 
-		String vmArgument = options.prependVMArguments(String.format(
-				"a b -javaagent:%s=append=false c", defaultAgentJarFile),
+		String vmArgument = options.prependVMArguments(
+				String.format("a b -javaagent:%s=append=false c",
+						defaultAgentJarFile),
 				defaultAgentJarFile);
 
-		assertEquals(
-				String.format("-javaagent:%s= a b c",
-						defaultAgentJarFile.toString()), vmArgument);
+		assertEquals(String.format("-javaagent:%s= a b c",
+				defaultAgentJarFile.toString()), vmArgument);
 	}
 
 	@Test
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/CommandLineSupportTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/CommandLineSupportTest.java
index 0c7e9b1..23d24d4 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/CommandLineSupportTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/CommandLineSupportTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/InjectedClassRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/InjectedClassRuntimeTest.java
index c3fc800..2cce6bb 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/InjectedClassRuntimeTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/InjectedClassRuntimeTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -16,10 +17,10 @@
 
 import java.lang.reflect.InvocationTargetException;
 
+import org.junit.AssumptionViolatedException;
 import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.internal.AssumptionViolatedException;
 import org.junit.rules.TestName;
 
 /**
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/LoggerRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/LoggerRuntimeTest.java
index fcc66e5..f2325d6 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/LoggerRuntimeTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/LoggerRuntimeTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java
index e380427..d29e226 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/ModifiedSystemClassRuntimeTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -56,8 +57,9 @@
 	 * "java.lang.reflect.Module" introduced in JDK 9.
 	 */
 	private Instrumentation newInstrumentationMock() {
-		return (Instrumentation) Proxy.newProxyInstance(getClass()
-				.getClassLoader(), new Class[] { Instrumentation.class },
+		return (Instrumentation) Proxy.newProxyInstance(
+				getClass().getClassLoader(),
+				new Class[] { Instrumentation.class },
 				new MyInvocationHandler());
 	}
 
@@ -74,8 +76,8 @@
 			added = true;
 			try {
 				// Our class should get instrumented:
-				final byte[] data = TargetLoader
-						.getClassDataAsBytes(ModifiedSystemClassRuntimeTest.class);
+				final byte[] data = TargetLoader.getClassDataAsBytes(
+						ModifiedSystemClassRuntimeTest.class);
 				verifyInstrumentedClass(TARGET_CLASS_NAME,
 						transformer.transform((ClassLoader) null,
 								TARGET_CLASS_NAME, null, null, data));
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java
index 9a6707a..e77df50 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGeneratorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -99,13 +100,14 @@
 				null);
 
 		// Constructor
-		GeneratorAdapter gen = new GeneratorAdapter(writer.visitMethod(
-				Opcodes.ACC_PUBLIC, "<init>", "()V", null, new String[0]),
+		GeneratorAdapter gen = new GeneratorAdapter(
+				writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null,
+						new String[0]),
 				Opcodes.ACC_PUBLIC, "<init>", "()V");
 		gen.visitCode();
 		gen.loadThis();
-		gen.invokeConstructor(Type.getType(Object.class), new Method("<init>",
-				"()V"));
+		gen.invokeConstructor(Type.getType(Object.class),
+				new Method("<init>", "()V"));
 		gen.loadThis();
 		final int size = generator.generateDataAccessor(classid, className, 2,
 				gen);
@@ -116,8 +118,8 @@
 		gen.visitEnd();
 
 		// get()
-		gen = new GeneratorAdapter(writer.visitMethod(Opcodes.ACC_PUBLIC,
-				"get", "()[Z", null, new String[0]), Opcodes.ACC_PUBLIC, "get",
+		gen = new GeneratorAdapter(writer.visitMethod(Opcodes.ACC_PUBLIC, "get",
+				"()[Z", null, new String[0]), Opcodes.ACC_PUBLIC, "get",
 				"()[Z");
 		gen.visitCode();
 		gen.getStatic(classType, InstrSupport.DATAFIELD_NAME,
@@ -129,8 +131,9 @@
 		writer.visitEnd();
 
 		final TargetLoader loader = new TargetLoader();
-		return (ITarget) loader.add(className.replace('/', '.'),
-				writer.toByteArray()).newInstance();
+		return (ITarget) loader
+				.add(className.replace('/', '.'), writer.toByteArray())
+				.newInstance();
 	}
 
 	/**
@@ -140,7 +143,7 @@
 
 		/**
 		 * Returns a reference to the probe array.
-		 * 
+		 *
 		 * @return the probe array
 		 */
 		boolean[] get();
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/RemoteControlReaderWriterTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/RemoteControlReaderWriterTest.java
index 69203cb..66acdd7 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/RemoteControlReaderWriterTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/RemoteControlReaderWriterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -30,8 +31,8 @@
  * The tests don't care about the written binary format, they just verify
  * symmetry.
  */
-public class RemoteControlReaderWriterTest extends
-		ExecutionDataReaderWriterTest {
+public class RemoteControlReaderWriterTest
+		extends ExecutionDataReaderWriterTest {
 
 	private RemoteControlWriter writer;
 
@@ -93,8 +94,8 @@
 
 	@Override
 	protected RemoteControlReader createReader() throws IOException {
-		return new RemoteControlReader(new ByteArrayInputStream(
-				buffer.toByteArray()));
+		return new RemoteControlReader(
+				new ByteArrayInputStream(buffer.toByteArray()));
 	}
 
 	@Override
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java
index 272dc92..77ab454 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeDataTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -29,7 +30,7 @@
 
 /**
  * Unit tests for {@link RuntimeData}.
- * 
+ *
  */
 public class RuntimeDataTest {
 
@@ -138,8 +139,8 @@
 
 		writer.visitEnd();
 		final TargetLoader loader = new TargetLoader();
-		Callable<?> callable = (Callable<?>) loader.add("Sample",
-				writer.toByteArray()).newInstance();
+		Callable<?> callable = (Callable<?>) loader
+				.add("Sample", writer.toByteArray()).newInstance();
 		final Object[] args = (Object[]) callable.call();
 		assertEquals(3, args.length, 0.0);
 		assertEquals(Long.valueOf(1000), args[0]);
@@ -149,8 +150,8 @@
 
 	@Test
 	public void testGenerateAccessCall() throws Exception {
-		final boolean[] probes = data.getExecutionData(Long.valueOf(1234),
-				"Sample", 5).getProbes();
+		final boolean[] probes = data
+				.getExecutionData(Long.valueOf(1234), "Sample", 5).getProbes();
 
 		final ClassWriter writer = new ClassWriter(0);
 		writer.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "Sample", null,
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java
index 564b372..182060b 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/RuntimeTestBase.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -54,8 +55,8 @@
 	}
 
 	@Test
-	public void testDataAccessor() throws InstantiationException,
-			IllegalAccessException {
+	public void testDataAccessor()
+			throws InstantiationException, IllegalAccessException {
 		ITarget t = generateAndInstantiateClass(1234);
 		data.collect(storage, storage, false);
 		storage.assertData(1234, t.get());
@@ -64,18 +65,18 @@
 	@Test
 	public void testNoLocalVariablesInDataAccessor()
 			throws InstantiationException, IllegalAccessException {
-		runtime.generateDataAccessor(1001, "Target", 5, new MethodVisitor(
-				InstrSupport.ASM_API_VERSION) {
-			@Override
-			public void visitVarInsn(int opcode, int var) {
-				fail("No usage of local variables allowed.");
-			}
-		});
+		runtime.generateDataAccessor(1001, "Target", 5,
+				new MethodVisitor(InstrSupport.ASM_API_VERSION) {
+					@Override
+					public void visitVarInsn(int opcode, int var) {
+						fail("No usage of local variables allowed.");
+					}
+				});
 	}
 
 	@Test
-	public void testExecutionRecording() throws InstantiationException,
-			IllegalAccessException {
+	public void testExecutionRecording()
+			throws InstantiationException, IllegalAccessException {
 		generateAndInstantiateClass(1001).a();
 		data.collect(storage, storage, false);
 		storage.assertSize(1);
@@ -85,8 +86,8 @@
 	}
 
 	@Test
-	public void testLoadSameClassTwice() throws InstantiationException,
-			IllegalAccessException {
+	public void testLoadSameClassTwice()
+			throws InstantiationException, IllegalAccessException {
 		generateAndInstantiateClass(1001).a();
 		generateAndInstantiateClass(1001).b();
 		data.collect(storage, storage, false);
@@ -118,13 +119,14 @@
 				null);
 
 		// Constructor
-		GeneratorAdapter gen = new GeneratorAdapter(writer.visitMethod(
-				Opcodes.ACC_PUBLIC, "<init>", "()V", null, new String[0]),
+		GeneratorAdapter gen = new GeneratorAdapter(
+				writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null,
+						new String[0]),
 				Opcodes.ACC_PUBLIC, "<init>", "()V");
 		gen.visitCode();
 		gen.loadThis();
-		gen.invokeConstructor(Type.getType(Object.class), new Method("<init>",
-				"()V"));
+		gen.invokeConstructor(Type.getType(Object.class),
+				new Method("<init>", "()V"));
 		gen.loadThis();
 		final int size = runtime.generateDataAccessor(classid, className, 2,
 				gen);
@@ -135,8 +137,8 @@
 		gen.visitEnd();
 
 		// get()
-		gen = new GeneratorAdapter(writer.visitMethod(Opcodes.ACC_PUBLIC,
-				"get", "()[Z", null, new String[0]), Opcodes.ACC_PUBLIC, "get",
+		gen = new GeneratorAdapter(writer.visitMethod(Opcodes.ACC_PUBLIC, "get",
+				"()[Z", null, new String[0]), Opcodes.ACC_PUBLIC, "get",
 				"()[Z");
 		gen.visitCode();
 		gen.getStatic(classType, InstrSupport.DATAFIELD_NAME,
@@ -174,8 +176,9 @@
 		writer.visitEnd();
 
 		final TargetLoader loader = new TargetLoader();
-		return (ITarget) loader.add(className.replace('/', '.'),
-				writer.toByteArray()).newInstance();
+		return (ITarget) loader
+				.add(className.replace('/', '.'), writer.toByteArray())
+				.newInstance();
 	}
 
 	/**
@@ -186,7 +189,7 @@
 
 		/**
 		 * Returns a reference to the probe array.
-		 * 
+		 *
 		 * @return the probe array
 		 */
 		boolean[] get();
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/SystemPropertiesRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/SystemPropertiesRuntimeTest.java
index c058972..3f3d872 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/SystemPropertiesRuntimeTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/SystemPropertiesRuntimeTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/TestStorage.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/TestStorage.java
index 5698594..95393c0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/TestStorage.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/TestStorage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/URLStreamHandlerRuntimeTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/URLStreamHandlerRuntimeTest.java
deleted file mode 100644
index 51428a0..0000000
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/URLStreamHandlerRuntimeTest.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Marc R. Hoffmann - initial API and implementation
- *    
- *******************************************************************************/
-package org.jacoco.core.runtime;
-
-import org.junit.Assume;
-import org.junit.BeforeClass;
-
-/**
- * Unit tests for {@link URLStreamHandlerRuntime}.
- */
-public class URLStreamHandlerRuntimeTest extends RuntimeTestBase {
-
-	@Override
-	IRuntime createRuntime() {
-		return new URLStreamHandlerRuntime();
-	}
-
-	@BeforeClass
-	public static void checkJDK() {
-		final boolean jdk9 = System.getProperty("java.version")
-				.startsWith("9-");
-		Assume.assumeTrue(!jdk9);
-	}
-
-}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/runtime/WildcardMatcherTest.java b/org.jacoco.core.test/src/org/jacoco/core/runtime/WildcardMatcherTest.java
index 8f1313b..a403862 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/runtime/WildcardMatcherTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/WildcardMatcherTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java
index f3eb7e9..6b15866 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoader.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -52,6 +53,10 @@
 	protected synchronized Class<?> loadClass(String name, boolean resolve)
 			throws ClassNotFoundException {
 		if (name.startsWith(scope)) {
+			Class<?> c = findLoadedClass(name);
+			if (c != null) {
+				return c;
+			}
 			final byte[] bytes;
 			try {
 				bytes = TargetLoader.getClassDataAsBytes(delegate, name);
@@ -64,8 +69,7 @@
 			} catch (IOException e) {
 				throw new ClassNotFoundException("Unable to instrument", e);
 			}
-			final Class<?> c = defineClass(name, instrumented, 0,
-					instrumented.length);
+			c = defineClass(name, instrumented, 0, instrumented.length);
 			if (resolve) {
 				resolveClass(c);
 			}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoaderTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoaderTest.java
new file mode 100644
index 0000000..b9e5888
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/InstrumentingLoaderTest.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertSame;
+
+/**
+ * Unit test for {@link InstrumentingLoader}.
+ */
+public class InstrumentingLoaderTest {
+
+	@Test
+	public void should_use_findLoadedClass() throws Exception {
+		final InstrumentingLoader loader = new InstrumentingLoader(
+				InstrumentingLoaderTest.class);
+		final Class<?> c1 = loader
+				.loadClass(InstrumentingLoaderTest.class.getName());
+		final Class<?> c2 = loader
+				.loadClass(InstrumentingLoaderTest.class.getName());
+		assertSame(c1, c2);
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
index 3418c63..6fb0c42 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/TargetLoader.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test;
 
@@ -61,7 +62,8 @@
 		return readBytes(getClassData(loader, name));
 	}
 
-	public static byte[] getClassDataAsBytes(Class<?> clazz) throws IOException {
+	public static byte[] getClassDataAsBytes(Class<?> clazz)
+			throws IOException {
 		return readBytes(getClassData(clazz));
 	}
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
index dc155e1..ce0b32f 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/AnalysisTimeScenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
index 20bd02a..a2037d4 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/ExecuteInstrumentedCodeScenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
index 440f10e..1ecbcfb 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
@@ -22,7 +23,7 @@
 	/**
 	 * Reports the result of a time measurement with a optional reference time
 	 * for comparison.
-	 * 
+	 *
 	 * @param description
 	 *            textual description of the test case
 	 * @param duration
@@ -35,7 +36,7 @@
 	/**
 	 * Reports the result of a byte size measurement with a optional reference
 	 * size for comparison.
-	 * 
+	 *
 	 * @param description
 	 *            textual description of the test case
 	 * @param size
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
index ca5590f..897669e 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/IPerfScenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
@@ -19,7 +20,7 @@
 	/**
 	 * Runs the performance scenario and reports the result to the given
 	 * interface.
-	 * 
+	 *
 	 * @param output
 	 */
 	void run(IPerfOutput output) throws Exception;
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
index 27e0545..c50e478 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationSizeSzenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
index 3ecbbed..7da0157 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/InstrumentationTimeScenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
@@ -27,7 +28,8 @@
 	private final int count;
 
 	protected InstrumentationTimeScenario(Class<?> target, int count) {
-		super(String.format("instrumenting %s classes", Integer.valueOf(count)));
+		super(String.format("instrumenting %s classes",
+				Integer.valueOf(count)));
 		this.target = target;
 		this.count = count;
 	}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
index c6b5c4e..c569f85 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerfOutputWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
@@ -36,8 +37,10 @@
 				System.getProperty("java.vm.vendor"));
 		writer.printf("JVM Version:     %s%n%n",
 				System.getProperty("java.vm.version"));
-		writer.println("scenario                         instr     ref    overhead");
-		writer.println("----------------------------------------------------------");
+		writer.println(
+				"scenario                         instr     ref    overhead");
+		writer.println(
+				"----------------------------------------------------------");
 	}
 
 	public void writeTimeResult(final String description, final long duration,
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
index 32d99b0..3aa2547 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/PerformanceSuite.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
index fd71c51..efdc104 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/TimedScenario.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf;
 
@@ -41,7 +42,7 @@
 	/**
 	 * Runs the given subject several times and returns the minimum execution
 	 * time.
-	 * 
+	 *
 	 * @param subject
 	 * @return minimum execution time in nano seconds
 	 * @throws Exception
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
index 907e59e..e5454db 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target01.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf.targets;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
index ca29a13..d2ea795 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target02.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf.targets;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
index 9ce6bff..96317fc 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/perf/targets/Target03.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.perf.targets;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Compiler.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Compiler.java
index 622fca5..e44fca9 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Compiler.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Compiler.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersion.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersion.java
index 1fb5590..a12c068 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersion.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersion.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersionTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersionTest.java
index 389a242..c645665 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersionTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/JavaVersionTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
index fe9dde5..a6cda16 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/Source.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation;
 
@@ -91,7 +92,7 @@
 
 	/**
 	 * Reads a source file from the given reader.
-	 * 
+	 *
 	 * @param reader
 	 *            the reader to read from, will be closed
 	 * @param coverage
@@ -128,7 +129,7 @@
 
 	/**
 	 * Loads the source file which holds the given target class.
-	 * 
+	 *
 	 * @param target
 	 *            the target class we want the source for
 	 * @param bundle
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
index 45d5434..490e5d1 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/SourceTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation;
 
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutor.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutor.java
index 52bd95e..b88102a 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutor.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutor.java
@@ -1,65 +1,66 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.test.validation;

-

-import java.lang.reflect.InvocationTargetException;

-

-/**

- * Executes statements against a given Java object instance.

- */

-class StatementExecutor implements StatementParser.IStatementVisitor {

-

-	private final Object target;

-	private final Object[] prefixArgs;

-

-	StatementExecutor(Object target, Object... prefixArgs) {

-		this.target = target;

-		this.prefixArgs = prefixArgs;

-	}

-

-	public void visitInvocation(String ctx, String name, Object... args) {

-		args = concat(prefixArgs, args);

-		try {

-			target.getClass().getMethod(name, getTypes(args)).invoke(target,

-					args);

-		} catch (InvocationTargetException e) {

-			Throwable te = e.getTargetException();

-			if (te instanceof AssertionError) {

-				throw (AssertionError) te;

-			}

-			throw new RuntimeException("Invocation error (" + ctx + ")", te);

-		} catch (Exception e) {

-			throw new RuntimeException("Invocation error (" + ctx + ")", e);

-		}

-	}

-

-	private static Object[] concat(Object[] a, Object[] b) {

-		final Object[] result = new Object[a.length + b.length];

-		System.arraycopy(a, 0, result, 0, a.length);

-		System.arraycopy(b, 0, result, a.length, b.length);

-		return result;

-	}

-

-	private static Class<?>[] getTypes(Object[] instances) {

-		final Class<?>[] classes = new Class[instances.length];

-		for (int i = 0; i < instances.length; i++) {

-			Class<? extends Object> c = instances[i].getClass();

-			if (c == Integer.class) {

-				// We always use primitive int parameters:

-				c = Integer.TYPE;

-			}

-			classes[i] = c;

-		}

-		return classes;

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * Executes statements against a given Java object instance.
+ */
+class StatementExecutor implements StatementParser.IStatementVisitor {
+
+	private final Object target;
+	private final Object[] prefixArgs;
+
+	StatementExecutor(Object target, Object... prefixArgs) {
+		this.target = target;
+		this.prefixArgs = prefixArgs;
+	}
+
+	public void visitInvocation(String ctx, String name, Object... args) {
+		args = concat(prefixArgs, args);
+		try {
+			target.getClass().getMethod(name, getTypes(args)).invoke(target,
+					args);
+		} catch (InvocationTargetException e) {
+			Throwable te = e.getTargetException();
+			if (te instanceof AssertionError) {
+				throw (AssertionError) te;
+			}
+			throw new RuntimeException("Invocation error (" + ctx + ")", te);
+		} catch (Exception e) {
+			throw new RuntimeException("Invocation error (" + ctx + ")", e);
+		}
+	}
+
+	private static Object[] concat(Object[] a, Object[] b) {
+		final Object[] result = new Object[a.length + b.length];
+		System.arraycopy(a, 0, result, 0, a.length);
+		System.arraycopy(b, 0, result, a.length, b.length);
+		return result;
+	}
+
+	private static Class<?>[] getTypes(Object[] instances) {
+		final Class<?>[] classes = new Class[instances.length];
+		for (int i = 0; i < instances.length; i++) {
+			Class<? extends Object> c = instances[i].getClass();
+			if (c == Integer.class) {
+				// We always use primitive int parameters:
+				c = Integer.TYPE;
+			}
+			classes[i] = c;
+		}
+		return classes;
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutorTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutorTest.java
index b71c605..4f91198 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutorTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementExecutorTest.java
@@ -1,106 +1,110 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.test.validation;

-

-import static org.junit.Assert.assertEquals;

-

-import java.io.IOException;

-import java.util.Arrays;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-

-import org.junit.Before;

-import org.junit.Rule;

-import org.junit.Test;

-import org.junit.rules.ExpectedException;

-

-/**

- * Unit tests for {@link StatementExecutor}.

- */

-public class StatementExecutorTest {

-

-	@Rule

-	public ExpectedException exception = ExpectedException.none();

-

-	private Map<String, List<?>> invocations;

-

-	@Before

-	public void setup() {

-		invocations = new HashMap<String, List<?>>();

-	}

-

-	@Test

-	public void should_prefix_arguments() {

-		StatementExecutor executor = new StatementExecutor(this,

-				"Hello", "world");

-

-		executor.visitInvocation("ctx", "target1", "!");

-

-		assertEquals(Arrays.asList("Hello", "world", "!"),

-				invocations.get("target1"));

-	}

-

-	@Test

-	public void should_call_method_with_int_argument() {

-		StatementExecutor executor = new StatementExecutor(this);

-

-		executor.visitInvocation("ctx", "target2", Integer.valueOf(42));

-

-		assertEquals(Arrays.asList(Integer.valueOf(42)),

-				invocations.get("target2"));

-	}

-

-	@Test

-	public void should_preserve_AssertionError() {

-		exception.expect(AssertionError.class);

-		exception.expectMessage("Original AssertionError.");

-		StatementExecutor executor = new StatementExecutor(this);

-

-		executor.visitInvocation("ctx", "target3");

-	}

-

-	@Test

-	public void should_wrap_other_exceptions() {

-		exception.expect(RuntimeException.class);

-		exception.expectMessage("Invocation error (ctx)");

-		StatementExecutor executor = new StatementExecutor(this);

-

-		executor.visitInvocation("ctx", "target4");

-	}

-

-	@Test

-	public void should_throw_RuntimeException_when_method_cannot_be_invoked() {

-		exception.expect(RuntimeException.class);

-		exception.expectMessage("Invocation error (ctx)");

-		StatementExecutor executor = new StatementExecutor(this);

-

-		executor.visitInvocation("ctx", "doesNotExist");

-	}

-

-	public void target1(String a, String b, String c) {

-		invocations.put("target1", Arrays.asList(a, b, c));

-	}

-

-	public void target2(int i) {

-		invocations.put("target2", Arrays.asList(Integer.valueOf(i)));

-	}

-

-	public void target3() {

-		throw new AssertionError("Original AssertionError.");

-	}

-

-	public void target4() throws IOException {

-		throw new IOException("Original IOException.");

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for {@link StatementExecutor}.
+ */
+public class StatementExecutorTest {
+
+	private Map<String, List<?>> invocations;
+
+	@Before
+	public void setup() {
+		invocations = new HashMap<String, List<?>>();
+	}
+
+	@Test
+	public void should_prefix_arguments() {
+		StatementExecutor executor = new StatementExecutor(this, "Hello",
+				"world");
+
+		executor.visitInvocation("ctx", "target1", "!");
+
+		assertEquals(Arrays.asList("Hello", "world", "!"),
+				invocations.get("target1"));
+	}
+
+	@Test
+	public void should_call_method_with_int_argument() {
+		StatementExecutor executor = new StatementExecutor(this);
+
+		executor.visitInvocation("ctx", "target2", Integer.valueOf(42));
+
+		assertEquals(Arrays.asList(Integer.valueOf(42)),
+				invocations.get("target2"));
+	}
+
+	@Test
+	public void should_preserve_AssertionError() {
+		StatementExecutor executor = new StatementExecutor(this);
+		try {
+			executor.visitInvocation("ctx", "target3");
+			fail("exception expected");
+		} catch (AssertionError e) {
+			assertEquals("Original AssertionError.", e.getMessage());
+		}
+	}
+
+	@Test
+	public void should_wrap_other_exceptions() {
+		StatementExecutor executor = new StatementExecutor(this);
+		try {
+			executor.visitInvocation("ctx", "target4");
+			fail("exception expected");
+		} catch (RuntimeException e) {
+			assertEquals("Invocation error (ctx)", e.getMessage());
+			assertEquals("Original IOException.", e.getCause().getMessage());
+		}
+	}
+
+	@Test
+	public void should_throw_RuntimeException_when_method_cannot_be_invoked() {
+		StatementExecutor executor = new StatementExecutor(this);
+		try {
+			executor.visitInvocation("ctx", "doesNotExist");
+			fail("exception expected");
+		} catch (RuntimeException e) {
+			assertEquals("Invocation error (ctx)", e.getMessage());
+		}
+	}
+
+	public void target1(String a, String b, String c) {
+		invocations.put("target1", Arrays.asList(a, b, c));
+	}
+
+	public void target2(int i) {
+		invocations.put("target2", Arrays.asList(Integer.valueOf(i)));
+	}
+
+	public void target3() {
+		throw new AssertionError("Original AssertionError.");
+	}
+
+	public void target4() throws IOException {
+		throw new IOException("Original IOException.");
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParser.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParser.java
index 4008fc8..4084729 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParser.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParser.java
@@ -1,132 +1,133 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.test.validation;

-

-import java.io.IOException;

-import java.io.StreamTokenizer;

-import java.io.StringReader;

-import java.util.ArrayList;

-import java.util.List;

-

-/**

- * Simple parser for Java like method invocation statements. For example:

- * 

- * <pre>

- * foo("BAR", 42)

- * </pre>

- * 

- * Method parameters can only be String or int literals.

- */

-class StatementParser {

-

-	/**

-	 * Call-back interface for parsed statements.

-	 */

-	public interface IStatementVisitor {

-

-		/**

-		 * Called when a method invocation has been paresed.

-		 * 

-		 * @param ctx

-		 *            context information for error messages

-		 * @param name

-		 *            local method name

-		 * @param args

-		 *            argument values

-		 */

-		void visitInvocation(String ctx, String name, Object... args);

-

-	}

-

-	/**

-	 * Parses the given source.

-	 * 

-	 * @param source

-	 *            source string to parse

-	 * @param visitor

-	 *            visitor to emit parsed statements

-	 * @param ctx

-	 *            context information to include in error messages

-	 */

-	public static void parse(String source, IStatementVisitor visitor,

-			String ctx) throws IOException {

-		new StatementParser(source, visitor, ctx).parse();

-	}

-

-	private final IStatementVisitor visitor;

-	private final StreamTokenizer tokenizer;

-	private final String ctx;

-

-	private StatementParser(String source, IStatementVisitor visitor,

-			String ctx) {

-		this.visitor = visitor;

-		this.ctx = ctx;

-		tokenizer = new StreamTokenizer(new StringReader(source));

-		tokenizer.resetSyntax();

-		tokenizer.whitespaceChars(' ', ' ');

-		tokenizer.whitespaceChars('\t', '\t');

-		tokenizer.wordChars('a', 'z');

-		tokenizer.wordChars('A', 'Z');

-		tokenizer.quoteChar('"');

-		tokenizer.parseNumbers();

-	}

-

-	private void parse() throws IOException {

-		while (!accept(StreamTokenizer.TT_EOF)) {

-			invocation();

-		}

-	}

-

-	private void invocation() throws IOException {

-		final String name = expect(StreamTokenizer.TT_WORD).sval;

-		final List<Object> args = new ArrayList<Object>();

-		expect('(');

-		if (!accept(')')) {

-			args.add(argument());

-			while (!accept(')')) {

-				expect(',');

-				args.add(argument());

-			}

-		}

-		visitor.visitInvocation(ctx, name, args.toArray());

-	}

-

-	private Object argument() throws IOException {

-		if (accept(StreamTokenizer.TT_NUMBER)) {

-			return Integer.valueOf((int) tokenizer.nval);

-		}

-		if (accept('"')) {

-			return tokenizer.sval;

-		}

-		throw syntaxError();

-	}

-

-	private boolean accept(final int type) throws IOException {

-		final boolean match = tokenizer.nextToken() == type;

-		if (!match) {

-			tokenizer.pushBack();

-		}

-		return match;

-	}

-

-	private StreamTokenizer expect(final int type) throws IOException {

-		if (tokenizer.nextToken() != type) {

-			throw syntaxError();

-		}

-		return tokenizer;

-	}

-

-	private IOException syntaxError() {

-		return new IOException("Invalid syntax (" + ctx + ")");

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation;
+
+import java.io.IOException;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Simple parser for Java like method invocation statements. For example:
+ *
+ * <pre>
+ * foo("BAR", 42)
+ * </pre>
+ *
+ * Method parameters can only be String or int literals.
+ */
+class StatementParser {
+
+	/**
+	 * Call-back interface for parsed statements.
+	 */
+	public interface IStatementVisitor {
+
+		/**
+		 * Called when a method invocation has been paresed.
+		 *
+		 * @param ctx
+		 *            context information for error messages
+		 * @param name
+		 *            local method name
+		 * @param args
+		 *            argument values
+		 */
+		void visitInvocation(String ctx, String name, Object... args);
+
+	}
+
+	/**
+	 * Parses the given source.
+	 *
+	 * @param source
+	 *            source string to parse
+	 * @param visitor
+	 *            visitor to emit parsed statements
+	 * @param ctx
+	 *            context information to include in error messages
+	 */
+	public static void parse(String source, IStatementVisitor visitor,
+			String ctx) throws IOException {
+		new StatementParser(source, visitor, ctx).parse();
+	}
+
+	private final IStatementVisitor visitor;
+	private final StreamTokenizer tokenizer;
+	private final String ctx;
+
+	private StatementParser(String source, IStatementVisitor visitor,
+			String ctx) {
+		this.visitor = visitor;
+		this.ctx = ctx;
+		tokenizer = new StreamTokenizer(new StringReader(source));
+		tokenizer.resetSyntax();
+		tokenizer.whitespaceChars(' ', ' ');
+		tokenizer.whitespaceChars('\t', '\t');
+		tokenizer.wordChars('a', 'z');
+		tokenizer.wordChars('A', 'Z');
+		tokenizer.quoteChar('"');
+		tokenizer.parseNumbers();
+	}
+
+	private void parse() throws IOException {
+		while (!accept(StreamTokenizer.TT_EOF)) {
+			invocation();
+		}
+	}
+
+	private void invocation() throws IOException {
+		final String name = expect(StreamTokenizer.TT_WORD).sval;
+		final List<Object> args = new ArrayList<Object>();
+		expect('(');
+		if (!accept(')')) {
+			args.add(argument());
+			while (!accept(')')) {
+				expect(',');
+				args.add(argument());
+			}
+		}
+		visitor.visitInvocation(ctx, name, args.toArray());
+	}
+
+	private Object argument() throws IOException {
+		if (accept(StreamTokenizer.TT_NUMBER)) {
+			return Integer.valueOf((int) tokenizer.nval);
+		}
+		if (accept('"')) {
+			return tokenizer.sval;
+		}
+		throw syntaxError();
+	}
+
+	private boolean accept(final int type) throws IOException {
+		final boolean match = tokenizer.nextToken() == type;
+		if (!match) {
+			tokenizer.pushBack();
+		}
+		return match;
+	}
+
+	private StreamTokenizer expect(final int type) throws IOException {
+		if (tokenizer.nextToken() != type) {
+			throw syntaxError();
+		}
+		return tokenizer;
+	}
+
+	private IOException syntaxError() {
+		return new IOException("Invalid syntax (" + ctx + ")");
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParserTest.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParserTest.java
index 7e7b780..7d200e0 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParserTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/StatementParserTest.java
@@ -1,140 +1,152 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.test.validation;

-

-import static org.junit.Assert.assertEquals;

-

-import java.io.IOException;

-import java.util.ArrayList;

-import java.util.Arrays;

-import java.util.List;

-

-import org.jacoco.core.test.validation.StatementParser.IStatementVisitor;

-import org.junit.After;

-import org.junit.Before;

-import org.junit.Rule;

-import org.junit.Test;

-import org.junit.rules.ExpectedException;

-

-/**

- * Unit tests for {@link StatementParser}

- */

-public class StatementParserTest {

-

-	private IStatementVisitor visitor;

-

-	private List<String> actualInvocations;

-	private List<String> expectedInvocations;

-

-	@Rule

-	public ExpectedException exception = ExpectedException.none();

-

-	@Before

-	public void setup() {

-		actualInvocations = new ArrayList<String>();

-		expectedInvocations = new ArrayList<String>();

-		visitor = new IStatementVisitor() {

-			public void visitInvocation(String ctx, String name,

-					Object... args) {

-				actualInvocations.add(invocationStr(ctx, name, args));

-			}

-		};

-	}

-

-	@After

-	public void teardown() {

-		assertEquals(expectedInvocations, actualInvocations);

-	}

-

-	@Test

-	public void should_parse_empty_string() throws IOException {

-		StatementParser.parse("", visitor, "Foo.java");

-	}

-

-	@Test

-	public void should_parse_invocation_without_params() throws IOException {

-		StatementParser.parse("run()", visitor, "Foo.java");

-		expectInvocation("Foo.java", "run");

-	}

-

-	@Test

-	public void should_parse_invocation_with_one_int_parameter()

-			throws IOException {

-		StatementParser.parse("ask(42)", visitor, "Foo.java");

-		expectInvocation("Foo.java", "ask", Integer.valueOf(42));

-	}

-

-	@Test

-	public void should_parse_invocation_with_one_string_parameter()

-			throws IOException {

-		StatementParser.parse("say(\"hello\")", visitor, "Foo.java");

-		expectInvocation("Foo.java", "say", "hello");

-	}

-

-	@Test

-	public void should_parse_invocation_with_two_parameters()

-			throws IOException {

-		StatementParser.parse("add(1000, 234)", visitor, "Foo.java");

-		expectInvocation("Foo.java", "add", Integer.valueOf(1000),

-				Integer.valueOf(234));

-	}

-

-	@Test

-	public void should_parse_invocation_with_mixed_parameter_types()

-			throws IOException {

-		StatementParser.parse("mix(1, \"two\", 3)", visitor, "Foo.java");

-		expectInvocation("Foo.java", "mix", Integer.valueOf(1), "two",

-				Integer.valueOf(3));

-	}

-

-	@Test

-	public void should_parse_multiple_invocations() throws IOException {

-		StatementParser.parse("start() stop()", visitor, "Foo.java");

-		expectInvocation("Foo.java", "start");

-		expectInvocation("Foo.java", "stop");

-	}

-

-	@Test

-	public void should_fail_when_parenthesis_is_missing() throws IOException {

-		exception.expect(IOException.class);

-		StatementParser.parse("bad(", visitor, "Foo.java");

-	}

-

-	@Test

-	public void should_fail_when_argument1_is_missing() throws IOException {

-		exception.expect(IOException.class);

-		StatementParser.parse("bad(,2)", visitor, "Foo.java");

-	}

-

-	@Test

-	public void should_fail_when_argument2_is_missing() throws IOException {

-		exception.expect(IOException.class);

-		StatementParser.parse("bad(1,)", visitor, "Foo.java");

-	}

-

-	@Test

-	public void should_give_context_info_when_parsing_fails()

-			throws IOException {

-		exception.expect(IOException.class);

-		exception.expectMessage("Invalid syntax (Foo.java:32)");

-		StatementParser.parse("bad", visitor, "Foo.java:32");

-	}

-

-	private void expectInvocation(String ctx, String name, Object... args) {

-		expectedInvocations.add(invocationStr(ctx, name, args));

-	}

-

-	private String invocationStr(String ctx, String name, Object... args) {

-		return String.format("%s:%s%s", ctx, name, Arrays.asList(args));

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.test.validation;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.jacoco.core.test.validation.StatementParser.IStatementVisitor;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Unit tests for {@link StatementParser}
+ */
+public class StatementParserTest {
+
+	private IStatementVisitor visitor;
+
+	private List<String> actualInvocations;
+	private List<String> expectedInvocations;
+
+	@Before
+	public void setup() {
+		actualInvocations = new ArrayList<String>();
+		expectedInvocations = new ArrayList<String>();
+		visitor = new IStatementVisitor() {
+			public void visitInvocation(String ctx, String name,
+					Object... args) {
+				actualInvocations.add(invocationStr(ctx, name, args));
+			}
+		};
+	}
+
+	@After
+	public void teardown() {
+		assertEquals(expectedInvocations, actualInvocations);
+	}
+
+	@Test
+	public void should_parse_empty_string() throws IOException {
+		StatementParser.parse("", visitor, "Foo.java");
+	}
+
+	@Test
+	public void should_parse_invocation_without_params() throws IOException {
+		StatementParser.parse("run()", visitor, "Foo.java");
+		expectInvocation("Foo.java", "run");
+	}
+
+	@Test
+	public void should_parse_invocation_with_one_int_parameter()
+			throws IOException {
+		StatementParser.parse("ask(42)", visitor, "Foo.java");
+		expectInvocation("Foo.java", "ask", Integer.valueOf(42));
+	}
+
+	@Test
+	public void should_parse_invocation_with_one_string_parameter()
+			throws IOException {
+		StatementParser.parse("say(\"hello\")", visitor, "Foo.java");
+		expectInvocation("Foo.java", "say", "hello");
+	}
+
+	@Test
+	public void should_parse_invocation_with_two_parameters()
+			throws IOException {
+		StatementParser.parse("add(1000, 234)", visitor, "Foo.java");
+		expectInvocation("Foo.java", "add", Integer.valueOf(1000),
+				Integer.valueOf(234));
+	}
+
+	@Test
+	public void should_parse_invocation_with_mixed_parameter_types()
+			throws IOException {
+		StatementParser.parse("mix(1, \"two\", 3)", visitor, "Foo.java");
+		expectInvocation("Foo.java", "mix", Integer.valueOf(1), "two",
+				Integer.valueOf(3));
+	}
+
+	@Test
+	public void should_parse_multiple_invocations() throws IOException {
+		StatementParser.parse("start() stop()", visitor, "Foo.java");
+		expectInvocation("Foo.java", "start");
+		expectInvocation("Foo.java", "stop");
+	}
+
+	@Test
+	public void should_fail_when_parenthesis_is_missing() throws IOException {
+		try {
+			StatementParser.parse("bad(", visitor, "Foo.java");
+			fail("exception expected");
+		} catch (IOException e) {
+			// expected
+		}
+	}
+
+	@Test
+	public void should_fail_when_argument1_is_missing() throws IOException {
+		try {
+			StatementParser.parse("bad(,2)", visitor, "Foo.java");
+			fail("exception expected");
+		} catch (IOException e) {
+			// expected
+		}
+	}
+
+	@Test
+	public void should_fail_when_argument2_is_missing() throws IOException {
+		try {
+			StatementParser.parse("bad(1,)", visitor, "Foo.java");
+			fail("exception expected");
+		} catch (IOException e) {
+			// expected
+		}
+	}
+
+	@Test
+	public void should_give_context_info_when_parsing_fails()
+			throws IOException {
+		try {
+			StatementParser.parse("bad", visitor, "Foo.java:32");
+			fail("exception expected");
+		} catch (IOException e) {
+			assertEquals("Invalid syntax (Foo.java:32)", e.getMessage());
+		}
+	}
+
+	private void expectInvocation(String ctx, String name, Object... args) {
+		expectedInvocations.add(invocationStr(ctx, name, args));
+	}
+
+	private String invocationStr(String ctx, String name, Object... args) {
+		return String.format("%s:%s%s", ctx, name, Arrays.asList(args));
+	}
+
+}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
index bf96bbc..ab8be47 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/ValidationTestBase.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation;
 
@@ -98,7 +99,7 @@
 	/**
 	 * All single line comments are interpreted as statements in the following
 	 * format:
-	 * 
+	 *
 	 * <pre>
 	 * // statement1() statement2()
 	 * </pre>
@@ -123,6 +124,29 @@
 				source.getCoverage().getLastLine() <= source.getLines().size());
 	}
 
+	@Test
+	public void all_missed_instructions_should_have_line_number() {
+		CounterImpl c = CounterImpl.COUNTER_0_0;
+		for (Line line : source.getLines()) {
+			c = c.increment(line.getCoverage().getInstructionCounter());
+		}
+		assertEquals(
+				"sum of missed instructions of all lines should be equal to missed instructions of file",
+				source.getCoverage().getInstructionCounter().getMissedCount(),
+				c.getMissedCount());
+	}
+
+	@Test
+	public void all_branches_should_have_line_number() {
+		CounterImpl c = CounterImpl.COUNTER_0_0;
+		for (Line line : source.getLines()) {
+			c = c.increment(line.getCoverage().getBranchCounter());
+		}
+		assertEquals(
+				"sum of branch counters of all lines should be equal to branch counter of file",
+				source.getCoverage().getBranchCounter(), c);
+	}
+
 	/*
 	 * Predefined assertion methods:
 	 */
diff --git a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
index d5c1cbe..57b7883 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/test/validation/targets/Stubs.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.test.validation.targets;
 
@@ -39,6 +40,13 @@
 	}
 
 	/**
+	 * Enum stub.
+	 */
+	public static enum Enum {
+		A, B, C
+	}
+
+	/**
 	 * Dummy method.
 	 */
 	public static void nop() {
@@ -98,8 +106,15 @@
 	}
 
 	/**
+	 * @return always <code>A</code>
+	 */
+	public static Enum enumA() {
+		return Enum.A;
+	}
+
+	/**
 	 * Always throws a {@link RuntimeException}.
-	 * 
+	 *
 	 * @throws StubException
 	 *             always thrown
 	 */
diff --git a/org.jacoco.core.test/src/org/jacoco/core/tools/ExecDumpClientTest.java b/org.jacoco.core.test/src/org/jacoco/core/tools/ExecDumpClientTest.java
index 640f924..b943339 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/tools/ExecDumpClientTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/tools/ExecDumpClientTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.tools;
 
@@ -32,9 +33,7 @@
 import org.jacoco.core.runtime.RemoteControlWriter;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.ExpectedException;
 
 /**
  * Unit tests for {@link ExecDumpClient}.
@@ -49,9 +48,6 @@
 
 	private ServerSocket server;
 
-	@Rule
-	public ExpectedException exception = ExpectedException.none();
-
 	@Before
 	public void setup() {
 		callbacks = new ArrayList<String>();
@@ -135,11 +131,13 @@
 	@Test
 	public void should_throw_IOException_when_server_closes_connection_without_response()
 			throws IOException {
-		exception.expect(IOException.class);
-		exception.expectMessage("Socket closed unexpectedly.");
-
 		int port = createNopServer();
-		client.dump((String) null, port);
+		try {
+			client.dump((String) null, port);
+			fail("exception expected");
+		} catch (IOException e) {
+			assertEquals("Socket closed unexpectedly.", e.getMessage());
+		}
 	}
 
 	private int getFreePort() throws IOException {
diff --git a/org.jacoco.core.test/src/org/jacoco/core/tools/ExecFileLoaderTest.java b/org.jacoco.core.test/src/org/jacoco/core/tools/ExecFileLoaderTest.java
index 1214888..95dcb81 100644
--- a/org.jacoco.core.test/src/org/jacoco/core/tools/ExecFileLoaderTest.java
+++ b/org.jacoco.core.test/src/org/jacoco/core/tools/ExecFileLoaderTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.tools;
 
@@ -118,8 +119,8 @@
 		final FileOutputStream out = new FileOutputStream(file);
 		final ExecutionDataWriter writer = new ExecutionDataWriter(out);
 		final int value = id.length();
-		writer.visitClassExecution(new ExecutionData(value, id,
-				new boolean[] { true }));
+		writer.visitClassExecution(
+				new ExecutionData(value, id, new boolean[] { true }));
 		writer.visitSessionInfo(new SessionInfo(id, value, value));
 		out.close();
 		return file;
diff --git a/org.jacoco.core/.settings/org.eclipse.jdt.ui.prefs b/org.jacoco.core/.settings/org.eclipse.jdt.ui.prefs
index fd17991..a3dee78 100644
--- a/org.jacoco.core/.settings/org.eclipse.jdt.ui.prefs
+++ b/org.jacoco.core/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Thu Jul 02 08:43:37 CEST 2009

 eclipse.preferences.version=1

 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true

 formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile

@@ -11,15 +10,18 @@
 sp_cleanup.add_missing_methods=false

 sp_cleanup.add_missing_nls_tags=false

 sp_cleanup.add_missing_override_annotations=true

+sp_cleanup.add_missing_override_annotations_interface_methods=false

 sp_cleanup.add_serial_version_id=false

 sp_cleanup.always_use_blocks=true

 sp_cleanup.always_use_parentheses_in_expressions=false

 sp_cleanup.always_use_this_for_non_static_field_access=false

 sp_cleanup.always_use_this_for_non_static_method_access=false

+sp_cleanup.convert_functional_interfaces=false

 sp_cleanup.convert_to_enhanced_for_loop=false

 sp_cleanup.correct_indentation=false

 sp_cleanup.format_source_code=true

 sp_cleanup.format_source_code_changes_only=false

+sp_cleanup.insert_inferred_type_arguments=false

 sp_cleanup.make_local_variable_final=true

 sp_cleanup.make_parameters_final=true

 sp_cleanup.make_private_fields_final=true

@@ -32,10 +34,13 @@
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false

 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true

 sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true

-sp_cleanup.qualify_static_member_accesses_with_declaring_class=false

+sp_cleanup.qualify_static_member_accesses_with_declaring_class=true

 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false

 sp_cleanup.remove_private_constructors=true

-sp_cleanup.remove_trailing_whitespaces=false

+sp_cleanup.remove_redundant_modifiers=false

+sp_cleanup.remove_redundant_semicolons=false

+sp_cleanup.remove_redundant_type_arguments=false

+sp_cleanup.remove_trailing_whitespaces=true

 sp_cleanup.remove_trailing_whitespaces_all=true

 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false

 sp_cleanup.remove_unnecessary_casts=true

@@ -48,10 +53,14 @@
 sp_cleanup.remove_unused_private_types=true

 sp_cleanup.sort_members=false

 sp_cleanup.sort_members_all=false

+sp_cleanup.use_anonymous_class_creation=false

+sp_cleanup.use_autoboxing=false

 sp_cleanup.use_blocks=true

 sp_cleanup.use_blocks_only_for_return_and_throw=false

+sp_cleanup.use_lambda=false

 sp_cleanup.use_parentheses_in_expressions=false

 sp_cleanup.use_this_for_non_static_field_access=false

 sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true

 sp_cleanup.use_this_for_non_static_method_access=false

 sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true

+sp_cleanup.use_unboxing=false

diff --git a/org.jacoco.core/about.html b/org.jacoco.core/about.html
index d31112d..d03d4ab 100644
--- a/org.jacoco.core/about.html
+++ b/org.jacoco.core/about.html
@@ -9,19 +9,19 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.core/pom.xml b/org.jacoco.core/pom.xml
index 0bb5b2b..c704852 100644
--- a/org.jacoco.core/pom.xml
+++ b/org.jacoco.core/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.core/src/org/jacoco/core/JaCoCo.java b/org.jacoco.core/src/org/jacoco/core/JaCoCo.java
index ce9ec05..32ab808 100644
--- a/org.jacoco.core/src/org/jacoco/core/JaCoCo.java
+++ b/org.jacoco.core/src/org/jacoco/core/JaCoCo.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core;
 
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
index 7759b89..b3a34d2 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/Analyzer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -53,7 +54,7 @@
 
 	/**
 	 * Creates a new analyzer reporting to the given output.
-	 * 
+	 *
 	 * @param executionData
 	 *            execution data
 	 * @param coverageVisitor
@@ -69,7 +70,7 @@
 
 	/**
 	 * Creates an ASM class visitor for analysis.
-	 * 
+	 *
 	 * @param classid
 	 *            id of the class calculated with {@link CRC64}
 	 * @param className
@@ -119,7 +120,7 @@
 
 	/**
 	 * Analyzes the class definition from a given in-memory buffer.
-	 * 
+	 *
 	 * @param buffer
 	 *            class definitions
 	 * @param location
@@ -139,7 +140,7 @@
 	/**
 	 * Analyzes the class definition from a given input stream. The provided
 	 * {@link InputStream} is not closed by this method.
-	 * 
+	 *
 	 * @param input
 	 *            stream to read class definition from
 	 * @param location
@@ -172,7 +173,7 @@
 	 * archive or a gzip stream that is searched recursively for class files.
 	 * All other content types are ignored. The provided {@link InputStream} is
 	 * not closed by this method.
-	 * 
+	 *
 	 * @param input
 	 *            input data
 	 * @param location
@@ -208,7 +209,7 @@
 	 * Analyzes all class files contained in the given file or folder. Class
 	 * files as well as ZIP files are considered. Folders are searched
 	 * recursively.
-	 * 
+	 *
 	 * @param file
 	 *            file or folder to look for class files
 	 * @return number of class files found
@@ -235,7 +236,7 @@
 	/**
 	 * Analyzes all classes from the given class path. Directories containing
 	 * class files as well as archive files are considered.
-	 * 
+	 *
 	 * @param path
 	 *            path definition
 	 * @param basedir
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/CounterComparator.java b/org.jacoco.core/src/org/jacoco/core/analysis/CounterComparator.java
index 8a67b97..6fe69c6 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/CounterComparator.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/CounterComparator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -74,7 +75,7 @@
 
 	/**
 	 * Creates a new version of this comparator that sorts in reverse order.
-	 * 
+	 *
 	 * @return reverse comparator
 	 */
 	public CounterComparator reverse() {
@@ -84,7 +85,7 @@
 	/**
 	 * Creates a new comparator for {@link ICoverageNode} counters of the given
 	 * entity based on this counter sorting criteria.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity to sort on
 	 * @return comparator for {@link ICoverageNode} elements
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
index 784fbd8..2f99f0b 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageBuilder.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -26,7 +27,7 @@
  * {@link ICoverageVisitor} interface. Afterwards the aggregated data can be
  * obtained with {@link #getClasses()}, {@link #getSourceFiles()} or
  * {@link #getBundle(String)} in the following hierarchy:
- * 
+ *
  * <pre>
  * {@link IBundleCoverage}
  * +-- {@link IPackageCoverage}*
@@ -42,7 +43,7 @@
 
 	/**
 	 * Create a new builder.
-	 * 
+	 *
 	 */
 	public CoverageBuilder() {
 		this.classes = new HashMap<String, IClassCoverage>();
@@ -51,7 +52,7 @@
 
 	/**
 	 * Returns all class nodes currently contained in this builder.
-	 * 
+	 *
 	 * @return all class nodes
 	 */
 	public Collection<IClassCoverage> getClasses() {
@@ -60,7 +61,7 @@
 
 	/**
 	 * Returns all source file nodes currently contained in this builder.
-	 * 
+	 *
 	 * @return all source file nodes
 	 */
 	public Collection<ISourceFileCoverage> getSourceFiles() {
@@ -69,7 +70,7 @@
 
 	/**
 	 * Creates a bundle from all nodes currently contained in this bundle.
-	 * 
+	 *
 	 * @param name
 	 *            Name of the bundle
 	 * @return bundle containing all classes and source files
@@ -81,7 +82,7 @@
 
 	/**
 	 * Returns all classes for which execution data does not match.
-	 * 
+	 *
 	 * @see IClassCoverage#isNoMatch()
 	 * @return collection of classes with non-matching execution data
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
index 6be3bb6..db8045b 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/CoverageNodeImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -44,7 +45,7 @@
 
 	/**
 	 * Creates a new coverage data node.
-	 * 
+	 *
 	 * @param elementType
 	 *            type of the element represented by this instance
 	 * @param name
@@ -63,17 +64,17 @@
 
 	/**
 	 * Increments the counters by the values given by another element.
-	 * 
+	 *
 	 * @param child
 	 *            counters to add
 	 */
 	public void increment(final ICoverageNode child) {
-		instructionCounter = instructionCounter.increment(child
-				.getInstructionCounter());
+		instructionCounter = instructionCounter
+				.increment(child.getInstructionCounter());
 		branchCounter = branchCounter.increment(child.getBranchCounter());
 		lineCounter = lineCounter.increment(child.getLineCounter());
-		complexityCounter = complexityCounter.increment(child
-				.getComplexityCounter());
+		complexityCounter = complexityCounter
+				.increment(child.getComplexityCounter());
 		methodCounter = methodCounter.increment(child.getMethodCounter());
 		classCounter = classCounter.increment(child.getClassCounter());
 	}
@@ -81,7 +82,7 @@
 	/**
 	 * Increments the counters by the values given by the collection of
 	 * elements.
-	 * 
+	 *
 	 * @param children
 	 *            list of nodes, which counters will be added to this node
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/IBundleCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/IBundleCoverage.java
index d488f47..aa23a95 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/IBundleCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/IBundleCoverage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -15,14 +16,14 @@
 
 /**
  * Coverage data of a bundle. A bundle groups a collection of packages.
- * 
+ *
  * @see IPackageCoverage
  */
 public interface IBundleCoverage extends ICoverageNode {
 
 	/**
 	 * Returns all packages contained in this bundle.
-	 * 
+	 *
 	 * @return all packages
 	 */
 	Collection<IPackageCoverage> getPackages();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/IClassCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/IClassCoverage.java
index 81cc6fe..071c7c0 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/IClassCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/IClassCoverage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -16,7 +17,7 @@
 /**
  * Coverage data of a single class containing methods. The name of this node is
  * the fully qualified class name in VM notation (slash separated).
- * 
+ *
  * @see IMethodCoverage
  */
 public interface IClassCoverage extends ISourceNode {
@@ -24,7 +25,7 @@
 	/**
 	 * Returns the identifier for this class which is the CRC64 signature of the
 	 * class definition.
-	 * 
+	 *
 	 * @return class identifier
 	 */
 	long getId();
@@ -33,7 +34,7 @@
 	 * Returns if the the analyzed class does match the execution data provided.
 	 * More precisely if execution data is available for a class with the same
 	 * qualified name but with a different class id.
-	 * 
+	 *
 	 * @return <code>true</code> if this class does not match to the provided
 	 *         execution data.
 	 */
@@ -41,14 +42,14 @@
 
 	/**
 	 * Returns the VM signature of the class.
-	 * 
+	 *
 	 * @return VM signature of the class (may be <code>null</code>)
 	 */
 	String getSignature();
 
 	/**
 	 * Returns the VM name of the superclass.
-	 * 
+	 *
 	 * @return VM name of the super class (may be <code>null</code>, i.e.
 	 *         <code>java/lang/Object</code>)
 	 */
@@ -56,28 +57,28 @@
 
 	/**
 	 * Returns the VM names of implemented/extended interfaces.
-	 * 
+	 *
 	 * @return VM names of implemented/extended interfaces
 	 */
 	String[] getInterfaceNames();
 
 	/**
 	 * Returns the VM name of the package this class belongs to.
-	 * 
+	 *
 	 * @return VM name of the package
 	 */
 	String getPackageName();
 
 	/**
 	 * Returns the optional name of the corresponding source file.
-	 * 
+	 *
 	 * @return name of the corresponding source file
 	 */
 	String getSourceFileName();
 
 	/**
 	 * Returns the methods included in this class.
-	 * 
+	 *
 	 * @return methods of this class
 	 */
 	Collection<IMethodCoverage> getMethods();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ICounter.java b/org.jacoco.core/src/org/jacoco/core/analysis/ICounter.java
index 60c8dcc..f7e6adb 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ICounter.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ICounter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -60,7 +61,7 @@
 
 	/**
 	 * Returns the counter value of the given type.
-	 * 
+	 *
 	 * @param value
 	 *            value type to return
 	 * @return counter value
@@ -69,21 +70,21 @@
 
 	/**
 	 * Returns the total count of items.
-	 * 
+	 *
 	 * @return total count of items
 	 */
 	int getTotalCount();
 
 	/**
 	 * Returns the count of covered items.
-	 * 
+	 *
 	 * @return count of covered items
 	 */
 	int getCoveredCount();
 
 	/**
 	 * Returns the count of missed items.
-	 * 
+	 *
 	 * @return count of missed items
 	 */
 	int getMissedCount();
@@ -91,7 +92,7 @@
 	/**
 	 * Calculates the ratio of covered to total count items. If total count
 	 * items is 0 this method returns NaN.
-	 * 
+	 *
 	 * @return ratio of covered to total count items
 	 */
 	double getCoveredRatio();
@@ -99,19 +100,19 @@
 	/**
 	 * Calculates the ratio of missed to total count items. If total count items
 	 * is 0 this method returns NaN.
-	 * 
+	 *
 	 * @return ratio of missed to total count items
 	 */
 	double getMissedRatio();
 
 	/**
 	 * Returns the coverage status of this counter.
-	 * 
+	 *
 	 * @see ICounter#EMPTY
 	 * @see ICounter#NOT_COVERED
 	 * @see ICounter#PARTLY_COVERED
 	 * @see ICounter#FULLY_COVERED
-	 * 
+	 *
 	 * @return status of this line
 	 */
 	int getStatus();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
index 20b107d..ddb765a 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageNode.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -68,63 +69,63 @@
 
 	/**
 	 * Returns the type of element represented by this node.
-	 * 
+	 *
 	 * @return type of this node
 	 */
 	ElementType getElementType();
 
 	/**
 	 * Returns the name of this node.
-	 * 
+	 *
 	 * @return name of this node
 	 */
 	String getName();
 
 	/**
 	 * Returns the counter for byte code instructions.
-	 * 
+	 *
 	 * @return counter for instructions
 	 */
 	ICounter getInstructionCounter();
 
 	/**
 	 * Returns the counter for branches.
-	 * 
+	 *
 	 * @return counter for branches
 	 */
 	ICounter getBranchCounter();
 
 	/**
 	 * Returns the counter for lines.
-	 * 
+	 *
 	 * @return counter for lines
 	 */
 	ICounter getLineCounter();
 
 	/**
 	 * Returns the counter for cyclomatic complexity.
-	 * 
+	 *
 	 * @return counter for complexity
 	 */
 	ICounter getComplexityCounter();
 
 	/**
 	 * Returns the counter for methods.
-	 * 
+	 *
 	 * @return counter for methods
 	 */
 	ICounter getMethodCounter();
 
 	/**
 	 * Returns the counter for classes.
-	 * 
+	 *
 	 * @return counter for classes
 	 */
 	ICounter getClassCounter();
 
 	/**
 	 * Generic access to the the counters.
-	 * 
+	 *
 	 * @param entity
 	 *            entity we're we want to have the counter for
 	 * @return counter for the given entity
@@ -134,7 +135,8 @@
 	/**
 	 * Checks whether this node contains code relevant for code coverage.
 	 *
-	 * @return <code>true</code> if this node contains code relevant for code coverage
+	 * @return <code>true</code> if this node contains code relevant for code
+	 *         coverage
 	 */
 	boolean containsCode();
 
@@ -143,7 +145,7 @@
 	 * implementations may contain heavy data structures, the copy returned by
 	 * this method is reduced to the counters only. This helps to save memory
 	 * while processing huge structures.
-	 * 
+	 *
 	 * @return copy with counters only
 	 */
 	ICoverageNode getPlainCopy();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageVisitor.java b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageVisitor.java
index 3f70290..06fe9b7 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ICoverageVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -19,7 +20,7 @@
 
 	/**
 	 * For analyzed class coverage data is emitted to this method.
-	 * 
+	 *
 	 * @param coverage
 	 *            coverage data for a class
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ILine.java b/org.jacoco.core/src/org/jacoco/core/analysis/ILine.java
index ef65dc0..37a0724 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ILine.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ILine.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -19,14 +20,14 @@
 
 	/**
 	 * Returns the instruction counter for this line.
-	 * 
+	 *
 	 * @return instruction counter
 	 */
 	ICounter getInstructionCounter();
 
 	/**
 	 * Returns the branches counter for this line.
-	 * 
+	 *
 	 * @return branches counter
 	 */
 	ICounter getBranchCounter();
@@ -34,12 +35,12 @@
 	/**
 	 * Returns the coverage status of this line, calculated from the
 	 * instructions counter and branch counter.
-	 * 
+	 *
 	 * @see ICounter#EMPTY
 	 * @see ICounter#NOT_COVERED
 	 * @see ICounter#PARTLY_COVERED
 	 * @see ICounter#FULLY_COVERED
-	 * 
+	 *
 	 * @return status of this line
 	 */
 	int getStatus();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/IMethodCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/IMethodCoverage.java
index b675517..1e27887 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/IMethodCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/IMethodCoverage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -19,14 +20,14 @@
 
 	/**
 	 * Returns the descriptor of the method.
-	 * 
+	 *
 	 * @return descriptor
 	 */
 	String getDesc();
 
 	/**
 	 * Returns the generic signature of the method if defined.
-	 * 
+	 *
 	 * @return generic signature or <code>null</code>
 	 */
 	String getSignature();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/IPackageCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/IPackageCoverage.java
index 3212162..b4c56a4 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/IPackageCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/IPackageCoverage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -17,7 +18,7 @@
  * Coverage data of a Java package containing classes and source files. The name
  * of this node is the package name in VM notation (slash separated). The name
  * of the default package is the empty string.
- * 
+ *
  * @see IClassCoverage
  * @see ISourceFileCoverage
  */
@@ -25,14 +26,14 @@
 
 	/**
 	 * Returns all classes contained in this package.
-	 * 
+	 *
 	 * @return all classes
 	 */
 	Collection<IClassCoverage> getClasses();
 
 	/**
 	 * Returns all source files in this package.
-	 * 
+	 *
 	 * @return all source files
 	 */
 	Collection<ISourceFileCoverage> getSourceFiles();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ISourceFileCoverage.java b/org.jacoco.core/src/org/jacoco/core/analysis/ISourceFileCoverage.java
index 5f01160..67dfa0d 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ISourceFileCoverage.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ISourceFileCoverage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -19,7 +20,7 @@
 
 	/**
 	 * Returns the VM name of the package the source file belongs to.
-	 * 
+	 *
 	 * @return package name
 	 */
 	String getPackageName();
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/ISourceNode.java b/org.jacoco.core/src/org/jacoco/core/analysis/ISourceNode.java
index d64b2cc..8fd26fe 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/ISourceNode.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/ISourceNode.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -23,7 +24,7 @@
 	/**
 	 * The number of the first line coverage information is available for. If no
 	 * line is contained, the method returns -1.
-	 * 
+	 *
 	 * @return number of the first line or {@link #UNKNOWN_LINE}
 	 */
 	int getFirstLine();
@@ -31,14 +32,14 @@
 	/**
 	 * The number of the last line coverage information is available for. If no
 	 * line is contained, the method returns -1.
-	 * 
+	 *
 	 * @return number of the last line or {@link #UNKNOWN_LINE}
 	 */
 	int getLastLine();
 
 	/**
 	 * Returns the line information for given line.
-	 * 
+	 *
 	 * @param nr
 	 *            line number of interest
 	 * @return line information
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/NodeComparator.java b/org.jacoco.core/src/org/jacoco/core/analysis/NodeComparator.java
index 3fea25f..85058f9 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/NodeComparator.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/NodeComparator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.analysis;
 
@@ -23,7 +24,7 @@
 /**
  * Comparator to compare {@link ICoverageNode} objects by different counter
  * criteria.
- * 
+ *
  * @see CounterComparator#on(ICoverageNode.CounterEntity)
  */
 public class NodeComparator implements Comparator<ICoverageNode>, Serializable {
@@ -42,10 +43,10 @@
 
 	/**
 	 * Creates a new composite comparator with a second search criterion.
-	 * 
+	 *
 	 * @param second
 	 *            second criterion comparator
-	 * 
+	 *
 	 * @return composite comparator
 	 */
 	public NodeComparator second(final Comparator<ICoverageNode> second) {
@@ -65,14 +66,15 @@
 	/**
 	 * Returns a sorted copy of the given collection of {@link ICoverageNode}
 	 * elements.
-	 * 
+	 *
 	 * @param <T>
 	 *            actual type of the elements
 	 * @param summaries
 	 *            collection to create a copy of
 	 * @return sorted copy
 	 */
-	public <T extends ICoverageNode> List<T> sort(final Collection<T> summaries) {
+	public <T extends ICoverageNode> List<T> sort(
+			final Collection<T> summaries) {
 		final List<T> result = new ArrayList<T>(summaries);
 		Collections.sort(result, this);
 		return result;
diff --git a/org.jacoco.core/src/org/jacoco/core/analysis/package-info.java b/org.jacoco.core/src/org/jacoco/core/analysis/package-info.java
index d1a5e73..4f83a0c 100644
--- a/org.jacoco.core/src/org/jacoco/core/analysis/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/analysis/package-info.java
@@ -1,22 +1,22 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
  * <p>
  * Coverage calculation and analysis. The coverage information is calculated
  * with an {@link org.jacoco.core.analysis.Analyzer} instance from class files
- * (target) and
- * {@linkplain org.jacoco.core.data.IExecutionDataVisitor execution data}
- * (actual).
+ * (target) and {@linkplain org.jacoco.core.data.IExecutionDataVisitor execution
+ * data} (actual).
  * </p>
  *
  * <p>
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
index a728e03..a22c023 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionData.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -32,7 +33,7 @@
 
 	/**
 	 * Creates a new {@link ExecutionData} object with the given probe data.
-	 * 
+	 *
 	 * @param id
 	 *            class identifier
 	 * @param name
@@ -50,7 +51,7 @@
 	/**
 	 * Creates a new {@link ExecutionData} object with the given probe data
 	 * length. All probes are set to <code>false</code>.
-	 * 
+	 *
 	 * @param id
 	 *            class identifier
 	 * @param name
@@ -58,7 +59,8 @@
 	 * @param probeCount
 	 *            probe count
 	 */
-	public ExecutionData(final long id, final String name, final int probeCount) {
+	public ExecutionData(final long id, final String name,
+			final int probeCount) {
 		this.id = id;
 		this.name = name;
 		this.probes = new boolean[probeCount];
@@ -67,7 +69,7 @@
 	/**
 	 * Return the unique identifier for this class. The identifier is the CRC64
 	 * checksum of the raw class file definition.
-	 * 
+	 *
 	 * @return class identifier
 	 */
 	public long getId() {
@@ -76,7 +78,7 @@
 
 	/**
 	 * The VM name of the class.
-	 * 
+	 *
 	 * @return VM name
 	 */
 	public String getName() {
@@ -103,10 +105,9 @@
 	}
 
 	/**
-	 * Returns the execution data probe for a given index. A value of
-	 * <code>true</code> indicates that the corresponding probe was
-	 * executed.
-	 * 
+	 * Returns the execution data probes. A value of <code>true</code> indicates
+	 * that the corresponding probe was executed.
+	 *
 	 * @return probe data
 	 */
 	public boolean getProbe(final int index) {
@@ -130,7 +131,7 @@
 
 	/**
 	 * Checks whether any probe has been hit.
-	 * 
+	 *
 	 * @return <code>true</code>, if at least one probe has been hit
 	 */
 	public boolean hasHits() {
@@ -147,13 +148,13 @@
 	 * a probe entry in this object is marked as executed (<code>true</code>) if
 	 * this probe or the corresponding other probe was executed. So the result
 	 * is
-	 * 
+	 *
 	 * <pre>
 	 * A or B
 	 * </pre>
-	 * 
+	 *
 	 * The probe array of the other object is not modified.
-	 * 
+	 *
 	 * @param other
 	 *            execution data to merge
 	 */
@@ -168,19 +169,19 @@
 	 * probe in this object is set to the value of <code>flag</code> if the
 	 * corresponding other probe was executed. For <code>flag==true</code> this
 	 * corresponds to
-	 * 
+	 *
 	 * <pre>
 	 * A or B
 	 * </pre>
-	 * 
+	 *
 	 * For <code>flag==false</code> this can be considered as a subtraction
-	 * 
+	 *
 	 * <pre>
 	 * A and not B
 	 * </pre>
-	 * 
+	 *
 	 * The probe array of the other object is not modified.
-	 * 
+	 *
 	 * @param other
 	 *            execution data to merge
 	 * @param flag
@@ -203,7 +204,7 @@
 	 * Asserts that this execution data object is compatible with the given
 	 * parameters. The purpose of this check is to detect a very unlikely class
 	 * id collision.
-	 * 
+	 *
 	 * @param id
 	 *            other class id, must be the same
 	 * @param name
@@ -216,14 +217,14 @@
 	public void assertCompatibility(final long id, final String name,
 			final int probecount) throws IllegalStateException {
 		if (this.id != id) {
-			throw new IllegalStateException(format(
-					"Different ids (%016x and %016x).", Long.valueOf(this.id),
-					Long.valueOf(id)));
+			throw new IllegalStateException(
+					format("Different ids (%016x and %016x).",
+							Long.valueOf(this.id), Long.valueOf(id)));
 		}
 		if (!this.name.equals(name)) {
-			throw new IllegalStateException(format(
-					"Different class names %s and %s for id %016x.", this.name,
-					name, Long.valueOf(id)));
+			throw new IllegalStateException(
+					format("Different class names %s and %s for id %016x.",
+							this.name, name, Long.valueOf(id)));
 		}
 		if (this.probes.length != probecount) {
 			throw new IllegalStateException(format(
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataReader.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataReader.java
index dd8519b..e7b7d81 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataReader.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataReader.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -36,7 +37,7 @@
 	 * Creates a new reader based on the given input stream input. Depending on
 	 * the nature of the underlying stream input should be buffered as most data
 	 * is read in single bytes.
-	 * 
+	 *
 	 * @param input
 	 *            input stream to read execution data from
 	 */
@@ -46,7 +47,7 @@
 
 	/**
 	 * Sets an listener for session information.
-	 * 
+	 *
 	 * @param visitor
 	 *            visitor to retrieve session info events
 	 */
@@ -56,7 +57,7 @@
 
 	/**
 	 * Sets an listener for execution data.
-	 * 
+	 *
 	 * @param visitor
 	 *            visitor to retrieve execution data events
 	 */
@@ -67,7 +68,7 @@
 	/**
 	 * Reads all data and reports it to the corresponding visitors. The stream
 	 * is read until its end or a command confirmation has been sent.
-	 * 
+	 *
 	 * @return <code>true</code> if additional data can be expected after a
 	 *         command has been executed. <code>false</code> if the end of the
 	 *         stream has been reached.
@@ -76,8 +77,8 @@
 	 * @throws IncompatibleExecDataVersionException
 	 *             incompatible data version from different JaCoCo release
 	 */
-	public boolean read() throws IOException,
-			IncompatibleExecDataVersionException {
+	public boolean read()
+			throws IOException, IncompatibleExecDataVersionException {
 		byte type;
 		do {
 			int i = in.read();
@@ -96,7 +97,7 @@
 	/**
 	 * Reads a block of data identified by the given id. Subclasses may
 	 * overwrite this method to support additional block types.
-	 * 
+	 *
 	 * @param blocktype
 	 *            block type
 	 * @return <code>true</code> if there are more blocks to read
@@ -115,8 +116,8 @@
 			readExecutionData();
 			return true;
 		default:
-			throw new IOException(format("Unknown block type %x.",
-					Byte.valueOf(blocktype)));
+			throw new IOException(
+					format("Unknown block type %x.", Byte.valueOf(blocktype)));
 		}
 	}
 
@@ -147,8 +148,8 @@
 		final long id = in.readLong();
 		final String name = in.readUTF();
 		final boolean[] probes = in.readBooleanArray();
-		executionDataVisitor.visitClassExecution(new ExecutionData(id, name,
-				probes));
+		executionDataVisitor
+				.visitClassExecution(new ExecutionData(id, name, probes));
 	}
 
 }
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
index ce0bec4..2291fd5 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataStore.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -38,7 +39,7 @@
 	 * Adds the given {@link ExecutionData} object into the store. If there is
 	 * already execution data with this same class id, this structure is merged
 	 * with the given one.
-	 * 
+	 *
 	 * @param data
 	 *            execution data to add or merge
 	 * @throws IllegalStateException
@@ -64,7 +65,7 @@
 	 * store. I.e. for all set probes in the given data object the corresponding
 	 * probes in this store will be unset. If there is no execution data with id
 	 * of the given data object this operation will have no effect.
-	 * 
+	 *
 	 * @param data
 	 *            execution data to subtract
 	 * @throws IllegalStateException
@@ -84,7 +85,7 @@
 
 	/**
 	 * Subtracts all probes in the given execution data store from this store.
-	 * 
+	 *
 	 * @param store
 	 *            execution data store to subtract
 	 * @see #subtract(ExecutionData)
@@ -100,7 +101,7 @@
 	/**
 	 * Returns the {@link ExecutionData} entry with the given id if it exists in
 	 * this store.
-	 * 
+	 *
 	 * @param id
 	 *            class id
 	 * @return execution data or <code>null</code>
@@ -114,7 +115,7 @@
 	/**
 	 * Checks whether execution data for classes with the given name are
 	 * contained in the store.
-	 * 
+	 *
 	 * @param name
 	 *            VM name
 	 * @return <code>true</code> if at least one class with the name is
@@ -127,7 +128,7 @@
 	/**
 	 * Returns the coverage data for the class with the given identifier. If
 	 * there is no data available under the given id a new entry is created.
-	 * 
+	 *
 	 * @param id
 	 *            class identifier
 	 * @param name
@@ -176,7 +177,7 @@
 
 	/**
 	 * Writes the content of the store to the given visitor interface.
-	 * 
+	 *
 	 * @param visitor
 	 *            interface to write content to
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
index bdf3445..c92073c 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ExecutionDataWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -20,10 +21,12 @@
 /**
  * Serialization of execution data into binary streams.
  */
-public class ExecutionDataWriter implements ISessionInfoVisitor,
-		IExecutionDataVisitor {
+public class ExecutionDataWriter
+		implements ISessionInfoVisitor, IExecutionDataVisitor {
 
-	/** File format version, will be incremented for each incompatible change. */
+	/**
+	 * File format version, will be incremented for each incompatible change.
+	 */
 	public static final char FORMAT_VERSION;
 
 	static {
@@ -50,7 +53,7 @@
 	 * Creates a new writer based on the given output stream. Depending on the
 	 * nature of the underlying stream output should be buffered as most data is
 	 * written in single bytes.
-	 * 
+	 *
 	 * @param output
 	 *            binary stream to write execution data to
 	 * @throws IOException
@@ -63,7 +66,7 @@
 
 	/**
 	 * Writes an file header to identify the stream and its protocol version.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the header can't be written
 	 */
@@ -75,7 +78,7 @@
 
 	/**
 	 * Flushes the underlying stream.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the underlying stream can't be flushed
 	 */
@@ -115,7 +118,7 @@
 	 * Returns the first bytes of a file that represents a valid execution data
 	 * file. In any case every execution data file starts with the three bytes
 	 * <code>0x01 0xC0 0xC0</code>.
-	 * 
+	 *
 	 * @return first bytes of a execution data file
 	 */
 	public static final byte[] getFileHeader() {
diff --git a/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java b/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
index 14eabbe..b65ed2a 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/IExecutionDataVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -20,7 +21,7 @@
 
 	/**
 	 * Provides execution data for a class.
-	 * 
+	 *
 	 * @param data
 	 *            execution data for a class
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/data/ISessionInfoVisitor.java b/org.jacoco.core/src/org/jacoco/core/data/ISessionInfoVisitor.java
index b80797a..5f6a937 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/ISessionInfoVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/ISessionInfoVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -21,7 +22,7 @@
 	/**
 	 * Provides session information for the subsequent execution data calls. In
 	 * case of merged sessions this method might be called multiple times.
-	 * 
+	 *
 	 * @param info
 	 *            session information
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/data/IncompatibleExecDataVersionException.java b/org.jacoco.core/src/org/jacoco/core/data/IncompatibleExecDataVersionException.java
index cc508e7..30e61e2 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/IncompatibleExecDataVersionException.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/IncompatibleExecDataVersionException.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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, somechris - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.core.data;
 
@@ -24,7 +25,7 @@
 
 	/**
 	 * Creates a new exception to flag version mismatches in execution data.
-	 * 
+	 *
 	 * @param actualVersion
 	 *            version found in the exec data
 	 */
@@ -39,7 +40,7 @@
 	/**
 	 * Gets the version expected in the execution data which can be read by this
 	 * version of JaCoCo.
-	 * 
+	 *
 	 * @return expected version in execution data
 	 */
 	public int getExpectedVersion() {
@@ -48,7 +49,7 @@
 
 	/**
 	 * Gets the actual version found in the execution data.
-	 * 
+	 *
 	 * @return actual version in execution data
 	 */
 	public int getActualVersion() {
diff --git a/org.jacoco.core/src/org/jacoco/core/data/SessionInfo.java b/org.jacoco.core/src/org/jacoco/core/data/SessionInfo.java
index 31f7b5e..f6e7759 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/SessionInfo.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/SessionInfo.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -26,7 +27,7 @@
 
 	/**
 	 * Create a immutable session info with the given data.
-	 * 
+	 *
 	 * @param id
 	 *            arbitrary session identifier, must not be <code>null</code>
 	 * @param start
diff --git a/org.jacoco.core/src/org/jacoco/core/data/SessionInfoStore.java b/org.jacoco.core/src/org/jacoco/core/data/SessionInfoStore.java
index 568dcc9..20fb872 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/SessionInfoStore.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/SessionInfoStore.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.data;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Tests whether the store is empty.
-	 * 
+	 *
 	 * @return <code>true</code> if the store is empty
 	 */
 	public boolean isEmpty() {
@@ -39,7 +40,7 @@
 	 * Returns all {@link SessionInfo} objects currently contained in the store.
 	 * The info objects are ordered by its natural ordering (i.e. by the dump
 	 * time stamp).
-	 * 
+	 *
 	 * @return list of stored {@link SessionInfo} objects
 	 */
 	public List<SessionInfo> getInfos() {
@@ -54,11 +55,11 @@
 	 * all contained sessions, the dump timestamp the maximum of all contained
 	 * sessions. If no session is currently contained both timestamps are set to
 	 * <code>0</code>.
-	 * 
+	 *
 	 * @param id
 	 *            identifier for the merged session info
 	 * @return new {@link SessionInfo} object
-	 * 
+	 *
 	 */
 	public SessionInfo getMerged(final String id) {
 		if (infos.isEmpty()) {
@@ -76,7 +77,7 @@
 	/**
 	 * Writes all contained {@link SessionInfo} objects into the given visitor.
 	 * The info objects are emitted in chronological order by dump timestamp.
-	 * 
+	 *
 	 * @param visitor
 	 *            visitor to emit {@link SessionInfo} objects to
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/data/package-info.java b/org.jacoco.core/src/org/jacoco/core/data/package-info.java
index 6e2f37b..b7f33fe 100644
--- a/org.jacoco.core/src/org/jacoco/core/data/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/data/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java b/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java
index 561b09c..5225d2e 100644
--- a/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java
+++ b/org.jacoco.core/src/org/jacoco/core/instr/Instrumenter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.instr;
 
@@ -15,6 +16,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.zip.CRC32;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 import java.util.zip.ZipEntry;
@@ -47,7 +49,7 @@
 
 	/**
 	 * Creates a new instance based on the given runtime.
-	 * 
+	 *
 	 * @param runtime
 	 *            runtime used by the instrumented classes
 	 */
@@ -61,7 +63,7 @@
 	 * typically necessary as instrumentation modifies the class files and
 	 * therefore invalidates existing JAR signatures. Default is
 	 * <code>true</code>.
-	 * 
+	 *
 	 * @param flag
 	 *            <code>true</code> if signatures should be removed
 	 */
@@ -91,7 +93,7 @@
 
 	/**
 	 * Creates a instrumented version of the given class if possible.
-	 * 
+	 *
 	 * @param buffer
 	 *            definition of the class
 	 * @param name
@@ -112,7 +114,7 @@
 	/**
 	 * Creates a instrumented version of the given class if possible. The
 	 * provided {@link InputStream} is not closed by this method.
-	 * 
+	 *
 	 * @param input
 	 *            stream to read class definition from
 	 * @param name
@@ -137,7 +139,7 @@
 	 * Creates a instrumented version of the given class file. The provided
 	 * {@link InputStream} and {@link OutputStream} instances are not closed by
 	 * this method.
-	 * 
+	 *
 	 * @param input
 	 *            stream to read class definition from
 	 * @param output
@@ -167,7 +169,7 @@
 	 * other files are copied without modification. The provided
 	 * {@link InputStream} and {@link OutputStream} instances are not closed by
 	 * this method.
-	 * 
+	 *
 	 * @param input
 	 *            stream to contents from
 	 * @param output
@@ -215,9 +217,27 @@
 				continue;
 			}
 
-			zipout.putNextEntry(new ZipEntry(entryName));
-			if (!signatureRemover.filterEntry(entryName, zipin, zipout)) {
-				count += instrumentAll(zipin, zipout, name + "@" + entryName);
+			final ZipEntry newEntry = new ZipEntry(entryName);
+			newEntry.setMethod(entry.getMethod());
+			switch (entry.getMethod()) {
+			case ZipEntry.DEFLATED:
+				zipout.putNextEntry(newEntry);
+				count += filterOrInstrument(zipin, zipout, name, entryName);
+				break;
+			case ZipEntry.STORED:
+				// Uncompressed entries must be processed in-memory to calculate
+				// mandatory entry size and CRC
+				final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+				count += filterOrInstrument(zipin, buffer, name, entryName);
+				final byte[] bytes = buffer.toByteArray();
+				newEntry.setSize(bytes.length);
+				newEntry.setCompressedSize(bytes.length);
+				newEntry.setCrc(crc(bytes));
+				zipout.putNextEntry(newEntry);
+				zipout.write(bytes);
+				break;
+			default:
+				throw new AssertionError(entry.getMethod());
 			}
 			zipout.closeEntry();
 		}
@@ -225,6 +245,21 @@
 		return count;
 	}
 
+	private int filterOrInstrument(final InputStream in, final OutputStream out,
+			final String name, final String entryName) throws IOException {
+		if (signatureRemover.filterEntry(entryName, in, out)) {
+			return 0;
+		} else {
+			return instrumentAll(in, out, name + "@" + entryName);
+		}
+	}
+
+	private static long crc(final byte[] data) {
+		final CRC32 crc = new CRC32();
+		crc.update(data);
+		return crc.getValue();
+	}
+
 	private ZipEntry nextEntry(final ZipInputStream input,
 			final String location) throws IOException {
 		try {
diff --git a/org.jacoco.core/src/org/jacoco/core/instr/package-info.java b/org.jacoco.core/src/org/jacoco/core/instr/package-info.java
index 1da3ef1..3293f14 100644
--- a/org.jacoco.core/src/org/jacoco/core/instr/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/instr/package-info.java
@@ -1,19 +1,20 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
  * <p>
- *  Instrumentation of Java class files for code coverage. The main entry point
- *  is the class {@link org.jacoco.core.instr.Instrumenter}.
+ * Instrumentation of Java class files for code coverage. The main entry point
+ * is the class {@link org.jacoco.core.instr.Instrumenter}.
  * </p>
  */
 package org.jacoco.core.instr;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
index 74574ec..f07528a 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/ContentTypeDetector.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal;
 
@@ -15,8 +16,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.objectweb.asm.Opcodes;
-
 /**
  * Detector for content types of binary streams based on a magic headers.
  */
@@ -47,7 +46,7 @@
 	 * Creates a new detector based on the given input. To process the complete
 	 * original input afterwards use the stream returned by
 	 * {@link #getInputStream()}.
-	 * 
+	 *
 	 * @param in
 	 *            input to read the header from
 	 * @throws IOException
@@ -72,24 +71,14 @@
 		case PACK200FILE:
 			return PACK200FILE;
 		case CLASSFILE:
-			// also verify version to distinguish from Mach Object files:
-			switch (readInt(in)) {
-			case Opcodes.V1_1:
-			case Opcodes.V1_2:
-			case Opcodes.V1_3:
-			case Opcodes.V1_4:
-			case Opcodes.V1_5:
-			case Opcodes.V1_6:
-			case Opcodes.V1_7:
-			case Opcodes.V1_8:
-			case Opcodes.V9:
-			case Opcodes.V10:
-			case Opcodes.V11:
-			case Opcodes.V11 | Opcodes.V_PREVIEW:
-			case Opcodes.V12:
-			case Opcodes.V12 | Opcodes.V_PREVIEW:
-			case (Opcodes.V12 + 1):
-			case (Opcodes.V12 + 1) | Opcodes.V_PREVIEW:
+			// Mach-O fat/universal binaries have the same magic header as Java
+			// class files, number of architectures is stored in unsigned 4
+			// bytes in the same place and in the same big-endian order as major
+			// and minor version of class file. Hopefully on practice number of
+			// architectures in single executable is less than 45, which is
+			// major version of Java 1.1 class files:
+			final int majorVersion = readInt(in) & 0xFFFF;
+			if (majorVersion >= 45) {
 				return CLASSFILE;
 			}
 		}
@@ -106,7 +95,7 @@
 	/**
 	 * Returns an input stream instance to read the complete content (including
 	 * the header) of the underlying stream.
-	 * 
+	 *
 	 * @return input stream containing the complete content
 	 */
 	public InputStream getInputStream() {
@@ -115,7 +104,7 @@
 
 	/**
 	 * Returns the detected file type.
-	 * 
+	 *
 	 * @return file type
 	 */
 	public int getType() {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java b/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java
index 93f86f6..7cd104b 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/InputStreams.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/Pack200Streams.java b/org.jacoco.core/src/org/jacoco/core/internal/Pack200Streams.java
index eae4fdf..b9539ef 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/Pack200Streams.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/Pack200Streams.java
@@ -1,78 +1,116 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *    

- *******************************************************************************/

-package org.jacoco.core.internal;

-

-import java.io.ByteArrayInputStream;

-import java.io.ByteArrayOutputStream;

-import java.io.FilterInputStream;

-import java.io.IOException;

-import java.io.InputStream;

-import java.io.OutputStream;

-import java.util.jar.JarInputStream;

-import java.util.jar.JarOutputStream;

-import java.util.jar.Pack200;

-

-/**

- * Internal wrapper for the weird Pack200 Java API to allow usage with streams.

- */

-public final class Pack200Streams {

-

-	/**

-	 * Unpack a stream in Pack200 format into a stream in JAR/ZIP format.

-	 * 

-	 * @param input

-	 *            stream in Pack200 format

-	 * @return stream in JAR/ZIP format

-	 * @throws IOException

-	 *             in case of errors with the streams

-	 */

-	public static InputStream unpack(final InputStream input)

-			throws IOException {

-		final ByteArrayOutputStream buffer = new ByteArrayOutputStream();

-		final JarOutputStream jar = new JarOutputStream(buffer);

-		Pack200.newUnpacker().unpack(new NoCloseInput(input), jar);

-		jar.finish();

-		return new ByteArrayInputStream(buffer.toByteArray());

-	}

-

-	/**

-	 * Packs a buffer in JAR/ZIP format into a stream in Pack200 format.

-	 * 

-	 * @param source

-	 *            source in JAR/ZIP format

-	 * @param output

-	 *            stream in Pack200 format

-	 * @throws IOException

-	 *             in case of errors with the streams

-	 */

-	public static void pack(final byte[] source, final OutputStream output)

-			throws IOException {

-		final JarInputStream jar = new JarInputStream(new ByteArrayInputStream(

-				source));

-		Pack200.newPacker().pack(jar, output);

-	}

-

-	private static class NoCloseInput extends FilterInputStream {

-		protected NoCloseInput(final InputStream in) {

-			super(in);

-		}

-

-		@Override

-		public void close() throws IOException {

-			// do not close the underlying stream

-		}

-	}

-

-	private Pack200Streams() {

-	}

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.FilterInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.jar.JarInputStream;
+import java.util.jar.JarOutputStream;
+
+/**
+ * Internal wrapper for the weird Pack200 Java API to allow usage with streams.
+ */
+public final class Pack200Streams {
+
+	/**
+	 * Unpack a stream in Pack200 format into a stream in JAR/ZIP format.
+	 *
+	 * @param input
+	 *            stream in Pack200 format
+	 * @return stream in JAR/ZIP format
+	 * @throws IOException
+	 *             in case of errors with the streams
+	 */
+	@SuppressWarnings("resource")
+	public static InputStream unpack(final InputStream input)
+			throws IOException {
+		final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+		final JarOutputStream jar = new JarOutputStream(buffer);
+		try {
+			final Object unpacker = Class.forName("java.util.jar.Pack200")
+					.getMethod("newUnpacker").invoke(null);
+			Class.forName("java.util.jar.Pack200$Unpacker")
+					.getMethod("unpack", InputStream.class,
+							JarOutputStream.class)
+					.invoke(unpacker, new NoCloseInput(input), jar);
+		} catch (ClassNotFoundException e) {
+			throw newIOException(e);
+		} catch (NoSuchMethodException e) {
+			throw newIOException(e);
+		} catch (IllegalAccessException e) {
+			throw newIOException(e);
+		} catch (InvocationTargetException e) {
+			throw newIOException(e.getCause());
+		}
+		jar.finish();
+		return new ByteArrayInputStream(buffer.toByteArray());
+	}
+
+	/**
+	 * Packs a buffer in JAR/ZIP format into a stream in Pack200 format.
+	 *
+	 * @param source
+	 *            source in JAR/ZIP format
+	 * @param output
+	 *            stream in Pack200 format
+	 * @throws IOException
+	 *             in case of errors with the streams
+	 */
+	@SuppressWarnings("resource")
+	public static void pack(final byte[] source, final OutputStream output)
+			throws IOException {
+		final JarInputStream jar = new JarInputStream(
+				new ByteArrayInputStream(source));
+		try {
+			final Object packer = Class.forName("java.util.jar.Pack200")
+					.getMethod("newPacker").invoke(null);
+			Class.forName("java.util.jar.Pack200$Packer")
+					.getMethod("pack", JarInputStream.class, OutputStream.class)
+					.invoke(packer, jar, output);
+		} catch (ClassNotFoundException e) {
+			throw newIOException(e);
+		} catch (NoSuchMethodException e) {
+			throw newIOException(e);
+		} catch (IllegalAccessException e) {
+			throw newIOException(e);
+		} catch (InvocationTargetException e) {
+			throw newIOException(e.getCause());
+		}
+	}
+
+	private static IOException newIOException(final Throwable cause) {
+		final IOException exception = new IOException();
+		exception.initCause(cause);
+		return exception;
+	}
+
+	private static class NoCloseInput extends FilterInputStream {
+		protected NoCloseInput(final InputStream in) {
+			super(in);
+		}
+
+		@Override
+		public void close() throws IOException {
+			// do not close the underlying stream
+		}
+	}
+
+	private Pack200Streams() {
+	}
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/BundleCoverageImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/BundleCoverageImpl.java
index 9c6fcef..8e79915 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/BundleCoverageImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/BundleCoverageImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -28,14 +29,14 @@
 /**
  * Implementation of {@link IBundleCoverage}.
  */
-public class BundleCoverageImpl extends CoverageNodeImpl implements
-		IBundleCoverage {
+public class BundleCoverageImpl extends CoverageNodeImpl
+		implements IBundleCoverage {
 
 	private final Collection<IPackageCoverage> packages;
 
 	/**
 	 * Creates a new instance of a bundle with the given name.
-	 * 
+	 *
 	 * @param name
 	 *            name of this bundle
 	 * @param packages
@@ -51,7 +52,7 @@
 	/**
 	 * Creates a new instance of a bundle with the given name. The packages are
 	 * calculated from the given classes and source files.
-	 * 
+	 *
 	 * @param name
 	 *            name of this bundle
 	 * @param classes
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
index a18ee7e..c42c7ee 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassAnalyzer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -21,6 +22,7 @@
 import org.jacoco.core.internal.flow.MethodProbesVisitor;
 import org.jacoco.core.internal.instr.InstrSupport;
 import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.Attribute;
 import org.objectweb.asm.FieldVisitor;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.tree.MethodNode;
@@ -37,13 +39,15 @@
 
 	private final Set<String> classAnnotations = new HashSet<String>();
 
+	private final Set<String> classAttributes = new HashSet<String>();
+
 	private String sourceDebugExtension;
 
 	private final IFilter filter;
 
 	/**
 	 * Creates a new analyzer that builds coverage data for a class.
-	 * 
+	 *
 	 * @param coverage
 	 *            coverage node for the analyzed class data
 	 * @param probes
@@ -76,6 +80,11 @@
 	}
 
 	@Override
+	public void visitAttribute(final Attribute attribute) {
+		classAttributes.add(attribute.type);
+	}
+
+	@Override
 	public void visitSource(final String source, final String debug) {
 		coverage.setSourceFileName(stringPool.get(source));
 		sourceDebugExtension = debug;
@@ -146,6 +155,10 @@
 		return classAnnotations;
 	}
 
+	public Set<String> getClassAttributes() {
+		return classAttributes;
+	}
+
 	public String getSourceFileName() {
 		return coverage.getSourceFileName();
 	}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassCoverageImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassCoverageImpl.java
index 444a81e..f91c8f6 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassCoverageImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/ClassCoverageImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -20,7 +21,8 @@
 /**
  * Implementation of {@link IClassCoverage}.
  */
-public class ClassCoverageImpl extends SourceNodeImpl implements IClassCoverage {
+public class ClassCoverageImpl extends SourceNodeImpl
+		implements IClassCoverage {
 
 	private final long id;
 	private final boolean noMatch;
@@ -32,7 +34,7 @@
 
 	/**
 	 * Creates a class coverage data object with the given parameters.
-	 * 
+	 *
 	 * @param name
 	 *            VM name of the class
 	 * @param id
@@ -51,7 +53,7 @@
 
 	/**
 	 * Add a method to this class.
-	 * 
+	 *
 	 * @param method
 	 *            method data to add
 	 */
@@ -68,7 +70,7 @@
 
 	/**
 	 * Sets the VM signature of the class.
-	 * 
+	 *
 	 * @param signature
 	 *            VM signature of the class (may be <code>null</code>)
 	 */
@@ -78,7 +80,7 @@
 
 	/**
 	 * Sets the VM name of the superclass.
-	 * 
+	 *
 	 * @param superName
 	 *            VM name of the super class (may be <code>null</code>, i.e.
 	 *            <code>java/lang/Object</code>)
@@ -89,7 +91,7 @@
 
 	/**
 	 * Sets the VM names of implemented/extended interfaces.
-	 * 
+	 *
 	 * @param interfaces
 	 *            VM names of implemented/extended interfaces
 	 */
@@ -99,7 +101,7 @@
 
 	/**
 	 * Sets the name of the corresponding source file for this class.
-	 * 
+	 *
 	 * @param sourceFileName
 	 *            name of the source file
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/CounterImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/CounterImpl.java
index e166c62..0ff6d78 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/CounterImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/CounterImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -22,7 +23,8 @@
 	/** Max counter value for which singletons are created */
 	private static final int SINGLETON_LIMIT = 30;
 
-	private static final CounterImpl[][] SINGLETONS = new CounterImpl[SINGLETON_LIMIT + 1][];
+	private static final CounterImpl[][] SINGLETONS = new CounterImpl[SINGLETON_LIMIT
+			+ 1][];
 
 	static {
 		for (int i = 0; i <= SINGLETON_LIMIT; i++) {
@@ -74,7 +76,7 @@
 
 	/**
 	 * Factory method to retrieve a counter with the given number of items.
-	 * 
+	 *
 	 * @param missed
 	 *            number of missed items
 	 * @param covered
@@ -91,7 +93,7 @@
 
 	/**
 	 * Factory method to retrieve a clone of the given counter.
-	 * 
+	 *
 	 * @param counter
 	 *            counter to copy
 	 * @return counter instance
@@ -108,7 +110,7 @@
 
 	/**
 	 * Creates a new instance with the given numbers.
-	 * 
+	 *
 	 * @param missed
 	 *            number of missed items
 	 * @param covered
@@ -123,7 +125,7 @@
 	 * Returns a counter with values incremented by the numbers of the given
 	 * counter. It is up to the implementation whether this counter instance is
 	 * modified or a new instance is returned.
-	 * 
+	 *
 	 * @param counter
 	 *            number of additional total and covered items
 	 * @return counter instance with incremented values
@@ -136,7 +138,7 @@
 	 * Returns a counter with values incremented by the given numbers. It is up
 	 * to the implementation whether this counter instance is modified or a new
 	 * instance is returned.
-	 * 
+	 *
 	 * @param missed
 	 *            number of missed items
 	 * @param covered
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/Instruction.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/Instruction.java
index c5a1aaa..2e34bf0 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/Instruction.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/Instruction.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -22,31 +23,31 @@
  * outgoing branch. Each instruction has at least one branch, for example in
  * case of a simple sequence of instructions (by convention branch 0). Instances
  * of this class are used in two steps:
- * 
- * <h3>Step 1: Building the CFG</h3>
- * 
+ *
+ * <h2>Step 1: Building the CFG</h2>
+ *
  * For each bytecode instruction of a method a {@link Instruction} instance is
  * created. In correspondence with the CFG these instances are linked with each
  * other with the <code>addBranch()</code> methods. The executions status is
  * either directly derived from a probe which has been inserted in the execution
  * flow ({@link #addBranch(boolean, int)}) or indirectly propagated along the
  * CFG edges ({@link #addBranch(Instruction, int)}).
- * 
- * <h3>Step 2: Querying the Coverage Status</h3>
- * 
+ *
+ * <h2>Step 2: Querying the Coverage Status</h2>
+ *
  * After all instructions have been created and linked each instruction knows
  * its execution status and can be queried with:
- * 
+ *
  * <ul>
  * <li>{@link #getLine()}</li>
  * <li>{@link #getInstructionCounter()}</li>
  * <li>{@link #getBranchCounter()}</li>
  * </ul>
- * 
+ *
  * For the purpose of filtering instructions can be combined to new
  * instructions. Note that these methods create new {@link Instruction}
  * instances and do not modify the existing ones.
- * 
+ *
  * <ul>
  * <li>{@link #merge(Instruction)}</li>
  * <li>{@link #replaceBranches(Collection)}</li>
@@ -66,7 +67,7 @@
 
 	/**
 	 * New instruction at the given line.
-	 * 
+	 *
 	 * @param line
 	 *            source line this instruction belongs to
 	 */
@@ -81,10 +82,10 @@
 	 * derived from the execution status of the target instruction. In case the
 	 * branch is covered the status is propagated also to the predecessors of
 	 * this instruction.
-	 * 
+	 *
 	 * Note: This method is not idempotent and must be called exactly once for
 	 * every branch.
-	 * 
+	 *
 	 * @param target
 	 *            target instruction of this branch
 	 * @param branch
@@ -103,10 +104,10 @@
 	 * Adds a branch to this instruction which execution status is directly
 	 * derived from a probe. In case the branch is covered the status is
 	 * propagated also to the predecessors of this instruction.
-	 * 
+	 *
 	 * Note: This method is not idempotent and must be called exactly once for
 	 * every branch.
-	 * 
+	 *
 	 * @param executed
 	 *            whether the corresponding probe has been executed
 	 * @param branch
@@ -134,7 +135,7 @@
 
 	/**
 	 * Returns the source line this instruction belongs to.
-	 * 
+	 *
 	 * @return corresponding source line
 	 */
 	public int getLine() {
@@ -144,7 +145,7 @@
 	/**
 	 * Merges information about covered branches of this instruction with
 	 * another instruction.
-	 * 
+	 *
 	 * @param other
 	 *            instruction to merge with
 	 * @return new instance with merged branches
@@ -161,7 +162,7 @@
 	 * Creates a copy of this instruction where all outgoing branches are
 	 * replaced with the given instructions. The coverage status of the new
 	 * instruction is derived from the status of the given instructions.
-	 * 
+	 *
 	 * @param newBranches
 	 *            new branches to consider
 	 * @return new instance with replaced branches
@@ -182,7 +183,7 @@
 	/**
 	 * Returns the instruction coverage counter of this instruction. It is
 	 * always 1 instruction which is covered or not.
-	 * 
+	 *
 	 * @return the instruction coverage counter
 	 */
 	public ICounter getInstructionCounter() {
@@ -193,7 +194,7 @@
 	/**
 	 * Returns the branch coverage counter of this instruction. Only
 	 * instructions with at least 2 outgoing edges report branches.
-	 * 
+	 *
 	 * @return the branch coverage counter
 	 */
 	public ICounter getBranchCounter() {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/InstructionsBuilder.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/InstructionsBuilder.java
index b22d872..a69f34c 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/InstructionsBuilder.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/InstructionsBuilder.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -46,7 +47,7 @@
 
 	/**
 	 * The labels which mark the subsequent instructions.
-	 * 
+	 *
 	 * Due to ASM issue #315745 there can be more than one label per instruction
 	 */
 	private final List<Label> currentLabel;
@@ -60,7 +61,7 @@
 	/**
 	 * Creates a new builder instance which can be used to analyze a single
 	 * method.
-	 * 
+	 *
 	 * @param probes
 	 *            probe array of the corresponding class used to determine the
 	 *            coverage status of every instruction.
@@ -126,7 +127,7 @@
 
 	/**
 	 * Adds a jump from the last added instruction.
-	 * 
+	 *
 	 * @param target
 	 *            jump target
 	 * @param branch
@@ -138,7 +139,7 @@
 
 	/**
 	 * Adds a new probe for the last instruction.
-	 * 
+	 *
 	 * @param probeId
 	 *            index in the probe array
 	 * @param branch
@@ -152,7 +153,7 @@
 	/**
 	 * Returns the status for all instructions of this method. This method must
 	 * be called exactly once after the instructions have been added.
-	 * 
+	 *
 	 * @return map of ASM instruction nodes to corresponding {@link Instruction}
 	 *         instances
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java
index 908bcb6..b504c51 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/LineImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -25,7 +26,8 @@
 	/** Max branch counter value for which singletons are created */
 	private static final int SINGLETON_BRA_LIMIT = 4;
 
-	private static final LineImpl[][][][] SINGLETONS = new LineImpl[SINGLETON_INS_LIMIT + 1][][][];
+	private static final LineImpl[][][][] SINGLETONS = new LineImpl[SINGLETON_INS_LIMIT
+			+ 1][][][];
 
 	static {
 		for (int i = 0; i <= SINGLETON_INS_LIMIT; i++) {
@@ -82,8 +84,8 @@
 	 */
 	private static final class Fix extends LineImpl {
 		public Fix(final int im, final int ic, final int bm, final int bc) {
-			super(CounterImpl.getInstance(im, ic), CounterImpl.getInstance(bm,
-					bc));
+			super(CounterImpl.getInstance(im, ic),
+					CounterImpl.getInstance(bm, bc));
 		}
 
 		@Override
@@ -100,14 +102,15 @@
 	/** branch counter */
 	protected CounterImpl branches;
 
-	private LineImpl(final CounterImpl instructions, final CounterImpl branches) {
+	private LineImpl(final CounterImpl instructions,
+			final CounterImpl branches) {
 		this.instructions = instructions;
 		this.branches = branches;
 	}
 
 	/**
 	 * Adds the given counters to this line.
-	 * 
+	 *
 	 * @param instructions
 	 *            instructions to add
 	 * @param branches
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
index 1aaadf2..547d6b3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodAnalyzer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -46,10 +47,9 @@
 		for (final TryCatchBlockNode n : methodNode.tryCatchBlocks) {
 			n.accept(methodVisitor);
 		}
-		currentNode = methodNode.instructions.getFirst();
-		while (currentNode != null) {
-			currentNode.accept(methodVisitor);
-			currentNode = currentNode.getNext();
+		for (final AbstractInsnNode i : methodNode.instructions) {
+			currentNode = i;
+			i.accept(methodVisitor);
 		}
 		methodVisitor.visitEnd();
 	}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageCalculator.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageCalculator.java
index ebe167a..2906dd1 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageCalculator.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageCalculator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -19,7 +20,6 @@
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.jacoco.core.analysis.ISourceFileCoverage;
 import org.jacoco.core.analysis.ISourceNode;
 import org.jacoco.core.internal.analysis.filter.IFilterOutput;
 import org.objectweb.asm.tree.AbstractInsnNode;
@@ -39,11 +39,11 @@
 	 * Instructions that should be merged form disjoint sets. Coverage
 	 * information from instructions of one set will be merged into
 	 * representative instruction of set.
-	 * 
+	 *
 	 * Each such set is represented as a singly linked list: each element except
 	 * one references another element from the same set, element without
 	 * reference - is a representative of this set.
-	 * 
+	 *
 	 * This map stores reference (value) for elements of sets (key).
 	 */
 	private final Map<AbstractInsnNode, AbstractInsnNode> merged;
@@ -61,7 +61,7 @@
 	/**
 	 * Applies all specified filtering commands and calculates the resulting
 	 * coverage.
-	 * 
+	 *
 	 * @param coverage
 	 *            the result is added to this coverage node
 	 */
@@ -121,8 +121,8 @@
 
 	private void ensureCapacity(final MethodCoverageImpl coverage) {
 		// Determine line range:
-		int firstLine = ISourceFileCoverage.UNKNOWN_LINE;
-		int lastLine = ISourceFileCoverage.UNKNOWN_LINE;
+		int firstLine = ISourceNode.UNKNOWN_LINE;
+		int lastLine = ISourceNode.UNKNOWN_LINE;
 		for (final Entry<AbstractInsnNode, Instruction> entry : instructions
 				.entrySet()) {
 			if (!ignored.contains(entry.getKey())) {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageImpl.java
index aa7dccf..b6ba4f9 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/MethodCoverageImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -17,8 +18,8 @@
 /**
  * Implementation of {@link IMethodCoverage}.
  */
-public class MethodCoverageImpl extends SourceNodeImpl implements
-		IMethodCoverage {
+public class MethodCoverageImpl extends SourceNodeImpl
+		implements IMethodCoverage {
 
 	private final String desc;
 
@@ -26,7 +27,7 @@
 
 	/**
 	 * Creates a method coverage data object with the given parameters.
-	 * 
+	 *
 	 * @param name
 	 *            name of the method
 	 * @param desc
@@ -58,7 +59,8 @@
 	 * branches have been incremented for this method coverage node.
 	 */
 	public void incrementMethodCounter() {
-		final ICounter base = this.instructionCounter.getCoveredCount() == 0 ? CounterImpl.COUNTER_1_0
+		final ICounter base = this.instructionCounter.getCoveredCount() == 0
+				? CounterImpl.COUNTER_1_0
 				: CounterImpl.COUNTER_0_1;
 		this.methodCounter = this.methodCounter.increment(base);
 		this.complexityCounter = this.complexityCounter.increment(base);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/PackageCoverageImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/PackageCoverageImpl.java
index 285ddd3..b9bad06 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/PackageCoverageImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/PackageCoverageImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -21,8 +22,8 @@
 /**
  * Implementation of {@link IPackageCoverage}.
  */
-public class PackageCoverageImpl extends CoverageNodeImpl implements
-		IPackageCoverage {
+public class PackageCoverageImpl extends CoverageNodeImpl
+		implements IPackageCoverage {
 
 	private final Collection<IClassCoverage> classes;
 
@@ -30,7 +31,7 @@
 
 	/**
 	 * Creates package node instance for a package with the given name.
-	 * 
+	 *
 	 * @param name
 	 *            vm name of the package
 	 * @param classes
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceFileCoverageImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceFileCoverageImpl.java
index dc4483f..fafce46 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceFileCoverageImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceFileCoverageImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -16,14 +17,14 @@
 /**
  * Implementation of {@link ISourceFileCoverage}.
  */
-public class SourceFileCoverageImpl extends SourceNodeImpl implements
-		ISourceFileCoverage {
+public class SourceFileCoverageImpl extends SourceNodeImpl
+		implements ISourceFileCoverage {
 
 	private final String packagename;
 
 	/**
 	 * Creates a source file data object with the given parameters.
-	 * 
+	 *
 	 * @param name
 	 *            name of the source file
 	 * @param packagename
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java
index 3fa3d69..e577c55 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/SourceNodeImpl.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.analysis;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Create a new source node implementation instance.
-	 * 
+	 *
 	 * @param elementType
 	 *            element type
 	 * @param name
@@ -44,7 +45,7 @@
 	 * Make sure that the internal buffer can keep lines from first to last.
 	 * While the buffer is also incremented automatically, this method allows
 	 * optimization in case the total range is known in advance.
-	 * 
+	 *
 	 * @param first
 	 *            first line number or {@link ISourceNode#UNKNOWN_LINE}
 	 * @param last
@@ -75,16 +76,16 @@
 	 * Increments all counters by the values of the given child. When
 	 * incrementing the line counter it is assumed that the child refers to the
 	 * same source file.
-	 * 
+	 *
 	 * @param child
 	 *            child node to add
 	 */
 	public void increment(final ISourceNode child) {
-		instructionCounter = instructionCounter.increment(child
-				.getInstructionCounter());
+		instructionCounter = instructionCounter
+				.increment(child.getInstructionCounter());
 		branchCounter = branchCounter.increment(child.getBranchCounter());
-		complexityCounter = complexityCounter.increment(child
-				.getComplexityCounter());
+		complexityCounter = complexityCounter
+				.increment(child.getComplexityCounter());
 		methodCounter = methodCounter.increment(child.getMethodCounter());
 		classCounter = classCounter.increment(child.getClassCounter());
 		final int firstLine = child.getFirstLine();
@@ -103,7 +104,7 @@
 	 * Increments instructions and branches by the given counter values. If a
 	 * optional line number is specified the instructions and branches are added
 	 * to the given line. The line counter is incremented accordingly.
-	 * 
+	 *
 	 * @param instructions
 	 *            instructions to add
 	 * @param branches
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/StringPool.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/StringPool.java
index 97e25aa..8b646e9 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/StringPool.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/StringPool.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
- *    Brock Janiczak - analysis and concept 
+ *    Brock Janiczak - analysis and concept
  *    Marc R. Hoffmann - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.core.internal.analysis;
 
@@ -31,7 +32,7 @@
 
 	/**
 	 * Returns a normalized instance that is equal to the given {@link String} .
-	 * 
+	 *
 	 * @param s
 	 *            any string or <code>null</code>
 	 * @return normalized instance or <code>null</code>
@@ -52,7 +53,7 @@
 	 * Returns a modified version of the array with all string slots normalized.
 	 * It is up to the implementation to replace strings in the array instance
 	 * or return a new array instance.
-	 * 
+	 *
 	 * @param arr
 	 *            String array or <code>null</code>
 	 * @return normalized instance or <code>null</code>
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
index 38860a8..837278e 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AbstractMatcher.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -34,7 +35,7 @@
 	final void firstIsALoad0(final MethodNode methodNode) {
 		cursor = methodNode.instructions.getFirst();
 		skipNonOpcodes();
-		if (cursor.getOpcode() == Opcodes.ALOAD
+		if (cursor != null && cursor.getOpcode() == Opcodes.ALOAD
 				&& ((VarInsnNode) cursor).var == 0) {
 			return;
 		}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilter.java
index d78444c..1653fa2 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/AnnotationGeneratedFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/BridgeFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/BridgeFilter.java
new file mode 100644
index 0000000..bc23941
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/BridgeFilter.java
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Filters bridge methods.
+ */
+final class BridgeFilter implements IFilter {
+
+	public void filter(final MethodNode methodNode,
+			final IFilterContext context, final IFilterOutput output) {
+		if ((methodNode.access & Opcodes.ACC_BRIDGE) == 0) {
+			return;
+		}
+		output.ignore(methodNode.instructions.getFirst(),
+				methodNode.instructions.getLast());
+	}
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
index 4a39d1e..ae23c64 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumEmptyConstructorFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
index 0c2eef5..faab0ad 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/EnumFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
index 7a1053b..484ccc0 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/Filters.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -27,24 +28,25 @@
 
 	/**
 	 * Creates filter that combines all other filters.
-	 * 
+	 *
 	 * @return filter that combines all other filters
 	 */
 	public static IFilter all() {
 		return new Filters(new EnumFilter(), new SyntheticFilter(),
-				new SynchronizedFilter(), new TryWithResourcesJavac11Filter(),
+				new BridgeFilter(), new SynchronizedFilter(),
+				new TryWithResourcesJavac11Filter(),
 				new TryWithResourcesJavacFilter(),
 				new TryWithResourcesEcjFilter(), new FinallyFilter(),
 				new PrivateEmptyNoArgConstructorFilter(),
-				new StringSwitchJavacFilter(), new StringSwitchEcjFilter(),
-				new EnumEmptyConstructorFilter(),
+				new StringSwitchJavacFilter(), new StringSwitchFilter(),
+				new EnumEmptyConstructorFilter(), new RecordsFilter(),
 				new AnnotationGeneratedFilter(), new KotlinGeneratedFilter(),
 				new KotlinLateinitFilter(), new KotlinWhenFilter(),
 				new KotlinWhenStringFilter(),
 				new KotlinUnsafeCastOperatorFilter(),
 				new KotlinNotNullOperatorFilter(),
 				new KotlinDefaultArgumentsFilter(), new KotlinInlineFilter(),
-				new KotlinCoroutineFilter());
+				new KotlinCoroutineFilter(), new KotlinDefaultMethodsFilter());
 	}
 
 	private Filters(final IFilter... filters) {
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
index b2e0b14..284d432 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/FinallyFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -26,7 +27,7 @@
  * Filters duplicates of finally blocks that compiler generates.
  *
  * To understand algorithm of filtering, consider following example:
- * 
+ *
  * <pre>
  * try {
  * 	if (x) {
@@ -44,7 +45,7 @@
  * There are 4 <b>distinct</b> points of exit out of these "try/catch/finally"
  * blocks - three without exception, and one with Throwable if it is thrown
  * prior to reaching first three points of exit.
- * 
+ *
  * "finally" block must be executed just before these points, so there must be 4
  * copies of its bytecode instructions.
  *
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
index b662ba4..9f0a758 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java
index 8b97654..992e3e8 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterContext.java
@@ -1,48 +1,54 @@
-/*******************************************************************************

- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Marc R. Hoffmann - initial API and implementation

- *

- *******************************************************************************/

-package org.jacoco.core.internal.analysis.filter;

-

-import java.util.Set;

-

-/**

- * Context information provided to filters.

- */

-public interface IFilterContext {

-

-	/**

-	 * @return vm name of the enclosing class

-	 */

-	String getClassName();

-

-	/**

-	 * @return vm name of the super class of the enclosing class

-	 */

-	String getSuperClassName();

-

-	/**

-	 * @return vm names of the class annotations of the enclosing class

-	 */

-	Set<String> getClassAnnotations();

-

-	/**

-	 * @return file name of the corresponding source file or <code>null</code>

-	 *         if not available

-	 */

-	String getSourceFileName();

-

-	/**

-	 * @return value of SourceDebugExtension attribute or <code>null</code> if

-	 *         not available

-	 */

-	String getSourceDebugExtension();

-

-}

+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import java.util.Set;
+
+/**
+ * Context information provided to filters.
+ */
+public interface IFilterContext {
+
+	/**
+	 * @return vm name of the enclosing class
+	 */
+	String getClassName();
+
+	/**
+	 * @return vm name of the super class of the enclosing class
+	 */
+	String getSuperClassName();
+
+	/**
+	 * @return vm names of the class annotations of the enclosing class
+	 */
+	Set<String> getClassAnnotations();
+
+	/**
+	 * @return names of the class attributes
+	 */
+	Set<String> getClassAttributes();
+
+	/**
+	 * @return file name of the corresponding source file or <code>null</code>
+	 *         if not available
+	 */
+	String getSourceFileName();
+
+	/**
+	 * @return value of SourceDebugExtension attribute or <code>null</code> if
+	 *         not available
+	 */
+	String getSourceDebugExtension();
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterOutput.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterOutput.java
index 0f02220..93ad2ee 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterOutput.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/IFilterOutput.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -35,7 +36,7 @@
 	/**
 	 * Marks two instructions that should be merged during computation of
 	 * coverage.
-	 * 
+	 *
 	 * @param i1
 	 *            first instruction
 	 * @param i2
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
index 66d450a..4b850f3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinCoroutineFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -19,6 +20,7 @@
 import org.objectweb.asm.tree.AbstractInsnNode;
 import org.objectweb.asm.tree.JumpInsnNode;
 import org.objectweb.asm.tree.LdcInsnNode;
+import org.objectweb.asm.tree.MethodInsnNode;
 import org.objectweb.asm.tree.MethodNode;
 import org.objectweb.asm.tree.TableSwitchInsnNode;
 
@@ -27,7 +29,11 @@
  */
 public final class KotlinCoroutineFilter implements IFilter {
 
-	static boolean isLastArgumentContinuation(final MethodNode methodNode) {
+	static boolean isImplementationOfSuspendFunction(
+			final MethodNode methodNode) {
+		if (methodNode.name.startsWith("access$")) {
+			return false;
+		}
 		final Type methodType = Type.getMethodType(methodNode.desc);
 		final int lastArgument = methodType.getArgumentTypes().length - 1;
 		return lastArgument >= 0 && "kotlin.coroutines.Continuation".equals(
@@ -42,16 +48,41 @@
 		}
 
 		new Matcher().match(methodNode, output);
-
+		new Matcher().matchOptimizedTailCall(methodNode, output);
 	}
 
 	private static class Matcher extends AbstractMatcher {
+
+		private void matchOptimizedTailCall(final MethodNode methodNode,
+				final IFilterOutput output) {
+			for (final AbstractInsnNode i : methodNode.instructions) {
+				cursor = i;
+				nextIs(Opcodes.DUP);
+				nextIsInvoke(Opcodes.INVOKESTATIC,
+						"kotlin/coroutines/intrinsics/IntrinsicsKt",
+						"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;");
+				nextIs(Opcodes.IF_ACMPNE);
+				nextIs(Opcodes.ARETURN);
+				nextIs(Opcodes.POP);
+				if (cursor != null) {
+					output.ignore(i.getNext(), cursor);
+				}
+			}
+		}
+
 		private void match(final MethodNode methodNode,
 				final IFilterOutput output) {
-			cursor = methodNode.instructions.getFirst();
-			nextIsInvoke(Opcodes.INVOKESTATIC,
-					"kotlin/coroutines/intrinsics/IntrinsicsKt",
-					"getCOROUTINE_SUSPENDED", "()Ljava/lang/Object;");
+			cursor = skipNonOpcodes(methodNode.instructions.getFirst());
+			if (cursor == null || cursor.getOpcode() != Opcodes.INVOKESTATIC) {
+				cursor = null;
+			} else {
+				final MethodInsnNode m = (MethodInsnNode) cursor;
+				if (!"kotlin/coroutines/intrinsics/IntrinsicsKt".equals(m.owner)
+						|| !"getCOROUTINE_SUSPENDED".equals(m.name)
+						|| !"()Ljava/lang/Object;".equals(m.desc)) {
+					cursor = null;
+				}
+			}
 
 			if (cursor == null) {
 				cursor = skipNonOpcodes(methodNode.instructions.getFirst());
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java
index ef19844..b734d23 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultArgumentsFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -18,15 +19,16 @@
 import org.objectweb.asm.Type;
 import org.objectweb.asm.tree.AbstractInsnNode;
 import org.objectweb.asm.tree.JumpInsnNode;
+import org.objectweb.asm.tree.LdcInsnNode;
 import org.objectweb.asm.tree.MethodNode;
 import org.objectweb.asm.tree.VarInsnNode;
 
 /**
  * Filters branches that Kotlin compiler generates for default arguments.
- * 
+ *
  * For each default argument Kotlin compiler generates following bytecode to
  * determine if it should be used or not:
- * 
+ *
  * <pre>
  * ILOAD maskVar
  * ICONST_x, BIPUSH, SIPUSH, LDC or LDC_W
@@ -35,16 +37,30 @@
  * default argument
  * label:
  * </pre>
- * 
+ *
  * Where <code>maskVar</code> is penultimate argument of synthetic method with
- * suffix "$default". And its value can't be zero - invocation with all
- * arguments uses original non synthetic method, thus <code>IFEQ</code>
- * instructions should be ignored.
+ * suffix "$default" or of synthetic constructor with last argument
+ * "kotlin.jvm.internal.DefaultConstructorMarker". And its value can't be zero -
+ * invocation with all arguments uses original non synthetic method, thus
+ * <code>IFEQ</code> instructions should be ignored.
  */
 public final class KotlinDefaultArgumentsFilter implements IFilter {
 
-	static boolean isDefaultArgumentsMethodName(final String methodName) {
-		return methodName.endsWith("$default");
+	static boolean isDefaultArgumentsMethod(final MethodNode methodNode) {
+		return methodNode.name.endsWith("$default");
+	}
+
+	static boolean isDefaultArgumentsConstructor(final MethodNode methodNode) {
+		if (!"<init>".equals(methodNode.name)) {
+			return false;
+		}
+		final Type[] argumentTypes = Type.getMethodType(methodNode.desc)
+				.getArgumentTypes();
+		if (argumentTypes.length < 2) {
+			return false;
+		}
+		return "kotlin.jvm.internal.DefaultConstructorMarker"
+				.equals(argumentTypes[argumentTypes.length - 1].getClassName());
 	}
 
 	public void filter(final MethodNode methodNode,
@@ -52,24 +68,45 @@
 		if ((methodNode.access & Opcodes.ACC_SYNTHETIC) == 0) {
 			return;
 		}
-		if (!isDefaultArgumentsMethodName(methodNode.name)) {
-			return;
-		}
 		if (!KotlinGeneratedFilter.isKotlinClass(context)) {
 			return;
 		}
 
-		new Matcher().match(methodNode, output);
+		if (isDefaultArgumentsMethod(methodNode)) {
+			new Matcher().match(methodNode, output, false);
+		} else if (isDefaultArgumentsConstructor(methodNode)) {
+			new Matcher().match(methodNode, output, true);
+		}
 	}
 
 	private static class Matcher extends AbstractMatcher {
 		public void match(final MethodNode methodNode,
-				final IFilterOutput output) {
-			cursor = methodNode.instructions.getFirst();
+				final IFilterOutput output, final boolean constructor) {
+			cursor = skipNonOpcodes(methodNode.instructions.getFirst());
+
+			nextIs(Opcodes.IFNULL);
+			nextIsType(Opcodes.NEW, "java/lang/UnsupportedOperationException");
+			nextIs(Opcodes.DUP);
+			nextIs(Opcodes.LDC);
+			if (cursor == null
+					|| !(((LdcInsnNode) cursor).cst instanceof String)
+					|| !(((String) ((LdcInsnNode) cursor).cst).startsWith(
+							"Super calls with default arguments not supported in this target"))) {
+				cursor = null;
+			}
+			nextIsInvoke(Opcodes.INVOKESPECIAL,
+					"java/lang/UnsupportedOperationException", "<init>",
+					"(Ljava/lang/String;)V");
+			nextIs(Opcodes.ATHROW);
+			if (cursor != null) {
+				output.ignore(methodNode.instructions.getFirst(), cursor);
+				next();
+			} else {
+				cursor = skipNonOpcodes(methodNode.instructions.getFirst());
+			}
 
 			final Set<AbstractInsnNode> ignore = new HashSet<AbstractInsnNode>();
-			final int maskVar = Type.getMethodType(methodNode.desc)
-					.getArgumentTypes().length - 2;
+			final int maskVar = maskVar(methodNode.desc, constructor);
 			while (true) {
 				if (cursor.getOpcode() != Opcodes.ILOAD) {
 					break;
@@ -92,6 +129,22 @@
 				output.ignore(i, i);
 			}
 		}
+
+		private static int maskVar(final String desc,
+				final boolean constructor) {
+			int slot = 0;
+			if (constructor) {
+				// one slot for reference to current object
+				slot++;
+			}
+			final Type[] argumentTypes = Type.getMethodType(desc)
+					.getArgumentTypes();
+			final int penultimateArgument = argumentTypes.length - 2;
+			for (int i = 0; i < penultimateArgument; i++) {
+				slot += argumentTypes[i].getSize();
+			}
+			return slot;
+		}
 	}
 
 }
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilter.java
new file mode 100644
index 0000000..50d6280
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinDefaultMethodsFilter.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.MethodInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Filters methods that Kotlin compiler generates for non-overridden
+ * non-abstract methods of interfaces.
+ */
+final class KotlinDefaultMethodsFilter implements IFilter {
+
+	public void filter(final MethodNode methodNode,
+			final IFilterContext context, final IFilterOutput output) {
+		if (!KotlinGeneratedFilter.isKotlinClass(context)) {
+			return;
+		}
+		new Matcher().match(methodNode, output);
+	}
+
+	private static class Matcher extends AbstractMatcher {
+		private void match(final MethodNode methodNode,
+				final IFilterOutput output) {
+			firstIsALoad0(methodNode);
+			nextIs(Opcodes.INVOKESTATIC);
+			if (cursor != null && ((MethodInsnNode) cursor).owner
+					.endsWith("$DefaultImpls")) {
+				output.ignore(methodNode.instructions.getFirst(),
+						methodNode.instructions.getLast());
+			}
+		}
+	}
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java
index 129580a..4ebc370 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinGeneratedFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Nikolay Krasko - initial API and implementation
@@ -49,8 +50,7 @@
 	}
 
 	private boolean hasLineNumber(final MethodNode methodNode) {
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			if (AbstractInsnNode.LINE == i.getType()) {
 				return true;
 			}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilter.java
index 5666de2..f3e7d6b 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinInlineFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -46,8 +47,7 @@
 		}
 
 		int line = 0;
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			if (AbstractInsnNode.LINE == i.getType()) {
 				line = ((LineNumberNode) i).line;
 			}
@@ -92,7 +92,11 @@
 			}
 			// LineSection
 			int min = Integer.MAX_VALUE;
-			while (!"*E".equals(line = br.readLine())) {
+			while (true) {
+				line = br.readLine();
+				if (line.equals("*E") || line.equals("*S KotlinDebug")) {
+					break;
+				}
 				final Matcher m = LINE_INFO_PATTERN.matcher(line);
 				if (!m.matches()) {
 					throw new IllegalStateException(
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
index 12fe926..a5e2026 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinLateinitFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Fabian Mastenbroek - initial API and implementation
@@ -13,6 +14,7 @@
 
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.tree.AbstractInsnNode;
+import org.objectweb.asm.tree.JumpInsnNode;
 import org.objectweb.asm.tree.MethodNode;
 
 /**
@@ -24,9 +26,8 @@
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
-			matcher.match(i, output);
+		for (final AbstractInsnNode node : methodNode.instructions) {
+			matcher.match(node, output);
 		}
 	}
 
@@ -44,6 +45,13 @@
 					"throwUninitializedPropertyAccessException",
 					"(Ljava/lang/String;)V");
 
+			if (cursor != null
+					&& skipNonOpcodes(cursor.getNext()) != skipNonOpcodes(
+							((JumpInsnNode) start).label)) {
+				nextIs(Opcodes.ACONST_NULL);
+				nextIs(Opcodes.ATHROW);
+			}
+
 			if (cursor != null) {
 				output.ignore(start, cursor);
 			}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
index 4dd223a..dda5421 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinNotNullOperatorFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -24,8 +25,7 @@
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			matcher.match(i, output);
 		}
 	}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
index c298e94..82522a8 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinUnsafeCastOperatorFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -23,27 +24,29 @@
  */
 public final class KotlinUnsafeCastOperatorFilter implements IFilter {
 
-	private static final String KOTLIN_TYPE_CAST_EXCEPTION = "kotlin/TypeCastException";
-
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
+		if (!KotlinGeneratedFilter.isKotlinClass(context)) {
+			return;
+		}
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
-			matcher.match(i, output);
+		for (final AbstractInsnNode i : methodNode.instructions) {
+			matcher.match("kotlin/TypeCastException", i, output);
+			// Since Kotlin 1.4.0:
+			matcher.match("java/lang/NullPointerException", i, output);
 		}
 	}
 
 	private static class Matcher extends AbstractMatcher {
-		public void match(final AbstractInsnNode start,
-				final IFilterOutput output) {
+		public void match(final String exceptionType,
+				final AbstractInsnNode start, final IFilterOutput output) {
 
 			if (Opcodes.IFNONNULL != start.getOpcode()) {
 				return;
 			}
 			cursor = start;
-
-			nextIsType(Opcodes.NEW, KOTLIN_TYPE_CAST_EXCEPTION);
+			final JumpInsnNode jumpInsnNode = (JumpInsnNode) cursor;
+			nextIsType(Opcodes.NEW, exceptionType);
 			nextIs(Opcodes.DUP);
 			nextIs(Opcodes.LDC);
 			if (cursor == null) {
@@ -54,13 +57,13 @@
 					.startsWith("null cannot be cast to non-null type"))) {
 				return;
 			}
-			nextIsInvoke(Opcodes.INVOKESPECIAL, KOTLIN_TYPE_CAST_EXCEPTION,
-					"<init>", "(Ljava/lang/String;)V");
+			nextIsInvoke(Opcodes.INVOKESPECIAL, exceptionType, "<init>",
+					"(Ljava/lang/String;)V");
 			nextIs(Opcodes.ATHROW);
 			if (cursor == null) {
 				return;
 			}
-			if (cursor.getNext() != ((JumpInsnNode) start).label) {
+			if (cursor.getNext() != jumpInsnNode.label) {
 				return;
 			}
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
index a229aa0..ba2fb95 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -17,7 +18,6 @@
 
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.InsnNode;
 import org.objectweb.asm.tree.JumpInsnNode;
 import org.objectweb.asm.tree.LabelNode;
 import org.objectweb.asm.tree.LookupSwitchInsnNode;
@@ -37,15 +37,14 @@
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			matcher.match(i, output);
 		}
 	}
 
 	private static class Matcher extends AbstractMatcher {
 		void match(final AbstractInsnNode start, final IFilterOutput output) {
-			if (start.getType() != InsnNode.LABEL) {
+			if (start.getType() != AbstractInsnNode.LABEL) {
 				return;
 			}
 			cursor = start;
@@ -92,7 +91,7 @@
 			labels = ((TableSwitchInsnNode) switchNode).labels;
 		}
 		final Set<AbstractInsnNode> newTargets = new HashSet<AbstractInsnNode>();
-		for (LabelNode label : labels) {
+		for (final LabelNode label : labels) {
 			newTargets.add(AbstractMatcher.skipNonOpcodes(label));
 		}
 		output.replaceBranches(switchNode, newTargets);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
index fcccb55..5fd2087 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/KotlinWhenStringFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -32,8 +33,7 @@
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			matcher.match(i, output);
 		}
 	}
@@ -67,10 +67,14 @@
 				hashCodes = tableSwitch.labels.size();
 			}
 
+			if (hashCodes == 0) {
+				return;
+			}
+
 			final Set<AbstractInsnNode> replacements = new HashSet<AbstractInsnNode>();
 			replacements.add(skipNonOpcodes(defaultLabel));
 
-			for (int i = 0; i < hashCodes; i++) {
+			for (int i = 1; i <= hashCodes; i++) {
 				while (true) {
 					nextIsVar(Opcodes.ALOAD, "s");
 					nextIs(Opcodes.LDC);
@@ -79,18 +83,24 @@
 					// jump to next comparison or default case
 					nextIs(Opcodes.IFEQ);
 					final JumpInsnNode jump = (JumpInsnNode) cursor;
-					// jump to case
-					nextIs(Opcodes.GOTO);
+					next();
 					if (cursor == null) {
 						return;
-					}
-
-					replacements
-							.add(skipNonOpcodes(((JumpInsnNode) cursor).label));
-
-					if (jump.label == defaultLabel) {
-						// end of comparisons for same hashCode
+					} else if (cursor.getOpcode() == Opcodes.GOTO) {
+						// jump to case body
+						replacements.add(
+								skipNonOpcodes(((JumpInsnNode) cursor).label));
+						if (jump.label == defaultLabel) {
+							// end of comparisons for same hashCode
+							break;
+						}
+					} else if (i == hashCodes && jump.label == defaultLabel) {
+						// case body
+						replacements.add(cursor);
+						cursor = jump;
 						break;
+					} else {
+						return;
 					}
 				}
 			}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
index 236ef71..4b22dc2 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/PrivateEmptyNoArgConstructorFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/RecordsFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/RecordsFilter.java
new file mode 100644
index 0000000..745848b
--- /dev/null
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/RecordsFilter.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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.core.internal.analysis.filter;
+
+import org.objectweb.asm.Handle;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.tree.InvokeDynamicInsnNode;
+import org.objectweb.asm.tree.MethodNode;
+
+/**
+ * Filters methods <code>toString</code>, <code>hashCode</code> and
+ * <code>equals</code> that compiler generates for records.
+ */
+public final class RecordsFilter implements IFilter {
+
+	public void filter(final MethodNode methodNode,
+			final IFilterContext context, final IFilterOutput output) {
+		if (!"java/lang/Record".equals(context.getSuperClassName())) {
+			return;
+		}
+		final Matcher matcher = new Matcher();
+		if (matcher.isEquals(methodNode) || matcher.isHashCode(methodNode)
+				|| matcher.isToString(methodNode)) {
+			output.ignore(methodNode.instructions.getFirst(),
+					methodNode.instructions.getLast());
+		}
+	}
+
+	private static class Matcher extends AbstractMatcher {
+		boolean isToString(final MethodNode m) {
+			if (!"toString".equals(m.name)
+					|| !"()Ljava/lang/String;".equals(m.desc)) {
+				return false;
+			}
+			firstIsALoad0(m);
+			nextIsInvokeDynamic("toString");
+			nextIs(Opcodes.ARETURN);
+			return cursor != null;
+		}
+
+		boolean isHashCode(final MethodNode m) {
+			if (!"hashCode".equals(m.name) || !"()I".equals(m.desc)) {
+				return false;
+			}
+			firstIsALoad0(m);
+			nextIsInvokeDynamic("hashCode");
+			nextIs(Opcodes.IRETURN);
+			return cursor != null;
+		}
+
+		boolean isEquals(final MethodNode m) {
+			if (!"equals".equals(m.name)
+					|| !"(Ljava/lang/Object;)Z".equals(m.desc)) {
+				return false;
+			}
+			firstIsALoad0(m);
+			nextIs(Opcodes.ALOAD);
+			nextIsInvokeDynamic("equals");
+			nextIs(Opcodes.IRETURN);
+			return cursor != null;
+		}
+
+		private void nextIsInvokeDynamic(final String name) {
+			nextIs(Opcodes.INVOKEDYNAMIC);
+			if (cursor == null) {
+				return;
+			}
+			final InvokeDynamicInsnNode i = (InvokeDynamicInsnNode) cursor;
+			final Handle bsm = i.bsm;
+			if (name.equals(i.name)
+					&& "java/lang/runtime/ObjectMethods".equals(bsm.getOwner())
+					&& "bootstrap".equals(bsm.getName())) {
+				return;
+			}
+			cursor = null;
+		}
+	}
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilter.java
similarity index 79%
rename from org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java
rename to org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilter.java
index e0aba35..a78e253 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchEcjFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -25,15 +26,15 @@
 
 /**
  * Filters code that is generated by ECJ for a <code>switch</code> statement
- * with a <code>String</code>.
+ * with a <code>String</code> and by Kotlin compiler 1.5 and above for a
+ * <code>when</code> expression with a <code>String</code>.
  */
-public final class StringSwitchEcjFilter implements IFilter {
+public final class StringSwitchFilter implements IFilter {
 
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		final Matcher matcher = new Matcher();
-		for (AbstractInsnNode i = methodNode.instructions
-				.getFirst(); i != null; i = i.getNext()) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			matcher.match(i, output);
 		}
 	}
@@ -42,7 +43,8 @@
 		public void match(final AbstractInsnNode start,
 				final IFilterOutput output) {
 
-			if (Opcodes.ASTORE != start.getOpcode()) {
+			if (start.getOpcode() != /* ECJ */ Opcodes.ASTORE
+					&& start.getOpcode() != /* Kotlin */ Opcodes.ALOAD) {
 				return;
 			}
 			cursor = start;
@@ -67,6 +69,10 @@
 				hashCodes = tableSwitch.labels.size();
 			}
 
+			if (hashCodes == 0) {
+				return;
+			}
+
 			final Set<AbstractInsnNode> replacements = new HashSet<AbstractInsnNode>();
 			replacements.add(skipNonOpcodes(defaultLabel));
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
index 3033d9b..a5baf34 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/StringSwitchJavacFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -26,10 +27,8 @@
 
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
-		AbstractInsnNode i = methodNode.instructions.getFirst();
-		while (i != null) {
+		for (final AbstractInsnNode i : methodNode.instructions) {
 			filter(i, output);
-			i = i.getNext();
 		}
 	}
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
index 6341328..abc9e45 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SynchronizedFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
index 69c4092..127f7b0 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/SyntheticFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -19,6 +20,11 @@
  */
 public final class SyntheticFilter implements IFilter {
 
+	private static boolean isScalaClass(final IFilterContext context) {
+		return context.getClassAttributes().contains("ScalaSig")
+				|| context.getClassAttributes().contains("Scala");
+	}
+
 	public void filter(final MethodNode methodNode,
 			final IFilterContext context, final IFilterOutput output) {
 		if ((methodNode.access & Opcodes.ACC_SYNTHETIC) == 0) {
@@ -29,13 +35,25 @@
 			return;
 		}
 
+		if (isScalaClass(context)) {
+			if (methodNode.name.startsWith("$anonfun$")) {
+				return;
+			}
+		}
+
 		if (KotlinGeneratedFilter.isKotlinClass(context)) {
 			if (KotlinDefaultArgumentsFilter
-					.isDefaultArgumentsMethodName(methodNode.name)) {
+					.isDefaultArgumentsMethod(methodNode)) {
 				return;
 			}
 
-			if (KotlinCoroutineFilter.isLastArgumentContinuation(methodNode)) {
+			if (KotlinDefaultArgumentsFilter
+					.isDefaultArgumentsConstructor(methodNode)) {
+				return;
+			}
+
+			if (KotlinCoroutineFilter
+					.isImplementationOfSuspendFunction(methodNode)) {
 				return;
 			}
 		}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
index 94dea56..714ab22 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesEcjFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
index 7a20f74..0b45175 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavac11Filter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -55,7 +56,7 @@
 	 *         throw primaryExc;
 	 *     }
 	 * </pre>
-	 * 
+	 *
 	 * <code>null</code> check for resource is omitted when it is initialized
 	 * using <code>new</code>
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
index 23ecb0e..c3a0fa3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/analysis/filter/TryWithResourcesJavacFilter.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -47,7 +48,7 @@
 	 * compilation of source code that is described in <a href=
 	 * "http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html#jls-14.20.3.1">JLS
 	 * 14.20.3. try-with-resources</a>:
-	 * 
+	 *
 	 * <pre>
 	 *     Resource r = ...;
 	 *     Throwable primaryExc = null;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/data/CRC64.java b/org.jacoco.core/src/org/jacoco/core/internal/data/CRC64.java
index 620a46f..b0e8a09 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/data/CRC64.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/data/CRC64.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.data;
 
@@ -16,7 +17,7 @@
 /**
  * CRC64 checksum calculator based on the polynom specified in ISO 3309. The
  * implementation is based on the following publications:
- * 
+ *
  * <ul>
  * <li>http://en.wikipedia.org/wiki/Cyclic_redundancy_check</li>
  * <li>http://www.geocities.com/SiliconValley/Pines/8659/crc.htm</li>
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataInput.java b/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataInput.java
index 945b2b6..2f4e2ee 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataInput.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataInput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.data;
 
@@ -17,7 +18,7 @@
 
 /**
  * Additional data input methods for compact storage of data structures.
- * 
+ *
  * @see CompactDataOutput
  */
 public class CompactDataInput extends DataInputStream {
@@ -25,7 +26,7 @@
 	/**
 	 * Creates a new {@link CompactDataInput} that uses the specified underlying
 	 * input stream.
-	 * 
+	 *
 	 * @param in
 	 *            underlying input stream
 	 */
@@ -35,7 +36,7 @@
 
 	/**
 	 * Reads a variable length representation of an integer value.
-	 * 
+	 *
 	 * @return read value
 	 * @throws IOException
 	 *             if thrown by the underlying stream
@@ -50,7 +51,7 @@
 
 	/**
 	 * Reads a boolean array.
-	 * 
+	 *
 	 * @return boolean array
 	 * @throws IOException
 	 *             if thrown by the underlying stream
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataOutput.java b/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataOutput.java
index 4d230f8..ba52555 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataOutput.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/data/CompactDataOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.data;
 
@@ -17,7 +18,7 @@
 
 /**
  * Additional data output methods for compact storage of data structures.
- * 
+ *
  * @see CompactDataInput
  */
 public class CompactDataOutput extends DataOutputStream {
@@ -25,7 +26,7 @@
 	/**
 	 * Creates a new {@link CompactDataOutput} instance that writes data to the
 	 * specified underlying output stream
-	 * 
+	 *
 	 * @param out
 	 *            underlying output stream
 	 */
@@ -37,7 +38,7 @@
 	 * Writes a variable length representation of an integer value that reduces
 	 * the number of written bytes for small positive values. Depending on the
 	 * given value 1 to 5 bytes will be written to the underlying stream.
-	 * 
+	 *
 	 * @param value
 	 *            value to write
 	 * @throws IOException
@@ -55,7 +56,7 @@
 	/**
 	 * Writes a boolean array. Internally a sequence of boolean values is packed
 	 * into single bits.
-	 * 
+	 *
 	 * @param value
 	 *            boolean array
 	 * @throws IOException
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
index 876a135..3ed19a8 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesAdapter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -20,8 +21,8 @@
  * A {@link org.objectweb.asm.ClassVisitor} that calculates probes for every
  * method.
  */
-public class ClassProbesAdapter extends ClassVisitor implements
-		IProbeIdGenerator {
+public class ClassProbesAdapter extends ClassVisitor
+		implements IProbeIdGenerator {
 
 	private static final MethodProbesVisitor EMPTY_METHOD_PROBES_VISITOR = new MethodProbesVisitor() {
 	};
@@ -36,7 +37,7 @@
 
 	/**
 	 * Creates a new adapter that delegates to the given visitor.
-	 * 
+	 *
 	 * @param cv
 	 *            instance to delegate to
 	 * @param trackFrames
@@ -59,7 +60,8 @@
 
 	@Override
 	public final MethodVisitor visitMethod(final int access, final String name,
-			final String desc, final String signature, final String[] exceptions) {
+			final String desc, final String signature,
+			final String[] exceptions) {
 		final MethodProbesVisitor methodProbes;
 		final MethodProbesVisitor mv = cv.visitMethod(access, name, desc,
 				signature, exceptions);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesVisitor.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesVisitor.java
index 54817e8..f8325ef 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/ClassProbesVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * New visitor instance that delegates to the given visitor.
-	 * 
+	 *
 	 * @param cv
 	 *            optional next visitor in chain
 	 */
@@ -50,7 +51,7 @@
 	 * is called just before {@link ClassVisitor#visitEnd()}. For interfaces
 	 * this method is called before the first method (the static initializer) is
 	 * emitted.
-	 * 
+	 *
 	 * @param count
 	 *            total number of probes
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/FrameSnapshot.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/FrameSnapshot.java
index a0c7449..b8c819d 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/FrameSnapshot.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/FrameSnapshot.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
@@ -36,7 +37,7 @@
 
 	/**
 	 * Create a IFrame instance based on the given analyzer.
-	 * 
+	 *
 	 * @param analyzer
 	 *            analyzer instance or <code>null</code>
 	 * @param popCount
@@ -58,7 +59,8 @@
 	 * {@link MethodVisitor#visitFrame(int, int, Object[], int, Object[])}
 	 * method.
 	 */
-	private static Object[] reduce(final List<Object> source, final int popCount) {
+	private static Object[] reduce(final List<Object> source,
+			final int popCount) {
 		final List<Object> copy = new ArrayList<Object>(source);
 		final int size = source.size() - popCount;
 		copy.subList(size, source.size()).clear();
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/IFrame.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/IFrame.java
index 6079f44..5c10ae7 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/IFrame.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/IFrame.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -20,7 +21,7 @@
 
 	/**
 	 * Emits a frame event with the current content to the given visitor.
-	 * 
+	 *
 	 * @param mv
 	 *            method visitor to emit frame event to
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/IProbeIdGenerator.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/IProbeIdGenerator.java
index 6f3f197..692fea0 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/IProbeIdGenerator.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/IProbeIdGenerator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -18,7 +19,7 @@
 
 	/**
 	 * Returns the next unique probe id.
-	 * 
+	 *
 	 * @return unique probe id
 	 */
 	int nextId();
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
index 0f0e4d3..f44d66d 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelFlowAnalyzer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -27,7 +28,7 @@
 
 	/**
 	 * Marks all labels of the method with control flow information.
-	 * 
+	 *
 	 * @param method
 	 *            Method to mark labels
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelInfo.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelInfo.java
index 85dc1d8..122d62b 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelInfo.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/LabelInfo.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -48,7 +49,7 @@
 
 	/**
 	 * Defines that the given label is a jump target.
-	 * 
+	 *
 	 * @param label
 	 *            label to define
 	 */
@@ -64,7 +65,7 @@
 	/**
 	 * Defines that the given label is the possible successor of the previous
 	 * instruction in the method.
-	 * 
+	 *
 	 * @param label
 	 *            label to define
 	 */
@@ -81,7 +82,7 @@
 	 * to a certain label are: jump targets, exception handlers and normal
 	 * control flow from its predecessor instruction (unless this is an
 	 * unconditional jump or method exit).
-	 * 
+	 *
 	 * @param label
 	 *            label to check
 	 * @return <code>true</code> if the given multiple control paths lead to the
@@ -96,7 +97,7 @@
 	 * Checks whether this label is the possible successor of the previous
 	 * instruction in the method. This is the case if the predecessor isn't a
 	 * unconditional jump or method exit instruction.
-	 * 
+	 *
 	 * @param label
 	 *            label to check
 	 * @return <code>true</code> if the label is a possible instruction
@@ -109,7 +110,7 @@
 
 	/**
 	 * Mark a given label as the beginning of a line with method invocations.
-	 * 
+	 *
 	 * @param label
 	 *            label to mark
 	 */
@@ -120,7 +121,7 @@
 	/**
 	 * Checks whether the a given label has been marked as a line with method
 	 * invocations.
-	 * 
+	 *
 	 * @param label
 	 *            label to check
 	 * @return <code>true</code> if the label represents a line with method
@@ -133,7 +134,7 @@
 
 	/**
 	 * Determines whether the given label needs a probe to be inserted before.
-	 * 
+	 *
 	 * @param label
 	 *            label to test
 	 * @return <code>true</code> if a probe should be inserted before
@@ -146,7 +147,7 @@
 
 	/**
 	 * Mark a given label as done.
-	 * 
+	 *
 	 * @param label
 	 *            label to mark
 	 */
@@ -156,7 +157,7 @@
 
 	/**
 	 * Resets the "done" status of a given label.
-	 * 
+	 *
 	 * @param label
 	 *            label to reset
 	 */
@@ -169,7 +170,7 @@
 
 	/**
 	 * Resets the "done" status of all given labels.
-	 * 
+	 *
 	 * @param labels
 	 *            labels to reset
 	 */
@@ -181,7 +182,7 @@
 
 	/**
 	 * Checks whether this label is marked as done.
-	 * 
+	 *
 	 * @param label
 	 *            label to check
 	 * @return <code>true</code> if this label is marked as done
@@ -193,7 +194,7 @@
 
 	/**
 	 * Sets the given probe id to the given label.
-	 * 
+	 *
 	 * @param label
 	 *            label to assign a probe to
 	 * @param id
@@ -205,7 +206,7 @@
 
 	/**
 	 * Returns the assigned probe id.
-	 * 
+	 *
 	 * @param label
 	 *            label to check
 	 * @return probe id or {@link #NO_PROBE} if no probe is assigned to the
@@ -219,7 +220,7 @@
 	/**
 	 * Defines an intermediate label for the given label. Such intermediate
 	 * labels are required during instrumentation to add probes to jump targets.
-	 * 
+	 *
 	 * @param label
 	 *            label to define for
 	 * @param intermediate
@@ -233,7 +234,7 @@
 	/**
 	 * Returns the intermediate label for the given label if one has been
 	 * defined.
-	 * 
+	 *
 	 * @param label
 	 *            label to look for
 	 * @return intermediate label or <code>null</code>
@@ -245,7 +246,7 @@
 
 	/**
 	 * Sets the instruction corresponding to this label.
-	 * 
+	 *
 	 * @param label
 	 *            label to set the instruction for
 	 * @param instruction
@@ -259,7 +260,7 @@
 	/**
 	 * Returns the corresponding instruction for the given label if one has been
 	 * defined.
-	 * 
+	 *
 	 * @param label
 	 *            label to look for
 	 * @return corresponding instruction or <code>null</code>
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
index 40e20a3..30253d0 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesAdapter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -36,7 +37,7 @@
 
 	/**
 	 * Create a new adapter instance.
-	 * 
+	 *
 	 * @param probesVisitor
 	 *            visitor to delegate to
 	 * @param idGenerator
@@ -53,7 +54,7 @@
 	/**
 	 * If an analyzer is set {@link IFrame} handles are calculated and emitted
 	 * to the probes methods.
-	 * 
+	 *
 	 * @param analyzer
 	 *            optional analyzer to set
 	 */
@@ -64,8 +65,8 @@
 	@Override
 	public void visitTryCatchBlock(final Label start, final Label end,
 			final Label handler, final String type) {
-		probesVisitor.visitTryCatchBlock(getTryCatchLabel(start), getTryCatchLabel(end),
-				handler, type);
+		probesVisitor.visitTryCatchBlock(getTryCatchLabel(start),
+				getTryCatchLabel(end), handler, type);
 	}
 
 	private Label getTryCatchLabel(Label label) {
@@ -154,8 +155,8 @@
 	public void visitTableSwitchInsn(final int min, final int max,
 			final Label dflt, final Label... labels) {
 		if (markLabels(dflt, labels)) {
-			probesVisitor.visitTableSwitchInsnWithProbes(min, max, dflt,
-					labels, frame(1));
+			probesVisitor.visitTableSwitchInsnWithProbes(min, max, dflt, labels,
+					frame(1));
 		} else {
 			probesVisitor.visitTableSwitchInsn(min, max, dflt, labels);
 		}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesVisitor.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesVisitor.java
index 75e6355..b9073c4 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodProbesVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -31,7 +32,7 @@
 
 	/**
 	 * New visitor instance that delegates to the given visitor.
-	 * 
+	 *
 	 * @param mv
 	 *            optional next visitor in chain
 	 */
@@ -42,7 +43,7 @@
 	/**
 	 * Visits an unconditional probe that should be inserted at the current
 	 * position.
-	 * 
+	 *
 	 * @param probeId
 	 *            id of the probe to insert
 	 */
@@ -54,7 +55,7 @@
 	 * Visits a jump instruction. A probe with the given id should be inserted
 	 * in a way that it is executed only when the jump to the given label is
 	 * executed.
-	 * 
+	 *
 	 * @param opcode
 	 *            the opcode of the type instruction to be visited. This opcode
 	 *            is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
@@ -81,7 +82,7 @@
 	 * Visits a zero operand instruction with a probe. This event is used only
 	 * for instructions that terminate the method. Therefore the probe must be
 	 * inserted before the actual instruction.
-	 * 
+	 *
 	 * @param opcode
 	 *            the opcode of the instruction to be visited. This opcode is
 	 *            either IRETURN, LRETURN, FRETURN, DRETURN, ARETURN, RETURN or
@@ -100,7 +101,7 @@
 	 * target labels will always have the same probe id within a call to this
 	 * method. The probe id for each label can be obtained with
 	 * {@link LabelInfo#getProbeId(Label)}.
-	 * 
+	 *
 	 * @param min
 	 *            the minimum key value.
 	 * @param max
@@ -128,7 +129,7 @@
 	 * target labels will always have the same probe id within a call to this
 	 * method. The probe id for each label can be obtained with
 	 * {@link LabelInfo#getProbeId(Label)}.
-	 * 
+	 *
 	 * @param dflt
 	 *            beginning of the default handler block.
 	 * @param keys
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodSanitizer.java b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodSanitizer.java
index 92b0894..34c3800 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodSanitizer.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/flow/MethodSanitizer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.flow;
 
@@ -18,7 +19,7 @@
 
 /**
  * This method visitor fixes two potential issues with Java byte code:
- * 
+ *
  * <ul>
  * <li>Remove JSR/RET instructions by inlining subroutines which are deprecated
  * since Java 6. The RET statement complicates control flow analysis as the jump
@@ -30,8 +31,8 @@
  */
 class MethodSanitizer extends JSRInlinerAdapter {
 
-	MethodSanitizer(final MethodVisitor mv, final int access,
-			final String name, final String desc, final String signature,
+	MethodSanitizer(final MethodVisitor mv, final int access, final String name,
+			final String desc, final String signature,
 			final String[] exceptions) {
 		super(InstrSupport.ASM_API_VERSION, mv, access, name, desc, signature,
 				exceptions);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassFieldProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassFieldProbeArrayStrategy.java
index 950be68..7a54b6d 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassFieldProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassFieldProbeArrayStrategy.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -27,7 +28,8 @@
 	/**
 	 * Frame stack with a single boolean array.
 	 */
-	private static final Object[] FRAME_STACK_ARRZ = new Object[] { InstrSupport.DATAFIELD_DESC };
+	private static final Object[] FRAME_STACK_ARRZ = new Object[] {
+			InstrSupport.DATAFIELD_DESC };
 
 	/**
 	 * Empty frame locals.
@@ -107,9 +109,9 @@
 	/**
 	 * Generates the byte code to initialize the static coverage data field
 	 * within this class.
-	 * 
+	 *
 	 * The code will push the [Z data array on the operand stack.
-	 * 
+	 *
 	 * @param mv
 	 *            generator to emit code to
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
index 7d5e975..476c9e3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ClassInstrumenter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Emits a instrumented version of this class to the given class visitor.
-	 * 
+	 *
 	 * @param probeArrayStrategy
 	 *            this strategy will be used to access the probe array
 	 * @param cv
@@ -58,7 +59,8 @@
 
 	@Override
 	public MethodProbesVisitor visitMethod(final int access, final String name,
-			final String desc, final String signature, final String[] exceptions) {
+			final String desc, final String signature,
+			final String[] exceptions) {
 
 		InstrSupport.assertNotInstrumented(name, className);
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategy.java
index ca2fb60..31cc97a 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/CondyProbeArrayStrategy.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,9 +12,9 @@
  *******************************************************************************/
 package org.jacoco.core.internal.instr;
 
+import org.jacoco.core.runtime.IExecutionDataAccessorGenerator;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ConstantDynamic;
-import org.jacoco.core.runtime.IExecutionDataAccessorGenerator;
 import org.objectweb.asm.Handle;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/DuplicateFrameEliminator.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/DuplicateFrameEliminator.java
index bc3e54b..dfc88b4 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/DuplicateFrameEliminator.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/DuplicateFrameEliminator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeArrayStrategy.java
index 5fe0cdc..9b24f9a 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeArrayStrategy.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -23,7 +24,7 @@
 
 	/**
 	 * Creates code that stores the probe array instance in the given variable.
-	 * 
+	 *
 	 * @param mv
 	 *            visitor to create code
 	 * @param clinit
@@ -37,7 +38,7 @@
 	/**
 	 * Adds additional class members required by this strategy. This method is
 	 * called after all original members of the class has been processed.
-	 * 
+	 *
 	 * @param cv
 	 *            visitor to create fields and methods
 	 * @param probeCount
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserter.java
index 2f8dab6..9b22ede 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/IProbeInserter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -19,7 +20,7 @@
 
 	/**
 	 * Inserts the probe with the given id.
-	 * 
+	 *
 	 * @param id
 	 *            id of the probe to insert
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
index 4d4e1ba..c125112 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/InstrSupport.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -26,7 +27,7 @@
 	}
 
 	/** ASM API version */
-	public static final int ASM_API_VERSION = Opcodes.ASM7;
+	public static final int ASM_API_VERSION = Opcodes.ASM9;
 
 	// === Data Field ===
 
@@ -212,7 +213,7 @@
 
 	/**
 	 * Determines whether the given class file version requires stackmap frames.
-	 * 
+	 *
 	 * @param version
 	 *            class file version
 	 * @return <code>true</code> if frames are required
@@ -226,7 +227,7 @@
 	 * Ensures that the given member does not correspond to a internal member
 	 * created by the instrumentation process. This would mean that the class is
 	 * already instrumented.
-	 * 
+	 *
 	 * @param member
 	 *            name of the member to check
 	 * @param owner
@@ -248,7 +249,7 @@
 	 * Generates the instruction to push the given int value on the stack.
 	 * Implementation taken from
 	 * {@link org.objectweb.asm.commons.GeneratorAdapter#push(int)}.
-	 * 
+	 *
 	 * @param mv
 	 *            visitor to emit the instruction
 	 * @param value
@@ -276,9 +277,9 @@
 	 */
 	public static ClassReader classReaderFor(final byte[] b) {
 		final int originalVersion = getMajorVersion(b);
-		if (originalVersion == Opcodes.V12 + 1) {
+		if (originalVersion == Opcodes.V16 + 1) {
 			// temporarily downgrade version to bypass check in ASM
-			setMajorVersion(Opcodes.V12, b);
+			setMajorVersion(Opcodes.V16, b);
 		}
 		final ClassReader classReader = new ClassReader(b);
 		setMajorVersion(originalVersion, b);
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/InterfaceFieldProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/InterfaceFieldProbeArrayStrategy.java
index bf855fe..decd234 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/InterfaceFieldProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/InterfaceFieldProbeArrayStrategy.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -27,7 +28,8 @@
 	/**
 	 * Frame stack with a single boolean array.
 	 */
-	private static final Object[] FRAME_STACK_ARRZ = new Object[] { InstrSupport.DATAFIELD_DESC };
+	private static final Object[] FRAME_STACK_ARRZ = new Object[] {
+			InstrSupport.DATAFIELD_DESC };
 
 	/**
 	 * Empty frame locals.
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/LocalProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/LocalProbeArrayStrategy.java
index 67068ed..9e30703 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/LocalProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/LocalProbeArrayStrategy.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/MethodInstrumenter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/MethodInstrumenter.java
index 396368b..7fcab58 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/MethodInstrumenter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/MethodInstrumenter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Create a new instrumenter instance for the given method.
-	 * 
+	 *
 	 * @param mv
 	 *            next method visitor in the chain
 	 * @param probeInserter
@@ -159,7 +160,8 @@
 		return intermediate;
 	}
 
-	private void insertIntermediateProbe(final Label label, final IFrame frame) {
+	private void insertIntermediateProbe(final Label label,
+			final IFrame frame) {
 		final int probeId = LabelInfo.getProbeId(label);
 		if (probeId != LabelInfo.NO_PROBE && !LabelInfo.isDone(label)) {
 			mv.visitLabel(LabelInfo.getIntermediateLabel(label));
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategy.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategy.java
index b3a4186..427678b 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategy.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/NoneProbeArrayStrategy.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactory.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactory.java
index d5756b7..b222376 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactory.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeArrayStrategyFactory.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -50,10 +51,13 @@
 			if (counter.getCount() == 0) {
 				return new NoneProbeArrayStrategy();
 			}
-			if (version >= Opcodes.V11 && counter.hasMethods()) {
-				return new CondyProbeArrayStrategy(className, true, classId,
-						accessorGenerator);
-			}
+// BEGIN android-change
+			// See https://github.com/jacoco/jacoco/issues/1151
+			// if (version >= Opcodes.V11 && counter.hasMethods()) {
+			// 	return new CondyProbeArrayStrategy(className, true, classId,
+			// 			accessorGenerator);
+			// }
+// END android-change
 			if (version >= Opcodes.V1_8 && counter.hasMethods()) {
 				return new InterfaceFieldProbeArrayStrategy(className, classId,
 						counter.getCount(), accessorGenerator);
@@ -62,10 +66,13 @@
 						counter.getCount(), accessorGenerator);
 			}
 		} else {
-			if (version >= Opcodes.V11) {
-				return new CondyProbeArrayStrategy(className, false, classId,
-						accessorGenerator);
-			}
+// BEGIN android-change
+			// See https://github.com/jacoco/jacoco/issues/1151
+			// if (version >= Opcodes.V11) {
+			// 	return new CondyProbeArrayStrategy(className, false, classId,
+			// 			accessorGenerator);
+			// }
+// END android-change
 			return new ClassFieldProbeArrayStrategy(className, classId,
 					InstrSupport.needsFrames(version), accessorGenerator);
 		}
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeCounter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeCounter.java
index de22326..c41a9b3 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeCounter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeCounter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -30,7 +31,8 @@
 
 	@Override
 	public MethodProbesVisitor visitMethod(final int access, final String name,
-			final String desc, final String signature, final String[] exceptions) {
+			final String desc, final String signature,
+			final String[] exceptions) {
 		if (!InstrSupport.CLINIT_NAME.equals(name)
 				&& (access & Opcodes.ACC_ABSTRACT) == 0) {
 			methods = true;
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
index 0cac8f8..20794f6 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/ProbeInserter.java
@@ -1,20 +1,23 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
+import org.objectweb.asm.AnnotationVisitor;
 import org.objectweb.asm.Label;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.Opcodes;
 import org.objectweb.asm.Type;
+import org.objectweb.asm.TypePath;
 
 /**
  * Internal utility to add probes into the control flow of a method. The code
@@ -40,7 +43,7 @@
 
 	/**
 	 * Creates a new {@link ProbeInserter}.
-	 * 
+	 *
 	 * @param access
 	 *            access flags of the adapted method
 	 * @param name
@@ -53,8 +56,8 @@
 	 *            callback to create the code that retrieves the reference to
 	 *            the probe array
 	 */
-	ProbeInserter(final int access, final String name, final String desc, final MethodVisitor mv,
-			final IProbeArrayStrategy arrayStrategy) {
+	ProbeInserter(final int access, final String name, final String desc,
+			final MethodVisitor mv, final IProbeArrayStrategy arrayStrategy) {
 		super(InstrSupport.ASM_API_VERSION, mv);
 		this.clinit = InstrSupport.CLINIT_NAME.equals(name);
 		this.arrayStrategy = arrayStrategy;
@@ -107,6 +110,18 @@
 	}
 
 	@Override
+	public AnnotationVisitor visitLocalVariableAnnotation(final int typeRef,
+			final TypePath typePath, final Label[] start, final Label[] end,
+			final int[] index, final String descriptor, final boolean visible) {
+		final int[] newIndex = new int[index.length];
+		for (int i = 0; i < newIndex.length; i++) {
+			newIndex[i] = map(index[i]);
+		}
+		return mv.visitLocalVariableAnnotation(typeRef, typePath, start, end,
+				newIndex, descriptor, visible);
+	}
+
+	@Override
 	public void visitMaxs(final int maxStack, final int maxLocals) {
 		// Max stack size of the probe code is 3 which can add to the
 		// original stack size depending on the probe locations. The accessor
diff --git a/org.jacoco.core/src/org/jacoco/core/internal/instr/SignatureRemover.java b/org.jacoco.core/src/org/jacoco/core/internal/instr/SignatureRemover.java
index 06994c0..310dcc8 100644
--- a/org.jacoco.core/src/org/jacoco/core/internal/instr/SignatureRemover.java
+++ b/org.jacoco.core/src/org/jacoco/core/internal/instr/SignatureRemover.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.internal.instr;
 
@@ -47,7 +48,7 @@
 	/**
 	 * Defines whether this remover should be active. If it is not active it
 	 * will not remove any entries.
-	 * 
+	 *
 	 * @param active
 	 *            <code>true</code> if it should remove signature related
 	 *            entries.
@@ -58,7 +59,7 @@
 
 	/**
 	 * Checks whether a entry with the provided name should be ignored at all.
-	 * 
+	 *
 	 * @param name
 	 *            path name of the entry in question
 	 * @return true is the entry should be ignored
@@ -69,7 +70,7 @@
 
 	/**
 	 * Filters the content of the entry with the provided name if necessary.
-	 * 
+	 *
 	 * @param name
 	 *            path name of the entry in question
 	 * @param in
@@ -102,7 +103,8 @@
 	}
 
 	private void filterManifestEntryAttributes(final Attributes attrs) {
-		for (final Iterator<Object> i = attrs.keySet().iterator(); i.hasNext();) {
+		for (final Iterator<Object> i = attrs.keySet().iterator(); i
+				.hasNext();) {
 			if (String.valueOf(i.next()).endsWith(DIGEST_SUFFIX)) {
 				i.remove();
 			}
diff --git a/org.jacoco.core/src/org/jacoco/core/jacoco.properties b/org.jacoco.core/src/org/jacoco/core/jacoco.properties
index e2f9aca..443b394 100644
--- a/org.jacoco.core/src/org/jacoco/core/jacoco.properties
+++ b/org.jacoco.core/src/org/jacoco/core/jacoco.properties
@@ -1,6 +1,5 @@
 #This file is supposed to be processed by Maven, but Android doesn't run Maven
 #So in Android we've filled in the resulting values below
-VERSION=0.7.10.201704181138.android
+VERSION=0.8.7.android
 HOMEURL=http://www.jacoco.org/jacoco
 RUNTIMEPACKAGE=org.jacoco.agent.rt.internal
-
diff --git a/org.jacoco.core/src/org/jacoco/core/package-info.java b/org.jacoco.core/src/org/jacoco/core/package-info.java
index 84ebdf8..7b84d8d 100644
--- a/org.jacoco.core/src/org/jacoco/core/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/AbstractRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/AbstractRuntime.java
index 388e3e4..7d417b2 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/AbstractRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/AbstractRuntime.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -32,7 +33,7 @@
 
 	/**
 	 * Creates a random session identifier.
-	 * 
+	 *
 	 * @return random session identifier
 	 */
 	public static String createRandomId() {
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java b/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
index 60f03c0..2bf1b39 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -26,7 +27,7 @@
 /**
  * Utility to create and parse options for the runtime agent. Options are
  * represented as a string in the following format:
- * 
+ *
  * <pre>
  *   key1=value1,key2=value2,key3=value3
  * </pre>
@@ -53,7 +54,7 @@
 	/**
 	 * Wildcard expression for class names that should be included for code
 	 * coverage. Default is <code>*</code> (all classes included).
-	 * 
+	 *
 	 * @see WildcardMatcher
 	 */
 	public static final String INCLUDES = "includes";
@@ -61,7 +62,7 @@
 	/**
 	 * Wildcard expression for class names that should be excluded from code
 	 * coverage. Default is the empty string (no exclusions).
-	 * 
+	 *
 	 * @see WildcardMatcher
 	 */
 	public static final String EXCLUDES = "excludes";
@@ -72,7 +73,7 @@
 	 * loader which full qualified name matches this expression will be ignored
 	 * for code coverage regardless of all other filtering settings. Default is
 	 * <code>sun.reflect.DelegatingClassLoader</code>.
-	 * 
+	 *
 	 * @see WildcardMatcher
 	 */
 	public static final String EXCLCLASSLOADER = "exclclassloader";
@@ -106,7 +107,7 @@
 
 	/**
 	 * Specifies the output mode. Default is {@link OutputMode#file}.
-	 * 
+	 *
 	 * @see OutputMode#file
 	 * @see OutputMode#tcpserver
 	 * @see OutputMode#tcpclient
@@ -204,7 +205,7 @@
 
 	/**
 	 * New instance parsed from the given option string.
-	 * 
+	 *
 	 * @param optionstr
 	 *            string to parse or <code>null</code>
 	 */
@@ -219,8 +220,8 @@
 				}
 				final String key = entry.substring(0, pos);
 				if (!VALID_OPTIONS.contains(key)) {
-					throw new IllegalArgumentException(format(
-							"Unknown agent option \"%s\".", key));
+					throw new IllegalArgumentException(
+							format("Unknown agent option \"%s\".", key));
 				}
 
 				final String value = entry.substring(pos + 1);
@@ -233,7 +234,7 @@
 
 	/**
 	 * New instance read from the given {@link Properties} object.
-	 * 
+	 *
 	 * @param properties
 	 *            {@link Properties} object to read configuration options from
 	 */
@@ -260,7 +261,7 @@
 
 	/**
 	 * Returns the output file location.
-	 * 
+	 *
 	 * @return output file location
 	 */
 	public String getDestfile() {
@@ -269,7 +270,7 @@
 
 	/**
 	 * Sets the output file location.
-	 * 
+	 *
 	 * @param destfile
 	 *            output file location
 	 */
@@ -279,7 +280,7 @@
 
 	/**
 	 * Returns whether the output should be appended to an existing file.
-	 * 
+	 *
 	 * @return <code>true</code>, when the output should be appended
 	 */
 	public boolean getAppend() {
@@ -288,7 +289,7 @@
 
 	/**
 	 * Sets whether the output should be appended to an existing file.
-	 * 
+	 *
 	 * @param append
 	 *            <code>true</code>, when the output should be appended
 	 */
@@ -298,7 +299,7 @@
 
 	/**
 	 * Returns the wildcard expression for classes to include.
-	 * 
+	 *
 	 * @return wildcard expression for classes to include
 	 * @see WildcardMatcher
 	 */
@@ -308,7 +309,7 @@
 
 	/**
 	 * Sets the wildcard expression for classes to include.
-	 * 
+	 *
 	 * @param includes
 	 *            wildcard expression for classes to include
 	 * @see WildcardMatcher
@@ -319,7 +320,7 @@
 
 	/**
 	 * Returns the wildcard expression for classes to exclude.
-	 * 
+	 *
 	 * @return wildcard expression for classes to exclude
 	 * @see WildcardMatcher
 	 */
@@ -329,7 +330,7 @@
 
 	/**
 	 * Sets the wildcard expression for classes to exclude.
-	 * 
+	 *
 	 * @param excludes
 	 *            wildcard expression for classes to exclude
 	 * @see WildcardMatcher
@@ -340,7 +341,7 @@
 
 	/**
 	 * Returns the wildcard expression for excluded class loaders.
-	 * 
+	 *
 	 * @return expression for excluded class loaders
 	 * @see WildcardMatcher
 	 */
@@ -350,7 +351,7 @@
 
 	/**
 	 * Sets the wildcard expression for excluded class loaders.
-	 * 
+	 *
 	 * @param expression
 	 *            expression for excluded class loaders
 	 * @see WildcardMatcher
@@ -362,7 +363,7 @@
 	/**
 	 * Returns whether classes from the bootstrap classloader should be
 	 * instrumented.
-	 * 
+	 *
 	 * @return <code>true</code> if classes from the bootstrap classloader
 	 *         should be instrumented
 	 */
@@ -373,7 +374,7 @@
 	/**
 	 * Sets whether classes from the bootstrap classloader should be
 	 * instrumented.
-	 * 
+	 *
 	 * @param include
 	 *            <code>true</code> if bootstrap classes should be instrumented
 	 */
@@ -383,7 +384,7 @@
 
 	/**
 	 * Returns whether classes without source location should be instrumented.
-	 * 
+	 *
 	 * @return <code>true</code> if classes without source location should be
 	 *         instrumented
 	 */
@@ -393,7 +394,7 @@
 
 	/**
 	 * Sets whether classes without source location should be instrumented.
-	 * 
+	 *
 	 * @param include
 	 *            <code>true</code> if classes without source location should be
 	 *            instrumented
@@ -404,7 +405,7 @@
 
 	/**
 	 * Returns the session identifier.
-	 * 
+	 *
 	 * @return session identifier
 	 */
 	public String getSessionId() {
@@ -413,7 +414,7 @@
 
 	/**
 	 * Sets the session identifier.
-	 * 
+	 *
 	 * @param id
 	 *            session identifier
 	 */
@@ -423,7 +424,7 @@
 
 	/**
 	 * Returns whether coverage data should be dumped on exit.
-	 * 
+	 *
 	 * @return <code>true</code> if coverage data will be written on VM exit
 	 */
 	public boolean getDumpOnExit() {
@@ -432,7 +433,7 @@
 
 	/**
 	 * Sets whether coverage data should be dumped on exit.
-	 * 
+	 *
 	 * @param dumpOnExit
 	 *            <code>true</code> if coverage data should be written on VM
 	 *            exit
@@ -445,7 +446,7 @@
 	 * Returns the port on which to listen to when the output is
 	 * <code>tcpserver</code> or the port to connect to when output is
 	 * <code>tcpclient</code>.
-	 * 
+	 *
 	 * @return port to listen on or connect to
 	 */
 	public int getPort() {
@@ -455,7 +456,7 @@
 	/**
 	 * Sets the port on which to listen to when output is <code>tcpserver</code>
 	 * or the port to connect to when output is <code>tcpclient</code>
-	 * 
+	 *
 	 * @param port
 	 *            port to listen on or connect to
 	 */
@@ -468,7 +469,7 @@
 	 * Gets the hostname or IP address to listen to when output is
 	 * <code>tcpserver</code> or connect to when output is
 	 * <code>tcpclient</code>
-	 * 
+	 *
 	 * @return Hostname or IP address
 	 */
 	public String getAddress() {
@@ -479,7 +480,7 @@
 	 * Sets the hostname or IP address to listen to when output is
 	 * <code>tcpserver</code> or connect to when output is
 	 * <code>tcpclient</code>
-	 * 
+	 *
 	 * @param address
 	 *            Hostname or IP address
 	 */
@@ -489,7 +490,7 @@
 
 	/**
 	 * Returns the output mode
-	 * 
+	 *
 	 * @return current output mode
 	 */
 	public OutputMode getOutput() {
@@ -502,7 +503,7 @@
 
 	/**
 	 * Sets the output mode
-	 * 
+	 *
 	 * @param output
 	 *            Output mode
 	 */
@@ -512,7 +513,7 @@
 
 	/**
 	 * Sets the output mode
-	 * 
+	 *
 	 * @param output
 	 *            Output mode
 	 */
@@ -523,7 +524,7 @@
 	/**
 	 * Returns the location of the directory where class files should be dumped
 	 * to.
-	 * 
+	 *
 	 * @return dump location or <code>null</code> (no dumps)
 	 */
 	public String getClassDumpDir() {
@@ -532,7 +533,7 @@
 
 	/**
 	 * Sets the directory where class files should be dumped to.
-	 * 
+	 *
 	 * @param location
 	 *            dump location or <code>null</code> (no dumps)
 	 */
@@ -542,7 +543,7 @@
 
 	/**
 	 * Returns whether the agent exposes functionality via JMX.
-	 * 
+	 *
 	 * @return <code>true</code>, when JMX is enabled
 	 */
 	public boolean getJmx() {
@@ -551,7 +552,7 @@
 
 	/**
 	 * Sets whether the agent should expose functionality via JMX.
-	 * 
+	 *
 	 * @param jmx
 	 *            <code>true</code> if JMX should be enabled
 	 */
@@ -589,7 +590,7 @@
 	/**
 	 * Generate required JVM argument based on current configuration and
 	 * supplied agent jar location.
-	 * 
+	 *
 	 * @param agentJarFile
 	 *            location of the JaCoCo Agent Jar
 	 * @return Argument to pass to create new VM with coverage enabled
@@ -601,7 +602,7 @@
 	/**
 	 * Generate required quoted JVM argument based on current configuration and
 	 * supplied agent jar location.
-	 * 
+	 *
 	 * @param agentJarFile
 	 *            location of the JaCoCo Agent Jar
 	 * @return Quoted argument to pass to create new VM with coverage enabled
@@ -615,7 +616,7 @@
 	 * prepends it to the given argument command line. If a agent with the same
 	 * JAR file is already specified this parameter is removed from the existing
 	 * command line.
-	 * 
+	 *
 	 * @param arguments
 	 *            existing command line arguments or <code>null</code>
 	 * @param agentJarFile
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/CommandLineSupport.java b/org.jacoco.core/src/org/jacoco/core/runtime/CommandLineSupport.java
index 1f7fafc..534fb24 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/CommandLineSupport.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/CommandLineSupport.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -25,7 +26,7 @@
 
 	/**
 	 * Quotes a single command line argument if necessary.
-	 * 
+	 *
 	 * @param arg
 	 *            command line argument
 	 * @return quoted argument
@@ -47,7 +48,7 @@
 	/**
 	 * Builds a single command line string from the given argument list.
 	 * Arguments are quoted when necessary.
-	 * 
+	 *
 	 * @param args
 	 *            command line arguments
 	 * @return combined command line
@@ -68,7 +69,7 @@
 	/**
 	 * Splits a command line into single arguments and removes quotes if
 	 * present.
-	 * 
+	 *
 	 * @param commandline
 	 *            combined command line
 	 * @return list of arguments
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/IExecutionDataAccessorGenerator.java b/org.jacoco.core/src/org/jacoco/core/runtime/IExecutionDataAccessorGenerator.java
index 83df574..b3dfe22 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/IExecutionDataAccessorGenerator.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/IExecutionDataAccessorGenerator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -28,12 +29,12 @@
 	 * process will embed this code into a method that is called on class
 	 * initialization. This method can be called at any time even outside the
 	 * target VM.
-	 * 
+	 *
 	 * The generated code must push a <code>boolean[]</code> instance to the
 	 * operand stack. Except this result object the generated code must not make
 	 * any assumptions about the structure of the embedding method or class. The
 	 * generated code must not use or allocate local variables.
-	 * 
+	 *
 	 * @param classid
 	 *            identifier of the class
 	 * @param classname
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/IRemoteCommandVisitor.java b/org.jacoco.core/src/org/jacoco/core/runtime/IRemoteCommandVisitor.java
index 9057a4e..ce2389c 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/IRemoteCommandVisitor.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/IRemoteCommandVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -20,7 +21,7 @@
 
 	/**
 	 * Requests a execution data dump with an optional reset.
-	 * 
+	 *
 	 * @param dump
 	 *            <code>true</code> if the dump should be executed
 	 * @param reset
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/IRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/IRuntime.java
index ea05563..2ae60f4 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/IRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/IRuntime.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -20,7 +21,7 @@
 	/**
 	 * Starts the coverage runtime. This method MUST be called before any class
 	 * instrumented for this runtime is loaded.
-	 * 
+	 *
 	 * @param data
 	 *            the execution data for this runtime
 	 * @throws Exception
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/InjectedClassRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/InjectedClassRuntime.java
index ee7aa1a..c362fb9 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/InjectedClassRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/InjectedClassRuntime.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
index bef4203..1fc2b70 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/LoggerRuntime.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -24,7 +25,7 @@
  * This {@link IRuntime} implementation uses the Java logging API to report
  * coverage data.
  * <p>
- * 
+ *
  * The implementation uses a dedicated log channel. Instrumented classes call
  * {@link Logger#log(Level, String, Object[])} with the class identifier in the
  * first slot of the parameter array. The runtime implements a {@link Handler}
@@ -133,9 +134,7 @@
 		// Stack[1]: Ljava/util/logging/Logger;
 		// Stack[0]: [Ljava/lang/Object;
 
-		mv.visitMethodInsn(
-				Opcodes.INVOKEVIRTUAL,
-				"java/util/logging/Logger",
+		mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/logging/Logger",
 				"log",
 				"(Ljava/util/logging/Level;Ljava/lang/String;[Ljava/lang/Object;)V",
 				false);
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java
index 5f2cc49..a793671 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/ModifiedSystemClassRuntime.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -44,12 +45,12 @@
 
 	/**
 	 * Creates a new runtime based on the given class and members.
-	 * 
+	 *
 	 * @param systemClass
 	 *            system class that contains the execution data
 	 * @param accessFieldName
 	 *            name of the public static runtime access field
-	 * 
+	 *
 	 */
 	public ModifiedSystemClassRuntime(final Class<?> systemClass,
 			final String accessFieldName) {
@@ -85,13 +86,13 @@
 	 * Creates a new {@link ModifiedSystemClassRuntime} using the given class as
 	 * the data container. Member is created with internal default name. The
 	 * given class must not have been loaded before by the agent.
-	 * 
+	 *
 	 * @param inst
 	 *            instrumentation interface
 	 * @param className
 	 *            VM name of the class to use
 	 * @return new runtime instance
-	 * 
+	 *
 	 * @throws ClassNotFoundException
 	 *             id the given class can not be found
 	 */
@@ -104,7 +105,7 @@
 	 * Creates a new {@link ModifiedSystemClassRuntime} using the given class as
 	 * the data container. The given class must not have been loaded before by
 	 * the agent.
-	 * 
+	 *
 	 * @param inst
 	 *            instrumentation interface
 	 * @param className
@@ -112,7 +113,7 @@
 	 * @param accessFieldName
 	 *            name of the added runtime access field
 	 * @return new runtime instance
-	 * 
+	 *
 	 * @throws ClassNotFoundException
 	 *             if the given class can not be found
 	 */
@@ -120,10 +121,10 @@
 			final String className, final String accessFieldName)
 			throws ClassNotFoundException {
 		final ClassFileTransformer transformer = new ClassFileTransformer() {
-			public byte[] transform(final ClassLoader loader,
-					final String name, final Class<?> classBeingRedefined,
-					final ProtectionDomain protectionDomain, final byte[] source)
-					throws IllegalClassFormatException {
+			public byte[] transform(final ClassLoader loader, final String name,
+					final Class<?> classBeingRedefined,
+					final ProtectionDomain protectionDomain,
+					final byte[] source) throws IllegalClassFormatException {
 				if (name.equals(className)) {
 					return instrument(source, accessFieldName);
 				}
@@ -136,15 +137,16 @@
 		try {
 			clazz.getField(accessFieldName);
 		} catch (final NoSuchFieldException e) {
-			throw new RuntimeException(format(
-					"Class %s could not be instrumented.", className), e);
+			throw new RuntimeException(
+					format("Class %s could not be instrumented.", className),
+					e);
 		}
 		return new ModifiedSystemClassRuntime(clazz, accessFieldName);
 	}
 
 	/**
 	 * Adds the static data field to the given class definition.
-	 * 
+	 *
 	 * @param source
 	 *            class definition source
 	 * @param accessFieldName
@@ -169,9 +171,10 @@
 
 	private static void createDataField(final ClassVisitor visitor,
 			final String dataField) {
-		visitor.visitField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC
-				| Opcodes.ACC_SYNTHETIC | Opcodes.ACC_TRANSIENT, dataField,
-				ACCESS_FIELD_TYPE, null, null);
+		visitor.visitField(
+				Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC | Opcodes.ACC_SYNTHETIC
+						| Opcodes.ACC_TRANSIENT,
+				dataField, ACCESS_FIELD_TYPE, null, null);
 	}
 
 }
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java b/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
index a5e88b6..78ef306 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/OfflineInstrumentationAccessGenerator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -22,8 +23,8 @@
  * obtain probe arrays. This generator is designed for offline instrumentation
  * only.
  */
-public class OfflineInstrumentationAccessGenerator implements
-		IExecutionDataAccessorGenerator {
+public class OfflineInstrumentationAccessGenerator
+		implements IExecutionDataAccessorGenerator {
 
 	private final String runtimeClassName;
 
@@ -37,7 +38,7 @@
 	/**
 	 * Creates a new instance with the given runtime class name for testing
 	 * purposes
-	 * 
+	 *
 	 * @param runtimeClassName
 	 *            VM name of the runtime class
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlReader.java b/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlReader.java
index 46fb6d2..0f4b1cb 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlReader.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlReader.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -25,7 +26,7 @@
 
 	/**
 	 * Create a new read based on the given input stream.
-	 * 
+	 *
 	 * @param input
 	 *            input stream to read commands from
 	 * @throws IOException
@@ -50,7 +51,7 @@
 
 	/**
 	 * Sets an listener for agent commands.
-	 * 
+	 *
 	 * @param visitor
 	 *            visitor to retrieve agent commands
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlWriter.java b/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlWriter.java
index 8534471..6e8b5cd 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlWriter.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/RemoteControlWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -19,8 +20,8 @@
 /**
  * {@link ExecutionDataWriter} with commands added for runtime remote control.
  */
-public class RemoteControlWriter extends ExecutionDataWriter implements
-		IRemoteCommandVisitor {
+public class RemoteControlWriter extends ExecutionDataWriter
+		implements IRemoteCommandVisitor {
 
 	/** Block identifier to confirm successful command execution. */
 	public static final byte BLOCK_CMDOK = 0x20;
@@ -30,7 +31,7 @@
 
 	/**
 	 * Creates a new writer based on the given output stream.
-	 * 
+	 *
 	 * @param output
 	 *            stream to write commands to
 	 * @throws IOException
@@ -43,7 +44,7 @@
 	/**
 	 * Sends a confirmation that a commands has been successfully executed and
 	 * the response is completed.
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of problems with the remote connection
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java b/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
index c0fbb65..00fb4b0 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/RuntimeData.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -61,7 +62,7 @@
 	 * execution data is collected. If no identifier is explicitly set a
 	 * identifier is generated from the host name and a random number. This
 	 * method can be called at any time.
-	 * 
+	 *
 	 * @see #collect(IExecutionDataVisitor, ISessionInfoVisitor, boolean)
 	 * @param id
 	 *            new session identifier
@@ -72,7 +73,7 @@
 
 	/**
 	 * Get the current a session identifier for this runtime.
-	 * 
+	 *
 	 * @see #setSessionId(String)
 	 * @return current session identifier
 	 */
@@ -83,7 +84,7 @@
 	/**
 	 * Collects the current execution data and writes it to the given
 	 * {@link IExecutionDataVisitor} object.
-	 * 
+	 *
 	 * @param executionDataVisitor
 	 *            handler to write coverage data to
 	 * @param sessionInfoVisitor
@@ -119,7 +120,7 @@
 	 * Returns the coverage data for the class with the given identifier. If
 	 * there is no data available under the given id a new entry is created.
 	 * This is a synchronized access to the underlying store.
-	 * 
+	 *
 	 * @param id
 	 *            class identifier
 	 * @param name
@@ -142,19 +143,19 @@
 	 * Retrieves the execution data for a given class. The passed
 	 * {@link Object} array instance is used for parameters and the return value
 	 * as follows. Call parameters:
-	 * 
+	 *
 	 * <ul>
 	 * <li>args[0]: class id ({@link Long})
 	 * <li>args[1]: vm class name ({@link String})
 	 * <li>args[2]: probe count ({@link Integer})
 	 * </ul>
-	 * 
+	 *
 	 * Return value:
-	 * 
+	 *
 	 * <ul>
 	 * <li>args[0]: execution data ({@link IExecutionData})
 	 * </ul>
-	 * 
+	 *
 	 * @param args
 	 *            parameter array of length 3
 	 */
@@ -169,7 +170,7 @@
 	/**
 	 * In violation of the regular semantic of {@link Object#equals(Object)}
 	 * this implementation is used as the interface to the execution data store.
-	 * 
+	 *
 	 * @param args
 	 *            the arguments as an {@link Object} array
 	 * @return has no meaning
@@ -188,7 +189,7 @@
 	 * Generates code that creates the argument array for the
 	 * {@link #getProbes(Object[])} method. The array instance is left on the
 	 * operand stack. The generated code requires a stack size of 5.
-	 * 
+	 *
 	 * @param classid
 	 *            class identifier
 	 * @param classname
@@ -199,7 +200,8 @@
 	 *            visitor to emit generated code
 	 */
 	public static void generateArgumentArray(final long classid,
-			final String classname, final int probecount, final MethodVisitor mv) {
+			final String classname, final int probecount,
+			final MethodVisitor mv) {
 		mv.visitInsn(Opcodes.ICONST_3);
 		mv.visitTypeInsn(Opcodes.ANEWARRAY, "java/lang/Object");
 
@@ -221,8 +223,8 @@
 		mv.visitInsn(Opcodes.DUP);
 		mv.visitInsn(Opcodes.ICONST_2);
 		InstrSupport.push(mv, probecount);
-		mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Integer",
-				"valueOf", "(I)Ljava/lang/Integer;", false);
+		mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/Integer", "valueOf",
+				"(I)Ljava/lang/Integer;", false);
 		mv.visitInsn(Opcodes.AASTORE);
 	}
 
@@ -232,7 +234,7 @@
 	 * {@link Object} instance from the stack and pushes the probe array of type
 	 * <code>boolean[]</code> on the operand stack. The generated code requires
 	 * a stack size of 6.
-	 * 
+	 *
 	 * @param classid
 	 *            class identifier
 	 * @param classname
@@ -243,7 +245,8 @@
 	 *            visitor to emit generated code
 	 */
 	public static void generateAccessCall(final long classid,
-			final String classname, final int probecount, final MethodVisitor mv) {
+			final String classname, final int probecount,
+			final MethodVisitor mv) {
 		// stack[0]: Ljava/lang/Object;
 
 		generateArgumentArray(classid, classname, probecount, mv);
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/SystemPropertiesRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/SystemPropertiesRuntime.java
index d7c338c..97ec2af 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/SystemPropertiesRuntime.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/SystemPropertiesRuntime.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -19,7 +20,7 @@
  * through a special entry in the {@link System#getProperties()} hash table. The
  * advantage is, that the instrumented classes do not get dependencies to other
  * classes than the JRE library itself.
- * 
+ *
  * This runtime may cause problems in environments with security restrictions,
  * in applications that replace the system properties or in applications that
  * fail if non-String values are placed in the system properties.
@@ -50,8 +51,8 @@
 		// Stack[1]: Ljava/lang/String;
 		// Stack[0]: Ljava/util/Properties;
 
-		mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/Properties",
-				"get", "(Ljava/lang/Object;)Ljava/lang/Object;", false);
+		mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/util/Properties", "get",
+				"(Ljava/lang/Object;)Ljava/lang/Object;", false);
 
 		// Stack[0]: Ljava/lang/Object;
 
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/URLStreamHandlerRuntime.java b/org.jacoco.core/src/org/jacoco/core/runtime/URLStreamHandlerRuntime.java
deleted file mode 100644
index 55f9c87..0000000
--- a/org.jacoco.core/src/org/jacoco/core/runtime/URLStreamHandlerRuntime.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Marc R. Hoffmann - initial API and implementation
- *    
- *******************************************************************************/
-package org.jacoco.core.runtime;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.URLStreamHandler;
-import java.util.Map;
-
-import org.jacoco.core.internal.instr.InstrSupport;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * This {@link IRuntime} implementation registers a special
- * {@link URLStreamHandler} to process coverage data. The handler is not
- * actually used for opening a URL, but to get access to the runtime object.
- */
-public class URLStreamHandlerRuntime extends AbstractRuntime {
-
-	private static final String PROTOCOLPREFIX = "jacoco-";
-
-	private final String protocol;
-
-	private Map<String, URLStreamHandler> handlers;
-
-	/**
-	 * Creates a new runtime.
-	 */
-	public URLStreamHandlerRuntime() {
-		super();
-		protocol = PROTOCOLPREFIX + Integer.toHexString(hashCode());
-	}
-
-	@Override
-	public void startup(final RuntimeData data) throws Exception {
-		super.startup(data);
-		handlers = getHandlersReference();
-		handlers.put(protocol, handler);
-	}
-
-	private Map<String, URLStreamHandler> getHandlersReference()
-			throws Exception {
-		final Field field = URL.class.getDeclaredField("handlers");
-		field.setAccessible(true);
-		@SuppressWarnings("unchecked")
-		final Map<String, URLStreamHandler> map = (Map<String, URLStreamHandler>) field
-				.get(null);
-		return map;
-	}
-
-	public void shutdown() {
-		handlers.remove(protocol);
-	}
-
-	public int generateDataAccessor(final long classid, final String classname,
-			final int probecount, final MethodVisitor mv) {
-
-		// The data accessor performs the following steps:
-		//
-		// final URL url = new URL(protocol, null, "");
-		// final URLConnection connection = url.openConnection();
-		// final Object[] args = new Object[3];
-		// args[0] = Long.valueOf(classid);
-		// args[1] = classname;
-		// args[2] = Integer.valueOf(probecount);
-		// connection.equals(args);
-		// final byte[] probedata = (byte[]) args[0];
-
-		RuntimeData.generateArgumentArray(classid, classname, probecount, mv);
-		mv.visitInsn(Opcodes.DUP);
-
-		// Stack[1]: [Ljava/lang/Object;
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitTypeInsn(Opcodes.NEW, "java/net/URL");
-		mv.visitInsn(Opcodes.DUP);
-		mv.visitLdcInsn(protocol);
-		mv.visitInsn(Opcodes.ACONST_NULL);
-		mv.visitLdcInsn("");
-		mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/net/URL", "<init>",
-				"(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
-				false);
-
-		// Stack[2]: [Ljava/net/URL;
-		// Stack[1]: [Ljava/lang/Object;
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/net/URL",
-				"openConnection", "()Ljava/net/URLConnection;", false);
-
-		// Stack[2]: [Ljava/net/URLConnection;
-		// Stack[1]: [Ljava/lang/Object;
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitInsn(Opcodes.SWAP);
-
-		// Stack[2]: [Ljava/lang/Object;
-		// Stack[1]: [Ljava/net/URLConnection;
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/lang/Object", "equals",
-				"(Ljava/lang/Object;)Z", false);
-
-		// Stack[1]: Z;
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitInsn(Opcodes.POP);
-
-		// Stack[0]: [Ljava/lang/Object;
-
-		mv.visitInsn(Opcodes.ICONST_0);
-		mv.visitInsn(Opcodes.AALOAD);
-		mv.visitTypeInsn(Opcodes.CHECKCAST, InstrSupport.DATAFIELD_DESC);
-
-		return 7;
-	}
-
-	private final URLStreamHandler handler = new URLStreamHandler() {
-		@Override
-		protected URLConnection openConnection(final URL u) throws IOException {
-			return connection;
-		}
-	};
-
-	private final URLConnection connection = new URLConnection(null) {
-		@Override
-		public void connect() throws IOException {
-			throw new AssertionError();
-		}
-
-		@Override
-		public boolean equals(final Object obj) {
-			return data.equals(obj);
-		}
-	};
-
-}
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java b/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
index 91feaa6..b12255d 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.runtime;
 
@@ -25,7 +26,7 @@
 
 	/**
 	 * Creates a new matcher with the given expression.
-	 * 
+	 *
 	 * @param expression
 	 *            wildcard expressions
 	 */
@@ -63,7 +64,7 @@
 
 	/**
 	 * Matches the given string against the expressions of this matcher.
-	 * 
+	 *
 	 * @param s
 	 *            string to test
 	 * @return <code>true</code>, if the expression matches
diff --git a/org.jacoco.core/src/org/jacoco/core/runtime/package-info.java b/org.jacoco.core/src/org/jacoco/core/runtime/package-info.java
index 1ac7ccc..85f792a 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.core/src/org/jacoco/core/tools/ExecDumpClient.java b/org.jacoco.core/src/org/jacoco/core/tools/ExecDumpClient.java
index 35617b4..420c768 100644
--- a/org.jacoco.core/src/org/jacoco/core/tools/ExecDumpClient.java
+++ b/org.jacoco.core/src/org/jacoco/core/tools/ExecDumpClient.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.tools;
 
@@ -43,7 +44,7 @@
 
 	/**
 	 * Specifies whether a dump should be requested
-	 * 
+	 *
 	 * @param dump
 	 *            <code>true</code> if a dump should be requested
 	 */
@@ -53,7 +54,7 @@
 
 	/**
 	 * Specifies whether execution data should be reset.
-	 * 
+	 *
 	 * @param reset
 	 *            <code>true</code> if execution data should be reset
 	 */
@@ -64,7 +65,7 @@
 	/**
 	 * Sets the number of retry attempts to connect to the target socket. This
 	 * allows to wait for a certain time until the target agent has initialized.
-	 * 
+	 *
 	 * @param retryCount
 	 *            number of retries
 	 */
@@ -74,7 +75,7 @@
 
 	/**
 	 * Sets the delay time before between connection attempts.
-	 * 
+	 *
 	 * @param retryDelay
 	 *            delay in milliseconds
 	 */
@@ -84,7 +85,7 @@
 
 	/**
 	 * Requests a dump from the given end-point.
-	 * 
+	 *
 	 * @param address
 	 *            IP-Address to connect to
 	 * @param port
@@ -100,7 +101,7 @@
 
 	/**
 	 * Requests a dump from the given end-point.
-	 * 
+	 *
 	 * @param address
 	 *            host name or IP-Address to connect to
 	 * @param port
@@ -162,7 +163,7 @@
 	/**
 	 * This method can be overwritten to get an event just before a connection
 	 * is made.
-	 * 
+	 *
 	 * @param address
 	 *            target address
 	 * @param port
@@ -176,7 +177,7 @@
 	/**
 	 * This method can be overwritten to get an event for connection failures
 	 * when another retry will be attempted.
-	 * 
+	 *
 	 * @param exception
 	 *            connection error
 	 */
diff --git a/org.jacoco.core/src/org/jacoco/core/tools/ExecFileLoader.java b/org.jacoco.core/src/org/jacoco/core/tools/ExecFileLoader.java
index cf7b2e5..d0b4815 100644
--- a/org.jacoco.core/src/org/jacoco/core/tools/ExecFileLoader.java
+++ b/org.jacoco.core/src/org/jacoco/core/tools/ExecFileLoader.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.core.tools;
 
@@ -45,7 +46,7 @@
 
 	/**
 	 * Reads all data from given input stream.
-	 * 
+	 *
 	 * @param stream
 	 *            Stream to read data from
 	 * @throws IOException
@@ -61,7 +62,7 @@
 
 	/**
 	 * Reads all data from given input stream.
-	 * 
+	 *
 	 * @param file
 	 *            file to read data from
 	 * @throws IOException
@@ -78,7 +79,7 @@
 
 	/**
 	 * Saves the current content into the given output stream.
-	 * 
+	 *
 	 * @param stream
 	 *            stream to save content to
 	 * @throws IOException
@@ -94,7 +95,7 @@
 	 * Saves the current content into the given file. Parent directories are
 	 * created as needed. Also a files system lock is acquired to avoid
 	 * concurrent write access.
-	 * 
+	 *
 	 * @param file
 	 *            file to save content to
 	 * @param append
@@ -111,7 +112,8 @@
 		final FileOutputStream fileStream = new FileOutputStream(file, append);
 		// Avoid concurrent writes from other processes:
 		fileStream.getChannel().lock();
-		final OutputStream bufferedStream = new BufferedOutputStream(fileStream);
+		final OutputStream bufferedStream = new BufferedOutputStream(
+				fileStream);
 		try {
 			save(bufferedStream);
 		} finally {
@@ -121,7 +123,7 @@
 
 	/**
 	 * Returns the session info store with all loaded sessions.
-	 * 
+	 *
 	 * @return session info store
 	 */
 	public SessionInfoStore getSessionInfoStore() {
@@ -130,7 +132,7 @@
 
 	/**
 	 * Returns the execution data store with data for all loaded classes.
-	 * 
+	 *
 	 * @return execution data store
 	 */
 	public ExecutionDataStore getExecutionDataStore() {
diff --git a/org.jacoco.core/src/org/jacoco/core/tools/package-info.java b/org.jacoco.core/src/org/jacoco/core/tools/package-info.java
index c35c5f9..dfe00a9 100644
--- a/org.jacoco.core/src/org/jacoco/core/tools/package-info.java
+++ b/org.jacoco.core/src/org/jacoco/core/tools/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.doc/about.html b/org.jacoco.doc/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.doc/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.doc/docroot/doc/agent.html b/org.jacoco.doc/docroot/doc/agent.html
index 59f0cdd..719a843 100644
--- a/org.jacoco.doc/docroot/doc/agent.html
+++ b/org.jacoco.doc/docroot/doc/agent.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Java Agent</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Java Agent</h1>
 
@@ -51,7 +51,7 @@
 <p>
   The agent <code>jacocoagent.jar</code> is part of the JaCoCo distribution and
   includes all required dependencies. A Java agent can be activated with the
-  following JVM option: 
+  following JVM option:
 </p>
 
 <pre>
@@ -59,7 +59,7 @@
 </pre>
 
 <p>
-  The JaCoCo agent accepts the following options: 
+  The JaCoCo agent accepts the following options:
 </p>
 
 <table class="coverage">
@@ -83,14 +83,14 @@
           <code>false</code>, an existing execution data file will be replaced.
       </td>
       <td><code>true</code></td>
-    </tr>    
+    </tr>
     <tr>
       <td><code>includes</code></td>
       <td>A list of class names that should be included in execution analysis.
           The list entries are separated by a colon (<code>:</code>) and
           may use wildcard characters (<code>*</code> and <code>?</code>).
           Except for performance optimization or technical corner cases this
-          option is normally not required. 
+          option is normally not required.
       </td>
       <td><code>*</code> (all classes)</td>
     </tr>
@@ -100,7 +100,9 @@
           The list entries are separated by a colon (<code>:</code>) and
           may use wildcard characters (<code>*</code> and <code>?</code>).
           Except for performance optimization or technical corner cases this
-          option is normally not required. 
+          option is normally not required. If you want to exclude classes from
+          the report please configure the respective report generation tool
+          accordingly.
       </td>
       <td><i>empty</i> (no excluded classes)</td>
     </tr>
@@ -112,7 +114,7 @@
           <code>?</code>). 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. 
+          classes.
       </td>
       <td><code>sun.reflect.DelegatingClassLoader</code></td>
     </tr>
@@ -120,7 +122,7 @@
       <td><code>inclbootstrapclasses</code></td>
       <td>Specifies whether also classes from the bootstrap classloader should
           be instrumented. Use this feature with caution, it needs heavy
-          includes/excludes tuning. 
+          includes/excludes tuning.
       </td>
       <td><code>false</code></td>
     </tr>
@@ -128,7 +130,7 @@
       <td><code>inclnolocationclasses</code></td>
       <td>Specifies whether also classes without a source location should be
           instrumented. Normally such classes are generated at runtime e.g. by
-          mocking frameworks and are therefore excluded by default. 
+          mocking frameworks and are therefore excluded by default.
       </td>
       <td><code>false</code></td>
     </tr>
@@ -138,7 +140,7 @@
           this parameter a random identifier is created by the agent.
       </td>
       <td><i>auto-generated</i></td>
-    </tr>  
+    </tr>
     <tr>
       <td><code>dumponexit</code></td>
       <td>If set to <code>true</code> coverage data will be written on VM
@@ -163,7 +165,7 @@
               attribute. Execution data is written to this TCP connection.</li>
           <li><code>none</code>: Do not produce any output.</li>
         </ul>
-        Please see the security considerations below. 
+        Please see the security considerations below.
       </td>
       <td><code>file</code></td>
     </tr>
@@ -201,7 +203,7 @@
       <td>If set to <code>true</code> the agent exposes
           <a href="./api/org/jacoco/agent/rt/IAgent.html">functionality</a> via
           JMX under the name <code>org.jacoco:type=Runtime</code>. Please see
-          the security considerations below. 
+          the security considerations below.
       </td>
       <td><code>false</code></td>
     </tr>
@@ -216,13 +218,13 @@
   authentication mechanism. If you run JaCoCo on production systems make sure
   that no untrusted sources have access to the TCP server port, or JaCoCo TCP
   clients only connect to trusted targets. Otherwise internal information of the
-  application might be revealed or DOS attacks are possible. 
+  application might be revealed or DOS attacks are possible.
 </p>
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/ant.html b/org.jacoco.doc/docroot/doc/ant.html
index af07068..f0ddfd5 100644
--- a/org.jacoco.doc/docroot/doc/ant.html
+++ b/org.jacoco.doc/docroot/doc/ant.html
@@ -16,7 +16,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Ant Tasks</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Ant Tasks</h1>
 
@@ -28,16 +28,16 @@
   <a href="#agent"><code>agent</code></a>,
   <a href="#dump"><code>dump</code></a> and
   <a href="#merge"><code>merge</code></a>. Reports in different formats are
-  created with the <a href="#report"><code>report</code></a> task. For 
+  created with the <a href="#report"><code>report</code></a> task. For
   <a href="offline.html">offline instrumentation</a> the task
   <a href="#instrument"><code>instrument</code></a> can be used to prepare class
-  files.  
+  files.
 </p>
 
 <p class="hint">
   If you want to have line number information included in the coverage reports
   or you want source code highlighting the class files of the test target must
-  be compiled with debug information. 
+  be compiled with debug information.
 </p>
 
 <h2>Example</h2>
@@ -63,10 +63,10 @@
   <li>Java 1.5 or higher (for both, the Ant runner and the test executor).</li>
 </ul>
 
-   
+
 <p>All tasks are defined in <code>jacocoant.jar</code> (which is part of the
   distribution) and can be included in your Ant scripts with the usual
-  <code>taskdef</code> declaration:   
+  <code>taskdef</code> declaration:
 </p>
 
 <pre class="source lang-xml linenums">
@@ -75,9 +75,9 @@
     &lt;taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml"&gt;
         &lt;classpath path="<i>path_to_jacoco</i>/lib/jacocoant.jar"/&gt;
     &lt;/taskdef&gt;
-    
+
     ...
-    
+
 &lt;/project&gt;
 </pre>
 
@@ -102,7 +102,7 @@
   The standard Ant tasks to launch Java programs are <code>java</code>, <code>junit</code> and
   <code>testng</code>. To add code coverage recording to these tasks they can
   simply be wrapped with the <code>coverage</code> task as shown in the
-  following examples:  
+  following examples:
 </p>
 
 <pre class="source lang-xml linenums">
@@ -128,7 +128,7 @@
 <p>
   Resulting coverage information is collected during execution and written
   to a file when the process terminates. Note the <code>fork</code> attribute
-  above in the wrapped <code>java</code> task. 
+  above in the wrapped <code>java</code> task.
 </p>
 
 <p class="hint">
@@ -145,7 +145,7 @@
 
 <p>
   The coverage task must wrap exactly one task. While it typically works without
-  any configuration, the behavior can be adjusted with some optional attributes: 
+  any configuration, the behavior can be adjusted with some optional attributes:
 </p>
 
 <table class="coverage">
@@ -174,14 +174,14 @@
           <code>false</code>, an existing execution data file will be replaced.
       </td>
       <td><code>true</code></td>
-    </tr>    
+    </tr>
     <tr>
       <td><code>includes</code></td>
       <td>A list of class names that should be included in execution analysis.
           The list entries are separated by a colon (<code>:</code>) and
           may use wildcard characters (<code>*</code> and <code>?</code>).
           Except for performance optimization or technical corner cases this
-          option is normally not required. 
+          option is normally not required.
       </td>
       <td><code>*</code> (all classes)</td>
     </tr>
@@ -191,7 +191,8 @@
           The list entries are separated by a colon (<code>:</code>) and
           may use wildcard characters (<code>*</code> and <code>?</code>).
           Except for performance optimization or technical corner cases this
-          option is normally not required. 
+          option is normally not required. If you want to exclude classes from
+          the report please configure the <code>report</code> task accordingly.
       </td>
       <td><i>empty</i> (no excluded classes)</td>
     </tr>
@@ -203,7 +204,7 @@
           <code>?</code>). 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. 
+          classes.
       </td>
       <td><code>sun.reflect.DelegatingClassLoader</code></td>
     </tr>
@@ -211,7 +212,7 @@
       <td><code>inclbootstrapclasses</code></td>
       <td>Specifies whether also classes from the bootstrap classloader should
           be instrumented. Use this feature with caution, it needs heavy
-          includes/excludes tuning. 
+          includes/excludes tuning.
       </td>
       <td><code>false</code></td>
     </tr>
@@ -219,7 +220,7 @@
       <td><code>inclnolocationclasses</code></td>
       <td>Specifies whether also classes without a source location should be
           instrumented. Normally such classes are generated at runtime e.g. by
-          mocking frameworks and are therefore excluded by default. 
+          mocking frameworks and are therefore excluded by default.
       </td>
       <td><code>false</code></td>
     </tr>
@@ -229,7 +230,7 @@
           this parameter a random identifier is created by the agent.
       </td>
       <td><i>auto-generated</i></td>
-    </tr>  
+    </tr>
     <tr>
       <td><code>dumponexit</code></td>
       <td>If set to <code>true</code> coverage data will be written on VM
@@ -366,7 +367,7 @@
 </p>
 
 <p>
-  The <code>dump</code> task has the following attributes: 
+  The <code>dump</code> task has the following attributes:
 </p>
 
 <table class="coverage">
@@ -427,7 +428,7 @@
 
 <p>
   This task can be used to merge the execution data from multiple test runs
-  into a single data store. 
+  into a single data store.
 </p>
 
 <pre class="source lang-xml linenums">
@@ -438,7 +439,7 @@
 
 <p>
   The task definition can contain any number of resource collection types and
-  has the following mandatory attribute: 
+  has the following mandatory attribute:
 </p>
 
 <table class="coverage">
@@ -464,16 +465,16 @@
 <p>
   Finally different reports can be created with the <code>report</code> task.
   A report task declaration consists of different sections, two specify the
-  input data, additional ones specify the output formats:  
+  input data, additional ones specify the output formats:
 </p>
 
 <pre class="source lang-xml linenums">
 &lt;jacoco:report&gt;
-			
+
     &lt;executiondata&gt;
         &lt;file file="jacoco.exec"/&gt;
     &lt;/executiondata&gt;
-			
+
     &lt;structure name="Example Project"&gt;
         &lt;classfiles&gt;
             &lt;fileset dir="classes"/&gt;
@@ -482,9 +483,9 @@
             &lt;fileset dir="src"/&gt;
         &lt;/sourcefiles&gt;
     &lt;/structure&gt;
-			
+
     &lt;html destdir="report"/&gt;
-			
+
 &lt;/jacoco:report&gt;
 </pre>
 
@@ -557,7 +558,7 @@
   accept any
   <a href="http://ant.apache.org/manual/Types/resources.html#collection">Ant
   resource collection</a>. Therefore also filtering the class file set is
-  possible and allows to narrow the scope of the report, for example: 
+  possible and allows to narrow the scope of the report, for example:
 </p>
 
 <pre class="source lang-xml linenums">
@@ -579,7 +580,7 @@
   The structure can be refined with a hierarchy of <code>group</code> elements.
   This way the coverage report can reflect different modules of a software
   project. For each group element the corresponding class and source files can
-  be specified separately. For example: 
+  be specified separately. For example:
 </p>
 
 <pre class="source lang-xml linenums">
@@ -600,9 +601,9 @@
             &lt;fileset dir="${workspace.dir}/org.jacoco.example.client/src"/&gt;
         &lt;/sourcefiles&gt;
     &lt;/group&gt;
-    
+
     ...
-    
+
 &lt;/structure&gt;
 </pre>
 
@@ -679,7 +680,7 @@
 <h3>Element <code>xml</code></h3>
 
 <p>
-  Create a single-file report in XML format. 
+  Create a single-file report in XML format.
 </p>
 
 <table class="coverage">
@@ -707,7 +708,7 @@
 <h3>Element <code>csv</code></h3>
 
 <p>
-  Create single-file report in CSV format. 
+  Create single-file report in CSV format.
 </p>
 
 <table class="coverage">
@@ -856,11 +857,11 @@
     </tr>
     <tr>
       <td><code>minimum</code></td>
-      <td>Expected minimum value. If the minimum refers to a ratio the range is
-          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,
-          the value must end with %.</td>
+      <td>Expected minimum value. If the minimum 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.</td>
       <td><i>none</i></td>
     </tr>
     <tr>
@@ -898,7 +899,7 @@
 
 <p>
   The task definition can contain any number of resource collection types and
-  has the following mandatory attribute: 
+  has the following mandatory attribute:
 </p>
 
 <table class="coverage">
@@ -917,7 +918,7 @@
     </tr>
     <tr>
       <td><code>removesignatures</code></td>
-      <td>If set to <code>true</code> all signature related information is 
+      <td>If set to <code>true</code> all signature related information is
           stripped from JARs. This is typically necessary as instrumentation
           breaks the signatures of the original class files.</td>
       <td><code>true</code></td>
@@ -927,8 +928,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/api.html b/org.jacoco.doc/docroot/doc/api.html
index 1cdec7a..77ce8a9 100644
--- a/org.jacoco.doc/docroot/doc/api.html
+++ b/org.jacoco.doc/docroot/doc/api.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">API Usage Examples</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>API Usage Examples</h1>
 
@@ -26,7 +26,7 @@
 
 <p>
   To compile and run these example you need
-  <a href="http://asm.ow2.org/">ASM</a> @asm.version@ in addition to the JaCoCo
+  <a href="http://asm.ow2.org/">ASM</a> ${asm.version} in addition to the JaCoCo
   libraries.
 </p>
 
@@ -42,18 +42,18 @@
       <td><a class="el_source" href="examples/java/CoreTutorial.java">CoreTutorial.java</a></td>
       <td>This tutorial-like example instruments, executes and analyzes a single
           target class. Finally line coverage information is printed to the
-          console. 
+          console.
       </td>
     </tr>
     <tr>
       <td><a class="el_source" href="examples/java/ClassInfo.java">ClassInfo.java</a></td>
       <td>This example writes JaCoCo specific information for given Java class
-          files. 
+          files.
       </td>
     </tr>
     <tr>
       <td><a class="el_source" href="examples/java/ExecDump.java">ExecDump.java</a></td>
-      <td>Utility to dump the content of execution data files in readable form. 
+      <td>Utility to dump the content of execution data files in readable form.
       </td>
     </tr>
     <tr>
@@ -85,8 +85,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/build.html b/org.jacoco.doc/docroot/doc/build.html
index 5764a3c..5cd0aef 100644
--- a/org.jacoco.doc/docroot/doc/build.html
+++ b/org.jacoco.doc/docroot/doc/build.html
@@ -6,24 +6,6 @@
   <link rel="stylesheet" href="resources/doc.css" charset="UTF-8" type="text/css" />
   <link rel="stylesheet" href="../coverage/jacoco-resources/prettify.css" charset="UTF-8" type="text/css" />
   <link rel="shortcut icon" href="resources/report.gif" type="image/gif" />
-  <style>
-    table, th, td {
-      border-collapse: collapse;
-      padding: 3px;
-    }
-    table tbody tr td {
-      border-left: #b0b0b0 3px solid;
-    }
-    table tbody tr td:nth-child(2) {
-      border-left: none;
-    }
-    th {
-      background-color:#e0e0e0;
-    }
-    table tbody td:hover {
-      background: #f0f0d0;
-    }
-  </style>
   <script type="text/javascript" src="../coverage/jacoco-resources/prettify.js"></script>
   <title>JaCoCo - Build</title>
 </head>
@@ -34,7 +16,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Build</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Build</h1>
 
@@ -56,7 +38,7 @@
 </p>
 
 <pre>
-  mvn clean install
+  mvn clean verify
 </pre>
 
 <p>
@@ -77,7 +59,7 @@
 </p>
 
 <pre>
-  mvn clean install -DskipTests
+  mvn clean verify -DskipTests
 </pre>
 
 
@@ -91,48 +73,118 @@
 </p>
 
 <p>
-  Following table shows how modules will be compiled depending on version of JDK:
+  Following table shows in which classfile version modules will be compiled to
+  depending on version of JDK (empty cells = no compilation possible):
 </p>
 
-<table>
+<table class="coverage">
   <thead>
   <tr>
-    <th></th>
-    <th>JDK 5</th>
-    <th>JDK 6</th>
-    <th>JDK 7</th>
-    <th>JDK 8</th>
-    <th>JDK 9</th>
-    <th>JDK 10</th>
-    <th>JDK 11</th>
-    <th>JDK 12</th>
+    <td>Modules</td>
+    <td>JDK 5</td>
+    <td>JDK 6</td>
+    <td>JDK 7</td>
+    <td>JDK 8</td>
+    <td>JDK 9</td>
+    <td>JDK 10</td>
+    <td>JDK 11</td>
+    <td>JDK 12</td>
+    <td>JDK 13</td>
+    <td>JDK 14</td>
+    <td>JDK 15</td>
+    <td>JDK 16</td>
   </tr>
   </thead>
   <tbody>
   <tr>
-    <th>org.jacoco.core.test.validation.java8</th>
-    <td colspan="3">excluded from build</td>
-    <td colspan="5">compiled into bytecode version 52 (Java 8)</td>
+    <td>org.jacoco.core.test.validation.java14</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>14</td>
+    <td>14</td>
+    <td>14</td>
   </tr>
   <tr>
-    <th>org.jacoco.core.test.validation.java7</th>
-    <td colspan="2">excluded from build</td>
-    <td colspan="6" rowspan="2">compiled into bytecode version 51 (Java 7)</td>
+    <td>org.jacoco.core.test.validation.java8</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
   </tr>
   <tr>
-    <th>org.jacoco.core.test.validation.groovy</th>
-    <td colspan="2">excluded from build</td>
+    <td>org.jacoco.core.test.validation.java7</td>
+    <td></td>
+    <td></td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
   </tr>
   <tr>
-    <th>org.jacoco.core.test.validation.kotlin</th>
-    <td colspan="1">excluded from build</td>
-    <td colspan="6">compiled into bytecode version 50 (Java 6)</td>
-    <td rowspan="2">compiled into bytecode version 51 (Java 7)</td>
+    <td>org.jacoco.core.test.validation.groovy</td>
+    <td></td>
+    <td></td>
+    <td></td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
+    <td>8</td>
   </tr>
   <tr>
-    <th>all other modules</th>
-    <td colspan="4">compiled into bytecode version 49 (Java 5)</td>
-    <td colspan="3">compiled into bytecode version 50 (Java 6)</td>
+    <td>org.jacoco.core.test.validation.kotlin</td>
+    <td></td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+  </tr>
+  <tr>
+    <td>all other modules</td>
+    <td>5</td>
+    <td>5</td>
+    <td>5</td>
+    <td>5</td>
+    <td>6</td>
+    <td>6</td>
+    <td>6</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
+    <td>7</td>
   </tr>
   </tbody>
 </table>
@@ -148,7 +200,7 @@
 </p>
 
 <pre>
-  mvn clean install -Djdk.version=10 -Dbytecode.version=9
+  mvn clean verify -Djdk.version=10 -Dbytecode.version=9
 </pre>
 
 <p>
@@ -156,7 +208,7 @@
 </p>
 
 <pre>
-  mvn clean install -Decj
+  mvn clean verify -Decj
 </pre>
 
 <p>
@@ -164,22 +216,26 @@
 </p>
 
 <ul>
-  <li><code>mvn clean install -Djdk.version=5 -Dbytecode.version=5</code></li>
-  <li><code>mvn clean install -Djdk.version=6 -Dbytecode.version=6</code></li>
-  <li><code>mvn clean install -Djdk.version=7 -Dbytecode.version=7</code></li>
-  <li><code>mvn clean install -Djdk.version=8 -Dbytecode.version=8</code></li>
-  <li><code>mvn clean install -Djdk.version=8 -Dbytecode.version=8 -Decj</code></li>
-  <li><code>mvn clean install -Djdk.version=9 -Dbytecode.version=9</code></li>
-  <li><code>mvn clean install -Djdk.version=10 -Dbytecode.version=10</code></li>
-  <li><code>mvn clean install -Djdk.version=11 -Dbytecode.version=11</code></li>
-  <li><code>mvn clean install -Djdk.version=12 -Dbytecode.version=12</code></li>
+  <li><code>mvn clean verify -Djdk.version=5 -Dbytecode.version=5</code></li>
+  <li><code>mvn clean verify -Djdk.version=6 -Dbytecode.version=6</code></li>
+  <li><code>mvn clean verify -Djdk.version=7 -Dbytecode.version=7</code></li>
+  <li><code>mvn clean verify -Djdk.version=8 -Dbytecode.version=8</code></li>
+  <li><code>mvn clean verify -Djdk.version=8 -Dbytecode.version=8 -Decj</code></li>
+  <li><code>mvn clean verify -Djdk.version=9 -Dbytecode.version=9</code></li>
+  <li><code>mvn clean verify -Djdk.version=10 -Dbytecode.version=10</code></li>
+  <li><code>mvn clean verify -Djdk.version=11 -Dbytecode.version=11</code></li>
+  <li><code>mvn clean verify -Djdk.version=12 -Dbytecode.version=12</code></li>
+  <li><code>mvn clean verify -Djdk.version=13 -Dbytecode.version=13</code></li>
+  <li><code>mvn clean verify -Djdk.version=14 -Dbytecode.version=14</code></li>
+  <li><code>mvn clean verify -Djdk.version=15 -Dbytecode.version=15</code></li>
+  <li><code>mvn clean verify -Djdk.version=16 -Dbytecode.version=16</code></li>
 </ul>
 
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/changes.html b/org.jacoco.doc/docroot/doc/changes.html
index 1dfa98d..730fd30 100644
--- a/org.jacoco.doc/docroot/doc/changes.html
+++ b/org.jacoco.doc/docroot/doc/changes.html
@@ -18,6 +18,163 @@
 
 <h1>Change History</h1>
 
+<h2>Release 0.8.7 (2020/05/04)</h2>
+
+<h3>New Features</h3>
+<ul>
+  <li>JaCoCo now officially supports Java 15 and 16
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1094">#1094</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1097">#1097</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1176">#1176</a>).</li>
+  <li>Experimental support for Java 17 class files
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1132">#1132</a>).</li>
+  <li>New <code>formats</code> parameter for Maven report goals to specify the
+      generated report formats. Contributed by troosan.
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1175">#1175</a>).</li>
+  <li>Branch added by the Kotlin compiler version 1.4.0 and above for "unsafe" cast
+      operator is filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1143">#1143</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1178">#1178</a>).</li>
+  <li><code>synthetic</code> methods added by the Kotlin compiler version 1.5.0 and
+      above for <code>private</code> suspending functions are filtered out
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1174">#1174</a>).</li>
+  <li>Branches added by the Kotlin compiler version 1.4.20 and above for suspending
+      lambdas are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1149">#1149</a>).</li>
+  <li>Branches added by the Kotlin compiler version 1.5.0 and above for functions
+      with default arguments are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1162">#1162</a>).</li>
+  <li>Branch added by the Kotlin compiler version 1.5.0 and above for reading from
+      <code>lateinit</code> property is filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1166">#1166</a>).</li>
+  <li>Additional bytecode generated by the Kotlin compiler version 1.5.0 and above
+      for <code>when</code> expressions on <code>kotlin.String</code> values
+      is filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1172">#1172</a>).</li>
+  <li>Improved filtering of bytecode generated by Kotlin compiler versions below
+      1.5.0 for <code>when</code> expressions on <code>kotlin.String</code> values
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1156">#1156</a>).</li>
+</ul>
+
+<h3>Fixed bugs</h3>
+<ul>
+  <li>Fixed parsing of SMAP generated by Kotlin compiler version 1.5.0 and above
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1164">#1164</a>).</li>
+</ul>
+
+<h3>Non-functional Changes</h3>
+<ul>
+  <li>JaCoCo now depends on ASM 9.1
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1094">#1094</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1097">#1097</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1153">#1153</a>).</li>
+  <li>Maven plug-in has no dependency on <code>maven-reporting-impl</code> any more
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1121">#1121</a>).</li>
+</ul>
+
+<h2>Release 0.8.6 (2020/09/15)</h2>
+
+<h3>New Features</h3>
+<ul>
+  <li>JaCoCo now officially supports Java 14.</li>
+  <li>Experimental support for Java 15 class files
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/992">#992</a>).</li>
+  <li>Experimental support for Java 16 class files
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1059">#1059</a>).</li>
+  <li>Methods <code>toString</code>, <code>hashCode</code> and <code>equals</code>
+      generated by compiler for records are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/990">#990</a>).</li>
+  <li>Bridge methods are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1010">#1010</a>).</li>
+  <li>Methods generated by Kotlin compiler for non-overridden non-abstract methods
+      of interfaces are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1012">#1012</a>).</li>
+  <li>Branches added by the Kotlin compiler version 1.3.60 for suspending functions
+      with tail call optimization are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1016">#1016</a>).</li>
+</ul>
+
+<h3>Fixed bugs</h3>
+<ul>
+  <li>Compression method of zip entries is now preserved when instrumenting archives.
+      This allows to use JaCoCo with frameworks that expect uncompressed entries
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1018">#1018</a>).</li>
+</ul>
+
+<h3>Non-functional Changes</h3>
+<ul>
+  <li>Support for Pack200 was removed in JDK 14. JaCoCo will now throw a detailed
+      exception when Pack200 archives are processed with the latest JDKs
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/984">#984</a>).</li>
+  <li>JaCoCo now depends on ASM 8.0.1
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/1032">#1032</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/1043">#1043</a>).</li>
+</ul>
+
+<h3>API Changes</h3>
+<ul>
+  <li><code>URLStreamHandlerRuntime</code> removed
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/471">#471</a>).</li>
+</ul>
+
+<h2>Release 0.8.5 (2019/10/11)</h2>
+
+<h3>New Features</h3>
+<ul>
+  <li>JaCoCo now officially supports Java 13</li>
+  <li>Experimental support for Java 14 class files
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/897">#897</a>).</li>
+  <li>Branches added by the Kotlin compiler for <code>open</code> functions with
+      default arguments are filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/887">#887</a>).</li>
+</ul>
+
+<h3>Fixed bugs</h3>
+<ul>
+  <li><code>synthetic</code> constructors that contain values of default arguments
+      in Kotlin should not be ignored
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/888">#888</a>).</li>
+  <li>Instrumentation should update indexes of local variables in annotations
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/894">#894</a>).</li>
+  <li>Branches added by the Kotlin compiler for functions with default arguments
+      and containing arguments of type <code>long</code> or <code>double</code>
+      should be filtered out during generation of report
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/908">#908</a>).</li>
+  <li><code>synthetic</code> methods that contain bodies of anonymous functions
+      in Scala should not be ignored
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/912">#912</a>).</li>
+  <li>To avoid failures with invalid class files report generation now checks
+      that source references are actually files
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/941">#941</a>).</li>
+  <li><code>NullPointerException</code> during filtering
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/942">#942</a>,
+      <a href="https://github.com/jacoco/jacoco/issues/944">#944</a>).</li>
+</ul>
+
+<h3>Non-functional Changes</h3>
+<ul>
+  <li>JaCoCo now distributed under the terms and conditions of the
+      Eclipse Public License Version 2.0
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/943">#943</a>).</li>
+  <li>Prevent startup when JaCoCo runtime cannot be initialized to avoid
+      subsequent faults
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/910">#910</a>).</li>
+  <li>JaCoCo now depends on ASM 7.2
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/947">#947</a>).</li>
+</ul>
+
+<h3>API Changes</h3>
+<ul>
+    <li>The coverage check API and tools (Ant, Maven) now report an error, when
+        a coverage ratio limit is configured outside the range [0,1] to avoid
+        common configuration mistakes
+        (GitHub <a href="https://github.com/jacoco/jacoco/issues/783">#783</a>).</li>
+  <li>Unsupported class file versions are now consistently reported as exceptions
+      by all methods of <code>Analyzer</code> and <code>Instrumenter</code> and
+      thus also during report generation and offline instrumentation
+      (GitHub <a href="https://github.com/jacoco/jacoco/issues/952">#952</a>).</li>
+</ul>
+
 <h2>Release 0.8.4 (2019/05/08)</h2>
 
 <h3>New Features</h3>
@@ -222,7 +379,7 @@
   <li>JaCoCo now comes with a simple command line interface
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/525">#525</a>).</li>
   <li>Limit configuration of Maven <code>check</code> goal and Ant
-      <code>check</code> element now also supports percentage values 
+      <code>check</code> element now also supports percentage values
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/534">#534</a>).</li>
   <li>Manifests of JAR files now have <code>Automatic-Module-Name</code> for Java 9
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/565">#565</a>).</li>
@@ -438,7 +595,7 @@
 <h3>API Changes</h3>
 <ul>
   <li>In case of incompatible execution data formats read from another JaCoCo
-  version <code>ExecutionDataReader.read()</code> now throws a 
+  version <code>ExecutionDataReader.read()</code> now throws a
   <code>IncompatibleExecDataVersionException</code>.</li>
 </ul>
 
@@ -570,7 +727,7 @@
       includes removal of the specific skip condition for packages e.g. POMs and
       instead checks existence of <tt>target/classes</tt> in appropriate goals
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/171">#171</a>).</li>
-  <li>GitHub #44: (Regression) Agent Mojo should set empty property, if execution was skipped 
+  <li>GitHub #44: (Regression) Agent Mojo should set empty property, if execution was skipped
       (GitHub <a href="https://github.com/jacoco/jacoco/issues/192">#192</a>).</li>
 </ul>
 
@@ -896,7 +1053,7 @@
       complexity (Trac #129).</li>
   <li>XML and CSV report includes new counter type <code>COMPLEXITY</code>
       (Trac #129).</li>
-  <li>New method <code>getTabWidth()</code> in callback interface 
+  <li>New method <code>getTabWidth()</code> in callback interface
       <code>ISourceFileLocator</code> instead of
       <code>HTMLReportFormatter.setTabWidth()</code> which has been removed.
       (Trac #152).</li>
@@ -991,7 +1148,7 @@
 
 <h3>Fixed Bugs</h3>
 <ul>
-  <li>Better error message when multiple JaCoCo agents are specified 
+  <li>Better error message when multiple JaCoCo agents are specified
       (Track #103).</li>
   <li>Fixed potential NPE at shutdown when running agent in
       <code>tcpserver</code> mode (Track #117).</li>
@@ -1024,7 +1181,7 @@
   <li>Additional and modified methods in <code>IRuntime</code> to produce
       session information (Trac #88).</li>
   <li>Coverage element type <code>SESSION</code> removed (Trac #95).</li>
-  <li>Removed several internal APIs from package 
+  <li>Removed several internal APIs from package
       <code>org.jacoco.core.instr</code> used for class instrumentation.</li>
   <li>Renamed class <code>org.jacoco.report.csv.CsvFormatter</code> to
       <code>CSVFormatter</code> (upper case) for consistency with other
@@ -1130,8 +1287,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/classids.html b/org.jacoco.doc/docroot/doc/classids.html
index 10394ee..6086327 100644
--- a/org.jacoco.doc/docroot/doc/classids.html
+++ b/org.jacoco.doc/docroot/doc/classids.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Class Ids</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Class Ids</h1>
 
@@ -175,8 +175,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/conventions.html b/org.jacoco.doc/docroot/doc/conventions.html
index a3e7190..e449e28 100644
--- a/org.jacoco.doc/docroot/doc/conventions.html
+++ b/org.jacoco.doc/docroot/doc/conventions.html
@@ -14,13 +14,13 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Development Conventions</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Development Conventions</h1>
 
 <p>
   Efficient team work that produces high-quality software requires a common set
-  of rules.  
+  of rules.
 </p>
 
 <h2>Consistent Source Tree</h2>
@@ -40,7 +40,7 @@
   Documentation is part of the product. Whenever you implement a new feature or
   change existing behavior make sure to update all corresponding JavaDoc as well
   as other documentation with the same change set. The product should always be
-  in a consistent state. For every change the following items should be checked:  
+  in a consistent state. For every change the following items should be checked:
 </p>
 
 <ul>
@@ -57,12 +57,12 @@
 <p>
   The primary focus of the JaCoCo project is to provide a code coverage library.
   Integrators may want to embed JaCoCo in different tools and environments with
-  very different usage scenarios. Therefore following aspects should be considered:    
+  very different usage scenarios. Therefore following aspects should be considered:
 </p>
 
 <p>
   <b>Documentation:</b> All APIs should be properly documented on different
-  levels of granularity: 
+  levels of granularity:
 </p>
 
 <ul>
@@ -107,7 +107,7 @@
 <h2>Keep an Eye on License Issues</h2>
 
 <p>
-  All code included with JaCoCo must conform to the EPL license. 
+  All code included with JaCoCo must conform to the EPL license.
 </p>
 
 <ul>
@@ -115,7 +115,7 @@
     Every committer and contributor must agree that all code will be published
     under EPL. He or she must be the original author and must have the
     permission to contribute code to JaCoCo, for example if such a permission
-    is required by the employer. 
+    is required by the employer.
   </li>
   <li>
     Every third party content must be enlisted in the corresponding
@@ -131,7 +131,7 @@
     <a href="http://www.eclipse.org/legal/copyrightandlicensenotice.php">EPL
     license notice</a>. The initial contributor should be listed. In case of
     significant changes or additions additional contributors should also
-    be listed. 
+    be listed.
   </li>
 </ul>
 
@@ -172,8 +172,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/counters.html b/org.jacoco.doc/docroot/doc/counters.html
index 8e2e219..cc77cd7 100644
--- a/org.jacoco.doc/docroot/doc/counters.html
+++ b/org.jacoco.doc/docroot/doc/counters.html
@@ -14,14 +14,14 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Coverage Counters</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Coverage Counters</h1>
 
 <p>
   JaCoCo uses a set of different counters to calculate coverage metrics. All
   these counters are derived from information contained in Java class files
-  which basically are Java byte code instructions and debug information 
+  which basically are Java byte code instructions and debug information
   optionally embedded in class files. This approach allows efficient on-the-fly
   instrumentation and analysis of applications even when no source code is
   available. In most cases the collected information can be mapped back to
@@ -30,7 +30,7 @@
   information to calculate line level coverage and provide source highlighting.
   Not all Java language constructs can be directly compiled to corresponding
   byte code. In such cases the Java compiler creates so called <i>synthetic</i>
-  code which sometimes results in unexpected code coverage results. 
+  code which sometimes results in unexpected code coverage results.
 </p>
 
 <h2>Instructions (C0 Coverage)</h2>
@@ -82,7 +82,7 @@
 
 <p>
   The formal definition of the cyclomatic complexity v(G) is based on the
-  representation of a method's control flow graph as a directed graph:  
+  representation of a method's control flow graph as a directed graph:
 </p>
 
 <blockquote>
@@ -123,7 +123,7 @@
 <p>
   Due to the fact that a single line typically compiles to multiple byte code
   instructions the source code highlighting shows three different status for
-  each line containing source code: 
+  each line containing source code:
 </p>
 
 <ul>
@@ -164,10 +164,10 @@
   initializers such interfaces are also considered as executable classes.
 </p>
 
-</div> 
+</div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/empty.html b/org.jacoco.doc/docroot/doc/empty.html
index ad73399..fbad8ca 100644
--- a/org.jacoco.doc/docroot/doc/empty.html
+++ b/org.jacoco.doc/docroot/doc/empty.html
@@ -13,7 +13,7 @@
   <a href="../index.html" class="el_report">JaCoCo</a> &gt;
   <span class="el_source">Title</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Title</h1>
 
@@ -23,8 +23,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/environment.html b/org.jacoco.doc/docroot/doc/environment.html
index 77c06a0..d0788d7 100644
--- a/org.jacoco.doc/docroot/doc/environment.html
+++ b/org.jacoco.doc/docroot/doc/environment.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Development Environment</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Development Environment</h1>
 
@@ -48,7 +48,7 @@
   Eclipse projects that can be imported in a Eclipse workspace.
 </p>
 
-<p>  
+<p>
   Project specific Eclipse settings only exist for the following projects. All
   other projects and test projects link to these settings:
 </p>
@@ -68,7 +68,7 @@
 <p>
   The minimum supported JRE version for JaCoCo is Java 5. To guarantee
   compatibility JaCoCo release builds should always be executed using JDK 5.
-  In addition we run builds with 6, 7, 8, 9, 10, 11 and 12 JDKs.
+  In addition we run builds with 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 and 16 JDKs.
 </p>
 
 <h3>Build</h3>
@@ -86,7 +86,7 @@
 </p>
 
 <ul>
-  <li><a href="https://travis-ci.org/jacoco/jacoco/">Travis CI</a></li>
+  <li><a href="https://dev.azure.com/JaCoCo-org/JaCoCo/_build">Azure Pipelines</a></li>
   <li><a href="https://ci.appveyor.com/project/JaCoCo/jacoco">AppVeyor</a></li>
 </ul>
 
@@ -131,8 +131,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/epl-2.0.html b/org.jacoco.doc/docroot/doc/epl-2.0.html
new file mode 100644
index 0000000..d4715f2
--- /dev/null
+++ b/org.jacoco.doc/docroot/doc/epl-2.0.html
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <link rel="stylesheet" href="resources/doc.css" charset="UTF-8" type="text/css" />
+  <link rel="shortcut icon" href="resources/report.gif" type="image/gif" />
+  <title>JaCoCo - Eclipse Public License - Version 2.0</title>
+<style type="text/css">
+  p.list {
+    margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+  }
+</style>
+</head>
+<body>
+
+<div class="breadcrumb">
+  <a href="../index.html" class="el_report">JaCoCo</a> &gt;
+  <span class="el_source">Eclipse Public License - Version 2.0</span>
+</div>
+<div id="content">
+
+<h1>Eclipse Public License - v 2.0</h1>
+
+<pre>
+    THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+    PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
+    OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+  a) in the case of the initial Contributor, the initial content
+     Distributed under this Agreement, and
+
+  b) in the case of each subsequent Contributor:
+     i) changes to the Program, and
+     ii) additions to the Program;
+  where such changes and/or additions to the Program originate from
+  and are Distributed by that particular Contributor. A Contribution
+  "originates" from a Contributor if it was added to the Program by
+  such Contributor itself or anyone acting on such Contributor's behalf.
+  Contributions do not include changes or additions to the Program that
+  are not Modified Works.
+
+"Contributor" means any person or entity that Distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which
+are necessarily infringed by the use or sale of its Contribution alone
+or when combined with the Program.
+
+"Program" means the Contributions Distributed in accordance with this
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement
+or any Secondary License (as applicable), including Contributors.
+
+"Derivative Works" shall mean any work, whether in Source Code or other
+form, that is based on (or derived from) the Program and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship.
+
+"Modified Works" shall mean any work in Source Code or other form that
+results from an addition to, deletion from, or modification of the
+contents of the Program, including, for purposes of clarity any new file
+in Source Code form that contains any contents of the Program. Modified
+Works shall not include works that contain only declarations,
+interfaces, types, classes, structures, or files of the Program solely
+in each case in order to link to, bind by name, or subclass the Program
+or Modified Works thereof.
+
+"Distribute" means the acts of a) distributing or b) making available
+in any manner that enables the transfer of a copy.
+
+"Source Code" means the form of a Program preferred for making
+modifications, including but not limited to software source code,
+documentation source, and configuration files.
+
+"Secondary License" means either the GNU General Public License,
+Version 2.0, or any later versions of that license, including any
+exceptions or additional permissions as identified by the initial
+Contributor.
+
+2. GRANT OF RIGHTS
+
+  a) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free copyright
+  license to reproduce, prepare Derivative Works of, publicly display,
+  publicly perform, Distribute and sublicense the Contribution of such
+  Contributor, if any, and such Derivative Works.
+
+  b) Subject to the terms of this Agreement, each Contributor hereby
+  grants Recipient a non-exclusive, worldwide, royalty-free patent
+  license under Licensed Patents to make, use, sell, offer to sell,
+  import and otherwise transfer the Contribution of such Contributor,
+  if any, in Source Code or other form. This patent license shall
+  apply to the combination of the Contribution and the Program if, at
+  the time the Contribution is added by the Contributor, such addition
+  of the Contribution causes such combination to be covered by the
+  Licensed Patents. The patent license shall not apply to any other
+  combinations which include the Contribution. No hardware per se is
+  licensed hereunder.
+
+  c) Recipient understands that although each Contributor grants the
+  licenses to its Contributions set forth herein, no assurances are
+  provided by any Contributor that the Program does not infringe the
+  patent or other intellectual property rights of any other entity.
+  Each Contributor disclaims any liability to Recipient for claims
+  brought by any other entity based on infringement of intellectual
+  property rights or otherwise. As a condition to exercising the
+  rights and licenses granted hereunder, each Recipient hereby
+  assumes sole responsibility to secure any other intellectual
+  property rights needed, if any. For example, if a third party
+  patent license is required to allow Recipient to Distribute the
+  Program, it is Recipient's responsibility to acquire that license
+  before distributing the Program.
+
+  d) Each Contributor represents that to its knowledge it has
+  sufficient copyright rights in its Contribution, if any, to grant
+  the copyright license set forth in this Agreement.
+
+  e) Notwithstanding the terms of any Secondary License, no
+  Contributor makes additional grants to any Recipient (other than
+  those set forth in this Agreement) as a result of such Recipient's
+  receipt of the Program under the terms of a Secondary License
+  (if permitted under the terms of Section 3).
+
+3. REQUIREMENTS
+
+3.1 If a Contributor Distributes the Program in any form, then:
+
+  a) the Program must also be made available as Source Code, in
+  accordance with section 3.2, and the Contributor must accompany
+  the Program with a statement that the Source Code for the Program
+  is available under this Agreement, and informs Recipients how to
+  obtain it in a reasonable manner on or through a medium customarily
+  used for software exchange; and
+
+  b) the Contributor may Distribute the Program under a license
+  different than this Agreement, provided that such license:
+     i) effectively disclaims on behalf of all other Contributors all
+     warranties and conditions, express and implied, including
+     warranties or conditions of title and non-infringement, and
+     implied warranties or conditions of merchantability and fitness
+     for a particular purpose;
+
+     ii) effectively excludes on behalf of all other Contributors all
+     liability for damages, including direct, indirect, special,
+     incidental and consequential damages, such as lost profits;
+
+     iii) does not attempt to limit or alter the recipients' rights
+     in the Source Code under section 3.2; and
+
+     iv) requires any subsequent distribution of the Program by any
+     party to be under a license that satisfies the requirements
+     of this section 3.
+
+3.2 When the Program is Distributed as Source Code:
+
+  a) it must be made available under this Agreement, or if the
+  Program (i) is combined with other material in a separate file or
+  files made available under a Secondary License, and (ii) the initial
+  Contributor attached to the Source Code the notice described in
+  Exhibit A of this Agreement, then the Program may be made available
+  under the terms of such Secondary Licenses, and
+
+  b) a copy of this Agreement must be included with each copy of
+  the Program.
+
+3.3 Contributors may not remove or alter any copyright, patent,
+trademark, attribution notices, disclaimers of warranty, or limitations
+of liability ("notices") contained within the Program from any copy of
+the Program which they Distribute, provided that Contributors may add
+their own appropriate notices.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities
+with respect to end users, business partners and the like. While this
+license is intended to facilitate the commercial use of the Program,
+the Contributor who includes the Program in a commercial product
+offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes
+the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every
+other Contributor ("Indemnified Contributor") against any losses,
+damages and costs (collectively "Losses") arising from claims, lawsuits
+and other legal actions brought by a third party against the Indemnified
+Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program
+in a commercial product offering. The obligations in this section do not
+apply to any claims or Losses relating to any actual or alleged
+intellectual property infringement. In order to qualify, an Indemnified
+Contributor must: a) promptly notify the Commercial Contributor in
+writing of such claim, and b) allow the Commercial Contributor to control,
+and cooperate with the Commercial Contributor in, the defense and any
+related settlement negotiations. The Indemnified Contributor may
+participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those performance
+claims and warranties, and if a court requires any other Contributor to
+pay any damages as a result, the Commercial Contributor must pay
+those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS"
+BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR
+IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR
+PURPOSE. Each Recipient is solely responsible for determining the
+appropriateness of using and distributing the Program and assumes all
+risks associated with its exercise of rights under this Agreement,
+including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs
+or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT
+PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS
+SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST
+PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further
+action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other software
+or hardware) infringes such Recipient's patent(s), then such Recipient's
+rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of
+time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use
+and distribution of the Program as soon as reasonably practicable.
+However, Recipient's obligations under this Agreement and any licenses
+granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement,
+but in order to avoid inconsistency the Agreement is copyrighted and
+may only be modified in the following manner. The Agreement Steward
+reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement
+Steward has the right to modify this Agreement. The Eclipse Foundation
+is the initial Agreement Steward. The Eclipse Foundation may assign the
+responsibility to serve as the Agreement Steward to a suitable separate
+entity. Each new version of the Agreement will be given a distinguishing
+version number. The Program (including Contributions) may always be
+Distributed subject to the version of the Agreement under which it was
+received. In addition, after a new version of the Agreement is published,
+Contributor may elect to Distribute the Program (including its
+Contributions) under the new version.
+
+Except as expressly stated in Sections 2(a) and 2(b) above, Recipient
+receives no rights or licenses to the intellectual property of any
+Contributor under this Agreement, whether expressly, by implication,
+estoppel or otherwise. All rights in the Program not expressly granted
+under this Agreement are reserved. Nothing in this Agreement is intended
+to be enforceable by any entity that is not a Contributor or Recipient.
+No third-party beneficiary rights are created under this Agreement.
+</pre>
+
+</div>
+<div class="footer">
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
+</div>
+
+</body>
+</html>
diff --git a/org.jacoco.doc/docroot/doc/epl-v10.html b/org.jacoco.doc/docroot/doc/epl-v10.html
deleted file mode 100644
index c6a49b5..0000000
--- a/org.jacoco.doc/docroot/doc/epl-v10.html
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
-<head>
-  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-  <link rel="stylesheet" href="resources/doc.css" charset="UTF-8" type="text/css" />
-  <link rel="shortcut icon" href="resources/report.gif" type="image/gif" />
-  <title>JaCoCo - Eclipse Public License - Version 1.0</title>
-<style type="text/css">
-  p.list {
-    margin-left: 0.5in;
-    margin-top:  0.05em;
-    margin-bottom: 0.05em;
-  }
-</style>
-</head>
-<body>
-
-<div class="breadcrumb">
-  <a href="../index.html" class="el_report">JaCoCo</a> &gt;
-  <span class="el_source">Eclipse Public License - Version 1.0</span>
-</div>
-<div id="content">
-
-<h1>Eclipse Public License - v 1.0</h1>
-
-<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
-PUBLIC LICENSE (&quot;AGREEMENT&quot;). ANY USE, REPRODUCTION OR
-DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
-AGREEMENT.</p>
-
-<h3>1. DEFINITIONS</h3>
-
-<p>&quot;Contribution&quot; means:</p>
-
-<p class="list">a) in the case of the initial Contributor, the initial
-code and documentation distributed under this Agreement, and</p>
-<p class="list">b) in the case of each subsequent Contributor:</p>
-
-<p class="list">i) changes to the Program, and</p>
-<p class="list">ii) additions to the Program;</p>
-<p class="list">where such changes and/or additions to the Program
-originate from and are distributed by that particular Contributor. A
-Contribution 'originates' from a Contributor if it was added to the
-Program by such Contributor itself or anyone acting on such
-Contributor's behalf. Contributions do not include additions to the
-Program which: (i) are separate modules of software distributed in
-conjunction with the Program under their own license agreement, and (ii)
-are not derivative works of the Program.</p>
-
-<p>&quot;Contributor&quot; means any person or entity that distributes
-the Program.</p>
-
-<p>&quot;Licensed Patents&quot; mean patent claims licensable by a
-Contributor which are necessarily infringed by the use or sale of its
-Contribution alone or when combined with the Program.</p>
-
-<p>&quot;Program&quot; means the Contributions distributed in accordance
-with this Agreement.</p>
-
-<p>&quot;Recipient&quot; means anyone who receives the Program under
-this Agreement, including all Contributors.</p>
-
-<h3>2. GRANT OF RIGHTS</h3>
-
-<p class="list">a) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free copyright license to reproduce, prepare derivative works
-of, publicly display, publicly perform, distribute and sublicense the
-Contribution of such Contributor, if any, and such derivative works, in
-source code and object code form.</p>
-
-<p class="list">b) Subject to the terms of this Agreement, each
-Contributor hereby grants Recipient a non-exclusive, worldwide,
-royalty-free patent license under Licensed Patents to make, use, sell,
-offer to sell, import and otherwise transfer the Contribution of such
-Contributor, if any, in source code and object code form. This patent
-license shall apply to the combination of the Contribution and the
-Program if, at the time the Contribution is added by the Contributor,
-such addition of the Contribution causes such combination to be covered
-by the Licensed Patents. The patent license shall not apply to any other
-combinations which include the Contribution. No hardware per se is
-licensed hereunder.</p>
-
-<p class="list">c) Recipient understands that although each Contributor
-grants the licenses to its Contributions set forth herein, no assurances
-are provided by any Contributor that the Program does not infringe the
-patent or other intellectual property rights of any other entity. Each
-Contributor disclaims any liability to Recipient for claims brought by
-any other entity based on infringement of intellectual property rights
-or otherwise. As a condition to exercising the rights and licenses
-granted hereunder, each Recipient hereby assumes sole responsibility to
-secure any other intellectual property rights needed, if any. For
-example, if a third party patent license is required to allow Recipient
-to distribute the Program, it is Recipient's responsibility to acquire
-that license before distributing the Program.</p>
-
-<p class="list">d) Each Contributor represents that to its knowledge it
-has sufficient copyright rights in its Contribution, if any, to grant
-the copyright license set forth in this Agreement.</p>
-
-<h3>3. REQUIREMENTS</h3>
-
-<p>A Contributor may choose to distribute the Program in object code
-form under its own license agreement, provided that:</p>
-
-<p class="list">a) it complies with the terms and conditions of this
-Agreement; and</p>
-
-<p class="list">b) its license agreement:</p>
-
-<p class="list">i) effectively disclaims on behalf of all Contributors
-all warranties and conditions, express and implied, including warranties
-or conditions of title and non-infringement, and implied warranties or
-conditions of merchantability and fitness for a particular purpose;</p>
-
-<p class="list">ii) effectively excludes on behalf of all Contributors
-all liability for damages, including direct, indirect, special,
-incidental and consequential damages, such as lost profits;</p>
-
-<p class="list">iii) states that any provisions which differ from this
-Agreement are offered by that Contributor alone and not by any other
-party; and</p>
-
-<p class="list">iv) states that source code for the Program is available
-from such Contributor, and informs licensees how to obtain it in a
-reasonable manner on or through a medium customarily used for software
-exchange.</p>
-
-<p>When the Program is made available in source code form:</p>
-
-<p class="list">a) it must be made available under this Agreement; and</p>
-
-<p class="list">b) a copy of this Agreement must be included with each
-copy of the Program.</p>
-
-<p>Contributors may not remove or alter any copyright notices contained
-within the Program.</p>
-
-<p>Each Contributor must identify itself as the originator of its
-Contribution, if any, in a manner that reasonably allows subsequent
-Recipients to identify the originator of the Contribution.</p>
-
-<h3>4. COMMERCIAL DISTRIBUTION</h3>
-
-<p>Commercial distributors of software may accept certain
-responsibilities with respect to end users, business partners and the
-like. While this license is intended to facilitate the commercial use of
-the Program, the Contributor who includes the Program in a commercial
-product offering should do so in a manner which does not create
-potential liability for other Contributors. Therefore, if a Contributor
-includes the Program in a commercial product offering, such Contributor
-(&quot;Commercial Contributor&quot;) hereby agrees to defend and
-indemnify every other Contributor (&quot;Indemnified Contributor&quot;)
-against any losses, damages and costs (collectively &quot;Losses&quot;)
-arising from claims, lawsuits and other legal actions brought by a third
-party against the Indemnified Contributor to the extent caused by the
-acts or omissions of such Commercial Contributor in connection with its
-distribution of the Program in a commercial product offering. The
-obligations in this section do not apply to any claims or Losses
-relating to any actual or alleged intellectual property infringement. In
-order to qualify, an Indemnified Contributor must: a) promptly notify
-the Commercial Contributor in writing of such claim, and b) allow the
-Commercial Contributor to control, and cooperate with the Commercial
-Contributor in, the defense and any related settlement negotiations. The
-Indemnified Contributor may participate in any such claim at its own
-expense.</p>
-
-<p>For example, a Contributor might include the Program in a commercial
-product offering, Product X. That Contributor is then a Commercial
-Contributor. If that Commercial Contributor then makes performance
-claims, or offers warranties related to Product X, those performance
-claims and warranties are such Commercial Contributor's responsibility
-alone. Under this section, the Commercial Contributor would have to
-defend claims against the other Contributors related to those
-performance claims and warranties, and if a court requires any other
-Contributor to pay any damages as a result, the Commercial Contributor
-must pay those damages.</p>
-
-<h3>5. NO WARRANTY</h3>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
-PROVIDED ON AN &quot;AS IS&quot; BASIS, WITHOUT WARRANTIES OR CONDITIONS
-OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
-ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
-OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
-responsible for determining the appropriateness of using and
-distributing the Program and assumes all risks associated with its
-exercise of rights under this Agreement , including but not limited to
-the risks and costs of program errors, compliance with applicable laws,
-damage to or loss of data, programs or equipment, and unavailability or
-interruption of operations.</p>
-
-<h3>6. DISCLAIMER OF LIABILITY</h3>
-
-<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
-NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
-WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
-DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
-HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
-
-<h3>7. GENERAL</h3>
-
-<p>If any provision of this Agreement is invalid or unenforceable under
-applicable law, it shall not affect the validity or enforceability of
-the remainder of the terms of this Agreement, and without further action
-by the parties hereto, such provision shall be reformed to the minimum
-extent necessary to make such provision valid and enforceable.</p>
-
-<p>If Recipient institutes patent litigation against any entity
-(including a cross-claim or counterclaim in a lawsuit) alleging that the
-Program itself (excluding combinations of the Program with other
-software or hardware) infringes such Recipient's patent(s), then such
-Recipient's rights granted under Section 2(b) shall terminate as of the
-date such litigation is filed.</p>
-
-<p>All Recipient's rights under this Agreement shall terminate if it
-fails to comply with any of the material terms or conditions of this
-Agreement and does not cure such failure in a reasonable period of time
-after becoming aware of such noncompliance. If all Recipient's rights
-under this Agreement terminate, Recipient agrees to cease use and
-distribution of the Program as soon as reasonably practicable. However,
-Recipient's obligations under this Agreement and any licenses granted by
-Recipient relating to the Program shall continue and survive.</p>
-
-<p>Everyone is permitted to copy and distribute copies of this
-Agreement, but in order to avoid inconsistency the Agreement is
-copyrighted and may only be modified in the following manner. The
-Agreement Steward reserves the right to publish new versions (including
-revisions) of this Agreement from time to time. No one other than the
-Agreement Steward has the right to modify this Agreement. The Eclipse
-Foundation is the initial Agreement Steward. The Eclipse Foundation may
-assign the responsibility to serve as the Agreement Steward to a
-suitable separate entity. Each new version of the Agreement will be
-given a distinguishing version number. The Program (including
-Contributions) may always be distributed subject to the version of the
-Agreement under which it was received. In addition, after a new version
-of the Agreement is published, Contributor may elect to distribute the
-Program (including its Contributions) under the new version. Except as
-expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
-rights or licenses to the intellectual property of any Contributor under
-this Agreement, whether expressly, by implication, estoppel or
-otherwise. All rights in the Program not expressly granted under this
-Agreement are reserved.</p>
-
-<p>This Agreement is governed by the laws of the State of New York and
-the intellectual property laws of the United States of America. No party
-to this Agreement will bring a legal action under this Agreement more
-than one year after the cause of action arose. Each party waives its
-rights to a jury trial in any resulting litigation.</p>
-
-</div>
-<div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
-</div>
-
-</body>
-</html>
diff --git a/org.jacoco.doc/docroot/doc/faq.html b/org.jacoco.doc/docroot/doc/faq.html
index 2e48734..b24177d 100644
--- a/org.jacoco.doc/docroot/doc/faq.html
+++ b/org.jacoco.doc/docroot/doc/faq.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">FAQ</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>FAQ</h1>
 
@@ -29,10 +29,10 @@
   guarantee free capacity, we do not commit to particular release dates.
   Typically, you can expect a couple of releases every year.
 </p>
-<p>  
+<p>
   In the <a href="changes.html">change log</a>, you can see all features
-  that have been been implemented in master branch and will be available
-  with the next release. And in the meantime you can test latest build of
+  that have been implemented in master branch and will be available
+  with the next release. And in the meantime you can test latest build
   of master branch (<a href="repo.html">Maven SNAPSHOT</a>) and provide
   <a href="support.html">feedback</a> to us.
 </p>
@@ -45,7 +45,7 @@
 
 <h3>What Java versions are supported by JaCoCo?</h3>
 <p>
-  JaCoCo supports Java class files from version 1.0 to 12. However the minimum
+  JaCoCo supports Java class files from version 1.0 to 16. However the minimum
   JRE version required by the JaCoCo runtime (e.g. the agent) and the JaCoCo
   tools is 1.5. Also note that class files under test from version 1.6 and above
   have to contain valid stackmap frames.
@@ -166,7 +166,7 @@
   If you use <a href="offline.html">offline instrumentation</a> the instrumented
   classes get a direct dependency on the JaCoCo runtime. Therefore
   <code>jacocoagent.jar</code> of the same JaCoCo version must be on the
-  classpath and accessible from by the instrumented classes. 
+  classpath and accessible from by the instrumented classes.
 </p>
 
 <h3>Why do I get a <code>StackOverflowError</code> during code coverage analysis?</h3>
@@ -184,10 +184,31 @@
       the <code>-Xss</code> JVM option.</li>
 </ul>
 
+<h3>Why do I see classes in the coverage report although I excluded them in the JaCoCo agent configuration?</h3>
+<p>
+  The <code>includes</code> and <code>excludes</code> options of the
+  <a href="agent.html">JaCoCo agent</a> determine for which classes execution
+  data is collected. Except for technical corner cases these options are
+  normally not required. If you exclude classes, no execution data is collected
+  for them.
+</p>
+<p>
+  Report creation is a separate step where all class files which should show up
+  in the report are explicitly provided. Coverage is determined from the
+  provided execution data. If execution data is missing for a particular class,
+  this class is shown as not covered because the report generator cannot
+  distinguish whether the class was excluded from instrumentation or not executed.
+</p>
+
+<p>
+  If you want to exclude classes from the report please configure the
+  respective report generation tool accordingly.
+</p>
+
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/flow.html b/org.jacoco.doc/docroot/doc/flow.html
index b73c070..59bbd6f 100644
--- a/org.jacoco.doc/docroot/doc/flow.html
+++ b/org.jacoco.doc/docroot/doc/flow.html
@@ -16,7 +16,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Control Flow Analysis</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Control Flow Analysis for Java Methods</h1>
 
@@ -31,7 +31,7 @@
 
 <h2>Control Flow Graphs for Java Bytecode</h2>
 
-<p> 
+<p>
   As an starting point we take the following example method that contains a
   single branching point:
 </p>
@@ -55,7 +55,7 @@
   <code>IFEQ</code> or the unconditional <code>GOTO</code> opcode. The jump
   targets are technically relative offsets to the target instruction. For better
   readability we use symbolic labels (<code>L1</code>, <code>L2</code>) instead
-  (also the ASM API uses such symbolic labels):  
+  (also the ASM API uses such symbolic labels):
 </p>
 
 <pre class="source linenums">
@@ -87,7 +87,7 @@
   the following Edges. Each edge connects a source instruction with a target
   instruction. In some cases the source instruction or the target instruction
   does not exist (virtual edges for method entry and exit) or cannot be
-  exactly specified (exception handlers). 
+  exactly specified (exception handlers).
 </p>
 
 <table class="coverage">
@@ -108,7 +108,7 @@
     </tr>
     <tr>
       <td>SEQUENCE</td>
-      <td>Instruction, except <code>GOTO</code>, <code>xRETURN</code>, 
+      <td>Instruction, except <code>GOTO</code>, <code>xRETURN</code>,
         <code>THROW</code>, <code>TABLESWITCH</code> and <code>LOOKUPSWITCH</code></td>
       <td>Subsequent instruction</td>
       <td></td>
@@ -167,7 +167,7 @@
 
 <p>
   If a probe has been executed we know that the corresponding edge has been
-  visited. From this edge we can conclude to other preceding nodes and edges: 
+  visited. From this edge we can conclude to other preceding nodes and edges:
 </p>
 
 <ul>
@@ -180,7 +180,7 @@
 <p>
   Recursively applying these rules allows to determine the execution status of
   all instructions of a method &ndash; given that we have probes at the right
-  positions. Therefore JaCoCo inserts probes      
+  positions. Therefore JaCoCo inserts probes
 </p>
 
 <ul>
@@ -212,7 +212,7 @@
       <td><img src="resources/flow-sequence-probe.png" alt="Sequence with Probe"/></td>
       <td>
         In case of a simple sequence the probe is simply inserted between the
-        two instructions. 
+        two instructions.
       </td>
     </tr>
     <tr>
@@ -335,9 +335,9 @@
 </pre>
 
 <p>
-  Note that this probe code is thread safe, does not modify the operand stack
-  or modify local variables and is also thread safe. It does also not leave the
-  method though an external call. The only prerequisite is that the probe array
+  Note that this probe code is thread safe and does not modify the operand stack
+  or modify local variables. It does also not leave the
+  method through an external call. The only prerequisite is that the probe array
   is available as a local variable. For this at the beginning of each method
   additional instrumentation code needs to be added to obtain the array instance
   associated with the belonging class. To avoid code duplication the
@@ -349,7 +349,7 @@
   The size of the probe code above depends on the position of the probe array
   variable and the value of the probe identifier as different opcodes can be
   used. As calculated in the table below the overhead per probe ranges between 4
-  and 7 bytes of additional bytecode: 
+  and 7 bytes of additional bytecode:
 </p>
 
 <table class="coverage">
@@ -409,7 +409,7 @@
   total classes instrumented with JaCoCo increase their size by about 30%. Due
   to the fact that probe execution does not require any method calls, only local
   instructions, the observed execution time overhead for instrumented
-  applications typically is less than 10%. 
+  applications typically is less than 10%.
 </p>
 
 <h2>References</h2>
@@ -422,8 +422,8 @@
 
 </div>
 <div class="footer">
-  <div class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</div>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <div class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</div>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/implementation.html b/org.jacoco.doc/docroot/doc/implementation.html
index 668b7dd..fda79e6 100644
--- a/org.jacoco.doc/docroot/doc/implementation.html
+++ b/org.jacoco.doc/docroot/doc/implementation.html
@@ -16,7 +16,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Implementation Design</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Implementation Design</h1>
 
@@ -38,7 +38,7 @@
   Coverage information has to be collected at runtime. For this purpose JaCoCo
   creates instrumented versions of the original class definitions. The
   instrumentation process happens on-the-fly during class loading using so
-  called Java agents.  
+  called Java agents.
 </p>
 
 <p>
@@ -71,12 +71,12 @@
   The Java agent is loaded by the application class loader. Therefore the
   classes of the agent live in the same name space like the application classes
   which can result in clashes especially with the third party library ASM. The
-  JoCoCo build therefore moves all agent classes into a unique package.  
+  JoCoCo build therefore moves all agent classes into a unique package.
 </p>
 
 <p>
   The JaCoCo build renames all classes contained in the
-  <code>jacocoagent.jar</code> into classes with a 
+  <code>jacocoagent.jar</code> into classes with a
   <code>org.jacoco.agent.rt_&lt;randomid&gt;</code> prefix, including the
   required ASM library classes. The identifier is created from a random number.
   As the agent does not provide any API, no one should be affected by this
@@ -131,7 +131,7 @@
   the presented figures are extracted from a valid test target. A hash code of
   the class definitions allows to differentiate between classes and versions of
   classes. The CRC64 hash computation is simple and fast resulting in a small 64
-  bit identifier. 
+  bit identifier.
 </p>
 
 <p>
@@ -144,7 +144,7 @@
   results. The CRC64 code might produce so called <i>collisions</i>, i.e.
   creating the same hash code for two different classes. Although CRC64 is not
   cryptographically strong and collision examples can be easily computed, for
-  regular class files the collision probability is very low. 
+  regular class files the collision probability is very low.
 </p>
 
 <h2>Coverage Runtime Dependency</h2>
@@ -152,19 +152,19 @@
 <p class="intro">
   Instrumented code typically gets a dependency to a coverage runtime which is
   responsible for collecting and storing execution data. JaCoCo uses JRE types
-  only in generated instrumentation code. 
+  only in generated instrumentation code.
 </p>
 
 <p>
   Making a runtime library available to all instrumented classes can be a
   painful or impossible task in frameworks that use their own class loading
   mechanisms. Since Java 1.6 <code>java.lang.instrument.Instrumentation</code>
-  has an API to extends the bootsstrap loader. As our minimum target is Java 1.5 
+  has an API to extends the bootsstrap loader. As our minimum target is Java 1.5
   JaCoCo decouples the instrumented classes and the coverage runtime through
   official JRE API types only. The instrumented classes communicate through the
   <code>Object.equals(Object)</code> method with the runtime. A instrumented
   class can retrieve its probe array instance with the following code. Note
-  that only JRE APIs are used:   
+  that only JRE APIs are used:
 </p>
 
 
@@ -172,7 +172,7 @@
 Object access = ...                          // Retrieve instance
 
 Object[] args = new Object[3];
-args[0] = Long.valueOf(8060044182221863588); // class id 
+args[0] = Long.valueOf(8060044182221863588); // class id
 args[1] = "com/example/MyClass";             // class name
 args[2] = Integer.valueOf(24);               // probe count
 
@@ -199,17 +199,11 @@
     parameter array instead of a <code>equals()</code> method. The coverage
     runtime registers a custom <code>Handler</code> to receive the parameter
     array. This approach might break environments that install their own log
-    managers (e.g. Glassfish).</li> 
-  <li><b><code>URLStreamHandlerRuntime</code></b>: This runtime registers a
-    <code>URLStreamHandler</code> for a "jacoco-xxxxx" protocol. Instrumented
-    classes open a connection on this protocol. The returned connection object
-    is the one that provides access to the coverage runtime through its
-    <code>equals()</code> method. However to register the protocol the runtime
-    needs to access internal members of the <code>java.net.URL</code> class.</li> 
+    managers (e.g. Glassfish).</li>
   <li><b><code>ModifiedSystemClassRuntime</code></b>: This approach adds a
     public static field to an existing JRE class through instrumentation. Unlike
     the other methods above this is only possible for environments where a Java
-    agent is active.</li> 
+    agent is active.</li>
   <li><b><code>InjectedClassRuntime</code></b>: This approach defines a new class
     using <code>java.lang.invoke.MethodHandles.Lookup.defineClass</code>
     introduced in Java 9.</li>
@@ -233,14 +227,14 @@
   Coverage analysis for huge projects with several thousand classes or hundred
   thousand lines of code should be possible. To allow this with reasonable
   memory usage the coverage analysis is based on streaming patterns and
-  "depth first" traversals.  
+  "depth first" traversals.
 </p>
 
 <p>
   The complete data tree of a huge coverage report is too big to fit into a
   reasonable heap memory configuration. Therefore the coverage analysis and
   report generation is implemented as "depth first" traversals. Which means that
-  at any point in time only the following data has to be held in working memory:  
+  at any point in time only the following data has to be held in working memory:
 </p>
 
 <ul>
@@ -252,7 +246,7 @@
 
 <p class="intro">
   The Java language and the Java VM use different String representation formats
-  for Java elements. For example while a type reference in Java reads like 
+  for Java elements. For example while a type reference in Java reads like
   <code>java.lang.Object</code>, the VM references the same type as
   <code>Ljava/lang/Object;</code>. The JaCoCo API is based on VM identifiers only.
 </p>
@@ -275,13 +269,13 @@
 <p>
   Using OSGi bundles allows well defined dependencies at development time and
   at runtime in OSGi containers. As there are no dependencies on OSGi, the
-  bundles can also be used like regular JAR files.  
+  bundles can also be used like regular JAR files.
 </p>
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/index.html b/org.jacoco.doc/docroot/doc/index.html
index e17a349..1012934 100644
--- a/org.jacoco.doc/docroot/doc/index.html
+++ b/org.jacoco.doc/docroot/doc/index.html
@@ -13,7 +13,7 @@
   <a href="../index.html" class="el_report">JaCoCo</a> &gt;
   <span class="el_group">Documentation</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Documentation</h1>
 
@@ -88,8 +88,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/integrations.html b/org.jacoco.doc/docroot/doc/integrations.html
index 6018891..56ed9cb 100644
--- a/org.jacoco.doc/docroot/doc/integrations.html
+++ b/org.jacoco.doc/docroot/doc/integrations.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Integration Matrix</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Integration Matrix</h1>
 
@@ -65,7 +65,7 @@
     </tr>
   </tbody>
 </table>
-   
+
 <h3>Third-Party Integrations</h3>
 
 <table class="coverage">
@@ -81,6 +81,14 @@
       <td>Java EE testing framework, <a href="http://arquillian.org/modules/jacoco-extension/">JaCoCo extension</a></td>
     </tr>
     <tr>
+      <td><a href="https://azure.microsoft.com/services/devops/">Azure DevOps</a></td>
+      <td>Cloud-powered collaboration tools by Microsoft, see <a href="https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/publish-code-coverage-results">documentation</a></td>
+    </tr>
+    <tr>
+      <td><a href="https://www.codacy.com/">Codacy</a></td>
+      <td>Platform to track code coverage and code quality, see <a href="https://support.codacy.com/hc/en-us/articles/207279819-Coverage">documentation</a></td>
+    </tr>
+    <tr>
       <td><a href="https://codecov.io/">Codecov</a></td>
       <td>Web service to track code coverage, see <a href="https://github.com/codecov/example-java">example</a></td>
     </tr>
@@ -89,12 +97,12 @@
       <td>Web service to track code coverage, see <a href="https://github.com/trautonen/coveralls-maven-plugin">coveralls-maven-plugin</a></td>
     </tr>
     <tr>
-      <td><a href="http://www.gradle.org/">Gradle</a></td>
-      <td>Build System with JaCoCo plug-in, see <a href="http://www.gradle.org/docs/current/userguide/jacoco_plugin.html">documentation</a></td>
+      <td><a href="https://www.stamp-project.eu/">STAMP</a></td>
+      <td>EU research project with test generation tool for JUnit, see <a href="https://github.com/STAMP-project/dspot">DSpot project page</a></td>
     </tr>
     <tr>
-      <td><a href="http://www.bredex.de/web/index.php/guidancer_jubula_en.html">GUIdancer</a></td>
-      <td>Commercial GUI testing tool by BREDEX GmbH</td>
+      <td><a href="http://www.gradle.org/">Gradle</a></td>
+      <td>Build System with JaCoCo plug-in, see <a href="http://www.gradle.org/docs/current/userguide/jacoco_plugin.html">documentation</a></td>
     </tr>
     <tr>
       <td><a href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a></td>
@@ -109,8 +117,8 @@
       <td>GSoC project of Ognjen Bubalo, see <a href="https://wiki.jenkins-ci.org/display/JENKINS/JaCoCo+Plugin">documentation</a></td>
     </tr>
     <tr>
-      <td><a href="http://java.visualstudio.com/">Visual Studio Team Services</a></td>
-      <td>Cloud-powered collaboration tools by Microsoft, see <a href="https://blogs.msdn.microsoft.com/visualstudioalm/2015/11/24/testing-java-applications-with-visual-studio-team-services/">blog entry</a></td>
+      <td><a href="https://www.eclipse.org/jubula/">Jubula</a></td>
+      <td>Functional GUI testing tool</td>
     </tr>
     <tr>
       <td><a href="http://netbeans.org/">NetBeans</a></td>
@@ -118,8 +126,8 @@
           <a href="http://plugins.netbeans.org/plugin/48570/tikione-jacocoverage">plug-in</a> for Ant based projects</td>
     </tr>
     <tr>
-      <td><a href="https://github.com/harrah/xsbt/wiki">sbt</a></td>
-      <td>Simple Build Tool, <a href="https://bitbucket.org/jmhofer/jacoco4sbt">jacoco4sbt</a> by Joachim Hofer</td>
+      <td><a href="https://www.scala-sbt.org/">sbt</a></td>
+      <td>Scala Build Tool, see <a href="https://www.scala-sbt.org/sbt-jacoco/">JaCoCo plug-in</a></td>
     </tr>
     <tr>
       <td><a href="http://www.shippable.com/">Shippable</a></td>
@@ -127,11 +135,11 @@
     </tr>
     <tr>
       <td><a href="http://www.sonarqube.org/">SonarQube</a></td>
-      <td>Continuous inspection platform with JaCoCo support, see <a href="http://docs.sonarqube.org/display/PLUG/Code+Coverage+by+Unit+Tests+for+Java+Project">documentation</a></td>
+      <td>Continuous inspection platform with JaCoCo support, see <a href="https://docs.sonarqube.org/latest/analysis/coverage/">documentation</a></td>
     </tr>
     <tr>
       <td><a href="http://www.jetbrains.com/teamcity/">TeamCity</a></td>
-      <td>Continuous integration server with JaCoCo support since version 8.1, see <a href="http://confluence.jetbrains.com/display/TCD8/JaCoCo">documentation</a></td>
+      <td>Continuous integration server with JaCoCo support since version 8.1, see <a href="https://www.jetbrains.com/help/teamcity/jacoco.html">documentation</a></td>
     </tr>
     <tr>
       <td><a href="https://developer.ibm.com/urbancode/">Urban Code</a></td>
@@ -147,8 +155,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/license.html b/org.jacoco.doc/docroot/doc/license.html
index d7a5e8f..4159b44 100644
--- a/org.jacoco.doc/docroot/doc/license.html
+++ b/org.jacoco.doc/docroot/doc/license.html
@@ -13,21 +13,21 @@
   <a href="../index.html" class="el_report">JaCoCo</a> &gt;
   <span class="el_source">License</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>License</h1>
 
 <p>
-  Copyright &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
-</p> 
+  Copyright &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
+</p>
 
 <p>
   The JaCoCo Java Code Coverage Library and all included documentation is made
   available by Mountainminds GmbH &amp; Co. KG, Munich. Except indicated below,
   the Content is provided to you under the terms and conditions of the Eclipse
-  Public License Version 1.0 (&quot;EPL&quot;). A copy of the EPL is
-  <a href="epl-v10.html">provided</a> with this Content and is also available at 
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
+  <a href="epl-2.0.html">provided</a> with this Content and is also available at
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
 </p>
 
 <h2>Trademarks</h2>
@@ -39,7 +39,7 @@
   trademark, registered trademark, or service mark of The OSGi Alliance in the
   US and other countries. Apache Ant and Apache Maven are trademarks of the
   Apache Software Foundation. Android and Dalvik are trademarks of Google Inc.
-  All other trademarks are the property of their respective owners. 
+  All other trademarks are the property of their respective owners.
 </p>
 
 
@@ -50,243 +50,14 @@
   out below.
 </p>
 
-
-<h3>ASM</h3>
-
-<p>
-  <a href="http://asm.objectweb.org/">ASM</a> is subject to the terms and
-  conditions of the following license: 
-</p>
-
-<pre>
-Copyright (c) 2012 France Télécom
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
-   notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
-   notice, this list of conditions and the following disclaimer in the
-   documentation and/or other materials provided with the distribution.
-
-3. Neither the name of the copyright holders nor the names of its
-   contributors may be used to endorse or promote products derived from
-   this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
-
-
-<h3>Google Code Prettify</h3>
-
-<p>
-  <a href="http://code.google.com/p/google-code-prettify/">Google Code Prettify</a>
-  is subject to the terms and conditions of the following license: 
-</p>
-
-<pre>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-</pre>
-
-<h3>args4j</h3>
-
-<p>
-  <a href="http://args4j.kohsuke.org/">args4j</a> is subject to the terms and
-  conditions of
-  <a href="http://www.opensource.org/licenses/mit-license.php">the MIT license</a>. 
-</p>
+${args4j.license}
+${asm.license}
+${googlecodeprettify.license}
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/maven.html b/org.jacoco.doc/docroot/doc/maven.html
index 5284978..4e41e4d 100644
--- a/org.jacoco.doc/docroot/doc/maven.html
+++ b/org.jacoco.doc/docroot/doc/maven.html
@@ -16,7 +16,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Maven Plug-in</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Maven Plug-in</h1>
 
@@ -45,7 +45,7 @@
 
 <ul>
   <li>
-    The JaCoCo distribution contains a simple example how code coverage 
+    The JaCoCo distribution contains a simple example how code coverage
     can be added to a Maven project.</li>
   <li>
     This <a href="examples/build/pom.xml">POM file</a>
@@ -91,7 +91,7 @@
 &lt;plugin&gt;
   &lt;groupId&gt;org.jacoco&lt;/groupId&gt;
   &lt;artifactId&gt;jacoco-maven-plugin&lt;/artifactId&gt;
-  &lt;version&gt;@project.version@&lt;/version&gt;
+  &lt;version&gt;${project.version}&lt;/version&gt;
 &lt;/plugin&gt;
 </pre>
 
@@ -152,8 +152,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/mission.html b/org.jacoco.doc/docroot/doc/mission.html
index d4ce146..f5098ec 100644
--- a/org.jacoco.doc/docroot/doc/mission.html
+++ b/org.jacoco.doc/docroot/doc/mission.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Mission</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Mission</h1>
 
@@ -22,7 +22,7 @@
   JaCoCo should provide the standard technology for code coverage analysis in
   Java VM based environments. The focus is providing a lightweight, flexible and
   well documented library for integration with various build and development
-  tools. 
+  tools.
 </p>
 
 <p>
@@ -43,7 +43,7 @@
   Therefore we started the JaCoCo project to provide a new standard technology
   for code coverage analysis in Java VM based environments. The focus is
   providing a lightweight, flexible and well documented library for integration
-  with various build and development tools. <a href="ant.html">Ant tasks</a>, a 
+  with various build and development tools. <a href="ant.html">Ant tasks</a>, a
   <a href="maven.html">Maven plug-in</a> and the
   <a href="http://www.eclemma.org/">EclEmma Eclipse plug-in</a> are provided as
   reference usage scenarios. Also many other tool vendors and Open Source
@@ -93,8 +93,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/offline.html b/org.jacoco.doc/docroot/doc/offline.html
index 1621137..b1f184b 100644
--- a/org.jacoco.doc/docroot/doc/offline.html
+++ b/org.jacoco.doc/docroot/doc/offline.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Offline Instrumentation</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Offline Instrumentation</h1>
 
@@ -64,7 +64,7 @@
 <p>
   In both cases configuration values may contain variables in the format
   <code>${<i>name</i>}</code> which are resolved with system property values
-  at runtime. For example: 
+  at runtime. For example:
 </p>
 
 <pre class="source">
@@ -79,7 +79,7 @@
   instrumented classes. The proper location for <code>jacocoagent.jar</code>
   might depend on your deployment scenario. The first instrumented class loaded
   will trigger the initialization of the JaCoCo runtime. If no instrumented
-  class is loaded the JaCoCo runtime will not get started at all.   
+  class is loaded the JaCoCo runtime will not get started at all.
 </p>
 
 <h2>Using Pre-Instrumented Classes With the Java Agent</h2>
@@ -88,7 +88,7 @@
   agent. In this case the configuration is taken from the agent options. The
   agent must be configured in a way that pre-instrumented classes are excluded,
   e.g. with "<code>excludes=*</code>". Otherwise it will result in error
-  messages on the console if the agent instruments such classes again. 
+  messages on the console if the agent instruments such classes again.
 </p>
 
 <h2>Execution Data Collection</h2>
@@ -111,8 +111,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/repo.html b/org.jacoco.doc/docroot/doc/repo.html
index 3fa16e5..be517de 100644
--- a/org.jacoco.doc/docroot/doc/repo.html
+++ b/org.jacoco.doc/docroot/doc/repo.html
@@ -16,14 +16,14 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Maven Repository</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Maven Repository</h1>
 
 <p>
   If you want to integrate JaCoCo within your tools you might directly retrieve
   it from the Maven repository. There are two repositories, one for JaCoCo
-  releases, one for regular snapshot builds.   
+  releases, one for regular snapshot builds.
 </p>
 
 <table class="coverage">
@@ -126,8 +126,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/resources/doc.css b/org.jacoco.doc/docroot/doc/resources/doc.css
index ec89c32..592be8a 100644
--- a/org.jacoco.doc/docroot/doc/resources/doc.css
+++ b/org.jacoco.doc/docroot/doc/resources/doc.css
@@ -43,7 +43,7 @@
   background:transparent url(extern.gif) center left no-repeat;
 }
 
-/* === Definitions from report.css start here: === */ 
+/* === Definitions from report.css start here: === */
 
 body, td {
   font-family:sans-serif;
@@ -148,7 +148,7 @@
 
 table.coverage {
   empty-cells:show;
-  border-collapse:collapse; 
+  border-collapse:collapse;
 }
 
 table.coverage thead {
@@ -178,7 +178,7 @@
   border-bottom:#d6d3ce 1px solid;
 }
 
-table.coverage tbody tr:hover { 
+table.coverage tbody tr:hover {
   background: #f0f0d0 !important;
 }
 
diff --git a/org.jacoco.doc/docroot/doc/support.html b/org.jacoco.doc/docroot/doc/support.html
index 4655c01..f705250 100644
--- a/org.jacoco.doc/docroot/doc/support.html
+++ b/org.jacoco.doc/docroot/doc/support.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Support and Feedback</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Support and Feedback</h1>
 
@@ -36,8 +36,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/doc/team.html b/org.jacoco.doc/docroot/doc/team.html
index 8edc3ce..6f3d5e7 100644
--- a/org.jacoco.doc/docroot/doc/team.html
+++ b/org.jacoco.doc/docroot/doc/team.html
@@ -14,7 +14,7 @@
   <a href="index.html" class="el_group">Documentation</a> &gt;
   <span class="el_source">Team</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>Team</h1>
 
@@ -29,9 +29,9 @@
 </ul>
 
 <p>
-  To keep the development process open please use the 
+  To keep the development process open please use the
   <a href="support.html">public communication channels</a> and do not contact
-  individual team members. 
+  individual team members.
 </p>
 
 <h2>Former Developers</h2>
@@ -49,8 +49,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/docroot/index.html b/org.jacoco.doc/docroot/index.html
index f9f082c..e7a6cbe 100644
--- a/org.jacoco.doc/docroot/index.html
+++ b/org.jacoco.doc/docroot/index.html
@@ -12,20 +12,20 @@
 <div class="breadcrumb">
   <span class="el_report">JaCoCo</span>
 </div>
-<div id="content"> 
+<div id="content">
 
 <h1>JaCoCo - Java Code Coverage Library</h1>
 
 <p>
   JaCoCo is a free Java code coverage library distributed under the
   <a href="doc/license.html">Eclipse Public License</a>. Check
-  <a href="@jacoco.home.url@">@jacoco.home.url@</a> for updates and feedback.
+  <a href="${jacoco.home.url}">${jacoco.home.url}</a> for updates and feedback.
 </p>
 
 <p>
-  This is the distribution of version @qualified.bundle.version@ created on
-  @build.date@ based on commit
-  <a href="https://github.com/jacoco/jacoco/tree/@buildNumber@">@buildNumber@</a>.
+  This is the distribution of version ${qualified.bundle.version} created on
+  ${build.date} based on commit
+  <a href="https://github.com/jacoco/jacoco/tree/${buildNumber}">${buildNumber}</a>.
 </p>
 
 <h2>Contents</h2>
@@ -74,25 +74,25 @@
       <td>- <i>(all dependencies included)</i></td>
     </tr>
     <tr>
-      <td><span class="el_jar">org.jacoco.agent_@qualified.bundle.version@.jar</span></td>
+      <td><span class="el_jar">org.jacoco.agent_${qualified.bundle.version}.jar</span></td>
       <td>yes</td>
       <td>JaCoCo agent</td>
       <td>-</td>
     </tr>
     <tr>
-      <td><span class="el_jar">org.jacoco.core_@qualified.bundle.version@.jar</span></td>
+      <td><span class="el_jar">org.jacoco.core_${qualified.bundle.version}.jar</span></td>
       <td>yes</td>
       <td>JaCoCo core</td>
       <td>ASM</td>
     </tr>
     <tr>
-      <td><span class="el_jar">org.jacoco.report_@qualified.bundle.version@.jar</span></td>
+      <td><span class="el_jar">org.jacoco.report_${qualified.bundle.version}.jar</span></td>
       <td>yes</td>
       <td>JaCoCo reporting</td>
       <td>org.jacoco.core, ASM</td>
     </tr>
     <tr>
-      <td><span class="el_jar">org.jacoco.ant_@qualified.bundle.version@.jar</span></td>
+      <td><span class="el_jar">org.jacoco.ant_${qualified.bundle.version}.jar</span></td>
       <td>yes</td>
       <td>JaCoCo Ant tasks</td>
       <td>org.jacoco.core, org.jacoco.agent, org.jacoco.report, ASM, Ant</td>
@@ -107,8 +107,8 @@
 
 </div>
 <div class="footer">
-  <span class="right"><a href="@jacoco.home.url@">JaCoCo</a> @qualified.bundle.version@</span>
-  <a href="doc/license.html">Copyright</a> &copy; @copyright.years@ Mountainminds GmbH &amp; Co. KG and Contributors
+  <span class="right"><a href="${jacoco.home.url}">JaCoCo</a> ${qualified.bundle.version}</span>
+  <a href="doc/license.html">Copyright</a> &copy; ${copyright.years} Mountainminds GmbH &amp; Co. KG and Contributors
 </div>
 
 </body>
diff --git a/org.jacoco.doc/javadoc/overview.html b/org.jacoco.doc/javadoc/overview.html
index 4c5db61..fd6ff25 100644
--- a/org.jacoco.doc/javadoc/overview.html
+++ b/org.jacoco.doc/javadoc/overview.html
@@ -1,39 +1,39 @@
-<html>

-<body>

-

-<p>

-  This is the public JaCoCo API that can be used for integration. JaCoCo is

-  packed as several bundles. While the bundles formally fulfill the OSGi

-  specification, there is no dependency on OSGi. They can also be used as

-  regular JARs in your classpath.

-</p>

-

-<h2>Bundle org.jacoco.core</h2>

-

-<p>  

-  The core bundle implements the code coverage technology itself. It provides

-  APIs and implementation for

-</p>

-

-<ul>  

-  <li>class file instrumentation,</li>

-  <li>collecting execution data at runtime and</li> 

-  <li>analyzing coverage data.</li> 

-</ul>

-

-<h2>Bundle org.jacoco.agent</h2>

-

-<p>

-  Provides the runtime Java agent (JAR file) as a resource.

-</p>

-

-

-<h2>Bundle org.jacoco.report</h2>

-

-<p>

-  APIs and implementation to create coverage reports in several formats.

-</p>

-

-

-</body>

-</html>
\ No newline at end of file
+<html>
+<body>
+
+<p>
+  This is the public JaCoCo API that can be used for integration. JaCoCo is
+  packed as several bundles. While the bundles formally fulfill the OSGi
+  specification, there is no dependency on OSGi. They can also be used as
+  regular JARs in your classpath.
+</p>
+
+<h1>Bundle org.jacoco.core</h1>
+
+<p>
+  The core bundle implements the code coverage technology itself. It provides
+  APIs and implementation for
+</p>
+
+<ul>
+  <li>class file instrumentation,</li>
+  <li>collecting execution data at runtime and</li>
+  <li>analyzing coverage data.</li>
+</ul>
+
+<h1>Bundle org.jacoco.agent</h1>
+
+<p>
+  Provides the runtime Java agent (JAR file) as a resource.
+</p>
+
+
+<h1>Bundle org.jacoco.report</h1>
+
+<p>
+  APIs and implementation to create coverage reports in several formats.
+</p>
+
+
+</body>
+</html>
diff --git a/org.jacoco.doc/javadoc/stylesheet.css b/org.jacoco.doc/javadoc/stylesheet.css
index a45a6f5..7cf502c 100644
--- a/org.jacoco.doc/javadoc/stylesheet.css
+++ b/org.jacoco.doc/javadoc/stylesheet.css
@@ -1,72 +1,72 @@
-body {

-	font-family:sans-serif;

-	font-size:10pt;

-	background-color:#FFFFFF;

-}

-

-h1 {

- 	font-weight:bold;

- 	font-size:18pt;

-}

-

-.TableHeadingColor {

-	background:#E0E0E0

-}

-

-.TableSubHeadingColor {

-	background: #EEEEEE

-}

-

-.TableRowColor {

-	background: #FFFFFF

-}

-

-.FrameTitleFont {

-	font-weight:bold;

-	font-size:10pt;

-}

-

-.FrameHeadingFont {

-	font-weight:bold;

-	font-size:14pt;

-}

-

-.FrameItemFont {

-}

-

-.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */

-.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */

-.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}

-.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}

-

-.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}

-.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}

-

-a[href^='http://'], a[href^='https://'] {

-	display:inline-block;

-	padding-left:15px;

-	background:transparent url(../resources/extern.gif) center left no-repeat;

-}

-

-hr {

-	border:none;

-	border-top:#d6d3ce 1px solid;

-	height:1px;

-}

-

-.footer {

-	padding-top:2px;

-	font-size:8pt;

-	color:#a0a0a0;

-}

-

-.right {

-	width:30%;

-	float:right;

-	text-align:right;

-}

-

-.footer a {

-	color:#a0a0a0;

-	background-image:none;

-}
\ No newline at end of file
+body {
+	font-family:sans-serif;
+	font-size:10pt;
+	background-color:#FFFFFF;
+}
+
+h1 {
+ 	font-weight:bold;
+ 	font-size:18pt;
+}
+
+.TableHeadingColor {
+	background:#E0E0E0
+}
+
+.TableSubHeadingColor {
+	background: #EEEEEE
+}
+
+.TableRowColor {
+	background: #FFFFFF
+}
+
+.FrameTitleFont {
+	font-weight:bold;
+	font-size:10pt;
+}
+
+.FrameHeadingFont {
+	font-weight:bold;
+	font-size:14pt;
+}
+
+.FrameItemFont {
+}
+
+.NavBarCell1 { background-color:#EEEEFF;} /* Light mauve */
+.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
+a[href^='http://'], a[href^='https://'] {
+	display:inline-block;
+	padding-left:15px;
+	background:transparent url(../resources/extern.gif) center left no-repeat;
+}
+
+hr {
+	border:none;
+	border-top:#d6d3ce 1px solid;
+	height:1px;
+}
+
+.footer {
+	padding-top:2px;
+	font-size:8pt;
+	color:#a0a0a0;
+}
+
+.right {
+	width:30%;
+	float:right;
+	text-align:right;
+}
+
+.footer a {
+	color:#a0a0a0;
+	background-image:none;
+}
diff --git a/org.jacoco.doc/pom.xml b/org.jacoco.doc/pom.xml
index 740b0ca..027282d 100644
--- a/org.jacoco.doc/pom.xml
+++ b/org.jacoco.doc/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
@@ -181,7 +182,7 @@
           <dependency>
             <groupId>org.apache.ant</groupId>
             <artifactId>ant-junit</artifactId>
-            <version>1.8.2</version>
+            <version>${ant.version}</version>
           </dependency>
         </dependencies>
       </plugin>
diff --git a/org.jacoco.doc/xsl/cli.xsl b/org.jacoco.doc/xsl/cli.xsl
index b506ac0..d1a7b16 100644
--- a/org.jacoco.doc/xsl/cli.xsl
+++ b/org.jacoco.doc/xsl/cli.xsl
@@ -1,12 +1,13 @@
 <?xml version="1.0"?>
 
-<!-- 
+<!--
    Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+   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
 -->
@@ -40,9 +41,9 @@
 					<span class="el_source">Command Line Interface</span>
 				</div>
 				<div id="content">
-				
+
 					<h1>Command Line Interface</h1>
-					
+
 					<p>
 					  JaCoCo comes with a command line interface to perform
 					  basic operations from the command line. The command line
@@ -51,20 +52,20 @@
 					  JaCoCo download. Java 1.5 or greater is required for
 					  execution.
 					</p>
-					
+
 					<p>
 					  For more sophisticated usage especially with larger
 					  projects please use our
 					  <a href="integrations.html">integrations</a> with various
-					  build tools. 
+					  build tools.
 					</p>
-					
+
 					<p>
 					  The following commands are available. Each command has a
 					  list of optional and required parameters. Some parameters
-					  can be specified multiple times to provide multiple values. 
+					  can be specified multiple times to provide multiple values.
 					</p>
-					
+
 					<p class="hint">
 					  <b>Warning:</b> Although a <code>instrument</code> command
 					  is provided the preferred way for code coverage analysis
@@ -75,7 +76,7 @@
 					  Please consult <a href="offline.html">documentation</a>
 					  about offline instrumentation before using this mode.
 					</p>
-					
+
 					<xsl:apply-templates select="documentation" />
 				</div>
 				<div class="footer">
@@ -92,7 +93,7 @@
 			</body>
 		</html>
 	</xsl:template>
-	
+
 	<xsl:template match="command">
 		<h2><xsl:value-of select="@name" /></h2>
 		<pre class="source" style="white-space: pre-wrap">
@@ -120,6 +121,5 @@
 			</tbody>
 		</table>
 	</xsl:template>
-	
-</xsl:stylesheet>
 
+</xsl:stylesheet>
diff --git a/org.jacoco.doc/xsl/junit-noframes.xsl b/org.jacoco.doc/xsl/junit-noframes.xsl
index 24ee130..dcb4731 100644
--- a/org.jacoco.doc/xsl/junit-noframes.xsl
+++ b/org.jacoco.doc/xsl/junit-noframes.xsl
@@ -1,382 +1,379 @@
-<?xml version="1.0"?>

-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"

-        xmlns="http://www.w3.org/1999/xhtml"

-        xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"

-        exclude-result-prefixes="stringutils">

-<xsl:output method="xml" indent="yes" encoding="UTF-8"

-  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 

-  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>

-<xsl:decimal-format decimal-separator="." grouping-separator="," />

-<!--

-   Licensed to the Apache Software Foundation (ASF) under one or more

-   contributor license agreements.  See the NOTICE file distributed with

-   this work for additional information regarding copyright ownership.

-   The ASF licenses this file to You 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.

- -->

-

-<xsl:param name="qualified.bundle.version"/>

-<xsl:param name="jacoco.home.url"/>

-<xsl:param name="copyright.years"/>

-

-<!--

-

- JaCoCo test report stylesheet.

-

--->

-<xsl:template match="testsuites">

-    <html>

-        <head>

-            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

-            <link rel="stylesheet" href="../doc/resources/doc.css" charset="UTF-8" type="text/css" />

-            <link rel="shortcut icon" href="../doc/resources/report.gif" type="image/gif" />

-            <title>JaCoCo - JUnit Test Results</title>

-            

-    <style type="text/css">

-      .Error {

-        font-weight:bold; color:red;

-      }

-      .Failure {

-        font-weight:bold; color:purple;

-      }

-      </style>

-        </head>

-        <body>

-            <div id="content">

-            <a name="top"></a>

-            <xsl:call-template name="pageHeader"/>

-

-            <!-- Summary part -->

-            <xsl:call-template name="summary"/>

-

-            <!-- Package List part -->

-            <xsl:call-template name="packagelist"/>

-

-            <!-- For each package create its part -->

-            <xsl:call-template name="packages"/>

-

-            <!-- For each class create the  part -->

-            <xsl:call-template name="classes"/>

-            

-            </div>

-			<div class="footer">

-				<span class="right"><a href="{$jacoco.home.url}">JaCoCo</a>&#160;<xsl:value-of select="$qualified.bundle.version"/></span>

-				<a href="../doc/license.html">Copyright</a> &#169; <xsl:value-of select="$copyright.years"/> Mountainminds GmbH &amp; Co. KG and Contributors

-			</div>

-        </body>

-    </html>

-</xsl:template>

-

-

-

-<!-- ================================================================== -->

-<!-- Write a list of all packages with an hyperlink to the anchor of    -->

-<!-- of the package name.                                               -->

-<!-- ================================================================== -->

-<xsl:template name="packagelist">

-	<h2>Packages</h2>

-	<table class="coverage">

-		<xsl:call-template name="testsuite.test.header"/>

-		<tbody>			

-			<!-- list all packages recursively -->

-            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">

-                <xsl:sort select="@package"/>

-                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>

-                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>

-                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>

-                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>

-                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>

-

-                <!-- write a summary for the package -->

-                <tr valign="top">

-                    <!-- set a nice color depending if there is an error/failure -->

-                    <xsl:attribute name="class">

-                        <xsl:choose>

-                            <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>

-                            <xsl:when test="$errorCount &gt; 0">Error</xsl:when>

-                        </xsl:choose>

-                    </xsl:attribute>

-                    <td style="width:24em"><a href="#{@package}" class="el_testsuite"><xsl:value-of select="@package"/></a></td>

-                    <td><xsl:value-of select="$testCount"/></td>

-                    <td><xsl:value-of select="$errorCount"/></td>

-                    <td><xsl:value-of select="$failureCount"/></td>

-                    <td>

-                    <xsl:call-template name="display-time">

-                        <xsl:with-param name="value" select="$timeCount"/>

-                    </xsl:call-template>

-                    </td>

-                    <td><xsl:value-of select="$testsuites-in-package/@timestamp"/></td>

-                </tr>

-            </xsl:for-each>

-		</tbody>

-	</table>

-	<p class="hint">

-        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.

-    </p>

-</xsl:template>

-

-

-    <!-- ================================================================== -->

-    <!-- Write a package level report                                       -->

-    <!-- It creates a table with values from the document:                  -->

-    <!-- Name | Tests | Errors | Failures | Time                            -->

-    <!-- ================================================================== -->

-    <xsl:template name="packages">

-        <!-- create an anchor to this package name -->

-        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">

-            <xsl:sort select="@package"/>

-                <a name="{@package}"></a>

-                <h3>Package <xsl:value-of select="@package"/></h3>

-

-                <table class="coverage">

-                    <xsl:call-template name="testsuite.test.header"/>

-

-                    <!-- match the testsuites of this package -->

-                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>

-                </table>

-                <p>

-                	<a href="#top">Back to top</a>

-                </p>

-        </xsl:for-each>

-    </xsl:template>

-

-    <xsl:template name="classes">

-        <xsl:for-each select="testsuite">

-            <xsl:sort select="@name"/>

-            <!-- create an anchor to this class name -->

-            <a name="{@name}"></a>

-            <h3>TestCase <xsl:value-of select="@name"/></h3>

-

-            <table class="coverage">

-              <xsl:call-template name="testcase.test.header"/>

-              <!--

-              test can even not be started at all (failure to load the class)

-              so report the error directly

-              -->

-                <xsl:if test="./error">

-                    <tr class="Error">

-                        <td colspan="4"><xsl:apply-templates select="./error"/></td>

-                    </tr>

-                </xsl:if>

-                <xsl:apply-templates select="./testcase" mode="print.test"/>

-            </table>

-            <p>

-            	<a href="#top">Back to top</a>

-            </p>

-        </xsl:for-each>

-    </xsl:template>

-

-<xsl:template name="summary">

-	<h2>Summary</h2>

-	<xsl:variable name="testCount" select="sum(testsuite/@tests)"/>

-	<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>

-	<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>

-	<xsl:variable name="timeCount" select="sum(testsuite/@time)"/>

-	<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>

-	<table class="coverage">

-        <thead>

-	        <tr valign="top">

-    	        <td>Tests</td>

-        	    <td>Failures</td>

-            	<td>Errors</td>

-            	<td>Success rate</td>

-            	<td>Time</td>

-        	</tr>

-        </thead>

-        <tbody>

-			<tr valign="top">

-				<xsl:attribute name="class">

-					<xsl:choose>

-						<xsl:when test="$failureCount &gt; 0">Failure</xsl:when>

-						<xsl:when test="$errorCount &gt; 0">Error</xsl:when>

-					</xsl:choose>

-				</xsl:attribute>

-				<td><xsl:value-of select="$testCount"/></td>

-				<td><xsl:value-of select="$failureCount"/></td>

-				<td><xsl:value-of select="$errorCount"/></td>

-				<td>

-					<xsl:call-template name="display-percent">

-						<xsl:with-param name="value" select="$successRate"/>

-					</xsl:call-template>

-				</td>

-				<td>

-					<xsl:call-template name="display-time">

-						<xsl:with-param name="value" select="$timeCount"/>

-					</xsl:call-template>

-				</td>

-			</tr>

-		</tbody>

-	</table>

-	<p class="hint">

-        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.

-    </p>

-</xsl:template>

-

-<!-- Page HEADER -->

-<xsl:template name="pageHeader">

-	<div class="breadcrumb">

-		<a href="../index.html" class="el_report">JaCoCo</a> &gt;

-		<span class="el_testsuite">JUnit Test Results</span>

-	</div>

-    <h1>JUnit Test Results</h1>

-</xsl:template>

-

-<xsl:template match="testsuite" mode="header">

-	<thead>

-    	<tr valign="top">

-        	<td>Name</td>

-        	<td>Tests</td>

-        	<td>Errors</td>

-        	<td>Failures</td>

-        	<td nowrap="nowrap">Time(s)</td>

-    	</tr>

-    </thead>

-</xsl:template>

-

-<!-- class header -->

-<xsl:template name="testsuite.test.header">

-	<thead>

-    	<tr>

-        	<td>Name</td>

-        	<td>Tests</td>

-        	<td>Errors</td>

-        	<td>Failures</td>

-        	<td>Time(s)</td>

-        	<td>Time Stamp</td>

-    	</tr>

-    </thead>

-</xsl:template>

-

-<!-- method header -->

-<xsl:template name="testcase.test.header">

-	<thead>

-    	<tr>

-        	<td>Name</td>

-        	<td>Status</td>

-        	<td>Type</td>

-        	<td>Time(s)</td>

-	    </tr>

-    </thead>

-</xsl:template>

-

-

-<!-- class information -->

-<xsl:template match="testsuite" mode="print.test">

-    <tr valign="top">

-        <!-- set a nice color depending if there is an error/failure -->

-        <xsl:attribute name="class">

-            <xsl:choose>

-                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>

-                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>

-            </xsl:choose>

-        </xsl:attribute>

-

-        <!-- print testsuite information -->

-        <td style="width:24em"><a href="#{@name}" class="el_testsuite"><xsl:value-of select="@name"/></a></td>

-        <td><xsl:value-of select="@tests"/></td>

-        <td><xsl:value-of select="@errors"/></td>

-        <td><xsl:value-of select="@failures"/></td>

-        <td>

-            <xsl:call-template name="display-time">

-                <xsl:with-param name="value" select="@time"/>

-            </xsl:call-template>

-        </td>

-        <td><xsl:apply-templates select="@timestamp"/></td>

-    </tr>

-</xsl:template>

-

-<xsl:template match="testcase" mode="print.test">

-    <tr valign="top">

-        <xsl:attribute name="class">

-            <xsl:choose>

-                <xsl:when test="failure | error">Error</xsl:when>

-            </xsl:choose>

-        </xsl:attribute>

-        <td style="width:24em"><span class="el_test"><xsl:value-of select="@name"/></span></td>

-        <xsl:choose>

-            <xsl:when test="failure">

-                <td>Failure</td>

-                <td><xsl:apply-templates select="failure"/></td>

-            </xsl:when>

-            <xsl:when test="error">

-                <td>Error</td>

-                <td><xsl:apply-templates select="error"/></td>

-            </xsl:when>

-            <xsl:otherwise>

-                <td>Success</td>

-                <td></td>

-            </xsl:otherwise>

-        </xsl:choose>

-        <td>

-            <xsl:call-template name="display-time">

-                <xsl:with-param name="value" select="@time"/>

-            </xsl:call-template>

-        </td>

-    </tr>

-</xsl:template>

-

-

-<xsl:template match="failure">

-    <xsl:call-template name="display-failures"/>

-</xsl:template>

-

-<xsl:template match="error">

-    <xsl:call-template name="display-failures"/>

-</xsl:template>

-

-<!-- Style for the error and failure in the tescase template -->

-<xsl:template name="display-failures">

-    <xsl:choose>

-        <xsl:when test="not(@message)">N/A</xsl:when>

-        <xsl:otherwise>

-            <xsl:value-of select="@message"/>

-        </xsl:otherwise>

-    </xsl:choose>

-    <!-- display the stacktrace -->

-    <code>

-        <br/><br/>

-        <xsl:call-template name="br-replace">

-            <xsl:with-param name="word" select="."/>

-        </xsl:call-template>

-    </code>

-    <!-- the later is better but might be problematic for non-21" monitors... -->

-    <!--pre><xsl:value-of select="."/></pre-->

-</xsl:template>

-

-<xsl:template name="JS-escape">

-    <xsl:param name="string"/>

-    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>

-    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>

-    <xsl:value-of select="$tmp2"/>

-</xsl:template>

-

-

-<!--

-    template that will convert a carriage return into a br tag

-    @param word the text from which to convert CR to BR tag

--->

-<xsl:template name="br-replace">

-    <xsl:param name="word"/>

-    <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","&lt;br/>")'/>

-</xsl:template>

-

-<xsl:template name="display-time">

-    <xsl:param name="value"/>

-    <xsl:value-of select="format-number($value,'0.000')"/>

-</xsl:template>

-

-<xsl:template name="display-percent">

-    <xsl:param name="value"/>

-    <xsl:value-of select="format-number($value,'0.00%')"/>

-</xsl:template>

-

-</xsl:stylesheet>

+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
+        xmlns="http://www.w3.org/1999/xhtml"
+        xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
+        exclude-result-prefixes="stringutils">
+<xsl:output method="xml" indent="yes" encoding="UTF-8"
+  doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
+  doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
+<xsl:decimal-format decimal-separator="." grouping-separator="," />
+<!--
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You 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.
+ -->
+
+<xsl:param name="qualified.bundle.version"/>
+<xsl:param name="jacoco.home.url"/>
+<xsl:param name="copyright.years"/>
+
+<!--
+
+ JaCoCo test report stylesheet.
+
+-->
+<xsl:template match="testsuites">
+    <html>
+        <head>
+            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+            <link rel="stylesheet" href="../doc/resources/doc.css" charset="UTF-8" type="text/css" />
+            <link rel="shortcut icon" href="../doc/resources/report.gif" type="image/gif" />
+            <title>JaCoCo - JUnit Test Results</title>
+
+    <style type="text/css">
+      .Error {
+        font-weight:bold; color:red;
+      }
+      .Failure {
+        font-weight:bold; color:purple;
+      }
+      </style>
+        </head>
+        <body>
+            <div id="content">
+            <a name="top"></a>
+            <xsl:call-template name="pageHeader"/>
+
+            <!-- Summary part -->
+            <xsl:call-template name="summary"/>
+
+            <!-- Package List part -->
+            <xsl:call-template name="packagelist"/>
+
+            <!-- For each package create its part -->
+            <xsl:call-template name="packages"/>
+
+            <!-- For each class create the  part -->
+            <xsl:call-template name="classes"/>
+
+            </div>
+			<div class="footer">
+				<span class="right"><a href="{$jacoco.home.url}">JaCoCo</a>&#160;<xsl:value-of select="$qualified.bundle.version"/></span>
+				<a href="../doc/license.html">Copyright</a> &#169; <xsl:value-of select="$copyright.years"/> Mountainminds GmbH &amp; Co. KG and Contributors
+			</div>
+        </body>
+    </html>
+</xsl:template>
+
+
+
+<!-- ================================================================== -->
+<!-- Write a list of all packages with an hyperlink to the anchor of    -->
+<!-- of the package name.                                               -->
+<!-- ================================================================== -->
+<xsl:template name="packagelist">
+	<h2>Packages</h2>
+	<table class="coverage">
+		<xsl:call-template name="testsuite.test.header"/>
+		<tbody>
+			<!-- list all packages recursively -->
+            <xsl:for-each select="./testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+                <xsl:sort select="@package"/>
+                <xsl:variable name="testsuites-in-package" select="/testsuites/testsuite[./@package = current()/@package]"/>
+                <xsl:variable name="testCount" select="sum($testsuites-in-package/@tests)"/>
+                <xsl:variable name="errorCount" select="sum($testsuites-in-package/@errors)"/>
+                <xsl:variable name="failureCount" select="sum($testsuites-in-package/@failures)"/>
+                <xsl:variable name="timeCount" select="sum($testsuites-in-package/@time)"/>
+
+                <!-- write a summary for the package -->
+                <tr valign="top">
+                    <!-- set a nice color depending if there is an error/failure -->
+                    <xsl:attribute name="class">
+                        <xsl:choose>
+                            <xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+                            <xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+                        </xsl:choose>
+                    </xsl:attribute>
+                    <td style="width:24em"><a href="#{@package}" class="el_testsuite"><xsl:value-of select="@package"/></a></td>
+                    <td><xsl:value-of select="$testCount"/></td>
+                    <td><xsl:value-of select="$errorCount"/></td>
+                    <td><xsl:value-of select="$failureCount"/></td>
+                    <td>
+                    <xsl:call-template name="display-time">
+                        <xsl:with-param name="value" select="$timeCount"/>
+                    </xsl:call-template>
+                    </td>
+                </tr>
+            </xsl:for-each>
+		</tbody>
+	</table>
+	<p class="hint">
+        Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.
+    </p>
+</xsl:template>
+
+
+    <!-- ================================================================== -->
+    <!-- Write a package level report                                       -->
+    <!-- It creates a table with values from the document:                  -->
+    <!-- Name | Tests | Errors | Failures | Time                            -->
+    <!-- ================================================================== -->
+    <xsl:template name="packages">
+        <!-- create an anchor to this package name -->
+        <xsl:for-each select="/testsuites/testsuite[not(./@package = preceding-sibling::testsuite/@package)]">
+            <xsl:sort select="@package"/>
+                <a name="{@package}"></a>
+                <h3>Package <xsl:value-of select="@package"/></h3>
+
+                <table class="coverage">
+                    <xsl:call-template name="testsuite.test.header"/>
+
+                    <!-- match the testsuites of this package -->
+                    <xsl:apply-templates select="/testsuites/testsuite[./@package = current()/@package]" mode="print.test"/>
+                </table>
+                <p>
+                	<a href="#top">Back to top</a>
+                </p>
+        </xsl:for-each>
+    </xsl:template>
+
+    <xsl:template name="classes">
+        <xsl:for-each select="testsuite">
+            <xsl:sort select="@name"/>
+            <!-- create an anchor to this class name -->
+            <a name="{@name}"></a>
+            <h3>TestCase <xsl:value-of select="@name"/></h3>
+
+            <table class="coverage">
+              <xsl:call-template name="testcase.test.header"/>
+              <!--
+              test can even not be started at all (failure to load the class)
+              so report the error directly
+              -->
+                <xsl:if test="./error">
+                    <tr class="Error">
+                        <td colspan="4"><xsl:apply-templates select="./error"/></td>
+                    </tr>
+                </xsl:if>
+                <xsl:apply-templates select="./testcase" mode="print.test"/>
+            </table>
+            <p>
+            	<a href="#top">Back to top</a>
+            </p>
+        </xsl:for-each>
+    </xsl:template>
+
+<xsl:template name="summary">
+	<h2>Summary</h2>
+	<xsl:variable name="testCount" select="sum(testsuite/@tests)"/>
+	<xsl:variable name="errorCount" select="sum(testsuite/@errors)"/>
+	<xsl:variable name="failureCount" select="sum(testsuite/@failures)"/>
+	<xsl:variable name="timeCount" select="sum(testsuite/@time)"/>
+	<xsl:variable name="successRate" select="($testCount - $failureCount - $errorCount) div $testCount"/>
+	<table class="coverage">
+        <thead>
+	        <tr valign="top">
+    	        <td>Tests</td>
+        	    <td>Failures</td>
+            	<td>Errors</td>
+            	<td>Success rate</td>
+            	<td>Time</td>
+        	</tr>
+        </thead>
+        <tbody>
+			<tr valign="top">
+				<xsl:attribute name="class">
+					<xsl:choose>
+						<xsl:when test="$failureCount &gt; 0">Failure</xsl:when>
+						<xsl:when test="$errorCount &gt; 0">Error</xsl:when>
+					</xsl:choose>
+				</xsl:attribute>
+				<td><xsl:value-of select="$testCount"/></td>
+				<td><xsl:value-of select="$failureCount"/></td>
+				<td><xsl:value-of select="$errorCount"/></td>
+				<td>
+					<xsl:call-template name="display-percent">
+						<xsl:with-param name="value" select="$successRate"/>
+					</xsl:call-template>
+				</td>
+				<td>
+					<xsl:call-template name="display-time">
+						<xsl:with-param name="value" select="$timeCount"/>
+					</xsl:call-template>
+				</td>
+			</tr>
+		</tbody>
+	</table>
+	<p class="hint">
+        Note: <i>failures</i> are anticipated and checked for with assertions while <i>errors</i> are unanticipated.
+    </p>
+</xsl:template>
+
+<!-- Page HEADER -->
+<xsl:template name="pageHeader">
+	<div class="breadcrumb">
+		<a href="../index.html" class="el_report">JaCoCo</a> &gt;
+		<span class="el_testsuite">JUnit Test Results</span>
+	</div>
+    <h1>JUnit Test Results</h1>
+</xsl:template>
+
+<xsl:template match="testsuite" mode="header">
+	<thead>
+    	<tr valign="top">
+        	<td>Name</td>
+        	<td>Tests</td>
+        	<td>Errors</td>
+        	<td>Failures</td>
+        	<td nowrap="nowrap">Time(s)</td>
+    	</tr>
+    </thead>
+</xsl:template>
+
+<!-- class header -->
+<xsl:template name="testsuite.test.header">
+	<thead>
+    	<tr>
+        	<td>Name</td>
+        	<td>Tests</td>
+        	<td>Errors</td>
+        	<td>Failures</td>
+        	<td>Time(s)</td>
+    	</tr>
+    </thead>
+</xsl:template>
+
+<!-- method header -->
+<xsl:template name="testcase.test.header">
+	<thead>
+    	<tr>
+        	<td>Name</td>
+        	<td>Status</td>
+        	<td>Type</td>
+        	<td>Time(s)</td>
+	    </tr>
+    </thead>
+</xsl:template>
+
+
+<!-- class information -->
+<xsl:template match="testsuite" mode="print.test">
+    <tr valign="top">
+        <!-- set a nice color depending if there is an error/failure -->
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="@failures[.&gt; 0]">Failure</xsl:when>
+                <xsl:when test="@errors[.&gt; 0]">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+
+        <!-- print testsuite information -->
+        <td style="width:24em"><a href="#{@name}" class="el_testsuite"><xsl:value-of select="@name"/></a></td>
+        <td><xsl:value-of select="@tests"/></td>
+        <td><xsl:value-of select="@errors"/></td>
+        <td><xsl:value-of select="@failures"/></td>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+<xsl:template match="testcase" mode="print.test">
+    <tr valign="top">
+        <xsl:attribute name="class">
+            <xsl:choose>
+                <xsl:when test="failure | error">Error</xsl:when>
+            </xsl:choose>
+        </xsl:attribute>
+        <td style="width:24em"><span class="el_test"><xsl:value-of select="@name"/></span></td>
+        <xsl:choose>
+            <xsl:when test="failure">
+                <td>Failure</td>
+                <td><xsl:apply-templates select="failure"/></td>
+            </xsl:when>
+            <xsl:when test="error">
+                <td>Error</td>
+                <td><xsl:apply-templates select="error"/></td>
+            </xsl:when>
+            <xsl:otherwise>
+                <td>Success</td>
+                <td></td>
+            </xsl:otherwise>
+        </xsl:choose>
+        <td>
+            <xsl:call-template name="display-time">
+                <xsl:with-param name="value" select="@time"/>
+            </xsl:call-template>
+        </td>
+    </tr>
+</xsl:template>
+
+
+<xsl:template match="failure">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<xsl:template match="error">
+    <xsl:call-template name="display-failures"/>
+</xsl:template>
+
+<!-- Style for the error and failure in the tescase template -->
+<xsl:template name="display-failures">
+    <xsl:choose>
+        <xsl:when test="not(@message)">N/A</xsl:when>
+        <xsl:otherwise>
+            <xsl:value-of select="@message"/>
+        </xsl:otherwise>
+    </xsl:choose>
+    <!-- display the stacktrace -->
+    <code>
+        <br/><br/>
+        <xsl:call-template name="br-replace">
+            <xsl:with-param name="word" select="."/>
+        </xsl:call-template>
+    </code>
+    <!-- the later is better but might be problematic for non-21" monitors... -->
+    <!--pre><xsl:value-of select="."/></pre-->
+</xsl:template>
+
+<xsl:template name="JS-escape">
+    <xsl:param name="string"/>
+    <xsl:param name="tmp1" select="stringutils:replace(string($string),'\','\\')"/>
+    <xsl:param name="tmp2" select="stringutils:replace(string($tmp1),&quot;'&quot;,&quot;\&apos;&quot;)"/>
+    <xsl:value-of select="$tmp2"/>
+</xsl:template>
+
+
+<!--
+    template that will convert a carriage return into a br tag
+    @param word the text from which to convert CR to BR tag
+-->
+<xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:value-of disable-output-escaping="yes" select='stringutils:replace(string($word),"&#xA;","&lt;br/>")'/>
+</xsl:template>
+
+<xsl:template name="display-time">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.000')"/>
+</xsl:template>
+
+<xsl:template name="display-percent">
+    <xsl:param name="value"/>
+    <xsl:value-of select="format-number($value,'0.00%')"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/org.jacoco.doc/xsl/maven-goal.xsl b/org.jacoco.doc/xsl/maven-goal.xsl
index 1cef056..ae06df3 100644
--- a/org.jacoco.doc/xsl/maven-goal.xsl
+++ b/org.jacoco.doc/xsl/maven-goal.xsl
@@ -1,12 +1,13 @@
 <?xml version="1.0"?>
 
-<!-- 
+<!--
    Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+   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
       Kyle Lieber - implementation of CheckMojo
@@ -120,7 +121,7 @@
 			<xsl:apply-templates />
 		</code>
 	</xsl:template>
-	
+
 	<xsl:template match="xdoc:pre">
 		<pre>
 			<xsl:apply-templates />
@@ -169,4 +170,3 @@
 	</xsl:template>
 
 </xsl:stylesheet>
-
diff --git a/org.jacoco.examples.test/about.html b/org.jacoco.examples.test/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.examples.test/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.examples.test/pom.xml b/org.jacoco.examples.test/pom.xml
index 7335864..2ebc88f 100644
--- a/org.jacoco.examples.test/pom.xml
+++ b/org.jacoco.examples.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.examples.test/src/org/jacoco/examples/ClassInfoTest.java b/org.jacoco.examples.test/src/org/jacoco/examples/ClassInfoTest.java
index baed329..070ed45 100644
--- a/org.jacoco.examples.test/src/org/jacoco/examples/ClassInfoTest.java
+++ b/org.jacoco.examples.test/src/org/jacoco/examples/ClassInfoTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -35,15 +36,17 @@
 		final String[] args = new String[] { createClassFile() };
 		new ClassInfo(console.stream).execute(args);
 
-		console.expect(containsLine("class name:   org/jacoco/examples/ClassInfoTest"));
+		console.expect(containsLine(
+				"class name:   org/jacoco/examples/ClassInfoTest"));
 		console.expect(containsLine("methods:      3"));
 		console.expect(containsLine("branches:     2"));
 		console.expect(containsLine("complexity:   4"));
 	}
 
 	private String createClassFile() throws IOException {
-		InputStream in = getClass().getResource(
-				getClass().getSimpleName() + ".class").openStream();
+		InputStream in = getClass()
+				.getResource(getClass().getSimpleName() + ".class")
+				.openStream();
 		File f = File.createTempFile("Example", ".class");
 		FileOutputStream out = new FileOutputStream(f);
 		int b;
diff --git a/org.jacoco.examples.test/src/org/jacoco/examples/ConsoleOutput.java b/org.jacoco.examples.test/src/org/jacoco/examples/ConsoleOutput.java
index 7908116..273d61f 100644
--- a/org.jacoco.examples.test/src/org/jacoco/examples/ConsoleOutput.java
+++ b/org.jacoco.examples.test/src/org/jacoco/examples/ConsoleOutput.java
@@ -1,20 +1,21 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
-import static org.junit.matchers.JUnitMatchers.containsString;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
diff --git a/org.jacoco.examples.test/src/org/jacoco/examples/CoreTutorialTest.java b/org.jacoco.examples.test/src/org/jacoco/examples/CoreTutorialTest.java
index 462d17e..e95f544 100644
--- a/org.jacoco.examples.test/src/org/jacoco/examples/CoreTutorialTest.java
+++ b/org.jacoco.examples.test/src/org/jacoco/examples/CoreTutorialTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -30,9 +31,9 @@
 
 		console.expect(containsLine("0 of 3 methods missed"));
 		console.expect(containsLine("1 of 5 complexity missed"));
-		console.expect(containsLine("Line 46: "));
-		console.expect(containsLine("Line 47: green"));
-		console.expect(containsLine("Line 48: yellow"));
-		console.expect(containsLine("Line 49: red"));
+		console.expect(containsLine("Line 47: "));
+		console.expect(containsLine("Line 48: green"));
+		console.expect(containsLine("Line 49: yellow"));
+		console.expect(containsLine("Line 50: red"));
 	}
 }
diff --git a/org.jacoco.examples.test/src/org/jacoco/examples/ExecDumpTest.java b/org.jacoco.examples.test/src/org/jacoco/examples/ExecDumpTest.java
index 348b43f..0486628 100644
--- a/org.jacoco.examples.test/src/org/jacoco/examples/ExecDumpTest.java
+++ b/org.jacoco.examples.test/src/org/jacoco/examples/ExecDumpTest.java
@@ -1,18 +1,19 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
+import static org.hamcrest.CoreMatchers.containsString;
 import static org.jacoco.examples.ConsoleOutput.containsLine;
-import static org.junit.matchers.JUnitMatchers.containsString;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -40,9 +41,11 @@
 		new ExecDump(console.stream).execute(args);
 
 		console.expect(containsLine("exec file: " + file));
-		console.expect(containsLine("CLASS ID         HITS/PROBES   CLASS NAME"));
+		console.expect(
+				containsLine("CLASS ID         HITS/PROBES   CLASS NAME"));
 		console.expect(containsString("Session \"testid\":"));
-		console.expect(containsLine("0000000000001234    2 of   3   foo/MyClass"));
+		console.expect(
+				containsLine("0000000000001234    2 of   3   foo/MyClass"));
 	}
 
 	private String createExecFile() throws IOException {
diff --git a/org.jacoco.examples.test/src/org/jacoco/examples/MBeanClientTest.java b/org.jacoco.examples.test/src/org/jacoco/examples/MBeanClientTest.java
index dcd905d..a5aaecc 100644
--- a/org.jacoco.examples.test/src/org/jacoco/examples/MBeanClientTest.java
+++ b/org.jacoco.examples.test/src/org/jacoco/examples/MBeanClientTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
diff --git a/org.jacoco.examples.test/src/test/resources/verify-it.bsh b/org.jacoco.examples.test/src/test/resources/verify-it.bsh
new file mode 100644
index 0000000..a53465d
--- /dev/null
+++ b/org.jacoco.examples.test/src/test/resources/verify-it.bsh
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Mirko Friedenhagen - initial API and implementation
+ *
+ *******************************************************************************/
+File realBaseDir = new File(basedir, "../../../target/it-it/build");
+if (!new File(realBaseDir, "target/site/jacoco/index.html").exists()) {
+  throw new RuntimeException();
+}
+if (!new File(realBaseDir, "target/site/jacoco-it/index.html").exists()) {
+  throw new RuntimeException();
+}
diff --git a/org.jacoco.examples.test/src/test/resources/verify-it.groovy b/org.jacoco.examples.test/src/test/resources/verify-it.groovy
deleted file mode 100644
index a1b346a..0000000
--- a/org.jacoco.examples.test/src/test/resources/verify-it.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Mirko Friedenhagen - initial API and implementation
- *
- *******************************************************************************/
-File realBaseDir = new File(basedir, "../../../target/it-it/build");
-assert new File(realBaseDir, "target/site/jacoco/index.html").exists();
-assert new File(realBaseDir, "target/site/jacoco-it/index.html").exists();
-return true;
diff --git a/org.jacoco.examples.test/src/test/resources/verify-offline.bsh b/org.jacoco.examples.test/src/test/resources/verify-offline.bsh
new file mode 100644
index 0000000..49a098f
--- /dev/null
+++ b/org.jacoco.examples.test/src/test/resources/verify-offline.bsh
@@ -0,0 +1,24 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Mirko Friedenhagen - initial API and implementation
+ *
+ *******************************************************************************/
+import org.codehaus.plexus.util.*;
+
+File realBaseDir = new File(basedir, "../../../target/it-offline/build");
+if (!new File(realBaseDir, "target/site/jacoco/index.html").exists()) {
+  throw new RuntimeException();
+}
+if (new File(realBaseDir, "target/site/jacoco-it/index.html").exists()) {
+  throw new RuntimeException();
+}
+if (!FileUtils.fileRead(new File(realBaseDir, "build.log")).contains(":restore-instrumented-classes")) {
+  throw new RuntimeException();
+}
diff --git a/org.jacoco.examples.test/src/test/resources/verify-offline.groovy b/org.jacoco.examples.test/src/test/resources/verify-offline.groovy
deleted file mode 100644
index 0f00234..0000000
--- a/org.jacoco.examples.test/src/test/resources/verify-offline.groovy
+++ /dev/null
@@ -1,16 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Mirko Friedenhagen - initial API and implementation
- *
- *******************************************************************************/
-File realBaseDir = new File(basedir, "../../../target/it-offline/build");
-assert new File(realBaseDir, "target/site/jacoco/index.html").exists();
-assert !new File(realBaseDir, "target/site/jacoco-it/index.html").exists();
-assert new File(realBaseDir, "build.log").getText().contains(":restore-instrumented-classes");
-return true;
diff --git a/org.jacoco.examples.test/src/test/resources/verify.bsh b/org.jacoco.examples.test/src/test/resources/verify.bsh
new file mode 100644
index 0000000..793317d
--- /dev/null
+++ b/org.jacoco.examples.test/src/test/resources/verify.bsh
@@ -0,0 +1,19 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2021 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:
+ *    Mirko Friedenhagen - initial API and implementation
+ *
+ *******************************************************************************/
+File realBaseDir = new File(basedir, "../../../target/it/build");
+if (!new File(realBaseDir, "target/site/jacoco/index.html").exists()) {
+  throw new RuntimeException();
+}
+if (new File(realBaseDir, "target/site/jacoco-it/index.html").exists()) {
+  throw new RuntimeException();
+}
diff --git a/org.jacoco.examples.test/src/test/resources/verify.groovy b/org.jacoco.examples.test/src/test/resources/verify.groovy
deleted file mode 100644
index a181e3c..0000000
--- a/org.jacoco.examples.test/src/test/resources/verify.groovy
+++ /dev/null
@@ -1,15 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Mirko Friedenhagen - initial API and implementation
- *
- *******************************************************************************/
-File realBaseDir = new File(basedir, "../../../target/it/build");
-assert new File(realBaseDir, "target/site/jacoco/index.html").exists();
-assert !new File(realBaseDir, "target/site/jacoco-it/index.html").exists();
-return true;
diff --git a/org.jacoco.examples/about.html b/org.jacoco.examples/about.html
deleted file mode 100644
index d31112d..0000000
--- a/org.jacoco.examples/about.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.examples/assembly.xml b/org.jacoco.examples/assembly.xml
index d712e10..057311e 100644
--- a/org.jacoco.examples/assembly.xml
+++ b/org.jacoco.examples/assembly.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/build-offline.xml b/org.jacoco.examples/build/build-offline.xml
index 9a99908..fc72ee8 100644
--- a/org.jacoco.examples/build/build-offline.xml
+++ b/org.jacoco.examples/build/build-offline.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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
 -->
 
 <project name="Example Ant Build with JaCoCo Offline Instrumentation" default="rebuild" xmlns:jacoco="antlib:org.jacoco.ant">
-	
+
 	<description>
 	  Example Ant build file that demonstrates how JaCoCo can be used with
 	  offline instrumentation. This requires preprocessing of the class files
@@ -47,11 +48,11 @@
 		</jacoco:instrument>
 	</target>
 
-	
+
 	<target name="test" depends="instrument">
 		<!-- Step 3: Run tests with instrumented classes -->
 		<java classname="org.jacoco.examples.parser.Main" fork="true">
-			<!-- jacocoagent.jar must be on the classpath --> 
+			<!-- jacocoagent.jar must be on the classpath -->
 			<classpath>
 				<pathelement path="../../../lib/jacocoagent.jar"/>
 				<pathelement path="${result.classes.instr.dir}" />
diff --git a/org.jacoco.examples/build/build.xml b/org.jacoco.examples/build/build.xml
index a148b4b..d108f8e 100644
--- a/org.jacoco.examples/build/build.xml
+++ b/org.jacoco.examples/build/build.xml
@@ -1,18 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-  
+<!--
+   Copyright (c) 2009, 2021 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
 -->
 
 <project name="Example Ant Build with JaCoCo" default="rebuild" xmlns:jacoco="antlib:org.jacoco.ant">
-	
+
 	<description>
 	  Example Ant build file that demonstrates how a JaCoCo coverage report
 	  can be itegrated into an existing build in three simple steps.
diff --git a/org.jacoco.examples/build/pom-it.xml b/org.jacoco.examples/build/pom-it.xml
index e66ad4a..b8623da 100644
--- a/org.jacoco.examples/build/pom-it.xml
+++ b/org.jacoco.examples/build/pom-it.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/pom-offline.xml b/org.jacoco.examples/build/pom-offline.xml
index b008b96..4bc64e3 100644
--- a/org.jacoco.examples/build/pom-offline.xml
+++ b/org.jacoco.examples/build/pom-offline.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/pom.xml b/org.jacoco.examples/build/pom.xml
index 66ad9b3..8e4932b 100644
--- a/org.jacoco.examples/build/pom.xml
+++ b/org.jacoco.examples/build/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -26,7 +27,7 @@
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
-      <version>4.10</version>
+      <version>@junit.version@</version>
       <scope>test</scope>
     </dependency>
   </dependencies>
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Add.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Add.java
index be17f50..5a509c7 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Add.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Add.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Const.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Const.java
index 7676760..cf50885 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Const.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Const.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Div.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Div.java
index 67c13ce..c5071ea 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Div.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Div.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/IExpression.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/IExpression.java
index 81be56a..b7e26d6 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/IExpression.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/IExpression.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Mul.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Mul.java
index 6342112..2ed3ff7 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Mul.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Mul.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Sub.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Sub.java
index 5b23fcc..7886724 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Sub.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/expressions/Sub.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/ExpressionParser.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/ExpressionParser.java
index 496d860..e1e9274 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/ExpressionParser.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/ExpressionParser.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/Main.java b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/Main.java
index c28767d..2eec19b 100644
--- a/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/Main.java
+++ b/org.jacoco.examples/build/src/main/java/org/jacoco/examples/parser/Main.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserIT.java b/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserIT.java
index e446018..732e773 100644
--- a/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserIT.java
+++ b/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserIT.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Mirko Friedenhagen - initial
diff --git a/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserTest.java b/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserTest.java
index 88b2c84..080b010 100755
--- a/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserTest.java
+++ b/org.jacoco.examples/build/src/test/java/org/jacoco/examples/parser/ExpressionParserTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.examples/pom.xml b/org.jacoco.examples/pom.xml
index f942c77..1e35dfe 100644
--- a/org.jacoco.examples/pom.xml
+++ b/org.jacoco.examples/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.examples/src/org/jacoco/examples/ClassInfo.java b/org.jacoco.examples/src/org/jacoco/examples/ClassInfo.java
index 690293f..07f7e51 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/ClassInfo.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/ClassInfo.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -31,7 +32,7 @@
 
 	/**
 	 * Creates a new example instance printing to the given stream.
-	 * 
+	 *
 	 * @param out
 	 *            stream for outputs
 	 */
@@ -42,7 +43,7 @@
 
 	/**
 	 * Run this example with the given parameters.
-	 * 
+	 *
 	 * @param args
 	 *            command line parameters
 	 * @throws IOException
@@ -57,21 +58,21 @@
 	public void visitCoverage(final IClassCoverage coverage) {
 		out.printf("class name:   %s%n", coverage.getName());
 		out.printf("class id:     %016x%n", Long.valueOf(coverage.getId()));
-		out.printf("instructions: %s%n", Integer.valueOf(coverage
-				.getInstructionCounter().getTotalCount()));
+		out.printf("instructions: %s%n", Integer
+				.valueOf(coverage.getInstructionCounter().getTotalCount()));
 		out.printf("branches:     %s%n",
 				Integer.valueOf(coverage.getBranchCounter().getTotalCount()));
 		out.printf("lines:        %s%n",
 				Integer.valueOf(coverage.getLineCounter().getTotalCount()));
 		out.printf("methods:      %s%n",
 				Integer.valueOf(coverage.getMethodCounter().getTotalCount()));
-		out.printf("complexity:   %s%n%n", Integer.valueOf(coverage
-				.getComplexityCounter().getTotalCount()));
+		out.printf("complexity:   %s%n%n", Integer
+				.valueOf(coverage.getComplexityCounter().getTotalCount()));
 	}
 
 	/**
 	 * Entry point to run this examples as a Java application.
-	 * 
+	 *
 	 * @param args
 	 *            list of program arguments
 	 * @throws IOException
diff --git a/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java b/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
index 708955f..e101685 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/CoreTutorial.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -63,7 +64,7 @@
 
 		/**
 		 * Add a in-memory representation of a class.
-		 * 
+		 *
 		 * @param name
 		 *            name of the class
 		 * @param bytes
@@ -89,7 +90,7 @@
 
 	/**
 	 * Creates a new example instance printing to the given stream.
-	 * 
+	 *
 	 * @param out
 	 *            stream for outputs
 	 */
@@ -99,7 +100,7 @@
 
 	/**
 	 * Run this example.
-	 * 
+	 *
 	 * @throws Exception
 	 *             in case of errors
 	 */
@@ -189,7 +190,7 @@
 
 	/**
 	 * Entry point to run this examples as a Java application.
-	 * 
+	 *
 	 * @param args
 	 *            list of program arguments
 	 * @throws Exception
diff --git a/org.jacoco.examples/src/org/jacoco/examples/ExecDump.java b/org.jacoco.examples/src/org/jacoco/examples/ExecDump.java
index 1a0342f..76fb00d 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/ExecDump.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/ExecDump.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -32,7 +33,7 @@
 
 	/**
 	 * Creates a new example instance printing to the given stream.
-	 * 
+	 *
 	 * @param out
 	 *            stream for outputs
 	 */
@@ -42,7 +43,7 @@
 
 	/**
 	 * Run this example with the given parameters.
-	 * 
+	 *
 	 * @param args
 	 *            command line parameters
 	 * @throws IOException
@@ -62,8 +63,8 @@
 		final ExecutionDataReader reader = new ExecutionDataReader(in);
 		reader.setSessionInfoVisitor(new ISessionInfoVisitor() {
 			public void visitSessionInfo(final SessionInfo info) {
-				out.printf("Session \"%s\": %s - %s%n", info.getId(), new Date(
-						info.getStartTimeStamp()),
+				out.printf("Session \"%s\": %s - %s%n", info.getId(),
+						new Date(info.getStartTimeStamp()),
 						new Date(info.getDumpTimeStamp()));
 			}
 		});
@@ -93,7 +94,7 @@
 
 	/**
 	 * Entry point to run this examples as a Java application.
-	 * 
+	 *
 	 * @param args
 	 *            list of program arguments
 	 * @throws IOException
diff --git a/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataClient.java b/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataClient.java
index 0db3f59..bafdbe6 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataClient.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataClient.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -35,7 +36,7 @@
 
 	/**
 	 * Starts the execution data request.
-	 * 
+	 *
 	 * @param args
 	 * @throws IOException
 	 */
diff --git a/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataServer.java b/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataServer.java
index 9fb2dcd..187a6eb 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataServer.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/ExecutionDataServer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.examples;
 
@@ -40,7 +41,7 @@
 
 	/**
 	 * Start the server as a standalone program.
-	 * 
+	 *
 	 * @param args
 	 * @throws IOException
 	 */
@@ -55,8 +56,8 @@
 		}
 	}
 
-	private static class Handler implements Runnable, ISessionInfoVisitor,
-			IExecutionDataVisitor {
+	private static class Handler
+			implements Runnable, ISessionInfoVisitor, IExecutionDataVisitor {
 
 		private final Socket socket;
 
diff --git a/org.jacoco.examples/src/org/jacoco/examples/MBeanClient.java b/org.jacoco.examples/src/org/jacoco/examples/MBeanClient.java
index c45bece..8abedc4 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/MBeanClient.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/MBeanClient.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -33,7 +34,7 @@
 
 	/**
 	 * Execute the example.
-	 * 
+	 *
 	 * @param args
 	 * @throws Exception
 	 */
@@ -45,8 +46,9 @@
 				.getMBeanServerConnection();
 
 		final IProxy proxy = (IProxy) MBeanServerInvocationHandler
-				.newProxyInstance(connection, new ObjectName(
-						"org.jacoco:type=Runtime"), IProxy.class, false);
+				.newProxyInstance(connection,
+						new ObjectName("org.jacoco:type=Runtime"), IProxy.class,
+						false);
 
 		// Retrieve JaCoCo version and session id:
 		System.out.println("Version: " + proxy.getVersion());
diff --git a/org.jacoco.examples/src/org/jacoco/examples/ReportGenerator.java b/org.jacoco.examples/src/org/jacoco/examples/ReportGenerator.java
index 13a9706..b785da8 100644
--- a/org.jacoco.examples/src/org/jacoco/examples/ReportGenerator.java
+++ b/org.jacoco.examples/src/org/jacoco/examples/ReportGenerator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.examples;
 
@@ -27,7 +28,7 @@
  * This example creates a HTML report for eclipse like projects based on a
  * single execution data store called jacoco.exec. The report contains no
  * grouping information.
- * 
+ *
  * The class files under test must be compiled with debug information, otherwise
  * source highlighting will not work.
  */
@@ -44,7 +45,7 @@
 
 	/**
 	 * Create a new generator based for the given project.
-	 * 
+	 *
 	 * @param projectDirectory
 	 */
 	public ReportGenerator(final File projectDirectory) {
@@ -57,7 +58,7 @@
 
 	/**
 	 * Create the report.
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	public void create() throws IOException {
@@ -95,8 +96,8 @@
 
 		// Populate the report structure with the bundle coverage information.
 		// Call visitGroup if you need groups in your report.
-		visitor.visitBundle(bundleCoverage, new DirectorySourceFileLocator(
-				sourceDirectory, "utf-8", 4));
+		visitor.visitBundle(bundleCoverage,
+				new DirectorySourceFileLocator(sourceDirectory, "utf-8", 4));
 
 		// Signal end of structure information to allow report to write all
 		// information out
@@ -121,7 +122,7 @@
 
 	/**
 	 * Starts the report generation process
-	 * 
+	 *
 	 * @param args
 	 *            Arguments to the application. This will be the location of the
 	 *            eclipse projects that will be used to generate reports for
@@ -129,8 +130,8 @@
 	 */
 	public static void main(final String[] args) throws IOException {
 		for (int i = 0; i < args.length; i++) {
-			final ReportGenerator generator = new ReportGenerator(new File(
-					args[i]));
+			final ReportGenerator generator = new ReportGenerator(
+					new File(args[i]));
 			generator.create();
 		}
 	}
diff --git a/org.jacoco.report.test/about.html b/org.jacoco.report.test/about.html
deleted file mode 100644
index 971d897..0000000
--- a/org.jacoco.report.test/about.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<head>
-<title>About</title>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-</head>
-<body lang="EN-US">
-<h2>About This Content</h2>
-
-<p>
-  @build.date@
-</p>
-
-<h3>License</h3>
-
-<p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
-  KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
-  (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
-  For purposes of the EPL, "Program" will mean the Content.
-</p>
-
-<h3>Third Party Content</h3>
-
-<p>
-  The Content includes items that have been sourced from third parties as set
-  out below.
-</p>
-
-<h4>XHTML 1.0 DTD</h4>
-
-<p>
-  This plug-in contains the
-  <a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">XHTML 1.0 DTD</a>
-  which is subject to the terms and conditions of the following license: 
-</p>
-
-<p>
-  <b>W3C<sup>&reg;</sup> SOFTWARE NOTICE AND LICENSE</b><br/>
-  <a href="http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231">http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</a>
-</p>
-
-<p>This work (and included software, documentation such as READMEs, or other
-related items) is being provided by the copyright holders under the following
-license. By obtaining, using and/or copying this work, you (the licensee)
-agree that you have read, understood, and will comply with the following
-terms and conditions.</p>
-
-<p>Permission to copy, modify, and distribute this software and its
-documentation, with or without modification,&nbsp;for any purpose and without
-fee or royalty is hereby granted, provided that you include the following on
-ALL copies of the software and documentation or portions thereof, including
-modifications:</p>
-<ol>
-  <li>The full text of this NOTICE in a location viewable to users of the
-    redistributed or derivative work.</li>
-  <li>Any pre-existing intellectual property disclaimers, notices, or terms
-    and conditions. If none exist, the <a
-    href="copyright-software-short-notice-20021231.html">W3C Software Short
-    Notice</a> should be included (hypertext is preferred, text is permitted)
-    within the body of any redistributed or derivative code.</li>
-
-  <li>Notice of any changes or modifications to the files, including the date
-    changes were made. (We recommend you provide URIs to the location from
-    which the code is derived.)</li>
-</ol>
-
-<p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
-MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
-LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
-PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
-ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
-
-<p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
-DOCUMENTATION.</p>
-
-<p>The name and trademarks of copyright holders may NOT be used in
-advertising or publicity pertaining to the software without specific, written
-prior permission. Title to copyright in this software and any associated
-documentation will at all times remain with copyright holders.</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/org.jacoco.report.test/pom.xml b/org.jacoco.report.test/pom.xml
index 64c0cfa..478e9e2 100644
--- a/org.jacoco.report.test/pom.xml
+++ b/org.jacoco.report.test/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.tests</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.tests</relativePath>
   </parent>
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
index a93e5c3..b8eea85 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/DirectorySourceFileLocatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -45,13 +46,24 @@
 	}
 
 	@Test
-	public void testGetSourceFileNegative() throws IOException {
+	public void getSourceFile_should_return_null_when_source_does_not_exist()
+			throws IOException {
 		assertNull(locator.getSourceFile("org/jacoco/example",
 				"DoesNotExist.java"));
 	}
 
 	@Test
-	public void testGetSourceFile() throws IOException {
+	public void getSourceFile_should_return_null_when_source_is_folder()
+			throws IOException {
+		final File file = new File(sourceFolder.getRoot(),
+				"org/jacoco/example");
+		file.mkdirs();
+		assertNull(locator.getSourceFile("org/jacoco", "example"));
+	}
+
+	@Test
+	public void getSourceFile_should_return_content_when_file_exists()
+			throws IOException {
 		createFile("org/jacoco/example/Test.java");
 		final Reader source = locator.getSourceFile("org/jacoco/example",
 				"Test.java");
@@ -61,8 +73,8 @@
 	private void createFile(String path) throws IOException {
 		final File file = new File(sourceFolder.getRoot(), path);
 		file.getParentFile().mkdirs();
-		final Writer writer = new OutputStreamWriter(
-				new FileOutputStream(file), "UTF-8");
+		final Writer writer = new OutputStreamWriter(new FileOutputStream(file),
+				"UTF-8");
 		writer.write("Source");
 		writer.close();
 	}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java b/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
index c78df55..7e1409b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/FileMultiReportOutputTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -42,8 +43,8 @@
 		stream.close();
 		output.close();
 
-		final InputStream actual = new FileInputStream(new File(
-				folder.getRoot(), "a/b/c/test"));
+		final InputStream actual = new FileInputStream(
+				new File(folder.getRoot(), "a/b/c/test"));
 		assertEquals(1, actual.read());
 		assertEquals(2, actual.read());
 		assertEquals(3, actual.read());
diff --git a/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
index 2225d6d..394ae92 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/InputStreamSourceFileLocatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java b/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
index 8c9e4a2..64692e1 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/JavaNamesTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -63,9 +64,9 @@
 
 	@Test
 	public void testGetClassName5() {
-		assertEquals("Bar.new ISample() {...}", names.getClassName(
-				"com/foo/Bar$1", null, "java/lang/Object",
-				new String[] { "org/foo/ISample" }));
+		assertEquals("Bar.new ISample() {...}",
+				names.getClassName("com/foo/Bar$1", null, "java/lang/Object",
+						new String[] { "org/foo/ISample" }));
 	}
 
 	@Test
@@ -142,9 +143,9 @@
 
 	@Test
 	public void testGetMethodName8() {
-		assertEquals("update(Map.Entry)", names.getMethodName(
-				"com/example/SomeClass", "update", "(Ljava/util/Map$Entry;)V",
-				null));
+		assertEquals("update(Map.Entry)",
+				names.getMethodName("com/example/SomeClass", "update",
+						"(Ljava/util/Map$Entry;)V", null));
 	}
 
 	@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java b/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
index e687db1..1af76cc 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MemoryMultiReportOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java b/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
index d099bab..39a1037 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MemoryOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java b/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
index 9f53228..54e6e86 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MultiReportVisitorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -33,8 +34,8 @@
  */
 public class MultiReportVisitorTest {
 
-	private static class MockVisitor extends MockGroupVisitor implements
-			IReportVisitor {
+	private static class MockVisitor extends MockGroupVisitor
+			implements IReportVisitor {
 
 		MockVisitor() {
 			super("Report");
diff --git a/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java b/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
index f91e1a4..f2090d5 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/MultiSourceFileLocatorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
index d2aace0..56295d8 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/ReportStructureTestDriver.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -47,7 +48,7 @@
 
 		public Reader getSourceFile(String packageName, String fileName)
 				throws IOException {
-			return  new StringReader("");
+			return new StringReader("");
 		}
 
 		public int getTabWidth() {
diff --git a/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java b/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
index 388ddce..0ad5c4c 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/ZipMultiReportOutputTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -108,8 +109,9 @@
 
 		final Map<String, byte[]> entries = readEntries();
 		assertEquals(
-				new HashSet<String>(Arrays.asList("dir/index.html",
-						"readme.txt")), entries.keySet());
+				new HashSet<String>(
+						Arrays.asList("dir/index.html", "readme.txt")),
+				entries.keySet());
 		assertArrayEquals(content1, entries.get("dir/index.html"));
 		assertArrayEquals(content2, entries.get("readme.txt"));
 	}
@@ -130,8 +132,9 @@
 
 		final Map<String, byte[]> entries = readEntries();
 		assertEquals(
-				new HashSet<String>(Arrays.asList("dir/index.html",
-						"readme.txt")), entries.keySet());
+				new HashSet<String>(
+						Arrays.asList("dir/index.html", "readme.txt")),
+				entries.keySet());
 		assertArrayEquals(content1, entries.get("dir/index.html"));
 		assertArrayEquals(content2, entries.get("readme.txt"));
 	}
@@ -183,8 +186,8 @@
 			while ((b = input.read()) != -1) {
 				entryBuffer.write(b);
 			}
-			byte[] old = entries
-					.put(entry.getName(), entryBuffer.toByteArray());
+			byte[] old = entries.put(entry.getName(),
+					entryBuffer.toByteArray());
 			assertNull("Duplicate entry " + entry.getName(), old);
 		}
 		return entries;
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
index 0761f74..2267271 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/BundleCheckerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -55,7 +56,8 @@
 		addRule(ElementType.BUNDLE);
 		final BundleChecker checker = new BundleChecker(rules, names, this);
 		checker.checkBundle(createBundle());
-		assertMessage("Rule violated for bundle Test: instructions covered ratio is 0.50, but expected minimum is 0.75");
+		assertMessage(
+				"Rule violated for bundle Test: instructions covered ratio is 0.50, but expected minimum is 0.75");
 	}
 
 	@Test
@@ -63,7 +65,8 @@
 		addRule(ElementType.PACKAGE);
 		final BundleChecker checker = new BundleChecker(rules, names, this);
 		checker.checkBundle(createBundle());
-		assertMessage("Rule violated for package org.jacoco.example: instructions covered ratio is 0.50, but expected minimum is 0.75");
+		assertMessage(
+				"Rule violated for package org.jacoco.example: instructions covered ratio is 0.50, but expected minimum is 0.75");
 	}
 
 	@Test
@@ -71,7 +74,8 @@
 		addRule(ElementType.SOURCEFILE);
 		final BundleChecker checker = new BundleChecker(rules, names, this);
 		checker.checkBundle(createBundle());
-		assertMessage("Rule violated for source file org/jacoco/example/FooClass.java: instructions covered ratio is 0.50, but expected minimum is 0.75");
+		assertMessage(
+				"Rule violated for source file org/jacoco/example/FooClass.java: instructions covered ratio is 0.50, but expected minimum is 0.75");
 	}
 
 	@Test
@@ -79,7 +83,8 @@
 		addRule(ElementType.CLASS);
 		final BundleChecker checker = new BundleChecker(rules, names, this);
 		checker.checkBundle(createBundle());
-		assertMessage("Rule violated for class org.jacoco.example.FooClass: instructions covered ratio is 0.50, but expected minimum is 0.75");
+		assertMessage(
+				"Rule violated for class org.jacoco.example.FooClass: instructions covered ratio is 0.50, but expected minimum is 0.75");
 	}
 
 	@Test
@@ -87,7 +92,8 @@
 		addRule(ElementType.METHOD);
 		final BundleChecker checker = new BundleChecker(rules, names, this);
 		checker.checkBundle(createBundle());
-		assertMessage("Rule violated for method org.jacoco.example.FooClass.fooMethod(): instructions covered ratio is 0.50, but expected minimum is 0.75");
+		assertMessage(
+				"Rule violated for method org.jacoco.example.FooClass.fooMethod(): instructions covered ratio is 0.50, but expected minimum is 0.75");
 	}
 
 	@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
index 07ecdc2..eb7882a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/LimitTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -34,15 +35,19 @@
 	}
 
 	@Test
-	public void testDefaults() {
+	public void default_should_define_no_limits() {
 		assertNull(limit.getMinimum());
 		assertNull(limit.getMaximum());
+	}
+
+	@Test
+	public void default_should_check_coverageratio_on_instructions() {
 		assertEquals(CounterEntity.INSTRUCTION, limit.getEntity());
 		assertEquals(CounterValue.COVEREDRATIO, limit.getValue());
 	}
 
 	@Test
-	public void testTotalCount() {
+	public void check_should_fail_on_value_totalcount() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setMaximum("-1");
 		assertEquals(CounterValue.TOTALCOUNT, limit.getValue());
@@ -52,7 +57,7 @@
 	}
 
 	@Test
-	public void testMissedCount() {
+	public void check_should_fail_on_value_missedcount() {
 		limit.setValue(CounterValue.MISSEDCOUNT.name());
 		limit.setMaximum("-1");
 		assertEquals(CounterValue.MISSEDCOUNT, limit.getValue());
@@ -62,7 +67,7 @@
 	}
 
 	@Test
-	public void testCoveredCount() {
+	public void check_should_fail_on_value_coveredcount() {
 		limit.setValue(CounterValue.COVEREDCOUNT.name());
 		limit.setMaximum("-1");
 		assertEquals(CounterValue.COVEREDCOUNT, limit.getValue());
@@ -72,26 +77,12 @@
 	}
 
 	@Test
-	public void testMissedRatio() {
+	public void check_should_fail_on_value_missedratio() {
 		limit.setValue(CounterValue.MISSEDRATIO.name());
-		limit.setMaximum("-1");
+		limit.setMaximum("0.5");
 		assertEquals(CounterValue.MISSEDRATIO, limit.getValue());
 		assertEquals(
-				"instructions missed ratio is 0, but expected maximum is -1",
-				limit.check(new TestNode() {
-					{
-						instructionCounter = CounterImpl.COUNTER_0_1;
-					}
-				}));
-	}
-
-	@Test
-	public void testCoveredRatio() {
-		limit.setValue(CounterValue.COVEREDRATIO.name());
-		limit.setMaximum("-1");
-		assertEquals(CounterValue.COVEREDRATIO, limit.getValue());
-		assertEquals(
-				"instructions covered ratio is 0, but expected maximum is -1",
+				"instructions missed ratio is 1.0, but expected maximum is 0.5",
 				limit.check(new TestNode() {
 					{
 						instructionCounter = CounterImpl.COUNTER_1_0;
@@ -100,7 +91,21 @@
 	}
 
 	@Test
-	public void testInstruction() {
+	public void check_should_fail_on_value_coveredratio() {
+		limit.setValue(CounterValue.COVEREDRATIO.name());
+		limit.setMaximum("0.5");
+		assertEquals(CounterValue.COVEREDRATIO, limit.getValue());
+		assertEquals(
+				"instructions covered ratio is 1.0, but expected maximum is 0.5",
+				limit.check(new TestNode() {
+					{
+						instructionCounter = CounterImpl.COUNTER_0_1;
+					}
+				}));
+	}
+
+	@Test
+	public void check_should_fail_on_counter_instruction() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.INSTRUCTION.name());
 		limit.setMaximum("-1");
@@ -111,7 +116,7 @@
 	}
 
 	@Test
-	public void testBranch() {
+	public void check_should_fail_on_check_counter_branch() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.BRANCH.name());
 		limit.setMaximum("-1");
@@ -121,7 +126,7 @@
 	}
 
 	@Test
-	public void testLine() {
+	public void check_should_fail_on_counter_line() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.LINE.name());
 		limit.setMaximum("-1");
@@ -131,7 +136,7 @@
 	}
 
 	@Test
-	public void testComlexity() {
+	public void check_should_fail_on_counter_complexity() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.COMPLEXITY.name());
 		limit.setMaximum("-1");
@@ -141,7 +146,7 @@
 	}
 
 	@Test
-	public void testClass() {
+	public void check_should_fail_on_counter_class() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.CLASS.name());
 		limit.setMaximum("-1");
@@ -151,7 +156,7 @@
 	}
 
 	@Test
-	public void testMethod() {
+	public void check_should_fail_on_counter_method() {
 		limit.setValue(CounterValue.TOTALCOUNT.name());
 		limit.setCounter(CounterEntity.METHOD.name());
 		limit.setMaximum("-1");
@@ -161,7 +166,7 @@
 	}
 
 	@Test
-	public void testNoRatio() {
+	public void check_should_pass_with_NaN_ratio() {
 		assertNull(limit.check(new TestNode() {
 			{
 				instructionCounter = CounterImpl.COUNTER_0_0;
@@ -170,7 +175,7 @@
 	}
 
 	@Test
-	public void testNoLimits() {
+	public void check_should_pass_when_no_limits_given() {
 		assertNull(limit.check(new TestNode() {
 			{
 				instructionCounter = CounterImpl.getInstance(1000, 0);
@@ -179,14 +184,14 @@
 	}
 
 	@Test
-	public void testMin0() {
+	public void setMinimum_should_allow_null() {
 		limit.setMinimum("0");
 		limit.setMinimum((String) null);
 		assertNull(limit.getMinimum());
 	}
 
 	@Test
-	public void testMin1() {
+	public void check_should_pass_when_minimum_is_fulfilled() {
 		limit.setMinimum("0.35");
 		assertEquals("0.35", limit.getMinimum());
 		assertNull(limit.check(new TestNode() {
@@ -197,18 +202,7 @@
 	}
 
 	@Test
-	public void testMin2() {
-		limit.setMinimum("0.35");
-		assertEquals("0.35", limit.getMinimum());
-		assertNull(limit.check(new TestNode() {
-			{
-				instructionCounter = CounterImpl.getInstance(64, 36);
-			}
-		}));
-	}
-
-	@Test
-	public void testMin3() {
+	public void check_should_fail_when_minimum_is_not_met() {
 		limit.setMinimum("0.3500");
 		assertEquals("0.3500", limit.getMinimum());
 		assertEquals(
@@ -221,7 +215,7 @@
 	}
 
 	@Test
-	public void testMin4() {
+	public void check_should_report_actual_ratio_rounded_down_when_minimum_is_not_met() {
 		limit.setMinimum("0.35");
 		assertEquals("0.35", limit.getMinimum());
 		assertEquals(
@@ -235,7 +229,7 @@
 	}
 
 	@Test
-	public void testMin5() {
+	public void check_should_report_counter_with_given_precision() {
 		limit.setMinimum("10000");
 		limit.setValue(CounterValue.MISSEDCOUNT.name());
 		assertEquals("10000", limit.getMinimum());
@@ -249,20 +243,25 @@
 	}
 
 	@Test
-	public void testMin6() {
-		limit.setMinimum("12345");
-		assertEquals("12345", limit.getMinimum());
+	public void check_should_fail_when_minimum_ratio_is_smaller_than_0() {
+		limit.setMinimum("-3");
+		assertEquals("-3", limit.getMinimum());
 		assertEquals(
-				"instructions covered ratio is 0, but expected minimum is 12345",
-				limit.check(new TestNode() {
-					{
-						instructionCounter = CounterImpl.getInstance(1, 999);
-					}
-				}));
+				"given minimum ratio is -3, but must be between 0.0 and 1.0",
+				limit.check(new TestNode()));
 	}
 
 	@Test
-	public void testMinPercent() {
+	public void check_should_fail_when_minimum_ratio_is_bigger_than_1() {
+		limit.setMinimum("80");
+		assertEquals("80", limit.getMinimum());
+		assertEquals(
+				"given minimum ratio is 80, but must be between 0.0 and 1.0",
+				limit.check(new TestNode()));
+	}
+
+	@Test
+	public void setMinimum_should_accept_percentage_string() {
 		limit.setMinimum("1.55%");
 		assertEquals("0.0155", limit.getMinimum());
 
@@ -277,14 +276,14 @@
 	}
 
 	@Test
-	public void testMax0() {
+	public void setMaximum_should_allow_null() {
 		limit.setMaximum("0");
 		limit.setMaximum((String) null);
 		assertNull(limit.getMaximum());
 	}
 
 	@Test
-	public void testMax1() {
+	public void check_should_pass_when_maximum_counter_is_fulfilled() {
 		limit.setMaximum("12345678");
 		limit.setValue(CounterValue.MISSEDCOUNT.name());
 		assertEquals("12345678", limit.getMaximum());
@@ -296,7 +295,7 @@
 	}
 
 	@Test
-	public void testMax2() {
+	public void check_should_pass_when_maximum_ratio_is_fulfilled() {
 		limit.setMaximum("0.999");
 		assertEquals("0.999", limit.getMaximum());
 		assertNull(limit.check(new TestNode() {
@@ -307,7 +306,7 @@
 	}
 
 	@Test
-	public void testMax3() {
+	public void check_should_fail_when_maximum_is_not_met() {
 		limit.setMaximum("0.999");
 		assertEquals("0.999", limit.getMaximum());
 		assertEquals(
@@ -320,7 +319,7 @@
 	}
 
 	@Test
-	public void testMax4() {
+	public void check_should_report_actual_ratio_rounded_up_when_maximum_is_not_met() {
 		limit.setMaximum("0.999");
 		assertEquals("0.999", limit.getMaximum());
 		assertEquals(
@@ -334,7 +333,25 @@
 	}
 
 	@Test
-	public void testMaxPercent() {
+	public void check_should_fail_when_maximum_ratio_is_smaller_than_0() {
+		limit.setMaximum("-3");
+		assertEquals("-3", limit.getMaximum());
+		assertEquals(
+				"given maximum ratio is -3, but must be between 0.0 and 1.0",
+				limit.check(new TestNode()));
+	}
+
+	@Test
+	public void check_should_fail_when_maximum_ratio_is_bigger_than_1() {
+		limit.setMaximum("80");
+		assertEquals("80", limit.getMaximum());
+		assertEquals(
+				"given maximum ratio is 80, but must be between 0.0 and 1.0",
+				limit.check(new TestNode()));
+	}
+
+	@Test
+	public void setMaximum_should_accept_percentage_string() {
 		limit.setMaximum("1.55%");
 		assertEquals("0.0155", limit.getMaximum());
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
index 076bfde..a8c53ed 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/RuleTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java b/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
index de4cd8a..fe354d2 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/check/RulesCheckerTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -50,8 +51,8 @@
 		limit.setMaximum("5");
 		checker.setRules(Arrays.asList(rule));
 		driver.sendGroup(checker.createVisitor(this));
-		assertEquals(
-				Arrays.asList("Rule violated for bundle bundle: instructions missed count is 10, but expected maximum is 5"),
+		assertEquals(Arrays.asList(
+				"Rule violated for bundle bundle: instructions missed count is 10, but expected maximum is 5"),
 				messages);
 	}
 
@@ -78,8 +79,8 @@
 				return null;
 			}
 
-			public String getMethodName(String vmclassname,
-					String vmmethodname, String vmdesc, String vmsignature) {
+			public String getMethodName(String vmclassname, String vmmethodname,
+					String vmdesc, String vmsignature) {
 				return null;
 			}
 
@@ -90,8 +91,8 @@
 		});
 
 		driver.sendGroup(checker.createVisitor(this));
-		assertEquals(
-				Arrays.asList("Rule violated for class MyClass: instructions missed count is 10, but expected maximum is 5"),
+		assertEquals(Arrays.asList(
+				"Rule violated for class MyClass: instructions missed count is 10, but expected maximum is 5"),
 				messages);
 	}
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
index 8b16200..5e14b23 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVFormatterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.csv;
 
@@ -116,8 +117,8 @@
 				return null;
 			}
 
-			public String getMethodName(String vmclassname,
-					String vmmethodname, String vmdesc, String vmsignature) {
+			public String getMethodName(String vmclassname, String vmmethodname,
+					String vmdesc, String vmsignature) {
 				return null;
 			}
 
@@ -136,8 +137,8 @@
 	}
 
 	private List<String> getLines(String encoding) throws IOException {
-		final BufferedReader reader = new BufferedReader(new InputStreamReader(
-				output.getContentsAsStream(), encoding));
+		final BufferedReader reader = new BufferedReader(
+				new InputStreamReader(output.getContentsAsStream(), encoding));
 		final List<String> lines = new ArrayList<String>();
 		String line;
 		while ((line = reader.readLine()) != null) {
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
index 4e7a147..08d47d9 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/CSVGroupHandlerTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -48,8 +49,7 @@
 		driver.sendBundle(handler);
 		final BufferedReader reader = getResultReader();
 		reader.readLine();
-		assertEquals(
-				"bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
+		assertEquals("bundle,org.jacoco.example,FooClass,10,15,1,2,0,3,1,2,0,1",
 				reader.readLine());
 		assertEquals("no more lines expected", null, reader.readLine());
 	}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
index e231be4..ac05a2a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/ClassRowWriterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.csv;
 
@@ -49,8 +50,8 @@
 				throw new AssertionError();
 			}
 
-			public String getMethodName(String vmclassname,
-					String vmmethodname, String vmdesc, String vmsignature) {
+			public String getMethodName(String vmclassname, String vmmethodname,
+					String vmdesc, String vmsignature) {
 				throw new AssertionError();
 			}
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java b/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
index a45f506..d09f33c 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/csv/DelimitedWriterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.report.csv;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
index a26c909..234f0fc 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/html/HTMLFormatterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.html;
 
@@ -134,8 +135,8 @@
 				return null;
 			}
 
-			public String getMethodName(String vmclassname,
-					String vmmethodname, String vmdesc, String vmsignature) {
+			public String getMethodName(String vmclassname, String vmmethodname,
+					String vmdesc, String vmsignature) {
 				return null;
 			}
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
index c0396d8..658002b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/NormalizedFileNamesTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
index 905fe64..7e88b23 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/ReportOutputFolderTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal;
 
@@ -86,7 +87,8 @@
 	public void testRelativeLinkInSibling1() throws IOException {
 		final ReportOutputFolder folder = root.subFolder("f1").subFolder("f2");
 		final ReportOutputFolder base = root.subFolder("g1").subFolder("g2");
-		assertEquals("../../f1/f2/test.html", folder.getLink(base, "test.html"));
+		assertEquals("../../f1/f2/test.html",
+				folder.getLink(base, "test.html"));
 	}
 
 	@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
index 89a04ec..d60c912 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLElementTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
index ae3a297..02ad3d7 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/HTMLSupport.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
index b80b5ac..243d939 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/LinkableStub.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java
index 716249c..d5c5f3c 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/BundlePageTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -11,6 +12,11 @@
  *******************************************************************************/
 package org.jacoco.report.internal.html.page;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collections;
+
 import org.jacoco.core.analysis.IBundleCoverage;
 import org.jacoco.core.analysis.IClassCoverage;
 import org.jacoco.core.analysis.IPackageCoverage;
@@ -24,11 +30,6 @@
 import org.junit.Test;
 import org.w3c.dom.Document;
 
-import java.util.Arrays;
-import java.util.Collections;
-
-import static org.junit.Assert.assertEquals;
-
 /**
  * Unit tests for {@link BundlePage}.
  */
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
index 732d1c0..1b3946f 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ClassPageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
index e9a030e..1d3e1ef 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/MethodItemTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -60,14 +61,16 @@
 
 	@Test
 	public void testGetLink() {
-		final MethodItem item = new MethodItem(node, "test()", new SourceLink());
+		final MethodItem item = new MethodItem(node, "test()",
+				new SourceLink());
 		assertEquals("../Source.java", item.getLink(null));
 	}
 
 	@Test
 	public void testGetLinkWithLine() {
 		node.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 15);
-		final MethodItem item = new MethodItem(node, "test()", new SourceLink());
+		final MethodItem item = new MethodItem(node, "test()",
+				new SourceLink());
 		assertEquals("../Source.java#L15", item.getLink(null));
 	}
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
index 65affac..f69e726 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/NodePageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
index 828f5f5..6a761f1 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackagePageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -116,12 +117,12 @@
 				support.findStr(doc, "/html/body/div[1]/span[1]/a"));
 		assertEquals("el_class", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[1]/a/@class"));
-		assertEquals("Foo1",
-				support.findStr(doc, "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
+		assertEquals("Foo1", support.findStr(doc,
+				"/html/body/table[1]/tbody/tr[1]/td[1]/a"));
 		assertEquals("el_class", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[2]/td[1]/a/@class"));
-		assertEquals("Foo2",
-				support.findStr(doc, "/html/body/table[1]/tbody/tr[2]/td[1]/a"));
+		assertEquals("Foo2", support.findStr(doc,
+				"/html/body/table[1]/tbody/tr[2]/td[1]/a"));
 
 		output.assertFile("index.source.html");
 	}
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
index 96db3a5..860475a 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PackageSourcePageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -51,15 +52,13 @@
 		super.setup();
 		SourceFileCoverageImpl src1 = new SourceFileCoverageImpl("Src1.java",
 				"org/jacoco/example");
-		src1.increment(CounterImpl.COUNTER_1_0,
-				CounterImpl.COUNTER_0_0, 1);
+		src1.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
 		SourceFileCoverageImpl src2 = new SourceFileCoverageImpl("Src2.java",
 				"org/jacoco/example");
-		src2.increment(CounterImpl.COUNTER_1_0,
-				CounterImpl.COUNTER_0_0, 1);
+		src2.increment(CounterImpl.COUNTER_1_0, CounterImpl.COUNTER_0_0, 1);
 		node = new PackageCoverageImpl("org/jacoco/example",
-				Collections.<IClassCoverage> emptyList(), Arrays.<ISourceFileCoverage>asList(src1,
-						src2));
+				Collections.<IClassCoverage> emptyList(),
+				Arrays.<ISourceFileCoverage> asList(src1, src2));
 		sourceLocator = new ISourceFileLocator() {
 
 			public int getTabWidth() {
@@ -105,8 +104,8 @@
 				support.findStr(doc, "/html/body/div[1]/span[1]/a"));
 		assertEquals("el_source", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[1]/a/@class"));
-		assertEquals("Src1.java",
-				support.findStr(doc, "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
+		assertEquals("Src1.java", support.findStr(doc,
+				"/html/body/table[1]/tbody/tr[1]/td[1]/a"));
 		assertEquals("el_source", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[2]/td[1]/span/@class"));
 		assertEquals("Src2.java", support.findStr(doc,
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
index 8a5574d..4c0e56d 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/PageTestBase.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
index 0f42bb4..7d2bef6 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/ReportPageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -38,7 +39,8 @@
 		private final String label;
 		private final String style;
 
-		protected TestReportPage(String label, String style, ReportPage parent) {
+		protected TestReportPage(String label, String style,
+				ReportPage parent) {
 			super(parent, rootFolder, ReportPageTest.this.context);
 			this.label = label;
 			this.style = style;
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
index 2380d57..613f8bc 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SessionsPageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -72,8 +73,8 @@
 		final SessionsPage page = new SessionsPage(noSessions, noExecutionData,
 				index, null, rootFolder, context);
 		page.render();
-		final Document doc = support.parse(output
-				.getFile("jacoco-sessions.html"));
+		final Document doc = support
+				.parse(output.getFile("jacoco-sessions.html"));
 		assertEquals("No session information available.",
 				support.findStr(doc, "/html/body/p[1]"));
 		assertEquals("No execution data available.",
@@ -89,8 +90,8 @@
 		final SessionsPage page = new SessionsPage(sessions, noExecutionData,
 				index, null, rootFolder, context);
 		page.render();
-		final Document doc = support.parse(output
-				.getFile("jacoco-sessions.html"));
+		final Document doc = support
+				.parse(output.getFile("jacoco-sessions.html"));
 		assertEquals("el_session", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[1]/span/@class"));
 		assertEquals("Session-A", support.findStr(doc,
@@ -130,14 +131,14 @@
 		final SessionsPage page = new SessionsPage(noSessions, data, index,
 				null, rootFolder, context);
 		page.render();
-		final Document doc = support.parse(output
-				.getFile("jacoco-sessions.html"));
+		final Document doc = support
+				.parse(output.getFile("jacoco-sessions.html"));
 		assertEquals("el_class", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[1]/a/@class"));
 		assertEquals("Foo.html", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[1]/a/@href"));
-		assertEquals("ClassA",
-				support.findStr(doc, "/html/body/table[1]/tbody/tr[1]/td[1]/a"));
+		assertEquals("ClassA", support.findStr(doc,
+				"/html/body/table[1]/tbody/tr[1]/td[1]/a"));
 		assertEquals("0000000000001002", support.findStr(doc,
 				"/html/body/table[1]/tbody/tr[1]/td[2]/code"));
 		assertEquals("ClassB",
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
index da43354..c1f6b4e 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceFilePageTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -34,9 +35,8 @@
 	@Override
 	public void setup() throws Exception {
 		super.setup();
-		sourceReader = new InputStreamReader(
-				new FileInputStream(
-						"./src/org/jacoco/report/internal/html/page/SourceFilePageTest.java"),
+		sourceReader = new InputStreamReader(new FileInputStream(
+				"./src/org/jacoco/report/internal/html/page/SourceFilePageTest.java"),
 				"UTF-8");
 	}
 
@@ -48,8 +48,8 @@
 				null, rootFolder, context);
 		page.render();
 
-		final Document result = support.parse(output
-				.getFile("SourceFilePageTest.java.html"));
+		final Document result = support
+				.parse(output.getFile("SourceFilePageTest.java.html"));
 
 		// additional style sheet
 		assertEquals("jacoco-resources/report.css", support.findStr(result,
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
index 3ef347d..5c271e1 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/page/SourceHighlighterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
index 1e61ceb..5e35530 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/ResourcesTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.resources;
 
@@ -74,13 +75,15 @@
 	@Test
 	public void testGetElementStyle() {
 		assertEquals("el_group", Resources.getElementStyle(ElementType.GROUP));
-		assertEquals("el_bundle", Resources.getElementStyle(ElementType.BUNDLE));
+		assertEquals("el_bundle",
+				Resources.getElementStyle(ElementType.BUNDLE));
 		assertEquals("el_package",
 				Resources.getElementStyle(ElementType.PACKAGE));
 		assertEquals("el_source",
 				Resources.getElementStyle(ElementType.SOURCEFILE));
 		assertEquals("el_class", Resources.getElementStyle(ElementType.CLASS));
-		assertEquals("el_method", Resources.getElementStyle(ElementType.METHOD));
+		assertEquals("el_method",
+				Resources.getElementStyle(ElementType.METHOD));
 	}
 
 }
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
index fdf5475..47b9665 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/resources/StylesTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.resources;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
index 8623eee..b638daa 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/BarColumnTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
@@ -171,8 +172,11 @@
 		col.item(td, i1, resources, root);
 		final Document doc = parseDoc();
 
-		assertEquals("123\u00a0456",
-				support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt"));
+		// Prior to integration of JDK-8221432 in JDK 13
+		// formatting of a below number was using non-breaking space,
+		// after - narrow non-breaking space:
+		assertTrue(support.findStr(doc, "/html/body/table/tr[1]/td/img[1]/@alt")
+				.matches("123[\u00A0\u202F]456"));
 	}
 
 	@Test
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
index 8311128..f0327fe 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/CounterColumnTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
index f13ef47..ea49321 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/LabelColumnTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
index 3028e00..589f04b 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/PercentageColumnTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
index 7ca4722..f2e5240 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/SortIndexTest.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
index eed6923..b17f6d2 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/table/TableTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/html/xhtml1-strict.dtd b/org.jacoco.report.test/src/org/jacoco/report/internal/html/xhtml1-strict.dtd
index 2927b9e..e48fbea 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/html/xhtml1-strict.dtd
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/html/xhtml1-strict.dtd
@@ -9,7 +9,7 @@
    For further information, see: http://www.w3.org/TR/xhtml1
 
    Copyright (c) 1998-2002 W3C (MIT, INRIA, Keio),
-   All Rights Reserved. 
+   All Rights Reserved.
 
    This DTD module is identified by the PUBLIC and SYSTEM identifiers:
 
@@ -263,7 +263,7 @@
        window title. Exactly one title is required per document.
     -->
 <!ELEMENT title (#PCDATA)>
-<!ATTLIST title 
+<!ATTLIST title
   %i18n;
   id          ID             #IMPLIED
   >
@@ -801,7 +801,7 @@
 
 <!--
  Content is %Flow; excluding a, form and form controls
---> 
+-->
 <!ELEMENT button %button.content;>  <!-- push button -->
 <!ATTLIST button
   %attrs;
@@ -834,7 +834,7 @@
 -->
 
 <!ENTITY % TRules "(none | groups | rows | cols | all)">
-  
+
 <!-- horizontal alignment attributes for cell contents
 
   char        alignment char, e.g. char=':'
@@ -975,4 +975,3 @@
   %cellhalign;
   %cellvalign;
   >
-
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
index ae6fc91..028188d 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/LocalEntityResolver.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
index 5ed161c..0705e44 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLElementTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
index 92f5c28..0ede8a8 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLGroupVisitorTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
index fbf4af4..49ce759 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/internal/xml/XMLSupport.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
diff --git a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
index 43157f6..09341a8 100644
--- a/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
+++ b/org.jacoco.report.test/src/org/jacoco/report/xml/XMLFormatterTest.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.xml;
 
@@ -191,8 +192,7 @@
 		assertPathMatches("1", "count(/report/package[@name='empty']/class)");
 		assertPathMatches("empty/Empty",
 				"/report/package[@name='empty']/class/@name");
-		assertPathMatches("0",
-				"count(report/package[@name='empty']/class/*)");
+		assertPathMatches("0", "count(report/package[@name='empty']/class/*)");
 
 		assertPathMatches("1",
 				"count(/report/package[@name='empty']/sourcefile)");
diff --git a/org.jacoco.report/about.html b/org.jacoco.report/about.html
index 4b8733b..3b21510 100644
--- a/org.jacoco.report/about.html
+++ b/org.jacoco.report/about.html
@@ -9,17 +9,17 @@
 <h2>About This Content</h2>
 
 <p>
-  @build.date@
+  ${build.date}
 </p>
 
 <h3>License</h3>
 
 <p>
-  All Content in this plug-in is made available by Mountainminds GmbH &amp; Co.
+  All Content in this distribution is made available by Mountainminds GmbH &amp; Co.
   KG, Munich. Unless otherwise indicated below, the Content is provided to you
-  under the terms and conditions of the Eclipse Public License Version 1.0
+  under the terms and conditions of the Eclipse Public License Version 2.0
   (&quot;EPL&quot;). A copy of the EPL is available at
-  <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+  <a href="https://www.eclipse.org/legal/epl-2.0/">https://www.eclipse.org/legal/epl-2.0/</a>.
   For purposes of the EPL, "Program" will mean the Content.
 </p>
 
@@ -28,190 +28,7 @@
   out below.
 </p>
 
-<h4>Google Code Prettify, Version 2010/07/21</h4>
-
-<p>
-  This plug-in contains
-  <a href="http://code.google.com/p/google-code-prettify/">Google Code Prettify</a>
-  which is subject to the terms and conditions of the following license: 
-</p>
-
-<pre>
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-</pre>
+${googlecodeprettify.license}
 
 </body>
-</html>
\ No newline at end of file
+</html>
diff --git a/org.jacoco.report/pom.xml b/org.jacoco.report/pom.xml
index 9b83452..463adf2 100644
--- a/org.jacoco.report/pom.xml
+++ b/org.jacoco.report/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -15,7 +16,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/org.jacoco.report/src/org/jacoco/report/DirectorySourceFileLocator.java b/org.jacoco.report/src/org/jacoco/report/DirectorySourceFileLocator.java
index 79881a7..dec20f4 100644
--- a/org.jacoco.report/src/org/jacoco/report/DirectorySourceFileLocator.java
+++ b/org.jacoco.report/src/org/jacoco/report/DirectorySourceFileLocator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -27,7 +28,7 @@
 	/**
 	 * Creates a new locator that searches for source files in the given
 	 * directory.
-	 * 
+	 *
 	 * @param directory
 	 *            directory to search for source file
 	 * @param encoding
@@ -35,7 +36,6 @@
 	 *            default encoding
 	 * @param tabWidth
 	 *            tab width in source files as number of blanks
-	 * 
 	 */
 	public DirectorySourceFileLocator(final File directory,
 			final String encoding, final int tabWidth) {
@@ -44,9 +44,10 @@
 	}
 
 	@Override
-	protected InputStream getSourceStream(final String path) throws IOException {
+	protected InputStream getSourceStream(final String path)
+			throws IOException {
 		final File file = new File(directory, path);
-		if (file.exists()) {
+		if (file.isFile()) {
 			return new FileInputStream(file);
 		} else {
 			return null;
diff --git a/org.jacoco.report/src/org/jacoco/report/FileMultiReportOutput.java b/org.jacoco.report/src/org/jacoco/report/FileMultiReportOutput.java
index 436db74..c1d082a 100644
--- a/org.jacoco.report/src/org/jacoco/report/FileMultiReportOutput.java
+++ b/org.jacoco.report/src/org/jacoco/report/FileMultiReportOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * Creates a new instance for document output in the given base directory.
-	 * 
+	 *
 	 * @param basedir
 	 *            base directory
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/ILanguageNames.java b/org.jacoco.report/src/org/jacoco/report/ILanguageNames.java
index 68a51b5..f083752 100644
--- a/org.jacoco.report/src/org/jacoco/report/ILanguageNames.java
+++ b/org.jacoco.report/src/org/jacoco/report/ILanguageNames.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -18,7 +19,7 @@
 
 	/**
 	 * Calculates the language specific name of a package.
-	 * 
+	 *
 	 * @param vmname
 	 *            vm name of a package
 	 * @return language specific notation for the package
@@ -27,7 +28,7 @@
 
 	/**
 	 * Calculates the language specific name of a class.
-	 * 
+	 *
 	 * @param vmname
 	 *            vm name of a class
 	 * @param vmsignature
@@ -44,7 +45,7 @@
 
 	/**
 	 * Calculates the language specific qualified name of a class.
-	 * 
+	 *
 	 * @param vmname
 	 *            vm name of a class
 	 * @return language specific qualified notation of the class
@@ -53,7 +54,7 @@
 
 	/**
 	 * Calculates the language specific name of a method.
-	 * 
+	 *
 	 * @param vmclassname
 	 *            vm name of a containing class
 	 * @param vmmethodname
@@ -69,7 +70,7 @@
 
 	/**
 	 * Calculates the language specific fully qualified name of a method.
-	 * 
+	 *
 	 * @param vmclassname
 	 *            vm name of a containing class
 	 * @param vmmethodname
diff --git a/org.jacoco.report/src/org/jacoco/report/IMultiReportOutput.java b/org.jacoco.report/src/org/jacoco/report/IMultiReportOutput.java
index e40d36b..4d743a6 100644
--- a/org.jacoco.report/src/org/jacoco/report/IMultiReportOutput.java
+++ b/org.jacoco.report/src/org/jacoco/report/IMultiReportOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -22,7 +23,7 @@
 	/**
 	 * Creates a file at the given local path. The returned {@link OutputStream}
 	 * has to be closed before the next document is created.
-	 * 
+	 *
 	 * @param path
 	 *            local path to the new document
 	 * @return output for the content
@@ -33,7 +34,7 @@
 
 	/**
 	 * Closes the underlying resource container.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if closing fails
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/IReportGroupVisitor.java b/org.jacoco.report/src/org/jacoco/report/IReportGroupVisitor.java
index 96867e0..eb78a0e 100644
--- a/org.jacoco.report/src/org/jacoco/report/IReportGroupVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/IReportGroupVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -17,12 +18,13 @@
 
 /**
  * Output-Interface for hierarchical report structures. To allow sequential
- * processing and save memory the group structure has to be traversed in a
- * "deep first" fashion. The interface is implemented by the report formatters
- * and can be used to emit coverage report structures.
- * 
- * The following constraints apply in using {@link IReportGroupVisitor} instances:
- * 
+ * processing and save memory the group structure has to be traversed in a "deep
+ * first" fashion. The interface is implemented by the report formatters and can
+ * be used to emit coverage report structures.
+ *
+ * The following constraints apply in using {@link IReportGroupVisitor}
+ * instances:
+ *
  * <ul>
  * <li>A visitor instance can be used to either submit bundles (
  * {@link #visitBundle(IBundleCoverage, ISourceFileLocator)}) or groups
@@ -36,7 +38,7 @@
 
 	/**
 	 * Called to add a bundle to the the report.
-	 * 
+	 *
 	 * @param bundle
 	 *            a bundle to include in the report
 	 * @param locator
@@ -52,7 +54,7 @@
 	 * {@link IReportGroupVisitor} instance can be used to add nested bundles or
 	 * groups. The content of the group has to be completed before this or any
 	 * parent visitor can be used again ("deep first").
-	 * 
+	 *
 	 * @param name
 	 *            name of the group
 	 * @return visitor for the group's content
diff --git a/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java b/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
index 1cf4aed..c6b9815 100644
--- a/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/IReportVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -20,15 +21,15 @@
 
 /**
  * Interface for all implementations to retrieve structured report data. Unlike
- * nested {@link IReportGroupVisitor} instances the root visitor accepts exactly one
- * bundle or group.
+ * nested {@link IReportGroupVisitor} instances the root visitor accepts exactly
+ * one bundle or group.
  */
 public interface IReportVisitor extends IReportGroupVisitor {
 
 	/**
 	 * Initializes the report with global information. This method has to be
 	 * called before any other method can be called.
-	 * 
+	 *
 	 * @param sessionInfos
 	 *            list of chronological ordered {@link SessionInfo} objects
 	 *            where execution data has been collected for this report.
@@ -45,7 +46,7 @@
 
 	/**
 	 * Has to be called after all report data has been emitted.
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of IO problems with the report writer
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/ISourceFileLocator.java b/org.jacoco.report/src/org/jacoco/report/ISourceFileLocator.java
index e32cbbf..12c200b 100644
--- a/org.jacoco.report/src/org/jacoco/report/ISourceFileLocator.java
+++ b/org.jacoco.report/src/org/jacoco/report/ISourceFileLocator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -22,7 +23,7 @@
 	/**
 	 * Tries to locate the given source file and opens a reader with the
 	 * appropriate encoding.
-	 * 
+	 *
 	 * @param packageName
 	 *            VM name of the package
 	 * @param fileName
@@ -36,7 +37,7 @@
 
 	/**
 	 * Returns number of blank characters that represent a tab in source code.
-	 * 
+	 *
 	 * @return tab width as number of blanks
 	 */
 	int getTabWidth();
diff --git a/org.jacoco.report/src/org/jacoco/report/InputStreamSourceFileLocator.java b/org.jacoco.report/src/org/jacoco/report/InputStreamSourceFileLocator.java
index 0d1b381..ab92157 100644
--- a/org.jacoco.report/src/org/jacoco/report/InputStreamSourceFileLocator.java
+++ b/org.jacoco.report/src/org/jacoco/report/InputStreamSourceFileLocator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -20,21 +21,21 @@
  * Abstract base class for {@link ISourceFileLocator} locator implementations
  * based on {@link InputStream}s. It handles the encoding and tab width.
  */
-public abstract class InputStreamSourceFileLocator implements
-		ISourceFileLocator {
+public abstract class InputStreamSourceFileLocator
+		implements ISourceFileLocator {
 
 	private final String encoding;
 	private final int tabWidth;
 
 	/**
 	 * Creates a new locator with the given specification.
-	 * 
+	 *
 	 * @param encoding
 	 *            encoding of the source files, <code>null</code> for platform
 	 *            default encoding
 	 * @param tabWidth
 	 *            tab width in source files as number of blanks
-	 * 
+	 *
 	 */
 	protected InputStreamSourceFileLocator(final String encoding,
 			final int tabWidth) {
@@ -68,7 +69,7 @@
 
 	/**
 	 * Tries to locate the given source file and opens its binary content.
-	 * 
+	 *
 	 * @param path
 	 *            local path to the resource
 	 * @return stream if the file could be located, <code>null</code> otherwise
diff --git a/org.jacoco.report/src/org/jacoco/report/JavaNames.java b/org.jacoco.report/src/org/jacoco/report/JavaNames.java
index 1ef1bae..2c3a94e 100644
--- a/org.jacoco.report/src/org/jacoco/report/JavaNames.java
+++ b/org.jacoco.report/src/org/jacoco/report/JavaNames.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
diff --git a/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java b/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
index f4fefa8..bf67921 100644
--- a/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/MultiReportVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -24,14 +25,14 @@
  * A report visitor that is composed from multiple other visitors. This can be
  * used to create more than one report format in one run.
  */
-public class MultiReportVisitor extends MultiGroupVisitor implements
-		IReportVisitor {
+public class MultiReportVisitor extends MultiGroupVisitor
+		implements IReportVisitor {
 
 	private final List<IReportVisitor> visitors;
 
 	/**
 	 * New visitor delegating to all given visitors.
-	 * 
+	 *
 	 * @param visitors
 	 *            visitors to delegate to
 	 */
@@ -72,7 +73,8 @@
 		}
 	}
 
-	public IReportGroupVisitor visitGroup(final String name) throws IOException {
+	public IReportGroupVisitor visitGroup(final String name)
+			throws IOException {
 		final List<IReportGroupVisitor> children = new ArrayList<IReportGroupVisitor>();
 		for (final IReportGroupVisitor v : visitors) {
 			children.add(v.visitGroup(name));
diff --git a/org.jacoco.report/src/org/jacoco/report/MultiSourceFileLocator.java b/org.jacoco.report/src/org/jacoco/report/MultiSourceFileLocator.java
index 90677d5..3b6d331 100644
--- a/org.jacoco.report/src/org/jacoco/report/MultiSourceFileLocator.java
+++ b/org.jacoco.report/src/org/jacoco/report/MultiSourceFileLocator.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * Creates a new empty locator.
-	 * 
+	 *
 	 * @param tabWidth
 	 *            tab width in source files as number of blanks used for all
 	 *            source files
@@ -42,7 +43,7 @@
 	/**
 	 * Adds the given locator. Locators are queried in the sequence they have
 	 * been added.
-	 * 
+	 *
 	 * @param locator
 	 *            Additional locator to query
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/ZipMultiReportOutput.java b/org.jacoco.report/src/org/jacoco/report/ZipMultiReportOutput.java
index 8138cee..0dc6031 100644
--- a/org.jacoco.report/src/org/jacoco/report/ZipMultiReportOutput.java
+++ b/org.jacoco.report/src/org/jacoco/report/ZipMultiReportOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report;
 
@@ -28,7 +29,7 @@
 
 	/**
 	 * Creates a new instance based on the given {@link ZipOutputStream}.
-	 * 
+	 *
 	 * @param zip
 	 *            stream to write file entries to
 	 */
@@ -38,7 +39,7 @@
 
 	/**
 	 * Creates a new instance based on the given {@link OutputStream}.
-	 * 
+	 *
 	 * @param out
 	 *            stream to write file entries to
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/check/BundleChecker.java b/org.jacoco.report/src/org/jacoco/report/check/BundleChecker.java
index c6cd888..aa84217 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/BundleChecker.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/BundleChecker.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -96,7 +97,8 @@
 			}
 		}
 		if (traverseSourceFiles) {
-			for (final ISourceFileCoverage s : packageCoverage.getSourceFiles()) {
+			for (final ISourceFileCoverage s : packageCoverage
+					.getSourceFiles()) {
 				check(s);
 			}
 		}
@@ -138,12 +140,12 @@
 	}
 
 	private void checkLimit(final ICoverageNode node, final String elementtype,
-			final String typename, final Rule rule, final Limit limit) {
+			final String elementname, final Rule rule, final Limit limit) {
 		final String message = limit.check(node);
 		if (message != null) {
-			output.onViolation(node, rule, limit, String.format(
-					"Rule violated for %s %s: %s", elementtype, typename,
-					message));
+			output.onViolation(node, rule, limit,
+					String.format("Rule violated for %s %s: %s", elementtype,
+							elementname, message));
 		}
 	}
 
diff --git a/org.jacoco.report/src/org/jacoco/report/check/IViolationsOutput.java b/org.jacoco.report/src/org/jacoco/report/check/IViolationsOutput.java
index 36c96bb..6b95cdd 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/IViolationsOutput.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/IViolationsOutput.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -15,13 +16,13 @@
 
 /**
  * Call-back interface which is used to report rule violations to.
- * 
+ *
  */
 public interface IViolationsOutput {
 
 	/**
 	 * Called for every rule violation.
-	 * 
+	 *
 	 * @param node
 	 *            node which violates a rule
 	 * @param rule
@@ -31,6 +32,7 @@
 	 * @param message
 	 *            readable message describing this violation
 	 */
-	void onViolation(ICoverageNode node, Rule rule, Limit limit, String message);
+	void onViolation(ICoverageNode node, Rule rule, Limit limit,
+			String message);
 
 }
diff --git a/org.jacoco.report/src/org/jacoco/report/check/Limit.java b/org.jacoco.report/src/org/jacoco/report/check/Limit.java
index 5a24b45..9f75574 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/Limit.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/Limit.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -82,8 +83,8 @@
 	 *
 	 * @param entity
 	 *            counter entity to check
-	 * TODO: use CounterEntity directly once Maven 3 is required.
 	 */
+	// TODO: use CounterEntity directly once Maven 3 is required.
 	public void setCounter(final String entity) {
 		this.entity = CounterEntity.valueOf(entity);
 	}
@@ -100,8 +101,8 @@
 	 *
 	 * @param value
 	 *            value to check
-	 * TODO: use CounterValue directly once Maven 3 is required.
 	 */
+	// TODO: use CounterValue directly once Maven 3 is required.
 	public void setValue(final String value) {
 		this.value = CounterValue.valueOf(value);
 	}
@@ -115,10 +116,12 @@
 	}
 
 	/**
-	 * Sets allowed maximum value as decimal string or percent representation.
-	 * The given precision is also considered in error messages. Coverage ratios
-	 * are given in the range from 0.0 to 1.0.
-	 * 
+	 * Sets the expected minimum value. If the minimum 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.
+	 *
 	 * @param minimum
 	 *            allowed minimum or <code>null</code>, if no minimum should be
 	 *            checked
@@ -136,10 +139,12 @@
 	}
 
 	/**
-	 * Sets allowed maximum value as decimal string or percent representation.
-	 * The given precision is also considered in error messages. Coverage ratios
-	 * are given in the range from 0.0 to 1.0.
-	 * 
+	 * Sets the expected maximum value. If the maximum 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.
+	 *
 	 * @param maximum
 	 *            allowed maximum or <code>null</code>, if no maximum should be
 	 *            checked
@@ -152,10 +157,11 @@
 		if (value == null) {
 			return null;
 		}
-		
+
 		final String trimmedValue = value.trim();
 		if (trimmedValue.endsWith("%")) {
-			final String percent = trimmedValue.substring(0, trimmedValue.length() - 1);
+			final String percent = trimmedValue.substring(0,
+					trimmedValue.length() - 1);
 			return new BigDecimal(percent).movePointLeft(2);
 		}
 
@@ -163,6 +169,10 @@
 	}
 
 	String check(final ICoverageNode node) {
+		final String msg = checkRatioLimit();
+		if (msg != null) {
+			return msg;
+		}
 		final double d = node.getCounter(entity).getValue(value);
 		if (Double.isNaN(d)) {
 			return null;
@@ -185,4 +195,29 @@
 				rounded.toPlainString(), minmax, ref.toPlainString());
 	}
 
+	private String checkRatioLimit() {
+		if (CounterValue.MISSEDRATIO.equals(value)
+				|| CounterValue.COVEREDRATIO.equals(value)) {
+			final String minmsg = checkRatioLimit("minimum", minimum);
+			if (minmsg != null) {
+				return minmsg;
+			}
+			final String maxmsg = checkRatioLimit("maximum", maximum);
+			if (maxmsg != null) {
+				return maxmsg;
+			}
+		}
+		return null;
+	}
+
+	private String checkRatioLimit(final String minmax, final BigDecimal v) {
+		if (v != null && (v.compareTo(BigDecimal.ZERO) < 0
+				|| v.compareTo(BigDecimal.ONE) > 0)) {
+			return String.format(
+					"given %s ratio is %s, but must be between 0.0 and 1.0",
+					minmax, v);
+		}
+		return null;
+	}
+
 }
diff --git a/org.jacoco.report/src/org/jacoco/report/check/Rule.java b/org.jacoco.report/src/org/jacoco/report/check/Rule.java
index b247285..99964c2 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/Rule.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/Rule.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -80,7 +81,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param excludes
 	 *            excludes patterns
 	 */
@@ -106,7 +107,7 @@
 
 	/**
 	 * Creates and adds a new {@link Limit}.
-	 * 
+	 *
 	 * @return creates {@link Limit}
 	 */
 	public Limit createLimit() {
diff --git a/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java b/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
index f743560..59a8591 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/RulesChecker.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.check;
 
@@ -44,7 +45,7 @@
 
 	/**
 	 * Sets the rules to check by this formatter.
-	 * 
+	 *
 	 * @param rules
 	 *            rules to check
 	 */
@@ -55,7 +56,7 @@
 	/**
 	 * Sets the implementation for language name display for message formatting.
 	 * Java language names are defined by default.
-	 * 
+	 *
 	 * @param languageNames
 	 *            converter for language specific names
 	 */
@@ -65,7 +66,7 @@
 
 	/**
 	 * Creates a new visitor to process the configured checks.
-	 * 
+	 *
 	 * @param output
 	 *            call-back to report violations to
 	 * @return visitor to emit the report data to
diff --git a/org.jacoco.report/src/org/jacoco/report/check/package-info.java b/org.jacoco.report/src/org/jacoco/report/check/package-info.java
index d3bee1e..735adb2 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java b/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
index 42939da..7beaac0 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/CSVFormatter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.report.csv;
 
@@ -36,7 +37,7 @@
 	/**
 	 * Sets the implementation for language name display. Java language names
 	 * are defined by default.
-	 * 
+	 *
 	 * @param languageNames
 	 *            converter for language specific names
 	 */
@@ -46,7 +47,7 @@
 
 	/**
 	 * Returns the language names call-back used in this report.
-	 * 
+	 *
 	 * @return language names
 	 */
 	public ILanguageNames getLanguageNames() {
@@ -55,7 +56,7 @@
 
 	/**
 	 * Sets the encoding used for generated CSV document. Default is UTF-8.
-	 * 
+	 *
 	 * @param outputEncoding
 	 *            CSV output encoding
 	 */
@@ -65,7 +66,7 @@
 
 	/**
 	 * Creates a new visitor to write a report to the given stream.
-	 * 
+	 *
 	 * @param output
 	 *            output stream to write the report to
 	 * @return visitor to emit the report data to
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/CSVGroupHandler.java b/org.jacoco.report/src/org/jacoco/report/csv/CSVGroupHandler.java
index 594feb4..99cd424 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/CSVGroupHandler.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/CSVGroupHandler.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- * 
+ *
  *******************************************************************************/
 package org.jacoco.report.csv;
 
@@ -32,7 +33,8 @@
 		this(writer, null);
 	}
 
-	private CSVGroupHandler(final ClassRowWriter writer, final String groupName) {
+	private CSVGroupHandler(final ClassRowWriter writer,
+			final String groupName) {
 		this.writer = writer;
 		this.groupName = groupName;
 	}
@@ -50,7 +52,8 @@
 		}
 	}
 
-	public IReportGroupVisitor visitGroup(final String name) throws IOException {
+	public IReportGroupVisitor visitGroup(final String name)
+			throws IOException {
 		return new CSVGroupHandler(writer, appendName(name));
 	}
 
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/ClassRowWriter.java b/org.jacoco.report/src/org/jacoco/report/csv/ClassRowWriter.java
index ef9a05c..223e312 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/ClassRowWriter.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/ClassRowWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- * 
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- * 
+ *
  *******************************************************************************/
 package org.jacoco.report.csv;
 
@@ -25,8 +26,8 @@
 class ClassRowWriter {
 
 	private static final CounterEntity[] COUNTERS = { CounterEntity.INSTRUCTION,
-			CounterEntity.BRANCH, CounterEntity.LINE,
-			CounterEntity.COMPLEXITY, CounterEntity.METHOD };
+			CounterEntity.BRANCH, CounterEntity.LINE, CounterEntity.COMPLEXITY,
+			CounterEntity.METHOD };
 
 	private final DelimitedWriter writer;
 
@@ -35,7 +36,7 @@
 	/**
 	 * Creates a new row writer that writes class information to the given CSV
 	 * writer.
-	 * 
+	 *
 	 * @param writer
 	 *            writer for csv output
 	 * @param languageNames
@@ -61,7 +62,7 @@
 
 	/**
 	 * Writes the class summary information as a row.
-	 * 
+	 *
 	 * @param groupName
 	 *            name of the group
 	 * @param packageName
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/DelimitedWriter.java b/org.jacoco.report/src/org/jacoco/report/csv/DelimitedWriter.java
index deadeec..3d3152a 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/DelimitedWriter.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/DelimitedWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.report.csv;
 
@@ -18,7 +19,7 @@
  * Helper class for writing out CSV or tab delimited files.
  * <p>
  * <strong>Example Usage:</strong>
- * 
+ *
  * <pre>
  * delimitedWriter.writeFields(&quot;header1&quot;, &quot;header2&quot;, ...);
  * for each line to be written {
@@ -28,7 +29,7 @@
  * }
  * delimitedWriter.close();
  * </pre>
- * 
+ *
  * </p>
  */
 class DelimitedWriter {
@@ -43,7 +44,7 @@
 
 	/**
 	 * Creates a new Delimited writer using the default delimiter
-	 * 
+	 *
 	 * @param delegate
 	 *            Writer to delegate all writes to
 	 */
@@ -53,7 +54,7 @@
 
 	/**
 	 * Creates a new Delimited writer using the default delimiter
-	 * 
+	 *
 	 * @param delegate
 	 *            Writer to delegate all writes to
 	 * @param delimiter
@@ -67,7 +68,7 @@
 	/**
 	 * Write multiple fields at once. Values will be auto escaped and quoted as
 	 * needed. Each value will be separated using the current delimiter
-	 * 
+	 *
 	 * @param fields
 	 *            Values to write
 	 * @throws IOException
@@ -83,7 +84,7 @@
 	 * Write a single value. Values will be auto escaped and quoted as needed.
 	 * If this is not the first field of the current line the value will be
 	 * prepended with the current delimiter
-	 * 
+	 *
 	 * @param field
 	 *            Value to write
 	 * @throws IOException
@@ -99,7 +100,7 @@
 
 	/**
 	 * Write a single integer value.
-	 * 
+	 *
 	 * @param value
 	 *            Value to write
 	 * @throws IOException
@@ -111,7 +112,7 @@
 
 	/**
 	 * Write muliple integer values
-	 * 
+	 *
 	 * @param values
 	 *            values to write
 	 * @throws IOException
@@ -126,7 +127,7 @@
 	/**
 	 * Output a new line and advance the writer to the next line. The line
 	 * delimiter is the default for the platform.
-	 * 
+	 *
 	 * @throws IOException
 	 *             Error writing to the underlying writer object
 	 */
@@ -138,7 +139,7 @@
 	/**
 	 * Close the underlying writer object. Once closed all write operations will
 	 * fail
-	 * 
+	 *
 	 * @throws IOException
 	 *             Error closing the underlying writer object
 	 */
@@ -150,7 +151,7 @@
 	 * Escapes any occurrences of the quote character in value by replacing it
 	 * with a double quote. Also Quotes the value if a quote or delimiter value
 	 * is found.
-	 * 
+	 *
 	 * @param value
 	 *            String that needs escaping
 	 * @return New string with all values escaped
diff --git a/org.jacoco.report/src/org/jacoco/report/csv/package-info.java b/org.jacoco.report/src/org/jacoco/report/csv/package-info.java
index e6194bc..81b96c9 100644
--- a/org.jacoco.report/src/org/jacoco/report/csv/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/csv/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java b/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
index ce8cd2d..bcc03ad 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/HTMLFormatter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.html;
 
@@ -73,7 +74,7 @@
 	/**
 	 * Sets the implementation for language name display. Java language names
 	 * are defined by default.
-	 * 
+	 *
 	 * @param languageNames
 	 *            converter for language specific names
 	 */
@@ -84,7 +85,7 @@
 	/**
 	 * Sets the locale used for report rendering. The current default locale is
 	 * used by default.
-	 * 
+	 *
 	 * @param locale
 	 *            locale used for report rendering
 	 */
@@ -94,7 +95,7 @@
 
 	/**
 	 * Sets the optional text that should be included in every footer page.
-	 * 
+	 *
 	 * @param footerText
 	 *            footer text
 	 */
@@ -104,7 +105,7 @@
 
 	/**
 	 * Sets the encoding used for generated HTML pages. Default is UTF-8.
-	 * 
+	 *
 	 * @param outputEncoding
 	 *            HTML output encoding
 	 */
@@ -132,14 +133,14 @@
 	private Table createTable() {
 		final Table t = new Table();
 		t.add("Element", null, new LabelColumn(), false);
-		t.add("Missed Instructions", Styles.BAR, new BarColumn(CounterEntity.INSTRUCTION,
-				locale), true);
+		t.add("Missed Instructions", Styles.BAR,
+				new BarColumn(CounterEntity.INSTRUCTION, locale), true);
 		t.add("Cov.", Styles.CTR2,
 				new PercentageColumn(CounterEntity.INSTRUCTION, locale), false);
-		t.add("Missed Branches", Styles.BAR, new BarColumn(CounterEntity.BRANCH, locale),
-				false);
-		t.add("Cov.", Styles.CTR2, new PercentageColumn(CounterEntity.BRANCH, locale),
-				false);
+		t.add("Missed Branches", Styles.BAR,
+				new BarColumn(CounterEntity.BRANCH, locale), false);
+		t.add("Cov.", Styles.CTR2,
+				new PercentageColumn(CounterEntity.BRANCH, locale), false);
 		addMissedTotalColumns(t, "Cxty", CounterEntity.COMPLEXITY);
 		addMissedTotalColumns(t, "Lines", CounterEntity.LINE);
 		addMissedTotalColumns(t, "Methods", CounterEntity.METHOD);
@@ -177,7 +178,7 @@
 
 	/**
 	 * Creates a new visitor to write a report to the given output.
-	 * 
+	 *
 	 * @param output
 	 *            output to write the report to
 	 * @return visitor to emit the report data to
diff --git a/org.jacoco.report/src/org/jacoco/report/html/package-info.java b/org.jacoco.report/src/org/jacoco/report/html/package-info.java
index 9e0014e..b5be399 100644
--- a/org.jacoco.report/src/org/jacoco/report/html/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/html/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/AbstractGroupVisitor.java b/org.jacoco.report/src/org/jacoco/report/internal/AbstractGroupVisitor.java
index 63da569..a408025 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/AbstractGroupVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/AbstractGroupVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal;
 
@@ -32,7 +33,7 @@
 
 	/**
 	 * Creates a new group with the given name.
-	 * 
+	 *
 	 * @param name
 	 *            name for the coverage node created internally
 	 */
@@ -49,7 +50,7 @@
 
 	/**
 	 * Called to handle the given bundle in a specific way.
-	 * 
+	 *
 	 * @param bundle
 	 *            analyzed bundle
 	 * @param locator
@@ -69,7 +70,7 @@
 
 	/**
 	 * Called to handle a group with the given name in a specific way.
-	 * 
+	 *
 	 * @param name
 	 *            name of the group
 	 * @return created child group
@@ -81,7 +82,7 @@
 
 	/**
 	 * Must be called at the end of every group.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the report can't be written
 	 */
@@ -92,7 +93,7 @@
 
 	/**
 	 * Called to handle the end of this group in a specific way.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the report can't be written
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/NormalizedFileNames.java b/org.jacoco.report/src/org/jacoco/report/internal/NormalizedFileNames.java
index 65eba09..fa3a6cc 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/NormalizedFileNames.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/NormalizedFileNames.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal;
 
@@ -21,7 +22,7 @@
 /**
  * Internal utility to create normalized file names from string ids. The file
  * names generated by an instance of this class have the following properties:
- * 
+ *
  * <ul>
  * <li>The same input id is mapped to the same file name.</li>
  * <li>Different ids are mapped to different file names.</li>
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/ReportOutputFolder.java b/org.jacoco.report/src/org/jacoco/report/internal/ReportOutputFolder.java
index a0f0558..4e4ee71 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/ReportOutputFolder.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/ReportOutputFolder.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal;
 
@@ -37,7 +38,7 @@
 
 	/**
 	 * Creates a new root folder for the given output.
-	 * 
+	 *
 	 * @param output
 	 *            output for generated files
 	 */
@@ -47,7 +48,7 @@
 
 	/**
 	 * Creates a new root folder for the given output.
-	 * 
+	 *
 	 * @param output
 	 *            output for generated files
 	 */
@@ -61,7 +62,7 @@
 
 	/**
 	 * Creates a sub-folder with the given name.
-	 * 
+	 *
 	 * @param name
 	 *            name of the sub-folder
 	 * @return handle for output into the sub-folder
@@ -72,15 +73,15 @@
 		if (folder != null) {
 			return folder;
 		}
-		folder = new ReportOutputFolder(output, this, path + normalizedName
-				+ "/");
+		folder = new ReportOutputFolder(output, this,
+				path + normalizedName + "/");
 		subFolders.put(normalizedName, folder);
 		return folder;
 	}
 
 	/**
 	 * Creates a new file in this folder with the given local name.
-	 * 
+	 *
 	 * @param name
 	 *            name of the sub-folder
 	 * @return handle for output into the sub-folder
@@ -93,7 +94,7 @@
 
 	/**
 	 * Returns a link relative to a given base to a resource within this folder.
-	 * 
+	 *
 	 * @param base
 	 *            base to create the relative link from
 	 * @param name
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLElement.java b/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLElement.java
index 616b318..4f042b2 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLElement.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLElement.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * Creates a <code>html</code> root element of a XHTML document.
-	 * 
+	 *
 	 * @param encoding
 	 *            character encoding used for output
 	 * @param output
@@ -59,7 +60,7 @@
 
 	/**
 	 * Creates a 'head' element.
-	 * 
+	 *
 	 * @return 'head' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -70,7 +71,7 @@
 
 	/**
 	 * Creates a 'body' element.
-	 * 
+	 *
 	 * @return 'body' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -81,7 +82,7 @@
 
 	/**
 	 * Creates a 'meta' element.
-	 * 
+	 *
 	 * @param httpequivattr
 	 *            value of the http-equiv attribute
 	 * @param contentattr
@@ -100,7 +101,7 @@
 
 	/**
 	 * Creates a 'link' element.
-	 * 
+	 *
 	 * @param relattr
 	 *            value of the rel attribute
 	 * @param hrefattr
@@ -122,7 +123,7 @@
 
 	/**
 	 * Creates a 'title' element.
-	 * 
+	 *
 	 * @return 'title' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -133,7 +134,7 @@
 
 	/**
 	 * Creates a 'h1' element.
-	 * 
+	 *
 	 * @return 'h1' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -144,7 +145,7 @@
 
 	/**
 	 * Creates a 'p' element.
-	 * 
+	 *
 	 * @return 'p' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -155,7 +156,7 @@
 
 	/**
 	 * Creates a 'span' element.
-	 * 
+	 *
 	 * @return 'span' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -166,7 +167,7 @@
 
 	/**
 	 * Creates a 'span' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @return 'span' element
@@ -181,7 +182,7 @@
 
 	/**
 	 * Creates a 'span' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @param idattr
@@ -199,7 +200,7 @@
 
 	/**
 	 * Creates a 'div' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @return 'div' element
@@ -214,7 +215,7 @@
 
 	/**
 	 * Creates a 'code' element.
-	 * 
+	 *
 	 * @return 'code' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -225,7 +226,7 @@
 
 	/**
 	 * Creates a 'pre' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @return 'pre' element
@@ -240,7 +241,7 @@
 
 	/**
 	 * Creates a 'a' element.
-	 * 
+	 *
 	 * @param hrefattr
 	 *            value of the href attribute
 	 * @return 'a' element
@@ -255,7 +256,7 @@
 
 	/**
 	 * Creates a 'a' element.
-	 * 
+	 *
 	 * @param hrefattr
 	 *            value of the href attribute
 	 * @param classattr
@@ -273,7 +274,7 @@
 
 	/**
 	 * Creates a link to the given {@link ILinkable}.
-	 * 
+	 *
 	 * @param linkable
 	 *            object to link to
 	 * @param base
@@ -297,7 +298,7 @@
 
 	/**
 	 * Creates a 'table' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @return 'table' element
@@ -313,7 +314,7 @@
 
 	/**
 	 * Creates a 'thead' element.
-	 * 
+	 *
 	 * @return 'thead' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -324,7 +325,7 @@
 
 	/**
 	 * Creates a 'tfoot' element.
-	 * 
+	 *
 	 * @return 'tfoot' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -335,7 +336,7 @@
 
 	/**
 	 * Creates a 'tbody' element.
-	 * 
+	 *
 	 * @return 'tbody' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -346,7 +347,7 @@
 
 	/**
 	 * Creates a 'tr' element.
-	 * 
+	 *
 	 * @return 'tr' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -357,7 +358,7 @@
 
 	/**
 	 * Creates a 'td' element.
-	 * 
+	 *
 	 * @return 'td' element
 	 * @throws IOException
 	 *             in case of problems with the underlying output
@@ -368,7 +369,7 @@
 
 	/**
 	 * Creates a 'td' element.
-	 * 
+	 *
 	 * @param classattr
 	 *            value of the class attribute
 	 * @return 'td' element
@@ -383,7 +384,7 @@
 
 	/**
 	 * Creates a 'img' element.
-	 * 
+	 *
 	 * @param srcattr
 	 *            value of the src attribute
 	 * @param widthattr
@@ -408,7 +409,7 @@
 
 	/**
 	 * Creates a JavaScript 'script' element.
-	 * 
+	 *
 	 * @param srcattr
 	 *            value of the src attribute
 	 * @throws IOException
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLGroupVisitor.java b/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLGroupVisitor.java
index e690efe..2c73aae 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLGroupVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/HTMLGroupVisitor.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
@@ -36,7 +37,7 @@
 
 	/**
 	 * Create a new group handler.
-	 * 
+	 *
 	 * @param parent
 	 *            optional hierarchical parent
 	 * @param folder
@@ -57,7 +58,7 @@
 
 	/**
 	 * Returns the page rendered for this group.
-	 * 
+	 *
 	 * @return page for this group
 	 */
 	public NodePage<ICoverageNode> getPage() {
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/IHTMLReportContext.java b/org.jacoco.report/src/org/jacoco/report/internal/html/IHTMLReportContext.java
index 5ce47b6..0e4e662 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/IHTMLReportContext.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/IHTMLReportContext.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
@@ -25,56 +26,56 @@
 
 	/**
 	 * Returns the static resources used in this report.
-	 * 
+	 *
 	 * @return static resources
 	 */
 	Resources getResources();
 
 	/**
 	 * Returns the language names call-back used in this report.
-	 * 
+	 *
 	 * @return language names
 	 */
 	ILanguageNames getLanguageNames();
 
 	/**
 	 * Returns a table for rendering coverage nodes.
-	 * 
+	 *
 	 * @return table for rendering
 	 */
 	Table getTable();
 
 	/**
 	 * Returns a string of textual information to include in every page footer.
-	 * 
+	 *
 	 * @return footer text or empty string
 	 */
 	String getFooterText();
 
 	/**
 	 * Returns the link to the sessions page.
-	 * 
+	 *
 	 * @return sessions page link
 	 */
 	ILinkable getSessionsPage();
 
 	/**
 	 * Returns the encoding of the generated HTML documents.
-	 * 
+	 *
 	 * @return encoding for generated HTML documents
 	 */
 	String getOutputEncoding();
 
 	/**
 	 * Returns the service for index updates.
-	 * 
+	 *
 	 * @return sevice for indes updates
 	 */
 	IIndexUpdate getIndexUpdate();
 
 	/**
 	 * Returns the locale used to format numbers and dates.
-	 * 
+	 *
 	 * @return locale for numbers and dates
 	 */
 	Locale getLocale();
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/ILinkable.java b/org.jacoco.report/src/org/jacoco/report/internal/html/ILinkable.java
index bfec938..042f3a4 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/ILinkable.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/ILinkable.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html;
 
@@ -21,7 +22,7 @@
 	/**
 	 * Returns a relative link to the item that works from the given base
 	 * folder.
-	 * 
+	 *
 	 * @param base
 	 *            folder where the link should be inserted
 	 * @return relative link or <code>null</code> if the target does not exist
@@ -30,14 +31,14 @@
 
 	/**
 	 * Returns the display label used for the link.
-	 * 
+	 *
 	 * @return display label
 	 */
 	String getLinkLabel();
 
 	/**
 	 * Optional style class to be associated with the link.
-	 * 
+	 *
 	 * @return link style class or <code>null</code>
 	 */
 	String getLinkStyle();
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/index/ElementIndex.java b/org.jacoco.report/src/org/jacoco/report/internal/html/index/ElementIndex.java
index 08fba90..8eb6afd 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/index/ElementIndex.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/index/ElementIndex.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.index;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * Creates a new empty index for a HTML report.
-	 * 
+	 *
 	 * @param baseFolder
 	 *            base folder where all links are calculated relative to
 	 */
@@ -40,7 +41,7 @@
 	/**
 	 * Returns the link to the class with the given identifier if a
 	 * corresponding page exists.
-	 * 
+	 *
 	 * @param classid
 	 *            class identifier
 	 * @return Link or null
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/index/IIndexUpdate.java b/org.jacoco.report/src/org/jacoco/report/internal/html/index/IIndexUpdate.java
index ce8d8ab..a425792 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/index/IIndexUpdate.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/index/IIndexUpdate.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.index;
 
@@ -21,7 +22,7 @@
 
 	/**
 	 * Adds a class to the index.
-	 * 
+	 *
 	 * @param link
 	 *            link to the class
 	 * @param classid
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/index/package-info.java b/org.jacoco.report/src/org/jacoco/report/internal/html/index/package-info.java
index e6760bb..f054294 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/index/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/index/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/BundlePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/BundlePage.java
index 4caeb67..2aae5b2 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/BundlePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/BundlePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -33,7 +34,7 @@
 
 	/**
 	 * Creates a new visitor in the given context.
-	 * 
+	 *
 	 * @param bundle
 	 *            coverage date for the bundle
 	 * @param parent
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ClassPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ClassPage.java
index 8a759a3..45dff8d 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ClassPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ClassPage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -30,7 +31,7 @@
 
 	/**
 	 * Creates a new visitor in the given context.
-	 * 
+	 *
 	 * @param classNode
 	 *            coverage data for this class
 	 * @param parent
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/GroupPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/GroupPage.java
index 9e64605..05aaf46 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/GroupPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/GroupPage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -23,7 +24,7 @@
 
 	/**
 	 * Creates a new visitor in the given context.
-	 * 
+	 *
 	 * @param node
 	 *            corresponding coverage data
 	 * @param parent
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/MethodItem.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/MethodItem.java
index 601c711..a9e4443 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/MethodItem.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/MethodItem.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/NodePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/NodePage.java
index 6dbb37f..c0b4cd5 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/NodePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/NodePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -20,18 +21,18 @@
 
 /**
  * Report page that represents a coverage node.
- * 
+ *
  * @param <NodeType>
  *            type of the node represented by this page
  */
-public abstract class NodePage<NodeType extends ICoverageNode> extends
-		ReportPage implements ITableItem {
+public abstract class NodePage<NodeType extends ICoverageNode>
+		extends ReportPage implements ITableItem {
 
 	private final NodeType node;
 
 	/**
 	 * Creates a new node page.
-	 * 
+	 *
 	 * @param node
 	 *            corresponding node
 	 * @param parent
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
index 3d5e24d..1ec8bec 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackagePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -33,7 +34,7 @@
 
 	/**
 	 * Creates a new visitor in the given context.
-	 * 
+	 *
 	 * @param node
 	 *            coverage data for this package
 	 * @param parent
@@ -49,8 +50,8 @@
 			final ISourceFileLocator locator, final ReportOutputFolder folder,
 			final IHTMLReportContext context) {
 		super(node, parent, folder, context);
-		packageSourcePage = new PackageSourcePage(node, parent, locator,
-				folder, context, this);
+		packageSourcePage = new PackageSourcePage(node, parent, locator, folder,
+				context, this);
 		sourceCoverageExists = !node.getSourceFiles().isEmpty();
 	}
 
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java
index 988033d..f0cb618 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/PackageSourcePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -37,7 +38,7 @@
 
 	/**
 	 * Creates a new visitor in the given context.
-	 * 
+	 *
 	 * @param node
 	 *            coverage data for this package
 	 * @param parent
@@ -83,8 +84,8 @@
 				continue;
 			}
 			final String sourcename = s.getName();
-			final Reader reader = locator
-					.getSourceFile(packagename, sourcename);
+			final Reader reader = locator.getSourceFile(packagename,
+					sourcename);
 			if (reader == null) {
 				addItem(new SourceFileItem(s));
 			} else {
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
index 9660bdf..76b738b 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/ReportPage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -38,7 +39,7 @@
 
 	/**
 	 * Creates a new report page.
-	 * 
+	 *
 	 * @param parent
 	 *            optional hierarchical parent
 	 * @param folder
@@ -55,7 +56,7 @@
 
 	/**
 	 * Checks whether this is the root page of the report.
-	 * 
+	 *
 	 * @return <code>true</code> if this is the root page
 	 */
 	protected final boolean isRootPage() {
@@ -65,7 +66,7 @@
 	/**
 	 * Renders this page's content and optionally additional pages. This method
 	 * must be called at most once.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the page can't be written
 	 */
@@ -80,7 +81,7 @@
 
 	/**
 	 * Creates the elements within the head element.
-	 * 
+	 *
 	 * @param head
 	 *            head tag of the page
 	 * @throws IOException
@@ -110,7 +111,7 @@
 
 	/**
 	 * Returns the onload handler for this page.
-	 * 
+	 *
 	 * @return handler or <code>null</code>
 	 */
 	protected String getOnload() {
@@ -119,7 +120,7 @@
 
 	/**
 	 * Inserts additional links on the top right corner.
-	 * 
+	 *
 	 * @param span
 	 *            parent element
 	 * @throws IOException
@@ -157,14 +158,14 @@
 
 	/**
 	 * Specifies the local file name of this page.
-	 * 
+	 *
 	 * @return local file name
 	 */
 	protected abstract String getFileName();
 
 	/**
 	 * Creates the actual content of the page.
-	 * 
+	 *
 	 * @param body
 	 *            body tag of the page
 	 * @throws IOException
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
index 3a48902..56181ef 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SessionsPage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -54,7 +55,7 @@
 
 	/**
 	 * Creates a new page page to display session information.
-	 * 
+	 *
 	 * @param sessionInfos
 	 *            session info objects
 	 * @param executionData
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java
index 70628ae..13b01bc 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFileItem.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -19,7 +20,7 @@
 
 /**
  * Table items representing a source file which cannot be linked.
- * 
+ *
  */
 final class SourceFileItem implements ITableItem {
 
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFilePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFilePage.java
index d4fe243..c54a14b 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFilePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceFilePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -34,7 +35,7 @@
 
 	/**
 	 * Creates a new page with given information.
-	 * 
+	 *
 	 * @param sourceFileNode
 	 *            coverage data for this source file
 	 * @param sourceReader
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceHighlighter.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceHighlighter.java
index 5cb8eb0..97c8a27 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceHighlighter.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/SourceHighlighter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -33,7 +34,7 @@
 
 	/**
 	 * Creates a new highlighter with default settings.
-	 * 
+	 *
 	 * @param locale
 	 *            locale for tooltip rendering
 	 */
@@ -45,7 +46,7 @@
 	/**
 	 * Specifies the source language. This value might be used for syntax
 	 * highlighting. Default is "java".
-	 * 
+	 *
 	 * @param lang
 	 *            source language identifier
 	 */
@@ -55,7 +56,7 @@
 
 	/**
 	 * Highlights the given source file.
-	 * 
+	 *
 	 * @param parent
 	 *            parent HTML element
 	 * @param source
@@ -67,8 +68,8 @@
 	 */
 	public void render(final HTMLElement parent, final ISourceNode source,
 			final Reader contents) throws IOException {
-		final HTMLElement pre = parent.pre(Styles.SOURCE + " lang-" + lang
-				+ " linenums");
+		final HTMLElement pre = parent
+				.pre(Styles.SOURCE + " lang-" + lang + " linenums");
 		final BufferedReader lineBuffer = new BufferedReader(contents);
 		String line;
 		int nr = 0;
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/page/TablePage.java b/org.jacoco.report/src/org/jacoco/report/internal/html/page/TablePage.java
index c8cd0c1..3329e37 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/page/TablePage.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/page/TablePage.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.page;
 
@@ -24,7 +25,7 @@
 
 /**
  * Report page that contains a table of items linked to other pages.
- * 
+ *
  * @param <NodeType>
  *            type of the node represented by this page
  */
@@ -35,7 +36,7 @@
 
 	/**
 	 * Creates a new node page.
-	 * 
+	 *
 	 * @param node
 	 *            corresponding node
 	 * @param parent
@@ -53,7 +54,7 @@
 	/**
 	 * Adds the given item to the table. Method must be called before the page
 	 * is rendered.
-	 * 
+	 *
 	 * @param item
 	 *            table item to add
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Resources.java b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Resources.java
index 29fab0f..686c3cd 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Resources.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Resources.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.resources;
 
@@ -46,7 +47,7 @@
 
 	/**
 	 * Attaches resources to the report with the given root folder.
-	 * 
+	 *
 	 * @param root
 	 *            root folder of the report
 	 */
@@ -56,7 +57,7 @@
 
 	/**
 	 * Returns a relative link to a static resource.
-	 * 
+	 *
 	 * @param base
 	 *            base folder from where the link should be created
 	 * @param name
@@ -69,7 +70,7 @@
 
 	/**
 	 * Determines the style sheet class for the given element type.
-	 * 
+	 *
 	 * @param type
 	 *            type of the element
 	 * @return style class name
@@ -94,7 +95,7 @@
 
 	/**
 	 * Copies all static resources into the report.
-	 * 
+	 *
 	 * @throws IOException
 	 *             if the resources can't be written to the report
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
index 0d0d6cb..4e4665c 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/Styles.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.resources;
 
@@ -99,7 +100,7 @@
 
 	/**
 	 * Returns a combined style from the given styles.
-	 * 
+	 *
 	 * @param styles
 	 *            list of separate styles, entries might be null
 	 * @return combined style or <code>null</code> if no style is given
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/package-info.java b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/package-info.java
index ba6339a..d8e0a35 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/prettify.js b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/prettify.js
index ab27882..b2766fe 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/prettify.js
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/prettify.js
@@ -1112,7 +1112,7 @@
       for (var i = 0; i < 10; ++i) {
         lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
       }
-      var lineNum = numberLines[1] && numberLines[1].length 
+      var lineNum = numberLines[1] && numberLines[1].length
           ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
       html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
       if (lineNum) {
@@ -1403,7 +1403,7 @@
                      Infinity);
       for (; k < elements.length && clock.now() < endTime; k++) {
         var cs = elements[k];
-        // [JACOCO] 'prettyprint' -> 'source' 
+        // [JACOCO] 'prettyprint' -> 'source'
         if (cs.className && cs.className.indexOf('source') >= 0) {
           // If the classes includes a language extensions, use it.
           // Language extensions can be specified like
@@ -1418,7 +1418,7 @@
           for (var p = cs.parentNode; p; p = p.parentNode) {
             if ((p.tagName === 'pre' || p.tagName === 'code' ||
                  p.tagName === 'xmp') &&
-                // [JACOCO] 'prettyprint' -> 'source' 
+                // [JACOCO] 'prettyprint' -> 'source'
                 p.className && p.className.indexOf('source') >= 0) {
               nested = true;
               break;
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
index 08eba79..dd936bc 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/report.css
@@ -137,7 +137,7 @@
 
 table.coverage {
   empty-cells:show;
-  border-collapse:collapse; 
+  border-collapse:collapse;
 }
 
 table.coverage thead {
@@ -185,7 +185,7 @@
   border-bottom:#d6d3ce 1px solid;
 }
 
-table.coverage tbody tr:hover { 
+table.coverage tbody tr:hover {
   background: #f0f0d0 !important;
 }
 
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/sort.js b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/sort.js
index da41c0b..e269fe3 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/resources/sort.js
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/resources/sort.js
@@ -1,13 +1,14 @@
 /*******************************************************************************
  * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * 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
- *    
+ *
  *******************************************************************************/
 
 (function () {
@@ -17,8 +18,8 @@
    *
    * @param linkelementids
    *          list of element ids to search for links to add sort inidcator
-   *          hash links   
-   */  
+   *          hash links
+   */
   function initialSort(linkelementids) {
     window.linkelementids = linkelementids;
     var hash = window.location.hash;
@@ -44,7 +45,7 @@
 
   /**
    * Sorts the columns with the given header dependening on the current sort state.
-   */  
+   */
   function toggleSort(header) {
     var sortup = header.className.indexOf('down ') == 0;
     sortColumn(header, sortup);
@@ -52,23 +53,23 @@
 
   /**
    * Sorts the columns with the given header in the given direction.
-   */  
+   */
   function sortColumn(header, sortup) {
     var table = header.parentNode.parentNode.parentNode;
     var body = table.tBodies[0];
     var colidx = getNodePosition(header);
-    
+
     resetSortedStyle(table);
-    
+
     var rows = body.rows;
     var sortedrows = [];
     for (var i = 0; i < rows.length; i++) {
       r = rows[i];
       sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
     }
-    
+
     var hash;
-    
+
     if (sortup) {
       for (var i = sortedrows.length - 1; i >= 0; i--) {
         body.appendChild(sortedrows[i]);
@@ -82,7 +83,7 @@
       header.className = 'down ' + header.className;
       hash = 'dn-' + header.id;
     }
-    
+
     setHash(hash);
   }
 
@@ -108,14 +109,14 @@
         var hashpos = href.indexOf("#");
         if (hashpos != -1) {
             href = href.substring(0, hashpos);
-        } 
+        }
         a.href = href + "#" + hash;
     }
   }
 
   /**
    * Calculates the position of a element within its parent.
-   */  
+   */
   function getNodePosition(element) {
     var pos = -1;
     while (element) {
@@ -140,8 +141,8 @@
       }
     }
   }
-  
+
   window['initialSort'] = initialSort;
   window['toggleSort'] = toggleSort;
 
-})();
\ No newline at end of file
+})();
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/BarColumn.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/BarColumn.java
index ecbcd71..6418539 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/BarColumn.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/BarColumn.java
@@ -1,18 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
 import java.io.IOException;
-import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Comparator;
 import java.util.List;
@@ -46,7 +46,7 @@
 	/**
 	 * Creates a new column that is based on the {@link ICounter} for the given
 	 * entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for visualization
 	 * @param locale
@@ -54,10 +54,10 @@
 	 */
 	public BarColumn(final CounterEntity entity, final Locale locale) {
 		this.entity = entity;
-		this.integerFormat = DecimalFormat.getIntegerInstance(locale);
-		this.comparator = new TableItemComparator(CounterComparator.MISSEDITEMS
-				.reverse().on(entity)
-				.second(CounterComparator.TOTALITEMS.reverse().on(entity)));
+		this.integerFormat = NumberFormat.getIntegerInstance(locale);
+		this.comparator = new TableItemComparator(
+				CounterComparator.MISSEDITEMS.reverse().on(entity).second(
+						CounterComparator.TOTALITEMS.reverse().on(entity)));
 	}
 
 	public boolean init(final List<? extends ITableItem> items,
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/CounterColumn.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/CounterColumn.java
index 823c5da..33b8a25 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/CounterColumn.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/CounterColumn.java
@@ -1,18 +1,18 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
 import java.io.IOException;
-import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Comparator;
 import java.util.List;
@@ -35,7 +35,7 @@
 
 	/**
 	 * Creates a new column that shows the total count for the given entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for this column
 	 * @param locale
@@ -44,8 +44,8 @@
 	 */
 	public static CounterColumn newTotal(final CounterEntity entity,
 			final Locale locale) {
-		return new CounterColumn(entity, locale, CounterComparator.TOTALITEMS
-				.reverse().on(entity)) {
+		return new CounterColumn(entity, locale,
+				CounterComparator.TOTALITEMS.reverse().on(entity)) {
 			@Override
 			protected int getValue(final ICounter counter) {
 				return counter.getTotalCount();
@@ -55,7 +55,7 @@
 
 	/**
 	 * Creates a new column that shows the missed count for the given entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for this column
 	 * @param locale
@@ -64,8 +64,8 @@
 	 */
 	public static CounterColumn newMissed(final CounterEntity entity,
 			final Locale locale) {
-		return new CounterColumn(entity, locale, CounterComparator.MISSEDITEMS
-				.reverse().on(entity)) {
+		return new CounterColumn(entity, locale,
+				CounterComparator.MISSEDITEMS.reverse().on(entity)) {
 			@Override
 			protected int getValue(final ICounter counter) {
 				return counter.getMissedCount();
@@ -75,7 +75,7 @@
 
 	/**
 	 * Creates a new column that shows the covered count for the given entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for this column
 	 * @param locale
@@ -84,8 +84,8 @@
 	 */
 	public static CounterColumn newCovered(final CounterEntity entity,
 			final Locale locale) {
-		return new CounterColumn(entity, locale, CounterComparator.COVEREDITEMS
-				.reverse().on(entity)) {
+		return new CounterColumn(entity, locale,
+				CounterComparator.COVEREDITEMS.reverse().on(entity)) {
 			@Override
 			protected int getValue(final ICounter counter) {
 				return counter.getCoveredCount();
@@ -102,7 +102,7 @@
 	/**
 	 * Creates a new column that is based on the {@link ICounter} for the given
 	 * entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for this column
 	 * @param locale
@@ -113,7 +113,7 @@
 	protected CounterColumn(final CounterEntity entity, final Locale locale,
 			final Comparator<ICoverageNode> comparator) {
 		this.entity = entity;
-		this.integerFormat = DecimalFormat.getIntegerInstance(locale);
+		this.integerFormat = NumberFormat.getIntegerInstance(locale);
 		this.comparator = new TableItemComparator(comparator);
 	}
 
@@ -151,7 +151,7 @@
 
 	/**
 	 * Retrieves the respective value from the counter.
-	 * 
+	 *
 	 * @param counter
 	 *            counter object
 	 * @return value of interest
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/IColumnRenderer.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/IColumnRenderer.java
index dab38da..ef74ca1 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/IColumnRenderer.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/IColumnRenderer.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * Initializes the column before any output method is called.
-	 * 
+	 *
 	 * @param items
 	 *            all items that will be displayed in the table
 	 * @param total
@@ -40,7 +41,7 @@
 
 	/**
 	 * Renders the footer for this column.
-	 * 
+	 *
 	 * @param td
 	 *            the parent table cell
 	 * @param total
@@ -57,7 +58,7 @@
 
 	/**
 	 * Renders a single item in this column.
-	 * 
+	 *
 	 * @param td
 	 *            the parent table cell
 	 * @param item
@@ -74,7 +75,7 @@
 
 	/**
 	 * Returns the comparator to sort this table column.
-	 * 
+	 *
 	 * @return comparator for this column
 	 */
 	Comparator<ITableItem> getComparator();
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/ITableItem.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/ITableItem.java
index 0c0b2ca..5920a90 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/ITableItem.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/ITableItem.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
@@ -21,7 +22,7 @@
 
 	/**
 	 * Returns the corresponding node data.
-	 * 
+	 *
 	 * @return node data
 	 */
 	ICoverageNode getNode();
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/LabelColumn.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/LabelColumn.java
index 27347fe..42d9d32 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/LabelColumn.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/LabelColumn.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/PercentageColumn.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/PercentageColumn.java
index fa3f9c1..4c6aec2 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/PercentageColumn.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/PercentageColumn.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
@@ -43,7 +44,7 @@
 	/**
 	 * Creates a new column that is based on the {@link ICounter} for the given
 	 * entity.
-	 * 
+	 *
 	 * @param entity
 	 *            counter entity for this column
 	 * @param locale
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/SortIndex.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/SortIndex.java
index e2d0324..7babced 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/SortIndex.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/SortIndex.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
@@ -19,7 +20,7 @@
 /**
  * A index on a list of items sorted with a given {@link Comparator}. The index
  * does not change the list itself.
- * 
+ *
  * @param <T>
  *            type of the items
  */
@@ -50,7 +51,7 @@
 
 	/**
 	 * Creates a new index based in the given comparator.
-	 * 
+	 *
 	 * @param comparator
 	 *            comparator to sort items
 	 */
@@ -60,7 +61,7 @@
 
 	/**
 	 * Initializes the index for the given list of items.
-	 * 
+	 *
 	 * @param items
 	 *            list of items
 	 */
@@ -84,7 +85,7 @@
 	/**
 	 * Returns the sorted position of the element with the given index in the
 	 * items list provided to the init() method.
-	 * 
+	 *
 	 * @param idx
 	 *            index of a element of the list
 	 * @return its position in a sorted list
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/Table.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/Table.java
index f594dc0..b2b0781 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/Table.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/Table.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.html.table;
 
@@ -41,7 +42,7 @@
 
 	/**
 	 * Adds a new column with the given properties to the table.
-	 * 
+	 *
 	 * @param header
 	 *            column header caption
 	 * @param style
@@ -52,7 +53,7 @@
 	 * @param defaultSorting
 	 *            If <code>true</code>, this column is the default sorting
 	 *            column. Only one column can be selected for default sorting.
-	 * 
+	 *
 	 */
 	public void add(final String header, final String style,
 			final IColumnRenderer renderer, final boolean defaultSorting) {
@@ -69,7 +70,7 @@
 
 	/**
 	 * Renders a table for the given icon
-	 * 
+	 *
 	 * @param parent
 	 *            parent element in which the table is created
 	 * @param items
@@ -155,8 +156,9 @@
 			this.renderer = renderer;
 			index = new SortIndex<ITableItem>(renderer.getComparator());
 			this.style = style;
-			this.headerStyle = Styles.combine(defaultSorting ? Styles.DOWN
-					: null, Styles.SORTABLE, style);
+			this.headerStyle = Styles.combine(
+					defaultSorting ? Styles.DOWN : null, Styles.SORTABLE,
+					style);
 		}
 
 		void init(final HTMLElement tr, final List<? extends ITableItem> items,
@@ -184,7 +186,8 @@
 				throws IOException {
 			if (visible) {
 				final HTMLElement td = tr.td(style);
-				td.attr("id", idprefix + String.valueOf(index.getPosition(idx)));
+				td.attr("id",
+						idprefix + String.valueOf(index.getPosition(idx)));
 				renderer.item(td, item, resources, base);
 			}
 		}
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/TableItemComparator.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/TableItemComparator.java
index 4912fb1..69e78bd 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/TableItemComparator.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/TableItemComparator.java
@@ -1,9 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/html/table/package-info.java b/org.jacoco.report/src/org/jacoco/report/internal/html/table/package-info.java
index 9208e47..45967f0 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/html/table/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/html/table/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/xml/ReportElement.java b/org.jacoco.report/src/org/jacoco/report/internal/xml/ReportElement.java
index 65782d9..c617647 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/xml/ReportElement.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/xml/ReportElement.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
@@ -32,7 +33,7 @@
 
 	/**
 	 * Creates a <code>report</code> root element for a XML report.
-	 * 
+	 *
 	 * @param name
 	 *            value for the name attribute
 	 * @param encoding
@@ -67,7 +68,7 @@
 
 	/**
 	 * Creates a 'sessioninfo' element.
-	 * 
+	 *
 	 * @param info
 	 *            info object to write out
 	 * @throws IOException
@@ -82,7 +83,7 @@
 
 	/**
 	 * Creates a 'group' element.
-	 * 
+	 *
 	 * @param name
 	 *            value for the name attribute
 	 * @return 'group' element
@@ -95,7 +96,7 @@
 
 	/**
 	 * Creates a 'package' element.
-	 * 
+	 *
 	 * @param name
 	 *            value for the name attribute
 	 * @return 'package' element
@@ -108,7 +109,7 @@
 
 	/**
 	 * Creates a 'class' element.
-	 * 
+	 *
 	 * @param coverage
 	 *            class coverage node to write out
 	 * @return 'class' element
@@ -124,7 +125,7 @@
 
 	/**
 	 * Creates a 'method' element.
-	 * 
+	 *
 	 * @param coverage
 	 *            method coverage node to write out
 	 * @return 'method' element
@@ -145,7 +146,7 @@
 
 	/**
 	 * Creates a 'sourcefile' element.
-	 * 
+	 *
 	 * @param name
 	 *            value for the name attribute
 	 * @return 'sourcefile' element
@@ -158,12 +159,12 @@
 
 	/**
 	 * Creates a 'line' element.
-	 * 
+	 *
 	 * @param nr
 	 *            line number
 	 * @param line
 	 *            line object to write out
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of problems with the underlying output
 	 */
@@ -176,13 +177,13 @@
 
 	/**
 	 * Creates a 'counter' element.
-	 * 
+	 *
 	 * @param counterEntity
 	 *            entity of this counter
-	 * 
+	 *
 	 * @param counter
 	 *            counter object to write out
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of problems with the underlying output
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLCoverageWriter.java b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLCoverageWriter.java
index 7bf95af..6e3a74a 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLCoverageWriter.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLCoverageWriter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
@@ -31,7 +32,7 @@
 
 	/**
 	 * Writes the structure of a given bundle.
-	 * 
+	 *
 	 * @param bundle
 	 *            bundle coverage data
 	 * @param element
@@ -83,7 +84,7 @@
 
 	/**
 	 * Writes all non-zero counters of the given node.
-	 * 
+	 *
 	 * @param node
 	 *            node to retrieve counters from
 	 * @param parent
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLElement.java b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLElement.java
index c2da6bb..65f53dd 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLElement.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLElement.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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.report.internal.xml;
 
@@ -60,7 +61,7 @@
 
 	/**
 	 * Creates a root element of a XML document.
-	 * 
+	 *
 	 * @param name
 	 *            element name
 	 * @param pubId
@@ -96,7 +97,7 @@
 	/**
 	 * Creates a new child element within a XML document. May only be called
 	 * before the parent element has been closed.
-	 * 
+	 *
 	 * @param name
 	 *            element name
 	 * @param parent
@@ -160,7 +161,7 @@
 	 * element is added or this element has been closed. The attribute value
 	 * will be quoted. If the value is <code>null</code> the attribute will not
 	 * be added.
-	 * 
+	 *
 	 * @param name
 	 *            attribute name
 	 * @param value
@@ -190,7 +191,7 @@
 	 * Adds an attribute to this element. May only be called before an child
 	 * element is added or this element has been closed. The attribute value is
 	 * the decimal representation of the given int value.
-	 * 
+	 *
 	 * @param name
 	 *            attribute name
 	 * @param value
@@ -208,7 +209,7 @@
 	 * Adds an attribute to this element. May only be called before an child
 	 * element is added or this element has been closed. The attribute value is
 	 * the decimal representation of the given long value.
-	 * 
+	 *
 	 * @param name
 	 *            attribute name
 	 * @param value
@@ -225,7 +226,7 @@
 	/**
 	 * Adds the given text as a child to this node. The text will be quoted. May
 	 * only be called before this element has been closed.
-	 * 
+	 *
 	 * @param text
 	 *            text to add
 	 * @throws IOException
@@ -246,7 +247,7 @@
 	/**
 	 * Creates a new child element for this element. Might be overridden in
 	 * subclasses to return a instance of the subclass.
-	 * 
+	 *
 	 * @param name
 	 *            name of the child element
 	 * @return child element instance
@@ -259,7 +260,7 @@
 
 	/**
 	 * Closes this element if it has not been closed before.
-	 * 
+	 *
 	 * @throws IOException
 	 *             in case of problems with the underlying output
 	 */
diff --git a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLGroupVisitor.java b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLGroupVisitor.java
index 7f2b7d3..dcbe1bb 100644
--- a/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLGroupVisitor.java
+++ b/org.jacoco.report/src/org/jacoco/report/internal/xml/XMLGroupVisitor.java
@@ -1,14 +1,15 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
  *    Marc R. Hoffmann - generalized structure, line info
- *    
+ *
  *******************************************************************************/
 package org.jacoco.report.internal.xml;
 
@@ -29,7 +30,7 @@
 
 	/**
 	 * New handler for a group with the given name.
-	 * 
+	 *
 	 * @param element
 	 *            XML-Element representing this coverage node. The start tag
 	 *            must not be closed yet to allow adding additional attributes.
diff --git a/org.jacoco.report/src/org/jacoco/report/package-info.java b/org.jacoco.report/src/org/jacoco/report/package-info.java
index 64ed4dd..f3c403e 100644
--- a/org.jacoco.report/src/org/jacoco/report/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java b/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
index 3bda5ed..303a582 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
+++ b/org.jacoco.report/src/org/jacoco/report/xml/XMLFormatter.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak -initial API and implementation
- *    
+ *
  *******************************************************************************/
 package org.jacoco.report.xml;
 
@@ -35,7 +36,7 @@
 
 	/**
 	 * Sets the encoding used for generated XML document. Default is UTF-8.
-	 * 
+	 *
 	 * @param outputEncoding
 	 *            XML output encoding
 	 */
@@ -45,7 +46,7 @@
 
 	/**
 	 * Creates a new visitor to write a report to the given stream.
-	 * 
+	 *
 	 * @param output
 	 *            output stream to write the report to
 	 * @return visitor to emit the report data to
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/package-info.java b/org.jacoco.report/src/org/jacoco/report/xml/package-info.java
index 9d9236a..a248808 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/package-info.java
+++ b/org.jacoco.report/src/org/jacoco/report/xml/package-info.java
@@ -1,13 +1,14 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
+ * Copyright (c) 2009, 2021 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:
  *    Brock Janiczak - initial API and implementation
- *    
+ *
  *******************************************************************************/
 
 /**
diff --git a/org.jacoco.report/src/org/jacoco/report/xml/report.dtd b/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
index 0e84bdf..c7c299d 100644
--- a/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
+++ b/org.jacoco.report/src/org/jacoco/report/xml/report.dtd
@@ -1,10 +1,11 @@
-<!-- 
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
-     
+<!--
+   Copyright (c) 2009, 2021 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:
       Brock Janiczak - initial API and implementation
       Marc R. Hoffmann - generalized report structure, line info, documentation
@@ -55,7 +56,7 @@
   <!ATTLIST method desc CDATA #REQUIRED>
   <!-- first source line number of this method -->
   <!ATTLIST method line CDATA #IMPLIED>
-  
+
 <!-- representation of a source file -->
 <!ELEMENT sourcefile (line*, counter*)>
   <!-- local source file name -->
diff --git a/org.jacoco.tests/pom.xml b/org.jacoco.tests/pom.xml
index 3efa06c..05632eb 100644
--- a/org.jacoco.tests/pom.xml
+++ b/org.jacoco.tests/pom.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright (c) 2009, 2019 Mountainminds GmbH & Co. KG and Contributors
-   All rights reserved. This program and the accompanying materials
-   are made available under the terms of the Eclipse Public License v1.0
-   which accompanies this distribution, and is available at
-   http://www.eclipse.org/legal/epl-v10.html
+   Copyright (c) 2009, 2021 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
@@ -16,7 +17,7 @@
   <parent>
     <groupId>org.jacoco</groupId>
     <artifactId>org.jacoco.build</artifactId>
-    <version>0.8.4</version>
+    <version>0.8.7</version>
     <relativePath>../org.jacoco.build</relativePath>
   </parent>
 
diff --git a/pom.xml b/pom.xml
index 08fc669..250e52d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
 
   <groupId>org.jacoco</groupId>
   <artifactId>root</artifactId>
-  <version>0.8.4</version>
+  <version>0.8.7</version>
   <packaging>pom</packaging>
 
   <modules>