blob: 7028a0e08cf58cadfccfd13bbe07a49a58bac6d1 [file] [log] [blame]
/*******************************************************************************
* 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
*
* Contributors:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
package org.jacoco.cli.internal;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.CmdLineException;
/**
* Entry point for all command line operations.
*/
public class Main extends Command {
private static final PrintWriter NUL = new PrintWriter(new Writer() {
@Override
public void write(final char[] arg0, final int arg1, final int arg2)
throws IOException {
}
@Override
public void flush() throws IOException {
}
@Override
public void close() throws IOException {
}
});
private final String[] args;
Main(final String... args) {
this.args = args;
}
@Argument(handler = CommandHandler.class, required = true)
Command command;
@Override
public String description() {
return "Command line interface for JaCoCo.";
}
@Override
public String usage(final CommandParser parser) {
return JAVACMD + "--help | <command>";
}
@Override
public int execute(PrintWriter out, final PrintWriter err)
throws Exception {
final CommandParser mainParser = new CommandParser(this);
try {
mainParser.parseArgument(args);
} catch (final CmdLineException e) {
((CommandParser) e.getParser()).getCommand().printHelp(err);
err.println();
err.println(e.getMessage());
return -1;
}
if (help) {
printHelp(out);
return 0;
}
if (command.help) {
command.printHelp(out);
return 0;
}
if (command.quiet) {
out = NUL;
}
return command.execute(out, err);
}
/**
* Main entry point for program invocations.
*
* @param args
* program arguments
* @throws Exception
* All internal exceptions are directly passed on to get printed
* on the console
*/
public static void main(final String... args) throws Exception {
final PrintWriter out = new PrintWriter(System.out, true);
final PrintWriter err = new PrintWriter(System.err, true);
final int returncode = new Main(args).execute(out, err);
System.exit(returncode);
}
}