Roger,

I have changed impl according to your comments, thank you!
Regarding fc-extension, I am not able to add comments in the bug tracker I
think you can do it, correct? Also I am already in OCA list.

diff --git a/src/java.base/unix/classes/java/lang/ProcessImpl.java
b/src/java.base/unix/classes/java/lang/ProcessImpl.java
--- a/src/java.base/unix/classes/java/lang/ProcessImpl.java
+++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java
@@ -630,6 +630,19 @@
         return !hasExited;
     }

+    /**
+     * The {@code toString} method returns a string consisting of
+     * the native process ID of the process and the exit value of the
process.
+     *
+     * @return a string representation of the object.
+     */
+    @Override
+    public String toString() {
+        return new StringBuilder("Process[pid=").append(pid)
+        .append(", exitValue=").append(hasExited ? exitcode : "\"not
exited\"")
+        .append("]").toString();
+    }
+
     private static native void init();

     static {
diff --git a/src/java.base/windows/classes/java/lang/ProcessImpl.java
b/src/java.base/windows/classes/java/lang/ProcessImpl.java
--- a/src/java.base/windows/classes/java/lang/ProcessImpl.java
+++ b/src/java.base/windows/classes/java/lang/ProcessImpl.java
@@ -564,6 +564,20 @@
     private static native boolean isProcessAlive(long handle);

     /**
+     * The {@code toString} method returns a string consisting of
+     * the native process ID of the process and the exit value of the
process.
+     *
+     * @return a string representation of the object.
+     */
+    @Override
+    public String toString() {
+        int exitCode = getExitCodeProcess(handle);
+        return new StringBuilder("Process[pid=").append(getPid())
+                .append(", exitValue=").append(exitCode == STILL_ACTIVE ?
"\"not exited\"" : exitCode)
+                .append("]").toString();
+    }
+
+    /**
      * Create a process using the win32 function CreateProcess.
      * The method is synchronized due to MS kb315939 problem.
      * All native handles should restore the inherit flag at the end of
call.



On Mon, 1 Aug 2016 at 19:34 Roger Riggs <roger.ri...@oracle.com> wrote:

> Hi Andrey,
>
> Sorry to be slow in getting back to this.
>
> Thanks for the update;   did you notice that Windows has a separate
> implementation of
> ProcessImpl and would also need a similar, though not identical toString()
> implementation?
>      [jdk/src/java.base/windows/classes/java/lang/ProcessImpl.java ]
>
> Windows has a slightly different implementation of the internal state with
> respect to knowing if it has exited.
> See exitValue() and the native getExitCodeProcess() method.
>
>
> On 7/24/2016 7:42 AM, Andrey Dyachkov wrote:
>
> Hi Roger,
>
> Thank you for reviewing it! I've prepared another version.
>
> diff --git a/src/java.base/unix/classes/java/lang/ProcessImpl.java
> b/src/java.base/unix/classes/java/lang/ProcessImpl.java
> --- a/src/java.base/unix/classes/java/lang/ProcessImpl.java
> +++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java
> @@ -630,6 +630,21 @@
>          return !hasExited;
>      }
>
> +    /**
> +     * The {@code toString} method for class {@code ProcessImpl}
> +     * returns a string consisting of the native process ID of the
> process,
> +     * exit code of the process and the status of the process.
>
> The javadoc for Process uses the terminology "exit value" or "exit
> status"; the usage should be consistent.
>
> +     *
> +     * @return  a string representation of the object.
> +     */
> +    @Override
> +    public String toString() {
> +        return new StringBuilder("ProcessImpl{pid=").append(pid)
>
> The implementation class should be hidden, use "Process".
> Other toString methods use '[]' to enclose the aggregate of the values.
>
> +        .append(", exitcode=").append(exitcode)
>
> 'exitcode=' -> "exitValue" to be consistent with the exitValue method.
>
> This will need an alternate value if the process has not exited, perhaps
> "not exited"
>
> +        .append(", hasExited=").append(hasExited)
>
> This isn't needed with the above 'not exited' string.
>
> +        .append("}").toString();
>
> '}' -> ']'
>
>
> Also, I think this would be viewed more as an enhancement than a bug and
> we'll need
> to request an extension[1][2] for it when the code is complete.
>
> Thanks, Roger
>
> [1] http://mail.openjdk.java.net/pipermail/jdk9-dev/2016-June/004443.html
> [2] http://openjdk.java.net/projects/jdk9/fc-extension-process
>
>
> +    }
> +
>      private static native void init();
>
>      static {
>
> On Mon, 9 May 2016 at 16:50 Roger Riggs <roger.ri...@oracle.com> wrote:
>
>> Hi Andrey,
>>
>> Since toString is a public method it needs to provide complete javadoc
>> specification
>> as providing values for debugging information.  ToString methods
>> typically directly
>> reflect the state of the fields of the object.
>>
>> Why should the exitValue have the value of the pid if the process is not
>> alive?
>>
>> Also, the if toString is providing the exitValue then it should be
>> identified as "exitValue", not exitCode.
>> the isAlive value should be identified as "isAlive".
>> The implementation class should not be exposed.  (remove
>> this.getClass().getSimpleName()).
>>
>> The performance of what seems like a simple toString method is not going
>> to be great
>> because of the native calls necessary to determine if the process is
>> alive (called twice)
>> and in the case of exitValue to handle the IllegalStateException.
>>
>> Some of the overhead could be avoided, by implementing toString in each
>> of the ProcessImpl.java
>> files where the current state is known more conveniently with less
>> overhead.
>>
>> $.02, Roger
>>
>>
>> On 5/8/2016 2:47 PM, Andrey Dyachkov wrote:
>> > Hello,
>> >
>> > I have added toString() method in Process.java.
>> >
>> > diff --git a/src/java.base/share/classes/java/lang/Process.java
>> > b/src/java.base/share/classes/java/lang/Process.java
>> > --- a/src/java.base/share/classes/java/lang/Process.java
>> > +++ b/src/java.base/share/classes/java/lang/Process.java
>> > @@ -548,5 +548,16 @@
>> >           return toHandle().descendants();
>> >       }
>> >
>> > +    @Override
>> > +    public String toString() {
>> > +        boolean isAlive = this.isAlive();
>> > +        return new
>> > StringBuilder(this.getClass().getSimpleName()).append("[")
>> > +                        .append("running=").append(isAlive).append(",
>> ")
>> > +                        .append(isAlive ? "pid=" : "exitCode=")
>> > +                        .append(isAlive ? this.getPid() :
>> this.exitValue())
>> > +                        .append("]")
>> > +                        .toString();
>> > +    }
>> > +
>> >
>> >   }
>>
>> --
>
> With great enthusiasm,
> Andrey
>
>
> --

With great enthusiasm,
Andrey

Reply via email to