release-request-1b0d6769-ebfa-4e2d-b128-039ac0dcd5c9-for-git_oc-mr1-release-4140700 snap-temp-L81200000078275553

Change-Id: Id0d11002db354e50e0feb004de687d5c1bc5ddc2
diff --git a/Android.mk b/Android.mk
index 1804e6d..5ba5480 100644
--- a/Android.mk
+++ b/Android.mk
@@ -68,6 +68,13 @@
 
 include $(BUILD_HOST_JAVA_LIBRARY)
 
+# include jacoco-cli in the dist directory to enable running it to generate a code-coverage report
+ifeq ($(ANDROID_COMPILE_WITH_JACK),false)
+ifeq ($(EMMA_INSTRUMENT),true)
+$(call dist-for-goals, dist_files, $(LOCAL_INSTALLED_MODULE))
+endif
+endif
+
 
 #
 # Build asm-5.0.1 as a static library for the device
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 cbd6a62..53d1238 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
@@ -19,7 +19,7 @@
 import org.jacoco.core.instr.Instrumenter;
 import org.jacoco.core.runtime.AgentOptions;
 import org.jacoco.core.runtime.IRuntime;
-import org.jacoco.core.matcher.WildcardMatcher;
+import org.jacoco.core.runtime.WildcardMatcher;
 
 /**
  * Class file transformer to instrument classes for code coverage analysis.
@@ -120,14 +120,16 @@
 			if (!inclNoLocationClasses && !hasSourceLocation(protectionDomain)) {
 				return false;
 			}
-			if (exclClassloader.apply(loader.getClass().getName())) {
+			if (exclClassloader.matches(loader.getClass().getName())) {
 				return false;
 			}
 		}
 
 		return !classname.startsWith(AGENT_PREFIX) &&
-				includes.apply(classname) &&
-				!excludes.apply(classname);
+
+		includes.matches(classname) &&
+
+		!excludes.matches(classname);
 	}
 
 	/**
diff --git a/org.jacoco.core.test/src/org/jacoco/core/matcher/IncludeExcludeMatcherTest.java b/org.jacoco.core.test/src/org/jacoco/core/matcher/IncludeExcludeMatcherTest.java
deleted file mode 100644
index e026895..0000000
--- a/org.jacoco.core.test/src/org/jacoco/core/matcher/IncludeExcludeMatcherTest.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the 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:
- *    Jeffry Gaston - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.matcher;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-public class IncludeExcludeMatcherTest {
-
-	@Test
-	public void testEmpty() {
-		assertTrue(new IncludeExcludeMatcher<String>().apply("includeMe"));
-	}
-
-	@Test
-	public void testSingleExclude() {
-		IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>()
-				.exclude(new WildcardMatcher("excluded"));
-		assertTrue(matcher.apply("included"));
-		assertFalse(matcher.apply("excluded"));
-	}
-
-	@Test
-	public void testMultipleExcludes() {
-		IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>().exclude(
-				new WildcardMatcher("excluded"))
-						.exclude(new WildcardMatcher("excluded2"));
-		assertTrue(matcher.apply("included"));
-		assertFalse(matcher.apply("excluded"));
-		assertFalse(matcher.apply("excluded2"));
-	}
-
-	@Test
-	public void testSingleInclude() {
-		IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>()
-				.include(new WildcardMatcher("include me"));
-		assertTrue(matcher.apply("include me"));
-		assertFalse(matcher.apply("not me"));
-	}
-
-	@Test
-	public void testIncludesAndExcludes() {
-		IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>()
-				.include(new WildcardMatcher("inclusion1"))
-				.include(new WildcardMatcher("me too"))
-				.exclude(new WildcardMatcher("not me"))
-				.exclude(new WildcardMatcher("nope"));
-		assertTrue(matcher.apply("inclusion1"));
-		assertTrue(matcher.apply("me too"));
-		assertFalse(matcher.apply("not me"));
-		assertFalse(matcher.apply("nope"));
-		assertFalse(matcher.apply("other"));
-	}
-
-	@Test
-	public void testExcludedInclusion() {
-		IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>()
-				.include(new WildcardMatcher("a"))
-				.exclude(new WildcardMatcher("a"));
-		assertFalse(matcher.apply("a"));
-		assertFalse(matcher.apply("b"));
-	}
-
-}
diff --git a/org.jacoco.core.test/src/org/jacoco/core/matcher/WildcardMatcherTest.java b/org.jacoco.core.test/src/org/jacoco/core/matcher/WildcardMatcherTest.java
deleted file mode 100644
index baf1dc2..0000000
--- a/org.jacoco.core.test/src/org/jacoco/core/matcher/WildcardMatcherTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the 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.matcher;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-
-import org.junit.Test;
-
-public class WildcardMatcherTest {
-
-	@Test
-	public void testEmpty() {
-		assertTrue(new WildcardMatcher("").apply(""));
-		assertFalse(new WildcardMatcher("").apply("abc"));
-	}
-
-	@Test
-	public void testExact() {
-		assertTrue(new WildcardMatcher("abc/def.txt").apply("abc/def.txt"));
-	}
-
-	@Test
-	public void testCaseSensitive() {
-		assertFalse(new WildcardMatcher("abcdef").apply("abcDef"));
-		assertFalse(new WildcardMatcher("ABCDEF").apply("AbCDEF"));
-	}
-
-	@Test
-	public void testQuote() {
-		assertFalse(new WildcardMatcher("rst.xyz").apply("rstAxyz"));
-		assertTrue(new WildcardMatcher("(x)+").apply("(x)+"));
-	}
-
-	@Test
-	public void testWildcards() {
-		assertTrue(new WildcardMatcher("*").apply(""));
-		assertTrue(new WildcardMatcher("*").apply("java/lang/Object"));
-		assertTrue(new WildcardMatcher("*Test").apply("jacoco/MatcherTest"));
-		assertTrue(new WildcardMatcher("Matcher*").apply("Matcher"));
-		assertTrue(new WildcardMatcher("Matcher*").apply("MatcherTest"));
-		assertTrue(new WildcardMatcher("a*b*a").apply("a-b-b-a"));
-		assertFalse(new WildcardMatcher("a*b*a").apply("alaska"));
-		assertTrue(new WildcardMatcher("Hello?orld").apply("HelloWorld"));
-		assertFalse(new WildcardMatcher("Hello?orld").apply("HelloWWWorld"));
-		assertTrue(new WildcardMatcher("?aco*").apply("jacoco"));
-	}
-
-	@Test
-	public void testMultiExpression() {
-		assertTrue(new WildcardMatcher("Hello:World").apply("World"));
-		assertTrue(new WildcardMatcher("Hello:World").apply("World"));
-		assertTrue(new WildcardMatcher("*Test:*Foo").apply("UnitTest"));
-	}
-
-	@Test
-	public void testDollar() {
-		assertTrue(new WildcardMatcher("*$*").apply("java/util/Map$Entry"));
-		assertTrue(new WildcardMatcher("*$$$*")
-				.apply("org/example/Enity$$$generated123"));
-	}
-
-}
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
new file mode 100644
index 0000000..10e012c
--- /dev/null
+++ b/org.jacoco.core.test/src/org/jacoco/core/runtime/WildcardMatcherTest.java
@@ -0,0 +1,72 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the 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 static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+public class WildcardMatcherTest {
+
+	@Test
+	public void testEmpty() {
+		assertTrue(new WildcardMatcher("").matches(""));
+		assertFalse(new WildcardMatcher("").matches("abc"));
+	}
+
+	@Test
+	public void testExact() {
+		assertTrue(new WildcardMatcher("abc/def.txt").matches("abc/def.txt"));
+	}
+
+	@Test
+	public void testCaseSensitive() {
+		assertFalse(new WildcardMatcher("abcdef").matches("abcDef"));
+		assertFalse(new WildcardMatcher("ABCDEF").matches("AbCDEF"));
+	}
+
+	@Test
+	public void testQuote() {
+		assertFalse(new WildcardMatcher("rst.xyz").matches("rstAxyz"));
+		assertTrue(new WildcardMatcher("(x)+").matches("(x)+"));
+	}
+
+	@Test
+	public void testWildcards() {
+		assertTrue(new WildcardMatcher("*").matches(""));
+		assertTrue(new WildcardMatcher("*").matches("java/lang/Object"));
+		assertTrue(new WildcardMatcher("*Test").matches("jacoco/MatcherTest"));
+		assertTrue(new WildcardMatcher("Matcher*").matches("Matcher"));
+		assertTrue(new WildcardMatcher("Matcher*").matches("MatcherTest"));
+		assertTrue(new WildcardMatcher("a*b*a").matches("a-b-b-a"));
+		assertFalse(new WildcardMatcher("a*b*a").matches("alaska"));
+		assertTrue(new WildcardMatcher("Hello?orld").matches("HelloWorld"));
+		assertFalse(new WildcardMatcher("Hello?orld").matches("HelloWWWorld"));
+		assertTrue(new WildcardMatcher("?aco*").matches("jacoco"));
+	}
+
+	@Test
+	public void testMultiExpression() {
+		assertTrue(new WildcardMatcher("Hello:World").matches("World"));
+		assertTrue(new WildcardMatcher("Hello:World").matches("World"));
+		assertTrue(new WildcardMatcher("*Test:*Foo").matches("UnitTest"));
+	}
+
+	@Test
+	public void testDollar() {
+		assertTrue(new WildcardMatcher("*$*").matches("java/util/Map$Entry"));
+		assertTrue(new WildcardMatcher("*$$$*")
+				.matches("org/example/Enity$$$generated123"));
+	}
+
+}
diff --git a/org.jacoco.core/src/org/jacoco/core/matcher/ClassnameMatcher.java b/org.jacoco.core/src/org/jacoco/core/matcher/ClassnameMatcher.java
deleted file mode 100644
index 939bd5f..0000000
--- a/org.jacoco.core/src/org/jacoco/core/matcher/ClassnameMatcher.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the 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:
- *    Jeffry Gaston - initial API and implementation
- *
- *******************************************************************************/
-
-package org.jacoco.core.matcher;
-
-import java.util.List;
-
-import org.objectweb.asm.ClassReader;
-
-/**
- * A ClassnameMatcher matches ClassReader objects based on their class name
- */
-public class ClassnameMatcher implements Predicate<ClassReader> {
-	private IncludeExcludeMatcher<String> matcher = new IncludeExcludeMatcher<String>();
-
-	/**
-	 * Includes the given pattern from the matches of this matcher
-	 * @param pattern to include
-	 * @return this object (for chaining)
-	 */
-	public ClassnameMatcher include(String pattern) {
-		matcher.include(new WildcardMatcher(pattern));
-		return this;
-	}
-
-	/**
-	 * Adds the given patterns as inclusions for this matcher
-	 * @param patterns patterns to include
-	 * @return this object (for chaining)
-	 */
-	public ClassnameMatcher include(List<String> patterns) {
-		for (String pattern : patterns) {
-			include(pattern);
-		}
-		return this;
-	}
-
-	/**
-	 * As the given pattern as an exclusion for this matcher
-	 * @param pattern pattern to exclude
-	 * @return this object (for chaining)
-	 */
-	public ClassnameMatcher exclude(String pattern) {
-		matcher.exclude(new WildcardMatcher(pattern));
-		return this;
-	}
-
-	/**
-	 * As the given patterns as exclusions for this matcher
-	 * @param patterns patterns to include
-	 * @return this object (for chaining)
-	 */
-	public ClassnameMatcher exclude(List<String> patterns) {
-		for (String pattern : patterns) {
-			exclude(pattern);
-		}
-		return this;
-	}
-
-
-	/**
-	 * Tells whether this matcher matches this class reader
-	 * @param classReader the reader to match
-	 * @return whether this matcher matches
-	 */
-	@Override
-	public boolean apply(ClassReader classReader) {
-		return matcher.apply(classReader.getClassName().replaceAll("/", "."));
-	}
-
-}
diff --git a/org.jacoco.core/src/org/jacoco/core/matcher/IncludeExcludeMatcher.java b/org.jacoco.core/src/org/jacoco/core/matcher/IncludeExcludeMatcher.java
deleted file mode 100644
index 50f1d88..0000000
--- a/org.jacoco.core/src/org/jacoco/core/matcher/IncludeExcludeMatcher.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the 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:
- *    Jeffry Gaston - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.matcher;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * An IncludeExcludeMatcher matches a given input if
- * at least one inclusion matches and no exclusions match.
- */
-public class IncludeExcludeMatcher<T> implements Predicate<T> {
-	private List<Predicate<T>> inclusions = new ArrayList<Predicate<T>>();
-	private List<Predicate<T>> exclusions = new ArrayList<Predicate<T>>();
-
-	/**
-	 * Includes the given matcher
-	 * @param inclusion new matcher to include
-	 * @return this object (for chaining several calls)
-	 */
-	public IncludeExcludeMatcher include(Predicate<T> inclusion) {
-		inclusions.add(inclusion);
-		return this;
-	}
-
-	/**
-	 * Excludes a given matcher
-	 * @param exclusion
-	 * @return this object (for chaining several calls)
-	 */
-	public IncludeExcludeMatcher exclude(Predicate<T> exclusion) {
-		exclusions.add(exclusion);
-		return this;
-	}
-
-	/**
-	 * Tells whether this matcher matches this string
-	 * @param input the string match
-	 * @return whether the matcher matches
-	 */
-	@Override
-	public boolean apply(T input) {
-		// doesn't match if an exclusion matches
-		for (Predicate<T> exclusion : exclusions) {
-			if (exclusion.apply(input)) {
-				return false;
-			}
-		}
-		// does match if an inclusion matches
-		for (Predicate<T> inclusion : inclusions) {
-			if (inclusion.apply(input)) {
-				return true;
-			}
-		}
-		// no match; choose a default based on whether any includes were given
-		return (inclusions.size() == 0);
-	}
-}
diff --git a/org.jacoco.core/src/org/jacoco/core/matcher/Predicate.java b/org.jacoco.core/src/org/jacoco/core/matcher/Predicate.java
deleted file mode 100644
index 14d084b..0000000
--- a/org.jacoco.core/src/org/jacoco/core/matcher/Predicate.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
- * All rights reserved. This program and the accompanying materials
- * are made available under the 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:
- *    Jeffry Gaston - initial API and implementation
- *
- *******************************************************************************/
-package org.jacoco.core.matcher;
-
-/**
- * A simple interface telling whether a predicate matches an input.
- * Once the minimum supported version of Java is Java 1.8, then this can be replaced with the
- * built-in Java predicate.
- * While it could work to add a dependency on a library providing a similar interface, we prefer
- * to keep the number of dependencies low, to avoid forcing other dependencies onto
- * any builds that depend on Jacoco.
- */
-public interface Predicate<T> {
-	boolean apply(final T s);
-}
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 6b4fb0c..cf57512 100644
--- a/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/AgentOptions.java
@@ -22,7 +22,6 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.regex.Pattern;
-import org.jacoco.core.matcher.WildcardMatcher;
 
 /**
  * Utility to create and parse options for the runtime agent. Options are
diff --git a/org.jacoco.core/src/org/jacoco/core/matcher/WildcardMatcher.java b/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
similarity index 93%
rename from org.jacoco.core/src/org/jacoco/core/matcher/WildcardMatcher.java
rename to org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
index 6ae20c4..221e6ea 100644
--- a/org.jacoco.core/src/org/jacoco/core/matcher/WildcardMatcher.java
+++ b/org.jacoco.core/src/org/jacoco/core/runtime/WildcardMatcher.java
@@ -9,7 +9,7 @@
  *    Marc R. Hoffmann - initial API and implementation
  *    
  *******************************************************************************/
