RFR 9: 8077350 Process API Updates Implementation Review (Due 4/23)
Roger Riggs
Roger.Riggs at Oracle.com
Mon Apr 20 17:33:44 UTC 2015
Hi Paul,
There are statements in Process about the specified behavior of Processes
created by ProcessBuilder. That's why I included them in the @implSpec
clause.
If @implSpec is only for the specifics of the method itself then where
should the behavior of ProcessBuilder created instances be specified?
Thanks, Roger
On 4/20/2015 12:33 PM, Paul Sandoz wrote:
> On Apr 20, 2015, at 5:49 PM, Roger Riggs <Roger.Riggs at 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/
More information about the core-libs-dev
mailing list