On Apr 20, 2015, at 5:49 PM, Roger Riggs <roger.ri...@oracle.com> wrote:

> Hi Paul,
> 
> On 4/20/2015 9:01 AM, Paul Sandoz wrote:
>> Hi Roger,
>> 
>> I am not sure you have the @implSpec/@implNote quite correct on the new 
>> methods of Process.
>> 
>> For example, for Process.toHandle i would expect something like:
>> 
>>   ...
>> 
>>   @implSpec
>>   This implementation throws an instance of UnsupportedOperationException and
>>   performs no other action.  Sub-types should override this method, ensuring 
>> that
>>   calling methods (getPid etc.) of this class, that are not overridden, 
>> operate on the
>>   returned ProcessHandle.
>> 
>> The @implSpec should refer to the implementation in Process itself, and the 
>> @implNote cannot be used for any normative statements.
> Thanks for the reminder and suggested text.  I updated the @implSpec clauses.
> 

I spotted another one here:

 281     /**
 282      * Returns {@code true} if the implementation of {@link #destroy} is to
 283      * normally terminate the process,
 284      * Returns {@code false} if the implementation of {@code destroy}
 285      * forcibly and immediately terminates the process.
 286      *
 287      * @implSpec
 288      * Processes returned from ProcessBuilder support this operation to
 289      * return true or false depending on the platform implementation.
 290      *
 291      * @return {@code true} if the implementation of {@link #destroy} is to
 292      *         normally terminate the process;
 293      *         otherwise, {@link #destroy} forcibly terminates the process
 294      * @throws UnsupportedOperationException if the Process implementation
 295      *         does not support this operation
 296      * @since 1.9
 297      */
 298     public boolean supportsNormalTermination() {
 299         throw new UnsupportedOperationException("supportsNormalTermination 
not supported for " + this.getClass().toString());
 300     }


The docs of Process.onExit might also require some tweaks. I dunno how much 
wiggle room there is with the current implementation, perhaps very little?


 415     /**
 416      * Returns a ProcessHandle for the Process.
 417      * 
 418      * @implSpec
 419      * This implementation throws an instance of 
UnsupportedOperationException
 420      * and performs no other action.
...
 446      * @implSpec
 447      * The implementation of this method returns information about the 
process as:
 448      * {@link #toHandle toHandle().info()}.

Best to be consistent with either "This implementation ..." or "The 
implementation of this method ..." rather than a mix. I prefer the former as it 
is more concise. Up to you.


> Some @implNotes describe the JDK implementation and some developers will
> rely on the implementation specifics and to some degree define the expected 
> behaviors.

One way of thinking about this is that the developers writing the TCK tests 
will pay close attention to @implSpec and need not do so for @implNote.


>> 
>> 
>> The document for Process.getPid (and similarly those methods depending on 
>> toHandle) could then be:
>> 
>>   ...
>>   @implSpec
>>   This implementation returns a process id as follows:
>> 
>>     toHandle().getPid();
>> 
>> 
>> In this respect is there a need to say anything about the behaviour of a 
>> Process created by ProcessBuilder?
> The ProcessBuilder produced subclasses of Process implement the spec
> so no additional description is needed.
>> 
>> It might be useful to have some general guidance for sub-types on the class 
>> doc of Process e.g. saying they only need to override toHandle but may 
>> override some or all dependent methods as appropriate.
> It does not add much but I added a paragraph to the Process class javadoc.
> There are not many subclasses of Process outside the JDK.
> 

Ok.

Paul.

> The webrev[1] and javadoc[2] have been updated in place.
> 
> Thanks, Roger
> 
> [1] http://cr.openjdk.java.net/~rriggs/webrev-ph
> [2] http://cr.openjdk.java.net/~rriggs/ph-apidraft/

Reply via email to