[foreign] RFR 8219932: Split jextract's Context into multiple (immutable) sub-components
Jorn Vernee
jbvernee at xs4all.nl
Fri Mar 1 16:09:29 UTC 2019
I think your suggestions are very good. I had been thinking about
encapsulating Log::out and Log::err more as well, but held off on it
because I didn't want to put too many changes into the same patch. I'm
happy to add those suggestions though :)
While implementing this I found out that the Logger in Log was not
actually being used by anything. I thought about removing it, but since
Logger already has functionality for handling log levels I instead
changed the implementation of Log to depend on the logger instead, and
wrapped the err PrintWriter in a logger handler.
I also added a printStackTrace method to Log for printing stacktraces,
which is guarded by Main.DEBUG.
One of the bigger things was that a bunch of classes were creating their
own Loggers, but these were not being affected by the --log flag passed
to jextract AFAICT. I changed all of those to use the Logger from Log as
well, so we can control the log level of all the loggers at once by
changing the log level passed to Log. (There was 1 use of Logger in
TypeDictionary, which didn't have a Context nearby, so I moved it to
TypedefHandler instead).
When updating all the code referencing the old Loggers I also took the
opportunity to remove any unused imports.
I was almost able to get rid of the Log::err and Log::out PrintWriters
completely, but these were being passed to the Jmod tool at some point,
so I've kept them for now.
Updated webrev:
http://cr.openjdk.java.net/~jvernee/panama/webrevs/8219932/webrev.01/
So, there are currently 2 ways of logging; 1. Through
Log::printError/Warning/Note which expect a message ID from the resource
file. 2. Through the central java.util.Logger. Maybe we'd want to keep
only one or the other? But, I wanted to get some feedback at this point.
Cheers,
Jorn
Maurizio Cimadamore schreef op 2019-02-28 17:27:
> Very nice, I like it. You manage to keep things relatively simple,
> without over-engineering things too much, which is always hard with
> these kind of cleanups.
>
> My #1 request is that we encapsulate logging methods a bit more. I
> don't like that clients have to (morally) do:
>
> Log.stderr.println(Log.format(...))
>
> It feels like 'println' should be an instance method of Log.
>
> Note also that jextract always seems to use stderr for reporting
> diagnostics, so Log::println should probably use that (and keep
> Log::out around in case you need it).
>
> Number #2 request, also Log-related, is that not all diagnostics are
> created equals - some are errors we should always report, other are
> warnings, other are notes that are only enabled in debugging mode. It
> would be nice if Log had different methods for these:
>
> printError
> printWarning
> printNote
>
> which then allows us to do centralized filtering of the diagnostic
> that are reported by jextract.
>
> Maurizio
>
>
> On 28/02/2019 16:02, Jorn Vernee wrote:
>> Hi,
>>
>> Continuing this from an earlier thread [1]. Here is the first
>> iteration of the ideas that were discussed.
>>
>> This patch splits up Context into multiple sub-components. These are:
>>
>> - Options, a collection of options for a jextract run.
>> - Log, logging PrintWriters + Logger
>> - A List<Path> with jextract source (.h) files.
>>
>> Context is then used as an argument to a particular jextract run.
>>
>> I've held off on adding JextractTool as a sub-component as well, since
>> that would create a circular dependency, and I'm not sure what the
>> advantage of adding it would be at this time, since it's not accessed
>> by other internal parts of the jextract run.
>>
>> I've moved some functions to other classes, where I felt they made
>> more sense;
>>
>> - Main.format -> Log.format
>> - Main.getBuiltinHeadersDir -> Context.getBuiltinHeadersDir
>> - Context.findLibraryPath -> Utils.findLibraryPath
>>
>> To support the immutability of the Options sub-component I created a
>> builder for it, and moved the code that creates it to a separate
>> method in Main. In some cases the code wanted to exit early and return
>> an exit code, this is now replaced with throwing a custom exception,
>> which is caught in the `int run(String[] args)` method.
>>
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8219932
>> Webrev:
>> http://cr.openjdk.java.net/~jvernee/panama/webrevs/8219932/webrev.00/
>>
>> Thanks,
>> Jorn
>>
>> [1] :
>> https://mail.openjdk.java.net/pipermail/panama-dev/2019-February/004627.html
More information about the panama-dev
mailing list