WIP: 8154714: JShell API: addExports support [for Java 9.X]

Jan Lahoda jan.lahoda at oracle.com
Mon Sep 26 20:29:10 UTC 2016


Seems OK to me.

Jan

On 26.9.2016 22:20, ShinyaYoshida wrote:
> Hi Robert,
> Thank you for asking for the internal review.
>
> I've updated and replaced the previous webrev!
> http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.11.langtools/
>
> Regards,
> shinyafox(Shinya Yoshida)
>
> 2016-09-26 10:10 GMT-07:00 Robert Field <robert.field at oracle.com
> <mailto:robert.field at oracle.com>>:
>
>     That's great!
>
>     I've submitted this to internal review of the new command-line
>     options.  We should get that in less than a week.
>
>     One nit, I've noticed that --help doesn't list the new -X option.
>     Borrowing from "java -help" this should be:
>
>         -X                   Print help on non-standard options
>
>
>     Thanks!
>
>     -Robert
>
>
>
>     On 09/23/16 23:49, ShinyaYoshida wrote:
>>     Hi Robert,
>>
>>
>>     2016-09-23 0:06 GMT-07:00 Robert Field <robert.field at oracle.com
>>     <mailto:robert.field at oracle.com>>:
>>
>>
>>         On 09/22/16 12:51, ShinyaYoshida wrote:
>>>         Hi Robert and Jan,
>>>         I've updated the webrev to add -C option and --add-exports
>>>         option(as a non-standard option):
>>>         http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.10.langtools/
>>>         <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.10.langtools/>
>>>
>>>         Could you review and give me a comment?
>>
>>         Wow!  This is so much simpler an approach!
>>
>>         A couple little things and this is good...
>>
>>         In JShellTool, should --add-exports have .withRequiredArg()
>>         rather than .withOptionalArg()?
>>
>>     Yeah! That's what I want to use!!
>>     I've fixed
>>
>>
>>         I think
>>
>>          645         if (options.has("X")) {
>>          646             printUsageX();
>>          647         }
>>
>>         Should be up below "help", and, like "help", should abort by
>>         returning null.
>>
>>     Absolutely yes!!
>>
>>     New version is here:
>>     http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.11.langtools/
>>     <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.11.langtools/>
>>
>>     Regards,
>>     shinyafox(ShinyaYoshida)
>>
>>
>>         Your comment looks fine.
>>
>>         Test and resource file look good.
>>
>>         Thanks,
>>         Robert
>>
>>
>>
>>>
>>>         Another issue is found until implementing:
>>>         https://bugs.openjdk.java.net/browse/JDK-8166581
>>>         <https://bugs.openjdk.java.net/browse/JDK-8166581>
>>>
>>>         Could you confirm and address this?
>>>
>>>         Regards,
>>>         shinyafox(Shinya Yoshida)@JavaOne 20016
>>>
>>>         2016-09-13 9:26 GMT-07:00 Robert Field
>>>         <robert.field at oracle.com <mailto:robert.field at oracle.com>>:
>>>
>>>
>>>             On 09/12/16 17:55, ShinyaYoshida wrote:
>>>>             Hi Jan and all,
>>>>             I've confirmed your snippet.
>>>>             Certainly it have a security problem and it should be
>>>>             avoided.
>>>>
>>>>             I'll update my patch to add a new command-line option -C
>>>>             which give the option to compiler.
>>>>
>>>>             In addition to, I'd like to add a new command-line
>>>>             option --add-exports <module>/<package> which is a
>>>>             short-circuit for "-J--add-exports
>>>>             <module>/<package>=ALL-UNNAMED -C--add-exports
>>>>             <module>/<package>=ALL-UNNAMED."
>>>>             java and javac are also have --add-exports option, so it
>>>>             seems to me that it is reasonable for jshell to have
>>>>             --add-exports option.
>>>>             What do you think about this?
>>>>
>>>>             Kind Regards,
>>>>             shinyafox(Shinya Yoshida)
>>>
>>>             OK, great.
>>>
>>>             I started to write that I didn't think you needed or
>>>             wanted a -C<opt> flag. But on further thought, that
>>>             allows all kinds of flexibility that we may not want to
>>>             provide item by item -- for example:
>>>             --processor-module-path, --module-source-path, ....
>>>             There is a question: which compiles should these flags
>>>             get applied to, but it seems they would just be ignored
>>>             where not needed, so probably all of them.
>>>
>>>             I notice --add-exports is on the -X help for both java
>>>             and javac -- it is non-standard.  Seems wrong for it to
>>>             be a non-standard option for those two and a standard
>>>             option for jshell.
>>>
>>>             I think it is a question for Jigsaw people as to what
>>>             module options:
>>>
>>>             * should be directly jshell command-line options
>>>             * should be non-standard -X command-line options (if
>>>             jshell has -X options)
>>>             * obscure enough that users should use -R<opt> and -C<opt>
>>>
>>>             -Robert
>>>
>>>
>>>
>>>>
>>>>
>>>>             2016-09-13 9:38 GMT+09:00 Robert Field
>>>>             <robert.field at oracle.com <mailto:robert.field at oracle.com>>:
>>>>
>>>>                 If our approach to security is "do nothing a user
>>>>                 could not do with their own use of javac/java"
>>>>                 (which we have yet to have validated) then if the
>>>>                 SharedSecrets use in JShell requires the change to
>>>>                 the module.info.java in java.base to add jdk.jshell,
>>>>                 then that would be a violation.
>>>>
>>>>                 If this changeset gave access only to snippets
>>>>                 executing via the JShell API maybe that would be
>>>>                 OK.  But it, as your exploit verifies, could easily
>>>>                 be used by anyone to change module boundaries.
>>>>
>>>>                 Maybe there would be a hack that would allow only
>>>>                 proper JShell use, but I don't see what that would
>>>>                 be, and that sounds dangerous and unappealing.
>>>>
>>>>                 Command-line option only would match the original
>>>>                 request and other tools.  The implementation would
>>>>                 closely match the implementation of '-R', being on
>>>>                 the command-line of JShellTool and the API in
>>>>                 JShell.Builder.
>>>>                 Alas, this is mostly a rewrite, only some code in
>>>>                 TaskFactory, ToolBasicTest, and maybe KullaTesting
>>>>                 would be reusable.
>>>>
>>>>                 Bummer!
>>>>
>>>>                 But thanks for catching this Jan!
>>>>
>>>>                 -Robert
>>>>
>>>>
>>>>
>>>>                 On 09/12/16 14:12, Jan Lahoda wrote:
>>>>
>>>>                     (Basically, the use of SharedSecrets in
>>>>                     jdk.jshell seems highly suspicious to me.)
>>>>
>>>>                     Jan
>>>>
>>>>                     On 12.9.2016 23:05, Jan Lahoda wrote:
>>>>
>>>>                         On 12.9.2016 20:06, Robert Field wrote:
>>>>
>>>>                             The jshell tool is built on the JShell
>>>>                             API.  Command-line options, like
>>>>                             -R, pass to the remote process via the
>>>>                             JShell API.  -R would allow
>>>>                             --patch-module or --add-exports. Having
>>>>                             addExports functionality
>>>>
>>>>
>>>>                         I am not much worried about --add-exports
>>>>                         added using -R, that seems OK
>>>>                         to me. This only affects a newly spawned
>>>>                         JVM, and the API client could
>>>>                         spawn it even without JShell, so not a
>>>>                         problem IMO.
>>>>
>>>>                         What I am worried about is that using the
>>>>                         most recent proposed patch
>>>>                         (lwebrev.04.langtools), one can use the
>>>>                         DirectExecutionControl to change
>>>>                         module boundaries in the _currently running
>>>>                         VM_. Please see the attached
>>>>                         class to see what I mean - I didn't even
>>>>                         have to create JShell as such,
>>>>                         simply using DirectExecutionControl was
>>>>                         enough. It probably does not
>>>>                         even need some special privileges to achieve
>>>>                         the result.
>>>>
>>>>                         Jan
>>>>
>>>>                             anywhere is jshell means having it in
>>>>                             the JShell API.
>>>>
>>>>                             I believe this cycles us, to some
>>>>                             degree, back to the security
>>>>                             discussion.  What is our level of
>>>>                             concern about a launched process
>>>>                             running pure JDK code?
>>>>
>>>>                             -Robert
>>>>
>>>>                             On 09/12/16 09:57, Jan Lahoda wrote:
>>>>
>>>>                                 [adding Jon]
>>>>
>>>>                                 On 12.9.2016 17:31, Robert Field wrote:
>>>>
>>>>                                     Both javac and java have a
>>>>                                     --add-exports option, so it
>>>>                                     isn't opening
>>>>                                     anything that isn't already open.
>>>>                                     I don't see how command-line
>>>>                                     options are any different that
>>>>                                     API in
>>>>                                     terms
>>>>                                     of exposure.
>>>>
>>>>
>>>>                                 I think there's a huge difference
>>>>                                 between command line and an API, in
>>>>                                 at least two aspects:
>>>>                                 a) the person that controls the
>>>>                                 command line, has a lot of power in
>>>>                                 any case (they could do
>>>>                                 -Xbootclasspath/p: in 8 or
>>>>                                 --patch-module now
>>>>                                 to get around the boundaries). API
>>>>                                 users are much more restricted in
>>>>                                 what they can do.
>>>>                                 b) affecting the command line
>>>>                                 options is generally very hard - imagine
>>>>                                 library maintainers - how can they
>>>>                                 affect the command line setting?
>>>>                                 The only thing they can do is to
>>>>                                 write some documentation, but they
>>>>                                 cannot directly affect the command
>>>>                                 line. But they can call an API (and
>>>>                                 they can call it even reflectively).
>>>>
>>>>                                 I believe it is generally
>>>>                                 undesirable to create APIs that allow to
>>>>                                 create holes in module boundaries.
>>>>                                 If you think that's something
>>>>                                 JShell needs, I think we need to
>>>>                                 take that to the Jigsaw team.
>>>>
>>>>                                 Jan
>>>>
>>>>
>>>>                                     -Robert
>>>>
>>>>
>>>>                                     On 09/11/16 13:17, Jan Lahoda wrote:
>>>>
>>>>                                         Hi,
>>>>
>>>>                                         I apologize for not
>>>>                                         following this sooner.
>>>>
>>>>                                         Looking at this, it seems to
>>>>                                         me the change would
>>>>                                         effectively allow to
>>>>                                         overcome the module boundary
>>>>                                         limitations using JShell - I
>>>>                                         don't think
>>>>                                         that's something that would
>>>>                                         be acceptable. We could take
>>>>                                         this to the
>>>>                                         Jigsaw team, but I don't
>>>>                                         think they would be happy
>>>>                                         about this.
>>>>
>>>>                                         I wonder what exactly is the
>>>>                                         usecase here. Would it be
>>>>                                         sufficient if
>>>>                                         the jshell tool as such
>>>>                                         would allow command line
>>>>                                         options to break
>>>>                                         through the boundaries? We
>>>>                                         already have -R, which
>>>>                                         should allow to make
>>>>                                         holes to the boundaries when
>>>>                                         running the snippets, so
>>>>                                         maybe we just
>>>>                                         need to add something for
>>>>                                         compile-time?
>>>>
>>>>                                         Jan
>>>>
>>>>                                         On 11.9.2016 02:12,
>>>>                                         ShinyaYoshida wrote:
>>>>
>>>>                                             Hi,
>>>>                                             Please apply this webrev:
>>>>                                             http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>
>>>>                                             <http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>>
>>>>
>>>>                                             Changing module-info is
>>>>                                             needed.
>>>>
>>>>                                             Thanks,
>>>>                                             shinyafox(Shinya Yoshida)
>>>>
>>>>                                             2016-09-10 7:51
>>>>                                             GMT+09:00 Robert Field
>>>>                                             <robert.field at oracle.com
>>>>                                             <mailto:robert.field at oracle.com>
>>>>                                             <mailto:robert.field at oracle.com
>>>>                                             <mailto:robert.field at oracle.com>>>:
>>>>
>>>>                                                 [audience reduced]
>>>>
>>>>                                                 BTW shinyafox,
>>>>
>>>>                                                 Building "make
>>>>                                             images" with this patch
>>>>                                             and the latest jdk9/dev
>>>>                                             bits
>>>>                                                 fails. Probably need
>>>>                                             to change module set-up --
>>>>
>>>>                                             /w/y/dev/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java:33:
>>>>
>>>>
>>>>
>>>>
>>>>                                                 error: package
>>>>                                             jdk.internal.misc does
>>>>                                             not exist
>>>>                                                 import
>>>>                                             jdk.internal.misc.JavaLangReflectModuleAccess;
>>>>                                              ^
>>>>                                             /w/y/dev/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java:34:
>>>>
>>>>
>>>>
>>>>
>>>>                                                 error: package
>>>>                                             jdk.internal.misc does
>>>>                                             not exist
>>>>                                                 import
>>>>                                             jdk.internal.misc.SharedSecrets;
>>>>                                              ^
>>>>                                             /w/y/dev/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java:155:
>>>>
>>>>
>>>>
>>>>
>>>>                                                 error: cannot find
>>>>                                             symbol
>>>>                                              JavaLangReflectModuleAccess
>>>>                                             moduleAccess =
>>>>                                             SharedSecrets.getJavaLangReflectModuleAccess();
>>>>                                                ^
>>>>                                              symbol:  class
>>>>                                             JavaLangReflectModuleAccess
>>>>                                              location: class
>>>>                                             DirectExecutionControl
>>>>                                             /w/y/dev/langtools/src/jdk.jshell/share/classes/jdk/jshell/execution/DirectExecutionControl.java:155:
>>>>
>>>>
>>>>
>>>>
>>>>                                                 error: cannot find
>>>>                                             symbol
>>>>                                              JavaLangReflectModuleAccess
>>>>                                             moduleAccess =
>>>>                                             SharedSecrets.getJavaLangReflectModuleAccess();
>>>>                                               ^
>>>>                                              symbol:  variable
>>>>                                             SharedSecrets
>>>>                                              location: class
>>>>                                             DirectExecutionControl
>>>>                                                 4 errors
>>>>
>>>>                                                 -Robert
>>>>
>>>>
>>>>                                                 On 09/08/16 07:14,
>>>>                                             ShinyaYoshida wrote:
>>>>
>>>>                                                     Hi Robert,
>>>>                                                     Thank you for
>>>>                                                 your pointing out.
>>>>                                                     I've understood.
>>>>
>>>>                                                     Here is new webrev:
>>>>                                                 http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.04.langtools/
>>>>                                                 <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.04.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                 <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.04.langtools/
>>>>                                                 <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.04.langtools/>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                     In this version,
>>>>                                                     -
>>>>                                                 ExecutionControl#addExports
>>>>                                                 throws
>>>>                                                 BadArgumentException
>>>>                                                 which is
>>>>                                                     extends
>>>>                                                 ExecutionControlException
>>>>                                                 if module or package
>>>>                                                 are not
>>>>                                                 found.
>>>>                                                     -
>>>>                                                 JShell#addExports
>>>>                                                 throws
>>>>                                                 IllegalArgumentException
>>>>                                                 when
>>>>                                                 BadArgumentException
>>>>                                                 is occured
>>>>
>>>>                                                     I've notice that
>>>>                                                 /classpath and
>>>>                                                 addToClasspath says
>>>>                                                 nothing when
>>>>                                                     it doesn't exist.
>>>>                                                     I think it
>>>>                                                 should be reported,
>>>>                                                 so I've created a issue:
>>>>                                                 https://bugs.openjdk.java.net/browse/JDK-8165650
>>>>                                                 <https://bugs.openjdk.java.net/browse/JDK-8165650>
>>>>                                                 <https://bugs.openjdk.java.net/browse/JDK-8165650
>>>>                                                 <https://bugs.openjdk.java.net/browse/JDK-8165650>>
>>>>
>>>>                                                     What do you think?
>>>>
>>>>                                                     Please review me
>>>>                                                 again!
>>>>
>>>>                                                     Thank you,
>>>>                                                 shinyafox(Shinya
>>>>                                                 Yoshida)
>>>>
>>>>
>>>>                                                     2016-09-08 4:25
>>>>                                                 GMT+09:00 Robert
>>>>                                                 Field
>>>>                                                 <robert.field at oracle.com
>>>>                                                 <mailto:robert.field at oracle.com>
>>>>                                                 <mailto:robert.field at oracle.com
>>>>                                                 <mailto:robert.field at oracle.com>>>:
>>>>
>>>>                                                         Thanks for
>>>>                                                 the update.
>>>>
>>>>                                                 l10n.properties --
>>>>
>>>>                                                         Oops, typo:
>>>>                                                 the help.set.exports
>>>>                                                 entry got pasted again
>>>>                                                 instead of
>>>>                                                 help.retain.exports
>>>>
>>>>                                                         Sorry I was
>>>>                                                 unclear about the
>>>>                                                 exceptions...
>>>>
>>>>                                                         On the
>>>>                                                 execution side --
>>>>
>>>>                                                 ExecutionControl.InternalException
>>>>                                                 is only for unexpected
>>>>                                                 failures.
>>>>
>>>>                                                         In this case
>>>>                                                 you are dealing an
>>>>                                                 expected exception that
>>>>                                                 occurs
>>>>                                                         when the
>>>>                                                 user gives the wrong
>>>>                                                 input.  None of the
>>>>                                                 existing
>>>>                                                 ExecutionControlException
>>>>                                                 subclasses are good
>>>>                                                 candidates,
>>>>                                                 so a
>>>>                                                         new
>>>>                                                 ExecutionControlException
>>>>                                                 subclass is needed.
>>>>                                                 I was
>>>>                                                 suggesting
>>>>                                                 "BadArgumentException"
>>>>                                                 for this exception.
>>>>                                                 None of
>>>>                                                 ExecutionControlException
>>>>                                                 subclasses are seen
>>>>                                                 at the JShell
>>>>                                                         level --
>>>>                                                 this should be the
>>>>                                                 case for this new
>>>>                                                 one as well.
>>>>
>>>>                                                         I don't what
>>>>                                                 kind of exceptions
>>>>                                                 are thrown by
>>>>                                                 moduleAccess.addExportsToAllUnnamed(target,
>>>>                                                 pack), but that
>>>>                                                 message text or some
>>>>                                                 other appropriate
>>>>                                                 descriptive message
>>>>                                                         text needs
>>>>                                                 to be placed in the
>>>>                                                 BadArgumentException
>>>>                                                 message so
>>>>                                                         it can be
>>>>                                                 seen all the way up
>>>>                                                 (including the
>>>>                                                 JShellTool).
>>>>
>>>>
>>>>                                                         On the
>>>>                                                 JShell class --
>>>>
>>>>                                                 Incorrect arguments
>>>>                                                 on JShell API
>>>>                                                 methods generate the
>>>>                                                 Java
>>>>                                                 standard
>>>>                                                 java.lang.IllegalArgumentException
>>>>                                                 (see, for
>>>>                                                 example,
>>>>                                                         drop() or
>>>>                                                 status() ) -- so,
>>>>                                                 this is also the
>>>>                                                 appropriate
>>>>                                                 exception for
>>>>                                                 JShell.addExports().
>>>>                                                 Thus,
>>>>                                                 JShell.addExports()
>>>>                                                         catchs the
>>>>                                                 BadArgumentException, turning
>>>>                                                 it into an
>>>>                                                 IllegalArgumentException.
>>>>
>>>>                                                 Thanks,
>>>>                                                         Robert
>>>>
>>>>
>>>>                                                         On 09/07/16
>>>>                                                 06:10, ShinyaYoshida
>>>>                                                 wrote:
>>>>
>>>>                                                             Hi Robert,
>>>>                                                             Thank
>>>>                                                     you for your
>>>>                                                     helping.
>>>>
>>>>                                                             I've
>>>>                                                     update webrev
>>>>                                                     according to
>>>>                                                     your comments.
>>>>                                                             If I'm
>>>>                                                     missing your
>>>>                                                     meaning, I'm
>>>>                                                     sorry. Please
>>>>                                                     point it.
>>>>                                                     http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.03.langtools/
>>>>                                                     <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.03.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                     <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.03.langtools/
>>>>                                                     <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.03.langtools/>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             Now,
>>>>                                                             -
>>>>                                                     JShell#addExports will
>>>>                                                     throw
>>>>                                                     BadArgumentException
>>>>                                                     when
>>>>                                                             module
>>>>                                                     or package is
>>>>                                                     wrong, which is
>>>>                                                     check exception.
>>>>                                                             -
>>>>                                                     JShellTool
>>>>                                                     checks that
>>>>                                                     exception.
>>>>                                                             -
>>>>                                                     ExecutionControl#addExports
>>>>                                                     throws
>>>>                                                     InternalException when
>>>>                                                     something is wrong.
>>>>
>>>>                                                     Regards,
>>>>                                                     shinyafox(Shinya
>>>>                                                     Yoshida)
>>>>
>>>>
>>>>                                                     2016-09-06 6:28
>>>>                                                     GMT+09:00 Robert
>>>>                                                     Field
>>>>
>>>>                                                     <robert.field at oracle.com
>>>>                                                     <mailto:robert.field at oracle.com>
>>>>                                                     <mailto:robert.field at oracle.com
>>>>                                                     <mailto:robert.field at oracle.com>>>:
>>>>
>>>>                                                     Code looks
>>>>                                                     good.  Needs
>>>>                                                     docs I promised
>>>>                                                     (see below).
>>>>
>>>>                                                                 As
>>>>                                                     to completion
>>>>                                                     issue you
>>>>                                                     created, I see
>>>>                                                     you already
>>>>                                                     added discussion
>>>>                                                     and tests.  I
>>>>                                                     added your
>>>>                                                     completion
>>>>                                                     code.
>>>>
>>>>                                                     Below is my
>>>>                                                     suggested doc...
>>>>
>>>>                                                     src/jdk.jshell/share/classes/jdk/internal/jshell/tool/resources/l10n.properties
>>>>
>>>>
>>>>
>>>>
>>>>                                                                 --
>>>>
>>>>                                                     /set exports
>>>>                                                     <module>
>>>>                                                     <package>\n\t\
>>>>                                                        Allow access
>>>>                                                     to some of the
>>>>                                                     unexported types
>>>>                                                     of a
>>>>                                                     module\n\n\
>>>>
>>>>
>>>>                                                     /retain exports
>>>>                                                     <module>
>>>>                                                     <package>\n\t\
>>>>                                                        Allow access
>>>>                                                     to some of the
>>>>                                                     unexported types
>>>>                                                     of a
>>>>                                                     module\n\n\
>>>>
>>>>
>>>>                                                     help.set.exports=\
>>>>                                                     Set a package to
>>>>                                                     add to those
>>>>                                                     exported to
>>>>                                                     snippets.\n\
>>>>                                                     \n\t\
>>>>                                                     /set exports
>>>>                                                     <module>
>>>>                                                     <package>\n\
>>>>                                                     \n\
>>>>                                                     Where <module>
>>>>                                                     is the module
>>>>                                                     from which to export
>>>>                                                     <package>.\n\
>>>>                                                     Where <package>
>>>>                                                     is the package
>>>>                                                     to export to
>>>>                                                     snippets.\n
>>>>
>>>>
>>>>                                                     help.retain.exports=\
>>>>                                                     Retain a package
>>>>                                                     to add to those
>>>>                                                     exported to
>>>>                                                     snippets.\n\
>>>>                                                     \n\t\
>>>>                                                     /retain exports
>>>>                                                     <module>
>>>>                                                     <package>\n\
>>>>                                                     \n\
>>>>                                                     Where <module>
>>>>                                                     is the module
>>>>                                                     from which to export
>>>>                                                     <package>.\n\
>>>>                                                     Where <package>
>>>>                                                     is the package
>>>>                                                     to export to
>>>>                                                     snippets.\n
>>>>
>>>>                                                                 [I
>>>>                                                     notice that
>>>>                                                     'snippet' is
>>>>                                                     used in doc
>>>>                                                     without being
>>>>                                                     defined. If,
>>>>                                                     while you are
>>>>                                                     it, you change
>>>>                                                     the help for
>>>>                                                     /list to define it:]
>>>>
>>>>                                                     help.list =\
>>>>                                                     Show the source
>>>>                                                     of snippets,
>>>>                                                     prefaced with the
>>>>                                                     snippet id
>>>>                                                                 (a
>>>>                                                     snippet is a
>>>>                                                     chunk of code
>>>>                                                     that the jshell tool
>>>>                                                     evaluates -- the
>>>>                                                     code you enter
>>>>                                                     at the prompt is a
>>>>                                                     snippet).\n\
>>>>                                                     ...
>>>>
>>>>                                                     src/jdk.jshell/share/classes/jdk/jshell/JShell.java
>>>>                                                     --
>>>>
>>>>
>>>>                                                       /**
>>>>                                                        * Add a
>>>>                                                     package to those
>>>>                                                     exported to
>>>>                                                     snippets.
>>>>                                                        * @param
>>>>                                                     module The
>>>>                                                     module from
>>>>                                                     which to export
>>>>                                                        * @param pack
>>>>                                                     The package to
>>>>                                                     export
>>>>                                                        * @throws
>>>>                                                     NullPointerException
>>>>                                                     if arguments are
>>>>                                                     null.
>>>>                                                        * @throws
>>>>                                                     IllegalStateException
>>>>                                                     if this {@code
>>>>                                                     JShell} instance
>>>>                                                     is closed.
>>>>                                                        * @throws XYZ
>>>>                                                     if ....
>>>>                                                        */
>>>>
>>>>                                                     OK, actually
>>>>                                                     this code should
>>>>                                                     change. Like
>>>>                                                     addToClasspath
>>>>                                                     above it, it
>>>>                                                     should return
>>>>                                                     void. It
>>>>                                                     looks
>>>>                                                     like under
>>>>                                                     normal operation
>>>>                                                     it can fail --
>>>>                                                     the failure
>>>>                                                     should be
>>>>                                                     reported with an
>>>>                                                     exception.
>>>>                                                     What are the
>>>>                                                     failure modes?
>>>>                                                     IllegalArgumentException
>>>>                                                     would be likely
>>>>                                                     choice at the
>>>>                                                     JShell API
>>>>                                                     layer. But
>>>>                                                     then
>>>>                                                     the exception
>>>>                                                     needs to be
>>>>                                                     propagated there.
>>>>                                                     Since none of
>>>>                                                     the existing
>>>>                                                     exceptions is a
>>>>                                                     match, this
>>>>                                                     means a new
>>>>                                                     ExecutionControlException.
>>>>                                                     Maybe something
>>>>                                                     general, like
>>>>                                                     BadUserArgumentException.
>>>>                                                     Note: I've also
>>>>                                                     added
>>>>                                                     IllegalStateException
>>>>                                                     -- this can
>>>>                                                                 be
>>>>                                                     thrown when you
>>>>                                                     get
>>>>                                                     EngineTerminationException.
>>>>                                                     Also, typo, the
>>>>                                                     second "module
>>>>                                                     cannot be null"
>>>>                                                     should be
>>>>                                                     "package cannot
>>>>                                                     be null"
>>>>
>>>>                                                     src/jdk.jshell/share/classes/jdk/jshell/execution/RemoteCodes.java
>>>>
>>>>                                                                 --
>>>>
>>>>                                                     The comment you
>>>>                                                     have is fine.
>>>>                                                     Just remove PLEASE
>>>>                                                     REVISE
>>>>                                                     THE COMMENT
>>>>
>>>>                                                     src/jdk.jshell/share/classes/jdk/jshell/spi/ExecutionControl.java
>>>>                                                                 --
>>>>
>>>>                                                       /**
>>>>                                                        * Add a
>>>>                                                     package to those
>>>>                                                     exported to
>>>>                                                     snippets.
>>>>                                                        * @param
>>>>                                                     module The
>>>>                                                     module from
>>>>                                                     which to export
>>>>                                                        * @param pack
>>>>                                                     The package to
>>>>                                                     export
>>>>                                                        * @throws
>>>>                                                     EngineTerminationException
>>>>                                                     the execution
>>>>                                                     engine has
>>>>                                                     terminated
>>>>                                                        * @throws ....
>>>>                                                        * @throws
>>>>                                                     InternalException an
>>>>                                                     internal problem
>>>>                                                     occurred
>>>>                                                        */
>>>>
>>>>                                                     Plus add the bad
>>>>                                                     argument exception.
>>>>                                                     Whatever it is,
>>>>                                                     should be added
>>>>                                                     to
>>>>                                                     extensionCommand()
>>>>                                                     exceptions.
>>>>
>>>>                                                     Robert
>>>>
>>>>
>>>>
>>>>                                                                 On
>>>>                                                     09/05/16 08:02,
>>>>                                                     ShinyaYoshida wrote:
>>>>
>>>>                                                         Hi,
>>>>                                                         I've update
>>>>                                                         webrev of
>>>>                                                         langtools:
>>>>                                                         http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.02.langtools/
>>>>                                                         <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.02.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                         <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.02.langtools/
>>>>                                                         <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.02.langtools/>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                         I added an
>>>>                                                         issue for
>>>>                                                         the
>>>>                                                         completion
>>>>                                                         feature.
>>>>                                                         https://bugs.openjdk.java.net/browse/JDK-8165445
>>>>                                                         <https://bugs.openjdk.java.net/browse/JDK-8165445>
>>>>                                                         <https://bugs.openjdk.java.net/browse/JDK-8165445
>>>>                                                         <https://bugs.openjdk.java.net/browse/JDK-8165445>>
>>>>
>>>>                                                         Regards,
>>>>                                                         shinyafox(Shinya
>>>>                                                         Yoshida)
>>>>
>>>>                                                         2016-09-05
>>>>                                                         22:49
>>>>                                                         GMT+09:00
>>>>                                                         ShinyaYoshida
>>>>                                                         <bitterfoxc at gmail.com
>>>>                                                         <mailto:bitterfoxc at gmail.com>
>>>>                                                         <mailto:bitterfoxc at gmail.com
>>>>                                                         <mailto:bitterfoxc at gmail.com>>>:
>>>>
>>>>                                                           Hi Robert,
>>>>                                                           Thank you
>>>>                                                         for the review.
>>>>
>>>>                                                           I totally
>>>>                                                         agree with you.
>>>>                                                           I also
>>>>                                                         think that
>>>>                                                         availableModules
>>>>                                                         and
>>>>                                                         availablePackages(module)
>>>>                                                         are
>>>>                                                         worthless
>>>>                                                         excepting
>>>>                                                           for the
>>>>                                                         command
>>>>                                                         completion
>>>>                                                         feature.
>>>>                                                           I'd like
>>>>                                                         to avoid
>>>>                                                         adding these
>>>>                                                         APIs which
>>>>                                                         have not
>>>>                                                           been
>>>>                                                         speculated
>>>>                                                         and revised
>>>>                                                         because if
>>>>                                                         API is once
>>>>                                                           added, it
>>>>                                                         is too
>>>>                                                         difficult to
>>>>                                                         remove than
>>>>                                                         adding.
>>>>
>>>>                                                           So
>>>>                                                         currently,
>>>>                                                         I'll remove
>>>>                                                         the
>>>>                                                         completion
>>>>                                                         feature
>>>>                                                         for
>>>>                                                           /set or
>>>>                                                         /retain
>>>>                                                         exports and
>>>>                                                         make the
>>>>                                                         issue to
>>>>                                                         JBS to
>>>>                                                           add
>>>>                                                         completion
>>>>                                                         feature for
>>>>                                                         them in future.
>>>>
>>>>                                                           I'll
>>>>                                                         update the
>>>>                                                         webrev. So
>>>>                                                         please
>>>>                                                         review it again
>>>>                                                         later.
>>>>                                                           When the
>>>>                                                         silently
>>>>                                                         evaluation
>>>>                                                         feature is
>>>>                                                         added, I'd
>>>>                                                           like to
>>>>                                                         work for the
>>>>                                                         completion
>>>>                                                         feature again.
>>>>
>>>>                                                           Thank you,
>>>>                                                         shinyafox(Shinya
>>>>                                                         Yoshida)
>>>>
>>>>
>>>>                                                           2016-09-05
>>>>                                                         15:00
>>>>                                                         GMT+09:00
>>>>                                                         Robert Field
>>>>
>>>>                                                         <robert.field at oracle.com
>>>>                                                         <mailto:robert.field at oracle.com>
>>>>                                                         <mailto:robert.field at oracle.com
>>>>                                                         <mailto:robert.field at oracle.com>>>:
>>>>
>>>>
>>>>                                                               On
>>>>                                                         09/03/16
>>>>                                                         05:07,
>>>>                                                         ShinyaYoshida wrote:
>>>>
>>>>                                                                   Hi
>>>>                                                             all,
>>>>
>>>>                                                             I've
>>>>                                                             updated
>>>>                                                             my
>>>>                                                             patch,
>>>>                                                             new
>>>>                                                             webrev
>>>>                                                             is here:
>>>>                                                             webrev.01.langtools:
>>>>                                                             http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.01.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.langtools/>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             webrev.01.jdk:
>>>>                                                             http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.01.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.jdk/>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.01.jdk/>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             (Same as
>>>>                                                             previous)
>>>>
>>>>                                                                   In
>>>>                                                             this
>>>>                                                             version,
>>>>                                                                   -
>>>>                                                             rename
>>>>                                                             /set
>>>>                                                             add-exports
>>>>                                                             to /set
>>>>                                                             exports
>>>>
>>>>
>>>>                                                               OK
>>>>
>>>>                                                                   -
>>>>                                                             add
>>>>                                                             /retain
>>>>                                                             exports
>>>>                                                             <module>
>>>>                                                             <package>
>>>>
>>>>
>>>>                                                               The
>>>>                                                         /retain
>>>>                                                         implementation
>>>>                                                         looks good.
>>>>
>>>>                                                                   -
>>>>                                                             add tests
>>>>
>>>>
>>>>                                                               Well
>>>>                                                         tested
>>>>
>>>>                                                                   -
>>>>                                                             move
>>>>                                                             EXT_CMD_XXX
>>>>                                                             into
>>>>                                                             RemoteCodes
>>>>                                                                   -
>>>>                                                             make
>>>>                                                             RemoteCodes
>>>>                                                             public
>>>>                                                             and move
>>>>                                                             it into
>>>>                                                             jdk.jshell.execution.code
>>>>                                                             which is
>>>>                                                             module-private
>>>>
>>>>
>>>>                                                               So,
>>>>                                                         here, in
>>>>                                                         addition to
>>>>                                                         addExports,
>>>>                                                         there are
>>>>                                                               two
>>>>                                                         more methods
>>>>                                                         added to the API
>>>>                                                         availableModules()
>>>>                                                         and
>>>>                                                         availablePackage(String
>>>>                                                               module).
>>>>                                                               I see
>>>>                                                         how in rare
>>>>                                                         cases they
>>>>                                                         could be useful.
>>>>                                                               And
>>>>                                                         the rare
>>>>                                                         case that
>>>>                                                         causes them
>>>>                                                         to be
>>>>                                                         present
>>>>                                                               is for
>>>>                                                         command
>>>>                                                         completion
>>>>                                                         in the tool.
>>>>                                                               What
>>>>                                                         are the options:
>>>>
>>>>                                                                 (1)
>>>>                                                         Add them to
>>>>                                                         the API. If
>>>>                                                         it is in the
>>>>                                                         API
>>>>                                                               then
>>>>                                                         it is a
>>>>                                                         first-class
>>>>                                                         form of
>>>>                                                         functionality
>>>>                                                               and
>>>>                                                         should be
>>>>                                                         treated as
>>>>                                                         such in
>>>>                                                         execution
>>>>
>>>>                                                         support (as
>>>>                                                         a command)
>>>>                                                                 (2)
>>>>                                                         Not support
>>>>                                                         them and not
>>>>                                                         support command
>>>>                                                         completion
>>>>                                                         for /set
>>>>                                                         exports. Command
>>>>                                                         completion
>>>>                                                               is not
>>>>                                                         supported in
>>>>                                                         much more
>>>>                                                         common cases.
>>>>                                                               Then
>>>>                                                         we could
>>>>                                                         support
>>>>                                                         command
>>>>                                                         completion in
>>>>                                                         the
>>>>                                                               future
>>>>                                                         (see (3)).
>>>>                                                                 (3)
>>>>                                                         What these
>>>>                                                         commands do
>>>>                                                         is simply
>>>>                                                         execute
>>>>                                                               an
>>>>                                                         expression
>>>>                                                         on the
>>>>                                                         remote side.
>>>>                                                         But we
>>>>
>>>>                                                         already have
>>>>                                                         a mechanism
>>>>                                                         to execute
>>>>                                                         expressions
>>>>                                                               on the
>>>>                                                         remote side:
>>>>                                                         Snippets.
>>>>                                                         That leaves
>>>>                                                         a problem:
>>>>                                                         we wouldn't
>>>>                                                         want
>>>>                                                               these
>>>>                                                         Snippets to
>>>>                                                         be seen by
>>>>                                                         the user, but we
>>>>                                                               have a
>>>>                                                         solution for
>>>>                                                         that the
>>>>                                                         tool uses the
>>>>                                                         idGenerator.
>>>>                                                         Another
>>>>                                                         problem is
>>>>                                                         that, by default
>>>>                                                         and
>>>>                                                               with
>>>>                                                         no current
>>>>                                                         way around
>>>>                                                         the default,
>>>>                                                         expressions
>>>>                                                         generate
>>>>                                                         temp-variables.
>>>>                                                         My
>>>>                                                         intention
>>>>                                                         was to make
>>>>                                                         this
>>>>                                                         configurable
>>>>                                                         -- see
>>>>                                                         Eval.shouldGenTempVar(...).
>>>>
>>>>                                                               One
>>>>                                                         goal I've
>>>>                                                         been using
>>>>                                                         in the
>>>>                                                         design of the
>>>>                                                               API is
>>>>                                                         to keep it
>>>>                                                         as small and
>>>>                                                         simple as
>>>>                                                         possible.
>>>>                                                         This
>>>>                                                         improves
>>>>                                                         maintainability,
>>>>                                                         but
>>>>                                                               much
>>>>                                                         more
>>>>                                                         importantly
>>>>                                                         makes the
>>>>                                                         API easier to
>>>>                                                               learn
>>>>                                                         and use.
>>>>                                                               So,
>>>>                                                         for
>>>>                                                         something to
>>>>                                                         warrant
>>>>                                                         inclusion it
>>>>                                                         should
>>>>                                                               be
>>>>                                                         generally
>>>>                                                         useful and
>>>>                                                         have no
>>>>                                                         other way of
>>>>                                                               being
>>>>                                                         achieved --
>>>>                                                         neither is
>>>>                                                         true of
>>>>                                                         these two
>>>>                                                               queries.
>>>>
>>>>                                                               My
>>>>                                                         suggestion,
>>>>                                                         particularly
>>>>                                                         in light of how
>>>>                                                         late
>>>>                                                               in the
>>>>                                                         release this
>>>>                                                         is, would be
>>>>                                                         (2).
>>>>                                                         Thoughts?
>>>>
>>>>                                                               -Robert
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             Regards,
>>>>                                                             shinyafox(Shinya
>>>>                                                             Yoshida)
>>>>
>>>>                                                             2016-09-03
>>>>                                                             18:15
>>>>                                                             GMT+09:00 ShinyaYoshida
>>>>
>>>>                                                             <bitterfoxc at gmail.com
>>>>                                                             <mailto:bitterfoxc at gmail.com>
>>>>                                                             <mailto:bitterfoxc at gmail.com
>>>>                                                             <mailto:bitterfoxc at gmail.com>>>:
>>>>
>>>>
>>>>                                                               Hi Robert,
>>>>                                                             Thank
>>>>                                                             you for
>>>>                                                             reviewing.
>>>>
>>>>                                                               I'll
>>>>                                                             update
>>>>                                                             my patch
>>>>                                                             later.
>>>>
>>>>                                                             2016-09-02
>>>>                                                             11:38
>>>>                                                             GMT+09:00 Robert
>>>>                                                             Field
>>>>                                                             <robert.field at oracle.com
>>>>                                                             <mailto:robert.field at oracle.com>
>>>>                                                             <mailto:robert.field at oracle.com
>>>>                                                             <mailto:robert.field at oracle.com>>>:
>>>>
>>>>                                                             Thanks
>>>>                                                             shiyafox! This
>>>>                                                             is a
>>>>                                                             significant
>>>>                                                             piece of
>>>>                                                             code!
>>>>
>>>>                                                             As to
>>>>                                                             your
>>>>                                                             questions --
>>>>
>>>>                                                             > I
>>>>                                                             wonder
>>>>                                                             if you
>>>>                                                             could
>>>>                                                             work on the
>>>>                                                             documentation
>>>>                                                             of the
>>>>                                                             API and
>>>>                                                             the tool
>>>>                                                             instead?
>>>>
>>>>                                                             Yes, I
>>>>                                                             will do
>>>>                                                             API and
>>>>                                                             tool docs.
>>>>
>>>>                                                             Thank you!
>>>>
>>>>                                                             >
>>>>                                                             Subcommand
>>>>                                                             of /set
>>>>                                                             is
>>>>                                                             reasonable?
>>>>                                                             Similar
>>>>                                                             command,
>>>>                                                             /classpath,
>>>>                                                             to make
>>>>                                                             users
>>>>                                                             available to
>>>>                                                             use new
>>>>                                                             packages is
>>>>                                                             not a
>>>>                                                             subcommand
>>>>                                                             of /set.
>>>>
>>>>                                                             Yes, I
>>>>                                                             think
>>>>                                                             /set
>>>>                                                             exports
>>>>                                                             is best.
>>>>                                                             And,
>>>>                                                             yes,
>>>>                                                             /classpath
>>>>                                                             is
>>>>                                                             inconsistent,
>>>>                                                             it
>>>>                                                             should
>>>>                                                             be /set
>>>>                                                             classpath,
>>>>                                                             that can
>>>>                                                             be a
>>>>                                                             separate
>>>>                                                             task,
>>>>                                                             unless you
>>>>                                                             want to
>>>>                                                             roll
>>>>                                                             that in.
>>>>
>>>>
>>>>                                                               I see,
>>>>                                                             I've
>>>>                                                             created
>>>>                                                             the
>>>>                                                             issue to
>>>>                                                             move
>>>>                                                             /classpath
>>>>                                                             to /set
>>>>                                                             classpath:
>>>>                                                             https://bugs.openjdk.java.net/browse/JDK-8165405
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165405>
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165405
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165405>>
>>>>
>>>>                                                             > Should
>>>>                                                             we need
>>>>                                                             retain
>>>>                                                             feature to
>>>>                                                             this?
>>>>
>>>>                                                             All /set
>>>>                                                             have a
>>>>                                                             /retain
>>>>                                                             counterpart
>>>>                                                             --
>>>>                                                             we
>>>>                                                             should
>>>>                                                             maintain
>>>>                                                             that
>>>>
>>>>
>>>>                                                               Ok,
>>>>                                                             I'll add
>>>>                                                             /retain
>>>>                                                             exports.
>>>>
>>>>                                                               I've
>>>>                                                             also
>>>>                                                             create
>>>>                                                             the
>>>>                                                             issue
>>>>                                                             for
>>>>                                                             retaining
>>>>                                                             classpath:
>>>>                                                             https://bugs.openjdk.java.net/browse/JDK-8165406
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165406>
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165406
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8165406>>
>>>>
>>>>                                                             As to
>>>>                                                             the code
>>>>                                                             review:
>>>>                                                             Looks
>>>>                                                             good to
>>>>                                                             me, just
>>>>                                                             minor
>>>>                                                             questions/issues
>>>>                                                             --
>>>>
>>>>                                                             JShellTool.java:
>>>>
>>>>                                                             * As
>>>>                                                             discussed /set
>>>>                                                             add-exports
>>>>                                                             =>
>>>>                                                             /set
>>>>                                                             exports
>>>>
>>>>                                                             * Nit: a
>>>>                                                             comment
>>>>                                                             got
>>>>                                                             moved out of
>>>>                                                             place
>>>>                                                             line
>>>>                                                             1194(old)
>>>>
>>>>                                                             JShell.java:
>>>>
>>>>                                                             *
>>>>                                                             EXT_CMD_AVAILABLE_MODULES
>>>>                                                             and
>>>>                                                             EXT_CMD_AVAILABLE_PACKAGES,
>>>>                                                             these
>>>>                                                             should
>>>>                                                             be
>>>>                                                             referenced
>>>>                                                             via
>>>>                                                             RemoteCodes.java
>>>>                                                             rather
>>>>                                                             than be
>>>>                                                             coped.
>>>>
>>>>                                                             Absolutely!
>>>>                                                             I'd like
>>>>                                                             to move
>>>>                                                             these into
>>>>                                                             RemoteCodes
>>>>                                                             but it
>>>>                                                             is
>>>>                                                             package-private
>>>>                                                             class
>>>>
>>>>                                                               and
>>>>                                                             cannot
>>>>                                                             be
>>>>                                                             referred
>>>>                                                             from JShell.
>>>>
>>>>                                                               Can I
>>>>                                                             make
>>>>                                                             RemoteCodes
>>>>                                                             public
>>>>                                                             and move it
>>>>
>>>>                                                               to
>>>>                                                             another
>>>>                                                             module-private
>>>>                                                             package like
>>>>                                                             jdk.jshell.execution.code?
>>>>
>>>>                                                             * Which
>>>>                                                             leads me
>>>>                                                             to
>>>>                                                             another
>>>>                                                             question:
>>>>                                                             why is
>>>>                                                             addExports
>>>>                                                             a
>>>>                                                             command
>>>>                                                             and these
>>>>                                                             two are
>>>>                                                             extensions.
>>>>                                                             It seems
>>>>                                                             fine,
>>>>                                                             just
>>>>                                                             curious.
>>>>                                                             I notice
>>>>                                                             that
>>>>                                                             extensions
>>>>                                                             are a
>>>>                                                             lot less
>>>>                                                             code -- ;-)
>>>>
>>>>                                                             Exporting module
>>>>                                                             and
>>>>                                                             package is
>>>>                                                             similar to
>>>>                                                             adding
>>>>                                                             classpath to
>>>>                                                             platform, so
>>>>                                                             I made
>>>>                                                             the
>>>>                                                             addExports
>>>>                                                             a
>>>>                                                             command
>>>>                                                             like
>>>>                                                             setClasspath.
>>>>
>>>>                                                               And it
>>>>                                                             should
>>>>                                                             be added
>>>>                                                             as API
>>>>                                                             because
>>>>                                                             it is
>>>>
>>>>                                                               very
>>>>                                                             basic
>>>>                                                             feature.
>>>>
>>>>                                                             TaskFactory.java:
>>>>
>>>>                                                             *
>>>>                                                             Question: the
>>>>                                                             "/"
>>>>                                                             separator between
>>>>                                                             module
>>>>                                                             and
>>>>                                                             package
>>>>                                                             is that
>>>>                                                             platform
>>>>                                                             independent?
>>>>
>>>>
>>>>                                                               It
>>>>                                                             seems to
>>>>                                                             me that
>>>>                                                             "{module}/{path}"
>>>>                                                             format
>>>>                                                             for
>>>>                                                             --add-exports
>>>>                                                             option of
>>>>                                                             javac is
>>>>                                                             platform
>>>>                                                             independent.
>>>>                                                             Regards,
>>>>                                                             shinyafox(Shinya
>>>>                                                             Yoshida)
>>>>
>>>>
>>>>                                                             DefaultLoaderDelegate.java:
>>>>
>>>>                                                             * Jan,
>>>>                                                             can you
>>>>                                                             look at
>>>>                                                             this code?
>>>>
>>>>
>>>>                                                             -Robert
>>>>
>>>>
>>>>                                                             On
>>>>                                                             09/01/16
>>>>                                                             05:36,
>>>>                                                             ShinyaYoshida
>>>>                                                             wrote:
>>>>
>>>>                                                                 Hi all,
>>>>                                                                 I've
>>>>                                                             implemented
>>>>                                                             this
>>>>                                                             feature to
>>>>
>>>>                                                             JShell
>>>>                                                             API and
>>>>                                                             Tool
>>>>                                                             with full
>>>>                                                             completion:
>>>>                                                                 Bugs:
>>>>                                                             https://bugs.openjdk.java.net/browse/JDK-8154714
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8154714>
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8154714
>>>>                                                             <https://bugs.openjdk.java.net/browse/JDK-8154714>>
>>>>
>>>>                                                                 jdk:
>>>>                                                             http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.jdk/>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             langtools:
>>>>                                                             http://cr.openjdk.java.net/~shinyafox/kulla/8154714/webrev.00.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/>
>>>>
>>>>
>>>>
>>>>
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/
>>>>                                                             <http://cr.openjdk.java.net/%7Eshinyafox/kulla/8154714/webrev.00.langtools/>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>                                                                 This
>>>>                                                             is
>>>>                                                             missing
>>>>                                                             the
>>>>                                                             train of
>>>>                                                             Java
>>>>                                                                 9.0
>>>>                                                             but it
>>>>                                                             could
>>>>                                                             catch the
>>>>                                                             train of
>>>>                                                                 Java
>>>>                                                             9.1 or
>>>>                                                             later.
>>>>                                                                 I
>>>>                                                             want to
>>>>                                                             get your
>>>>                                                             comments for
>>>>                                                             this.
>>>>
>>>>
>>>>                                                             jshell>
>>>>                                                             /set
>>>>                                                             add-exports
>>>>                                                             jdk.jconsole
>>>>                                                             sun.tools.jconsole
>>>>
>>>>
>>>>                                                             jshell>
>>>>                                                             import
>>>>                                                             sun.tools.jconsole.*
>>>>
>>>>                                                                 jshell>
>>>>                                                             LocalVirtualMachine.getAllVirtualMachines().forEach((k,
>>>>                                                                 v)
>>>>                                                             ->
>>>>                                                             System.out.println(k
>>>>                                                             + ":"
>>>>                                                             + v))
>>>>                                                             10778:jdk.jshell/jdk.internal.jshell.tool.JShellTool
>>>>                                                             10826:jdk.jshell.execution.RemoteExecutionControl
>>>>                                                                 35548
>>>>                                                             28447:org.netbeans.Main
>>>>                                                             --cachedir
>>>>                                                             /home/bitter_fox/.cache/netbeans/8.0.1
>>>>
>>>>                                                             --userdir
>>>>                                                             /home/bitter_fox/.netbeans/8.0.1
>>>>
>>>>                                                             --branding
>>>>                                                             nb
>>>>
>>>>
>>>>                                                             Currently,
>>>>                                                             there is no
>>>>                                                             testing, so
>>>>                                                                 it
>>>>                                                             will be
>>>>                                                             required
>>>>                                                             to add test.
>>>>
>>>>                                                                 Regards,
>>>>                                                             shinyafox(Shinya
>>>>                                                             Yoshida)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>


More information about the kulla-dev mailing list