RFR: 8159855: Create an SPI for tools

Jonathan Gibbons jonathan.gibbons at oracle.com
Wed Oct 5 04:06:01 UTC 2016


I don't understand: on the one hand you say you don't want the tool to 
be an API, but then you say you want to fit in with the proposed new 
ToolProvider SPI.

If you want to expose some tool-like API, you clearly can do so, and it 
can take whatever stream and other parameters you want to expose.  But 
doesn't JShell already expose a richer API that clients can use? Can you 
not provide an easy entry point in that package?

-- Jon


On 10/4/16 8:42 PM, Robert Field wrote:
>
> On 10/04/16 20:24, Jonathan Gibbons wrote:
>> Hi Robert,
>>
>> When you invoke jshell from the command line through the command line 
>> launcher, there must surely be a simpler entry point that is 
>> invoked.  Command line entry points don't provide Java Preferences 
>> objects, for example. That being said, I agree that jshell does 
>> require an input stream, and that is not supported by this SPI.
>
> This is how main calls that entry-point --
>
>     public static void main(String[] args) throws Exception {
>         new JShellTool(System.in, System.out, System.err, System.out,
>                  System.out, System.err,
>                  Preferences.userRoot().node("tool/JShell"),
>                  Locale.getDefault())
>                 .start(args);
>     }
>
> The only additional parameter needed to match this form of use would 
> be: InputStream in.
>
>>
>> If you want a richer API, why do you not export a public API for 
>> others to access and use?
>
> The tool is currently in: jdk.internal.jshell.tool
>
> We don't want the tool to be an API.
>
> We could change the package to not be internal and then have one class 
> with one method -- but that seems overkill.
>
> I'd much rather find a way that it could fit with what you are 
> developing.
>
> -Robert
>
>
>
>>
>> -- Jon
>>
>>
>>
>> On 10/4/16 6:37 PM, Robert Field wrote:
>>> I like the idea of this SPI.  And I'd like the jshell tool to 
>>> launchable in this manner,
>>>
>>> Unfortunately the shape of the SPI would not allow for this. The 
>>> current entry-point (which is in an internal package) is --
>>>
>>>     /**
>>>      * The constructor for the tool (used by tool launch via main 
>>> and by test
>>>      * harnesses to capture ins and outs.
>>>      * @param cmdin command line input -- snippets and commands
>>>      * @param cmdout command line output, feedback including errors
>>>      * @param cmderr start-up errors and debugging info
>>>      * @param console console control interaction
>>>      * @param userin code execution input, or null to use IOContext
>>>      * @param userout code execution output  -- System.out.printf("hi")
>>>      * @param usererr code execution error stream  -- 
>>> System.err.printf("Oops")
>>>      * @param prefs preferences to use
>>>      * @param locale locale to use
>>>      */
>>>     public JShellTool(InputStream cmdin, PrintStream cmdout, 
>>> PrintStream cmderr,
>>>             PrintStream console,
>>>             InputStream userin, PrintStream userout, PrintStream 
>>> usererr,
>>>             Preferences prefs, Locale locale)
>>>
>>> Some of these could defaulted, but not all.
>>>
>>> Any ideas?
>>>
>>> Thanks,
>>> Robert
>>>
>>>
>>>
>>> On 10/04/16 16:46, Jonathan Gibbons wrote:
>>>> Resend with non-mostly-empty subject line!
>>>>
>>>> -- Jon
>>>>
>>>> On 10/04/2016 04:39 PM, Jonathan Gibbons wrote:
>>>>> Core-libs folk,
>>>>>
>>>>> Please review the following change to add a new service provider 
>>>>> class
>>>>>     java.util.spi.ToolProvider
>>>>>
>>>>> which can be used provide simple "command-line" access to select JDK
>>>>> tools, without starting a new JVM.
>>>>>
>>>>> The following tools are updated to provide access through the new 
>>>>> SPI:
>>>>>     javac, javadoc, javap, jdeps
>>>>>
>>>>> It is expected that additional tools will also be updated to 
>>>>> provide access,
>>>>> but that will be done separately.
>>>>>
>>>>> Compiler-dev folk may wish to review the changes to the langtools 
>>>>> repository.
>>>>>
>>>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8159855
>>>>> Webrev: http://cr.openjdk.java.net/~jjg/8159855/webrev.03/
>>>>> API: 
>>>>> http://cr.openjdk.java.net/~jjg/8159855/api.02/java/util/spi/ToolProvider.html
>>>>>
>>>>> -- Jon
>>>>
>>>
>>
>



More information about the compiler-dev mailing list