Trivial compiler warning from generated code
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu Feb 15 17:01:31 UTC 2024
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/7258cb0c/attachment.htm>
More information about the jextract-dev
mailing list