Trivial compiler warning from generated code
Duncan Gittins
duncan.gittins at gmail.com
Thu Feb 15 17:24:37 UTC 2024
Thank you, I've tested and all works well.
Duncan
On Thu, 15 Feb 2024 at 17:01, Maurizio Cimadamore <
maurizio.cimadamore at oracle.com> wrote:
> We've just fixed that in the "master" branch.
>
> Cheers
> Maurizio
> On 15/02/2024 15:11, Maurizio Cimadamore wrote:
>
> I see - thanks a lot.
>
> There's two issues here:
>
> * since we switched the translation of function pointers from interface to
> class + interface, when a function pointer code is embedded inside a
> struct, we lack the required "static"
> * the new function pointer class lacks a package constructor (which we
> have in other classes)
>
> I'll fix that
>
> Maurizio
> On 15/02/2024 14:31, Duncan Gittins wrote:
>
> Two examples attached. This compiles: " new LPHANDLER_FUNCTION_EX();"
> whereas "new IUnknownVtbl().new QueryInterface();" does not because the
> IUnknownVtbl constructor is generated.
>
> Note that a compiler warning is only issued because after I generate 5
> packages with jextract, I build them with a module-info.java
>
> /**
> * Module definition for JEXTRACT based generated code
> */
> module jextract.duncan.win
> {
> //
> =======================================================================
> // Exports:
> exports duncan.win.advapi;
> exports duncan.win.kernel;
> exports duncan.win.ole;
> exports duncan.win.shell;
> exports duncan.win.user;
>
> //
> =======================================================================
> }
>
> Kind regards
>
> Duncan
>
> On Thu, 15 Feb 2024 at 13:38, Maurizio Cimadamore <
> maurizio.cimadamore at oracle.com> wrote:
>
>> Can you please send one of the source file that is generating these
>> warnings?
>>
>> Thanks
>> Maurizio
>> On 15/02/2024 12:23, Duncan Gittins wrote:
>>
>> These are trivial issues I noted when re-building with latest jextract
>> master (am now using LLVM13).
>>
>> I put all my generated code into a module definition which exports each
>> package generated by jextract. The compiler warns that there are no
>> explicit contructors for each interface class type, such as the inner or
>> top level interface handlers such as IUnknownVtbl.QueryInterface and
>> LPHANDLER_FUNCTION_EX:
>>
>> [javac]
>> C:\mymoduleproject\generated\some\package\name\IUnknownVtbl.java:48:
>> warning: [missing-explicit-ctor] class IUnknownVtbl.QueryInterface in
>> exported package some.package.name
>> <https://urldefense.com/v3/__http://some.package.name__;!!ACWV5N9M2RV99hQ!JWktJzjV6IXxP1Ztow5Nu8IBHQPBuqRlPe4zP_q2D4bzIgbdQkTuin4byR10rLXhj_RPM78NZuOQgc-EX_lmerZVQ45-ve34$>
>> declares no explicit constructors, thereby exposing a default constructor
>> to clients of module mymoduleproject
>> [javac] public class QueryInterface {
>>
>> Also, shouldn't the inner classes for interfaces - like
>> IUnknownVtbl.QueryInterface - be declared as static? I assume that means
>> the code generated could be a tiny amount smaller as no implicit
>> parent$this.
>>
>> Headers used: #include <objbase.h> + #include <shlobj_core.h>
>>
>> Kind regards
>>
>> Duncan
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/jextract-dev/attachments/20240215/9ec1037f/attachment.htm>
More information about the jextract-dev
mailing list