116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov/*******************************************************************************
2b9d1b54e300318b470d9fedccc69d75187016444Evgeny Mandrikov * Copyright (c) 2009, 2018 Mountainminds GmbH & Co. KG and Contributors
316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * All rights reserved. This program and the accompanying materials
416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * are made available under the terms of the Eclipse Public License v1.0
516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * which accompanies this distribution, and is available at
616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * http://www.eclipse.org/legal/epl-v10.html
716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov *
816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Contributors:
916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov *    Evgeny Mandrikov - initial API and implementation
1016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov *
1116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov *******************************************************************************/
1216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovpackage org.jacoco.maven;
1316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
146fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikovimport java.util.List;
156fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov
1616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovimport org.apache.maven.plugin.AbstractMojo;
17253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieberimport org.apache.maven.plugin.MojoExecutionException;
18253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieberimport org.apache.maven.plugin.MojoFailureException;
19ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikovimport org.apache.maven.plugins.annotations.Parameter;
2016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovimport org.apache.maven.project.MavenProject;
2116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
2216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov/**
2316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov * Base class for JaCoCo Mojos.
2416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov */
2516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikovpublic abstract class AbstractJacocoMojo extends AbstractMojo {
2616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
2716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	/**
2816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 * Maven project.
2916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 */
30ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov	@Parameter(property = "project", readonly = true)
3116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	private MavenProject project;
3216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
3316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	/**
346fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	 * A list of class files to include in instrumentation/analysis/reports. May
3584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * use wildcard characters (* and ?). When not specified everything will be
3684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * included.
376fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	 */
38ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov	@Parameter
396fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	private List<String> includes;
406fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov
416fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	/**
426fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	 * A list of class files to exclude from instrumentation/analysis/reports.
4384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * May use wildcard characters (* and ?). When not specified nothing will be
4484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * excluded.
456fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	 */
46ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov	@Parameter
476fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	private List<String> excludes;
486fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov
496fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	/**
5016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 * Flag used to suppress execution.
5116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 */
52ccbf42b97bf126372ca76431881314e1eb57554eEvgeny Mandrikov	@Parameter(property = "jacoco.skip", defaultValue = "false")
5316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	private boolean skip;
5416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
55253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	public final void execute() throws MojoExecutionException,
56253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber			MojoFailureException {
5716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov		if (skip) {
5840605f98c6ea94ba045f20ef450050a771d7d6b9Mirko Friedenhagen			getLog().info(
5940605f98c6ea94ba045f20ef450050a771d7d6b9Mirko Friedenhagen					"Skipping JaCoCo execution because property jacoco.skip is set.");
60ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov			skipMojo();
6116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov			return;
6216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov		}
6316a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov		executeMojo();
6416a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	}
6516a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
6616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	/**
6716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 * Executes Mojo.
68253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *
69253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 * @throws MojoExecutionException
70253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *             if an unexpected problem occurs. Throwing this exception
71253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *             causes a "BUILD ERROR" message to be displayed.
72253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 * @throws MojoFailureException
73253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *             if an expected problem (such as a compilation failure)
74253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *             occurs. Throwing this exception causes a "BUILD FAILURE"
75253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	 *             message to be displayed.
7616a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 */
77253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber	protected abstract void executeMojo() throws MojoExecutionException,
78253c64d4e3d312197a8d2e5d05497638ff6d4314Kyle Lieber			MojoFailureException;
7916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
8016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	/**
81ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov	 * Skips Mojo.
82ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov	 */
83ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov	protected void skipMojo() {
84ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov	}
85ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov
86ca863838a09a935572c3291da708870f6b9bc3c3Evgeny Mandrikov	/**
8716a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 * @return Maven project
8816a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	 */
8916a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	protected final MavenProject getProject() {
9016a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov		return project;
9116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov	}
9216a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov
9384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	/**
9484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * Returns the list of class files to include.
9584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 *
9684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * @return class files to include, may contain wildcard characters
9784cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 */
986fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	protected List<String> getIncludes() {
996fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov		return includes;
1006fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	}
1016fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov
10284cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	/**
10384cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * Returns the list of class files to exclude.
10484cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 *
10584cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 * @return class files to exclude, may contain wildcard characters
10684cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann	 */
1076fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	protected List<String> getExcludes() {
1086fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov		return excludes;
1096fa913b07e783f23242995b95c70ae6e6570e130Evgeny Mandrikov	}
11084cfce1382ace881993993b9d1b1968f7e1222ddMarc R. Hoffmann
11116a2a0cb1432cfc031525374f498c1baf6375b2dEvgeny Mandrikov}
112