/* * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions.
*/
/** * The supertype for tasks. * Complex operations are modeled by building and running a "Task" object. * Tasks are typically configured in a fluent series of calls.
*/ publicinterface Task { /** * Returns the name of the task. * @return the name of the task
*/
String name();
/** * Executes the task as currently configured. * @return a Result object containing the results of running the task * @throws TaskError if the outcome of the task was not as expected
*/
Result run() throws TaskError;
/** * Exception thrown by {@code Task.run} when the outcome is not as * expected.
*/ publicstaticclass TaskError extends Error { /** * Creates a TaskError object with the given message. * @param message the message
*/ public TaskError(String message) { super(message);
}
}
/** * An enum to indicate the mode a task should use it is when executed.
*/ publicenum Mode { /** * The task should use the interface used by the command * line launcher for the task. * For example, for javac: com.sun.tools.javac.Main.compile
*/
CMDLINE, /** * The task should use a publicly defined API for the task. * For example, for javac: javax.tools.JavaCompiler
*/
API, /** * The task should use the standard launcher for the task. * For example, $JAVA_HOME/bin/javac
*/
EXEC
}
/** * An enum to indicate the expected success or failure of executing a task.
*/ publicenum Expect { /** It is expected that the task will complete successfully. */
SUCCESS, /** It is expected that the task will not complete successfully. */
FAIL
}
/** * An enum to identify the streams that may be written by a {@code Task}.
*/ publicenum OutputKind { /** Identifies output written to {@code System.out} or {@code stdout}. */
STDOUT, /** Identifies output written to {@code System.err} or {@code stderr}. */
STDERR, /** Identifies output written to a stream provided directly to the task. */
DIRECT
};
/** * The results from running a {@link Task}. * The results contain the exit code returned when the tool was invoked, * and a map containing the output written to any streams during the * execution of the tool. * All tools support "stdout" and "stderr". * Tools that take an explicit PrintWriter save output written to that * stream as "main".
*/ publicstaticclass Result { final ToolBox toolBox; final Task task; finalint exitCode; final Map<OutputKind, String> outputMap;
/** * Returns the content of a specified stream. * @param outputKind the kind of the selected stream * @return the content that was written to that stream when the tool * was executed.
*/ public String getOutput(OutputKind outputKind) { return outputMap.get(outputKind);
}
/** * Returns the content of named streams as a list of lines. * @param outputKinds the kinds of the selected streams * @return the content that was written to the given streams when the tool * was executed.
*/ public List<String> getOutputLines(OutputKind... outputKinds) {
List<String> result = new ArrayList<>(); for (OutputKind outputKind : outputKinds) {
result.addAll(Arrays.asList(outputMap.get(outputKind).split(lineSeparator)));
} return result;
}
/** * Writes the content of the specified stream to the log. * @param kind the kind of the selected stream * @return this Result object
*/ public Result write(OutputKind kind) {
PrintStream out = toolBox.out;
String text = getOutput(kind); if (text == null || text.isEmpty())
out.println("[" + task.name() + ":" + kind + "]: empty"); else {
out.println("[" + task.name() + ":" + kind + "]:");
out.print(text);
} returnthis;
}
/** * Writes the content of all streams with any content to the log. * @return this Result object
*/ public Result writeAll() {
PrintStream out = toolBox.out;
outputMap.forEach((name, text) -> { if (!text.isEmpty()) {
out.println("[" + name + "]:");
out.print(text);
}
}); returnthis;
}
}
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.