diff options
Diffstat (limited to 'org.jacoco.cli/src/org/jacoco/cli')
13 files changed, 0 insertions, 1049 deletions
diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java b/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java deleted file mode 100644 index 06a6cea0..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/Command.java +++ /dev/null @@ -1,91 +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.cli.internal; - -import java.io.PrintWriter; -import java.io.StringWriter; - -import org.kohsuke.args4j.Option; - -/** - * Common interface for all commands. - */ -public abstract class Command { - - /** - * Common command line prefix. - */ - public static final String JAVACMD = "java -jar jacococli.jar "; - - /** - * Flag whether help should be printed for this command. - */ - @Option(name = "-help", usage = "show help", help = true) - public boolean help = false; - - /** - * Flag whether output to stdout should be suppressed. - */ - @Option(name = "-quiet", usage = "suppress all output on stdout") - public boolean quiet = false; - - /** - * @return Short description of the command. - */ - public abstract String description(); - - /** - * @return name of the command - */ - public String name() { - return getClass().getSimpleName().toLowerCase(); - } - - /** - * @param parser - * parser for this command - * @return usage string displayed for help - */ - public String usage(final CommandParser parser) { - final StringWriter writer = new StringWriter(); - parser.printSingleLineUsage(writer, null); - return JAVACMD + name() + writer; - } - - /** - * Executes the given command. - * - * @param out - * std out - * @param err - * std err - * @return exit code, should be 0 for normal operation - * @throws Exception - * any exception that my occur during execution - */ - public abstract int execute(PrintWriter out, PrintWriter err) - throws Exception; - - /** - * Prints textual help for this command. - * - * @param writer - * output destination - */ - protected void printHelp(final PrintWriter writer) { - final CommandParser parser = new CommandParser(this); - writer.println("Usage: " + parser.getCommand().usage(parser)); - writer.println(description()); - parser.printUsage(writer, null); - } - -} diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java deleted file mode 100644 index 3c6a2a54..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandHandler.java +++ /dev/null @@ -1,89 +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.cli.internal; - -import java.util.AbstractList; - -import org.jacoco.cli.internal.commands.AllCommands; -import org.kohsuke.args4j.CmdLineException; -import org.kohsuke.args4j.CmdLineParser; -import org.kohsuke.args4j.OptionDef; -import org.kohsuke.args4j.spi.Messages; -import org.kohsuke.args4j.spi.OptionHandler; -import org.kohsuke.args4j.spi.Parameters; -import org.kohsuke.args4j.spi.Setter; - -/** - * {@link OptionHandler} which uses {@link CommandParser} internally to provide - * help context also for sub-commands. - */ -public class CommandHandler extends OptionHandler<Command> { - - /** - * This constructor is required by the args4j framework. - * - * @param parser - * @param option - * @param setter - */ - public CommandHandler(final CmdLineParser parser, final OptionDef option, - final Setter<Object> setter) { - super(parser, - new OptionDef(AllCommands.names(), "<command>", - option.required(), option.help(), option.hidden(), - CommandHandler.class, option.isMultiValued()) { - }, setter); - } - - @Override - public int parseArguments(final Parameters params) throws CmdLineException { - final String subCmd = params.getParameter(0); - - for (final Command c : AllCommands.get()) { - if (c.name().equals(subCmd)) { - parseSubArguments(c, params); - setter.addValue(c); - return params.size(); // consume all the remaining tokens - } - } - - throw new CmdLineException(owner, - Messages.ILLEGAL_OPERAND.format(option.toString(), subCmd)); - } - - private void parseSubArguments(final Command c, final Parameters params) - throws CmdLineException { - final CmdLineParser p = new CommandParser(c); - p.parseArgument(new AbstractList<String>() { - @Override - public String get(final int index) { - try { - return params.getParameter(index + 1); - } catch (final CmdLineException e) { - // invalid index was accessed. - throw new IndexOutOfBoundsException(); - } - } - - @Override - public int size() { - return params.size() - 1; - } - }); - } - - @Override - public String getDefaultMetaVariable() { - return "<command>"; - } - -} diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java b/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java deleted file mode 100644 index 0e31093b..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/CommandParser.java +++ /dev/null @@ -1,33 +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.cli.internal; - -import org.kohsuke.args4j.CmdLineParser; - -/** - * Parser which remembers the parsed command to have additional context - * information to produce help output. - */ -public class CommandParser extends CmdLineParser { - - private final Command command; - - CommandParser(final Command command) { - super(command); - this.command = command; - } - - Command getCommand() { - return command; - } - -} diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java b/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java deleted file mode 100644 index 8c6f3be4..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/Main.java +++ /dev/null @@ -1,106 +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.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) { - err.println(e.getMessage()); - err.println(); - ((CommandParser) e.getParser()).getCommand().printHelp(err); - 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 { - new Main(args).execute(new PrintWriter(System.out, true), - new PrintWriter(System.err, true)); - } - -} diff --git a/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java b/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java deleted file mode 100644 index 83241c9a..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/XmlDocumentation.java +++ /dev/null @@ -1,78 +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.cli.internal; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.util.List; - -import org.jacoco.cli.internal.commands.AllCommands; -import org.jacoco.report.internal.xml.XMLDocument; -import org.jacoco.report.internal.xml.XMLElement; -import org.kohsuke.args4j.spi.OptionHandler; - -/** - * Internal utility to dump all command descriptions as XML. - */ -public final class XmlDocumentation { - - private XmlDocumentation() { - } - - private static void writeCommand(final Command command, - final XMLElement parent) throws IOException { - final CommandParser parser = new CommandParser(command); - final XMLElement element = parent.element("command"); - element.attr("name", command.name()); - element.element("usage").text(command.usage(parser)); - element.element("description").text(command.description()); - writeOptions(element, parser.getArguments()); - writeOptions(element, parser.getOptions()); - } - - private static void writeOptions(final XMLElement parent, - @SuppressWarnings("rawtypes") final List<OptionHandler> list) - throws IOException { - for (final OptionHandler<?> o : list) { - final XMLElement optionNode = parent.element("option"); - optionNode.attr("required", String.valueOf(o.option.required())); - optionNode.attr("multiple", - String.valueOf(o.setter.isMultiValued())); - optionNode.element("usage").text(o.getNameAndMeta(null)); - optionNode.element("description").text(o.option.usage()); - } - } - - /** - * Called during the build process. - * - * @param args - * exactly one argument expected with the target location - * @throws IOException - * if XML document cannot be written - */ - public static void main(final String... args) throws IOException { - final File file = new File(args[0]); - file.getParentFile().mkdirs(); - - final XMLElement root = new XMLDocument("documentation", null, null, - "UTF-8", true, new FileOutputStream(file)); - - for (final Command c : AllCommands.get()) { - writeCommand(c, root); - } - - root.close(); - } - -} 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 deleted file mode 100644 index e0df1d91..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/AllCommands.java +++ /dev/null @@ -1,49 +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.cli.internal.commands; - -import java.util.Arrays; -import java.util.List; - -import org.jacoco.cli.internal.Command; - -/** - * List of all available commands. - */ -public final class AllCommands { - - private AllCommands() { - } - - /** - * @return list of new instances of all available commands - */ - public static List<Command> get() { - return Arrays.asList(new Dump(), new Instrument(), new Merge(), - new Report(), new ClassInfo(), new ExecInfo(), new Version()); - } - - /** - * @return String containing all available command names - */ - public static String names() { - final StringBuilder sb = new StringBuilder(); - for (final Command c : get()) { - if (sb.length() > 0) { - sb.append('|'); - } - sb.append(c.name()); - } - return sb.toString(); - } - -} 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 deleted file mode 100644 index 6cf66e14..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ClassInfo.java +++ /dev/null @@ -1,71 +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.cli.internal.commands; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.analysis.Analyzer; -import org.jacoco.core.analysis.IClassCoverage; -import org.jacoco.core.analysis.ICoverageVisitor; -import org.jacoco.core.data.ExecutionDataStore; -import org.kohsuke.args4j.Argument; - -/** - * The <code>classinfo</code> command. - */ -public class ClassInfo extends Command { - - @Argument(usage = "location of Java class files", metaVar = "<classlocations>") - List<File> classfiles = new ArrayList<File>(); - - @Override - public String description() { - return "Print information about Java class files at the provided location."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - final Analyzer analyzer = new Analyzer(new ExecutionDataStore(), - new ICoverageVisitor() { - public void visitCoverage(final IClassCoverage coverage) { - print(coverage, out); - } - }); - - for (final File file : classfiles) { - analyzer.analyzeAll(file); - } - return 0; - } - - private void print(final IClassCoverage coverage, final PrintWriter out) { - 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("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())); - } - -} 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 deleted file mode 100644 index d56a2a18..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Dump.java +++ /dev/null @@ -1,77 +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.cli.internal.commands; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.net.InetAddress; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.runtime.AgentOptions; -import org.jacoco.core.tools.ExecDumpClient; -import org.jacoco.core.tools.ExecFileLoader; -import org.kohsuke.args4j.Option; - -/** - * The <code>dump</code> command. - */ -public class Dump extends Command { - - @Option(name = "-address", usage = "host name or ip address to connect to (default localhost)", metaVar = "<address>") - String address = AgentOptions.DEFAULT_ADDRESS; - - @Option(name = "-port", usage = "the port to connect to (default 6300)", metaVar = "<port>") - int port = AgentOptions.DEFAULT_PORT; - - @Option(name = "-destfile", usage = "file to write execution data to", metaVar = "<path>", required = true) - File destfile; - - @Option(name = "-reset", usage = "reset execution data on test target after dump") - boolean reset = false; - - @Option(name = "-retry", usage = "number of retries (default 0)", metaVar = "<count>") - int retrycount = 0; - - @Override - public String description() { - return "Request execution data from a JaCoCo agent running in 'tcpserver' output mode."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws Exception { - final ExecDumpClient client = new ExecDumpClient() { - @Override - protected void onConnecting(final InetAddress address, - final int port) { - out.printf("[INFO] Connecting to %s:%s.%n", address, - Integer.valueOf(port)); - } - - @Override - protected void onConnectionFailure(final IOException exception) { - err.printf("[WARN] %s.%n", exception.getMessage()); - } - }; - client.setReset(reset); - client.setRetryCount(retrycount); - - final ExecFileLoader loader = client.dump(address, port); - out.printf("[INFO] Writing execution data to %s.%n", - destfile.getAbsolutePath()); - loader.save(destfile, true); - - return 0; - } - -} 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 deleted file mode 100644 index e798bf6f..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/ExecInfo.java +++ /dev/null @@ -1,90 +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.cli.internal.commands; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.data.ExecutionData; -import org.jacoco.core.data.ExecutionDataReader; -import org.jacoco.core.data.IExecutionDataVisitor; -import org.jacoco.core.data.ISessionInfoVisitor; -import org.jacoco.core.data.SessionInfo; -import org.kohsuke.args4j.Argument; - -/** - * The <code>execinfo</code> command. - */ -public class ExecInfo extends Command { - - @Argument(usage = "list of JaCoCo *.exec files to read", metaVar = "<execfiles>") - List<File> execfiles = new ArrayList<File>(); - - @Override - public String description() { - return "Print exec file content in human readable format."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - for (final File file : execfiles) { - dump(file, out); - } - return 0; - } - - private void dump(final File file, final PrintWriter out) - throws IOException { - out.printf("[INFO] Loading exec file %s.%n", file); - out.println("CLASS ID HITS/PROBES CLASS NAME"); - - final FileInputStream in = new FileInputStream(file); - 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()), - new Date(info.getDumpTimeStamp())); - } - }); - reader.setExecutionDataVisitor(new IExecutionDataVisitor() { - public void visitClassExecution(final ExecutionData data) { - out.printf("%016x %3d of %3d %s%n", - Long.valueOf(data.getId()), - Integer.valueOf(getHitCount(data.getProbes())), - Integer.valueOf(data.getProbes().length), - data.getName()); - } - }); - reader.read(); - in.close(); - out.println(); - } - - private int getHitCount(final boolean[] data) { - int count = 0; - for (final boolean hit : data) { - if (hit) { - count++; - } - } - return count; - } - -} 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 deleted file mode 100644 index 5fefc9dc..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Instrument.java +++ /dev/null @@ -1,96 +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: - * John Keeping - initial implementation - * Marc R. Hoffmann - rework - * - *******************************************************************************/ -package org.jacoco.cli.internal.commands; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.instr.Instrumenter; -import org.jacoco.core.runtime.OfflineInstrumentationAccessGenerator; -import org.kohsuke.args4j.Argument; -import org.kohsuke.args4j.Option; - -/** - * The <code>instrument</code> command. - */ -public class Instrument extends Command { - - @Option(name = "-dest", usage = "path to write instrumented Java classes to", metaVar = "<dir>", required = true) - File dest; - - @Argument(usage = "list of folder or files to instrument recusively", metaVar = "<sourcefiles>") - List<File> source = new ArrayList<File>(); - - private Instrumenter instrumenter; - - @Override - public String description() { - return "Off-line instrumentation of Java class files and JAR files."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - instrumenter = new Instrumenter( - new OfflineInstrumentationAccessGenerator()); - int total = 0; - for (final File s : source) { - total += instrumentRecursive(s, dest); - } - out.printf("[INFO] %s classes instrumented to %s.%n", - Integer.valueOf(total), dest.getAbsolutePath()); - return 0; - } - - private int instrumentRecursive(final File src, final File dest) - throws IOException { - int total = 0; - if (src.isDirectory()) { - for (final File child : src.listFiles()) { - total += instrumentRecursive(child, - new File(dest, child.getName())); - } - } else { - total += instrument(src, dest); - } - return total; - } - - private int instrument(final File src, final File dest) throws IOException { - dest.getParentFile().mkdirs(); - final InputStream input = new FileInputStream(src); - try { - final OutputStream output = new FileOutputStream(dest); - try { - return instrumenter.instrumentAll(input, output, - src.getAbsolutePath()); - } finally { - output.close(); - } - } catch (final IOException e) { - dest.delete(); - throw e; - } finally { - input.close(); - } - } - -} 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 deleted file mode 100644 index 530285c8..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Merge.java +++ /dev/null @@ -1,62 +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.cli.internal.commands; - -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.List; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.tools.ExecFileLoader; -import org.kohsuke.args4j.Argument; -import org.kohsuke.args4j.Option; - -/** - * The <code>merge</code> command. - */ -public class Merge extends Command { - - @Argument(usage = "list of JaCoCo *.exec files to read", metaVar = "<execfiles>") - List<File> execfiles = new ArrayList<File>(); - - @Option(name = "-destfile", usage = "file to write merged execution data to", metaVar = "<path>", required = true) - File destfile; - - @Override - public String description() { - return "Merges multiple exec files into a new one."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - final ExecFileLoader loader = loadExecutionData(out); - out.printf("[INFO] Writing execution data to %s.%n", - destfile.getAbsolutePath()); - loader.save(destfile, true); - return 0; - } - - private ExecFileLoader loadExecutionData(final PrintWriter out) - throws IOException { - final ExecFileLoader loader = new ExecFileLoader(); - for (final File file : execfiles) { - out.printf("[INFO] Loading execution data file %s.%n", - file.getAbsolutePath()); - loader.load(file); - } - return loader; - } - -} 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 deleted file mode 100644 index be2fbfe4..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Report.java +++ /dev/null @@ -1,170 +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: - * John Keeping - initial implementation - * Marc R. Hoffmann - rework - * - *******************************************************************************/ -package org.jacoco.cli.internal.commands; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.analysis.Analyzer; -import org.jacoco.core.analysis.CoverageBuilder; -import org.jacoco.core.analysis.IBundleCoverage; -import org.jacoco.core.analysis.IClassCoverage; -import org.jacoco.core.data.ExecutionDataStore; -import org.jacoco.core.tools.ExecFileLoader; -import org.jacoco.report.DirectorySourceFileLocator; -import org.jacoco.report.FileMultiReportOutput; -import org.jacoco.report.IReportVisitor; -import org.jacoco.report.ISourceFileLocator; -import org.jacoco.report.MultiReportVisitor; -import org.jacoco.report.MultiSourceFileLocator; -import org.jacoco.report.csv.CSVFormatter; -import org.jacoco.report.html.HTMLFormatter; -import org.jacoco.report.xml.XMLFormatter; -import org.kohsuke.args4j.Argument; -import org.kohsuke.args4j.Option; - -/** - * The <code>report</code> command. - */ -public class Report extends Command { - - @Argument(usage = "list of JaCoCo *.exec files to read", metaVar = "<execfiles>") - List<File> execfiles = new ArrayList<File>(); - - @Option(name = "-classfiles", usage = "location of Java class files", metaVar = "<path>", required = true) - List<File> classfiles = new ArrayList<File>(); - - @Option(name = "-sourcefiles", usage = "location of the source files", metaVar = "<path>") - List<File> sourcefiles = new ArrayList<File>(); - - @Option(name = "-tabwith", usage = "tab stop width for the source pages (default 4)", metaVar = "<n>") - int tabwidth = 4; - - @Option(name = "-name", usage = "name used for this report", metaVar = "<name>") - String name = "JaCoCo Coverage Report"; - - @Option(name = "-encoding", usage = "source file encoding (default platform encoding)", metaVar = "<charset>") - String encoding; - - @Option(name = "-xml", usage = "output file for the XML report", metaVar = "<file>") - File xml; - - @Option(name = "-csv", usage = "output file for the CSV report", metaVar = "<file>") - File csv; - - @Option(name = "-html", usage = "output directory for the HTML report", metaVar = "<dir>") - File html; - - @Override - public String description() { - return "Generate reports in different formats by reading exec and Java class files."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - final ExecFileLoader loader = loadExecutionData(out); - final IBundleCoverage bundle = analyze(loader.getExecutionDataStore(), - out); - writeReports(bundle, loader, out); - return 0; - } - - private ExecFileLoader loadExecutionData(final PrintWriter out) - throws IOException { - final ExecFileLoader loader = new ExecFileLoader(); - for (final File file : execfiles) { - out.printf("[INFO] Loading execution data file %s.%n", - file.getAbsolutePath()); - loader.load(file); - } - return loader; - } - - private IBundleCoverage analyze(final ExecutionDataStore data, - final PrintWriter out) throws IOException { - final CoverageBuilder builder = new CoverageBuilder(); - final Analyzer analyzer = new Analyzer(data, builder); - for (final File f : classfiles) { - analyzer.analyzeAll(f); - } - printNoMatchWarning(builder.getNoMatchClasses(), out); - return builder.getBundle(name); - } - - private void printNoMatchWarning(final Collection<IClassCoverage> nomatch, - final PrintWriter out) { - if (!nomatch.isEmpty()) { - out.println( - "[WARN] Some classes do not match with execution data."); - out.println( - "[WARN] For report generation the same class files must be used as at runtime."); - for (final IClassCoverage c : nomatch) { - out.printf( - "[WARN] Execution data for class %s does not match.%n", - c.getName()); - } - } - } - - private void writeReports(final IBundleCoverage bundle, - final ExecFileLoader loader, final PrintWriter out) - throws IOException { - out.printf("[INFO] Writing report with %s classes.%n", - Integer.valueOf(bundle.getClassCounter().getTotalCount())); - final IReportVisitor visitor = createReportVisitor(); - visitor.visitInfo(loader.getSessionInfoStore().getInfos(), - loader.getExecutionDataStore().getContents()); - visitor.visitBundle(bundle, getSourceLocator()); - visitor.visitEnd(); - } - - private IReportVisitor createReportVisitor() - throws IOException, IOException { - final List<IReportVisitor> visitors = new ArrayList<IReportVisitor>(); - - if (xml != null) { - final XMLFormatter formatter = new XMLFormatter(); - visitors.add(formatter.createVisitor(new FileOutputStream(xml))); - } - - if (csv != null) { - final CSVFormatter formatter = new CSVFormatter(); - visitors.add(formatter.createVisitor(new FileOutputStream(csv))); - } - - if (html != null) { - final HTMLFormatter formatter = new HTMLFormatter(); - visitors.add( - formatter.createVisitor(new FileMultiReportOutput(html))); - } - - return new MultiReportVisitor(visitors); - } - - private ISourceFileLocator getSourceLocator() { - final MultiSourceFileLocator multi = new MultiSourceFileLocator( - tabwidth); - for (final File f : sourcefiles) { - multi.add(new DirectorySourceFileLocator(f, encoding, tabwidth)); - } - return multi; - } - -} 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 deleted file mode 100644 index ef1e33a1..00000000 --- a/org.jacoco.cli/src/org/jacoco/cli/internal/commands/Version.java +++ /dev/null @@ -1,37 +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.cli.internal.commands; - -import java.io.IOException; -import java.io.PrintWriter; - -import org.jacoco.cli.internal.Command; -import org.jacoco.core.JaCoCo; - -/** - * The <code>version</code> command. - */ -public class Version extends Command { - - @Override - public String description() { - return "Print JaCoCo version information."; - } - - @Override - public int execute(final PrintWriter out, final PrintWriter err) - throws IOException { - out.println(JaCoCo.VERSION); - return 0; - } - -} |