-package org.jacoco.core.matcher;
+package org.jacoco.core.runtime;
 
 import java.util.regex.Pattern;
 
@@ -18,7 +18,7 @@
  * Multiple expressions can be separated with a colon (:). In this case the
  * expression matches if at least one part matches.
  */
-public class WildcardMatcher implements Predicate<String> {
+public class WildcardMatcher {
 
 	private final Pattern pattern;
 
@@ -67,8 +67,7 @@
 	 *            string to test
 	 * @return <code>true</code>, if the expression matches
 	 */
-	@Override
-	public boolean apply(final String s) {
+	public boolean matches(final String s) {
 		return pattern.matcher(s).matches();
 	}
 
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 f424e81..f34c6cd 100644
--- a/org.jacoco.report/src/org/jacoco/report/check/Rule.java
+++ b/org.jacoco.report/src/org/jacoco/report/check/Rule.java
@@ -15,7 +15,7 @@
 import java.util.List;
 
 import org.jacoco.core.analysis.ICoverageNode.ElementType;
-import org.jacoco.core.matcher.WildcardMatcher;
+import org.jacoco.core.runtime.WildcardMatcher;
 
 /**
  * A rule applies for a certain element type and can define any number of limits
@@ -116,7 +116,7 @@
 	}
 
 	boolean matches(final String name) {
-		return includesMatcher.apply(name) && !excludesMatcher.apply(name);
+		return includesMatcher.matches(name) && !excludesMatcher.matches(name);
 	}
 
 }