mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-19 02:24:40 +02:00
8170251: Add javax.tools.Tool.name()
Reviewed-by: darcy, mchung
This commit is contained in:
parent
7aff5df624
commit
e9ddc68f70
7 changed files with 152 additions and 0 deletions
|
@ -45,6 +45,19 @@ import javax.lang.model.SourceVersion;
|
||||||
* @since 1.6
|
* @since 1.6
|
||||||
*/
|
*/
|
||||||
public interface Tool {
|
public interface Tool {
|
||||||
|
/**
|
||||||
|
* Returns the name of this tool, or an empty string if no name is provided.
|
||||||
|
*
|
||||||
|
* @apiNote It is recommended that the name be the same as would be
|
||||||
|
* used on the command line: for example, "javac", "jar", "jlink".
|
||||||
|
* @implNote This implementation returns an empty string.
|
||||||
|
*
|
||||||
|
* @return the name of this tool
|
||||||
|
* @since 9
|
||||||
|
*/
|
||||||
|
default String name() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Run the tool with the given I/O channels and arguments. By
|
* Run the tool with the given I/O channels and arguments. By
|
||||||
|
|
|
@ -77,6 +77,12 @@ public final class JavacTool implements JavaCompiler {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public JavacTool() {}
|
public JavacTool() {}
|
||||||
|
|
||||||
|
// @Override // can't add @Override until bootstrap JDK provides Tool.name()
|
||||||
|
@DefinedBy(Api.COMPILER)
|
||||||
|
public String name() {
|
||||||
|
return "javac";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Static factory method for creating new instances of this tool.
|
* Static factory method for creating new instances of this tool.
|
||||||
* @return new instance of this tool
|
* @return new instance of this tool
|
||||||
|
|
|
@ -81,5 +81,8 @@ module jdk.compiler {
|
||||||
|
|
||||||
provides javax.tools.JavaCompiler
|
provides javax.tools.JavaCompiler
|
||||||
with com.sun.tools.javac.api.JavacTool;
|
with com.sun.tools.javac.api.JavacTool;
|
||||||
|
|
||||||
|
provides javax.tools.Tool
|
||||||
|
with com.sun.tools.javac.api.JavacTool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,6 +62,11 @@ import jdk.javadoc.internal.tool.ToolOption;
|
||||||
* or deletion without notice.</b></p>
|
* or deletion without notice.</b></p>
|
||||||
*/
|
*/
|
||||||
public class JavadocTool implements DocumentationTool {
|
public class JavadocTool implements DocumentationTool {
|
||||||
|
// @Override // can't add @Override until bootstrap JDK provides Tool.name()
|
||||||
|
public String name() {
|
||||||
|
return "javadoc";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DocumentationTask getTask(
|
public DocumentationTask getTask(
|
||||||
Writer out,
|
Writer out,
|
||||||
|
|
|
@ -46,5 +46,8 @@ module jdk.javadoc {
|
||||||
|
|
||||||
provides javax.tools.DocumentationTool
|
provides javax.tools.DocumentationTool
|
||||||
with jdk.javadoc.internal.api.JavadocTool;
|
with jdk.javadoc.internal.api.JavadocTool;
|
||||||
|
|
||||||
|
provides javax.tools.Tool
|
||||||
|
with jdk.javadoc.internal.api.JavadocTool;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
61
langtools/test/jdk/javadoc/tool/api/TestName.java
Normal file
61
langtools/test/jdk/javadoc/tool/api/TestName.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8170251
|
||||||
|
* @summary Add javax.tools.Tool.name()
|
||||||
|
* @modules jdk.javadoc/jdk.javadoc.internal.api
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
import javax.tools.Tool;
|
||||||
|
import jdk.javadoc.internal.api.JavadocTool;
|
||||||
|
|
||||||
|
public class TestName {
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
new TestName().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() throws Exception {
|
||||||
|
Optional<Tool> opt = findFirst("javadoc");
|
||||||
|
if (!opt.isPresent()) {
|
||||||
|
throw new Exception("tool not found");
|
||||||
|
}
|
||||||
|
if (!(opt.get() instanceof JavadocTool)) {
|
||||||
|
throw new Exception("unexpected tool found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<Tool> findFirst(String name) {
|
||||||
|
getClass().getModule().addUses(Tool.class);
|
||||||
|
for (Tool p : ServiceLoader.load(Tool.class,
|
||||||
|
ClassLoader.getSystemClassLoader())) {
|
||||||
|
if (p.name().equals(name)) {
|
||||||
|
return Optional.of(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
61
langtools/test/tools/javac/api/TestName.java
Normal file
61
langtools/test/tools/javac/api/TestName.java
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8170251
|
||||||
|
* @summary Add javax.tools.Tool.name()
|
||||||
|
* @modules jdk.compiler/com.sun.tools.javac.api
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.ServiceLoader;
|
||||||
|
import javax.tools.Tool;
|
||||||
|
import com.sun.tools.javac.api.JavacTool;
|
||||||
|
|
||||||
|
public class TestName {
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
new TestName().run();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() throws Exception {
|
||||||
|
Optional<Tool> opt = findFirst("javac");
|
||||||
|
if (!opt.isPresent()) {
|
||||||
|
throw new Exception("tool not found");
|
||||||
|
}
|
||||||
|
if (!(opt.get() instanceof JavacTool)) {
|
||||||
|
throw new Exception("unexpected tool found");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Optional<Tool> findFirst(String name) {
|
||||||
|
getClass().getModule().addUses(Tool.class);
|
||||||
|
for (Tool p : ServiceLoader.load(Tool.class,
|
||||||
|
ClassLoader.getSystemClassLoader())) {
|
||||||
|
if (p.name().equals(name)) {
|
||||||
|
return Optional.of(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue