> On 24 Jun 2020, at 15:28, Jonathan Gibbons <jonathan.gibb...@oracle.com> 
> wrote:
> 
> Yes, it's an oversight that the ProblemList entry is commented out and not 
> deleted.  I'll fix that.

Thanks.

> It is intended to be helpful to users to provide details in the exception 
> about the file causing the problem.  The different exceptions identify the 
> file in question, which is probably more important/useful than the 
> READ/WRITE, which is there to help provide helpful diagnostic messages. This  
> is all working around the appalling under-specification of 
> java.io.IOException, which provides NO mandated information other than the 
> single bit of info that "an IO error occurred".

I understand the motivation you are describing and mostly agree with it. 
However, I think we could be helpful in a more balanced way: javadoc is likely 
doing more work than is required to produce quality diagnostic messages.

> I don't consider it would be progress if end users have to analyze stack 
> traces to determine the context of a message that has been reported.

I do not suggest that end users should analyze stack traces; I suggest to 
investigate how much bigger blocks (think: Lego) of I/O functionality we can 
use until quality of messages that the end user sees suffers significantly. Can 
it be that if we accurately capture the context of an I/O operation performed 
by a bigger block, that context will still be enough to diagnose the problem? 
(That is, even if that block does not provide any diagnostic information by 
itself, which I don't think I have ever seen: there's always something.)

For example. To copy file A to file B, javadoc does the following. It reads a 
portion of file A and then writes that portion to file B. This repeats until 
file A is exhausted and everything that has been read from file A has been also 
written to file B, or an error has occurred. This way, if an I/O error occurs, 
javadoc always knows whether this was a "read from A" or "write to B" kind of 
error.

I think that knowing that is superfluous in most cases. If we choose a bigger 
block (e.g. java.nio.file.Files#copy(java.nio.file.Path, java.nio.file.Path, 
java.nio.file.CopyOption...)) and capture the implicated files in a 
DocFileIOException, that could be more practical.

Could a message like "Error copying: A to B" be just as good as "Error writing 
file: B"? In practise, however, that difference will be more like between

    Error writing file: B
            (java.nio.file.AccessDeniedException: B)

and

    Error copying: A to B
            (java.nio.file.NoSuchFileException: A)
    Error copying: A to B
            (java.nio.file.FileAlreadyExistsException: B)
    Error copying: A to B
            (java.nio.file.FileSystemException: B: Operation not permitted)

-Pavel

> -- Jon
> 
> On 6/24/20 5:19 AM, Pavel Rappo wrote:
>> Jon,
>> 
>> Consider deleting that entry in ProblemList.txt instead of commenting it 
>> out. Otherwise, the change looks good.
>> 
>> ***
>> 
>> That change reminded me of a question I had: do we really need to split I/O 
>> errors into "read" and "write" errors and associate filenames with I/O 
>> errors on the Java level?
>> 
>> I'm asking this because it's very tempting to refactor that code. For 
>> example, thanks to NIO, we could fold code like this into a one-liner:
>> 
>>     public void copyFile(DocFile fromFile) throws DocFileIOException {
>>         try (OutputStream output = openOutputStream()) {
>>             try (InputStream input = fromFile.openInputStream()) {
>>                 byte[] bytearr = new byte[1024];
>>                 int len;
>>                 while ((len = read(fromFile, input, bytearr)) != -1) {
>>                     write(this, output, bytearr, len);
>>                 }
>>             } catch (IOException e) {
>>                 throw new DocFileIOException(fromFile, 
>> DocFileIOException.Mode.READ, e);
>>             }
>>         } catch (IOException e) {
>>             throw new DocFileIOException(this, 
>> DocFileIOException.Mode.WRITE, e);
>>         }
>>     }
>> 
>> I'm pretty sure that if any of the java.nio.file.Files's methods throws 
>> IOException, the user will be able to quickly and accurately diagnose the 
>> error using the accompanying message.
>> 
>> Should I create an RFE to investigate that?
>> 
>> -Pavel
>> 
>>> On 15 Jun 2020, at 19:41, Jonathan Gibbons <jonathan.gibb...@oracle.com> 
>>> wrote:
>>> 
>>> Please review a change to enable a javadoc test to be removed from the 
>>> problem list.
>>> 
>>> The test was excluded because an IOException was occurring when running the 
>>> test
>>> on Windows, Most of the change here is support code to diagnose the 
>>> problem, and
>>> to investigate whether the issue can be fixed.
>>> 
>>> Eventually, a reference was found on a Microsoft site, indicating that 
>>> normal directories
>>> cannot be made read-only on Windows.  Thus the primary fix is to skip each 
>>> test-case
>>> if the setup for the test case fails to create a readonly directory on 
>>> Windows.
>>> 
>>> In addition doc comments and -Xdoclint:-missing are added to reduce the 
>>> number of
>>> irrelevant diagnostics in the output.
>>> 
>>> In conjunction with the fix for JDK-8152313, this will fix all javadoc 
>>> tests on the
>>> LangTools exclude list.
>>> 
>>> -- Jon
>>> 
>>> JBS: https://bugs.openjdk.java.net/browse/JDK-8164597
>>> Webrev: http://cr.openjdk.java.net/~jjg/8164597/webrev.00/
>>> 

Reply via email to