[External] : Re: ModuleElement doesn't work with generated provides classes?

Josiah Noel josiahnoel at gmail.com
Mon Aug 28 18:48:31 UTC 2023


I see it has been partially fixed in a later version, and that the problem
only occurs if the service impl is generated in the last round. I can
tolerate not being able to explicitly see the `provides` statements, but
it's still a problem if merely calling `ModuleElement.getDirectives` causes
compilation to fail if services are generated in the last round. Is there a
way that we can make the behavior the same except not failing compilation?
(Currently I can see the requires just fine but the compilation is doomed
to fail)

On Mon, Aug 28, 2023 at 2:05 PM Jonathan Gibbons <
jonathan.gibbons at oracle.com> wrote:

> https://bugs.openjdk.org/browse/JDK-8315125
>
> -- Jon
> On 8/28/23 8:50 AM, Jonathan Gibbons wrote:
>
> I'll file a JBS issue to track this further.
>
> -- Jon
>
>
> On 8/28/23 8:35 AM, Josiah Noel wrote:
>
> Just tried explicitly adding a default constructor, but I still receive
> the same error.
>
> On Mon, Aug 28, 2023 at 11:29 AM Jonathan Gibbons <
> jonathan.gibbons at oracle.com> wrote:
>
>> The following error message seems relevant:
>>
>> /M:/Dev/module-directive-bug/blackbox-test-module/src/main/java/module-info.java:[6,41] the service implementation does not have
>> a default constructor: io.avaje.modules.example.GeneratedProvider
>>
>> -- Jon
>>
>>
>> On 8/26/23 1:04 PM, Josiah Noel wrote:
>>
>> As requested, I have created a simple example to replicate this issue. SentryMan/module-directive-bug:
>> showcase annotation processing bug (github.com)
>> <https://urldefense.com/v3/__https://github.com/SentryMan/module-directive-bug/tree/master__;!!ACWV5N9M2RV99hQ!O3CMUWVsFHaaU7b9D1x_-4ByzBUrMMF0KeTPmtdnqOC1hRhhZCBO0dODJwf1rZsapQpTYmYktzo5W_0TwANTUZuu$>
>>
>> On Fri, Aug 25, 2023 at 9:00 PM Josiah Noel <josiahnoel at gmail.com> wrote:
>>
>>> Say I got this module
>>>
>>> ```
>>>
>>> module nima.example {
>>>
>>> requires io.avaje.http.client;
>>>
>>> requires io.avaje.http.api;
>>>
>>> provides io.avaje.http.client.HttpClient.GeneratedComponent with
>>>
>>> com.jojo.helidon.api.client.httpclient.GeneratedHttpComponent;
>>>
>>> }
>>> ```
>>> and I generate com.jojo.helidon.api.client.httpclient.
>>> GeneratedHttpComponent in the last round of processing. When I get the
>>> module element during normal processing and so much as call
>>> `ModuleElement#getDirectives` and do nothing else, the processor will
>>> correctly generate, but compilation will still fail.(if I take out the
>>> module-info from the project it works though) I'm pretty sure it might have
>>> to do with the fact that GeneratedHttpComponent is created in the last
>>> round. Even so, not sure why it fails the compilation.
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/compiler-dev/attachments/20230828/d76fa415/attachment.htm>


More information about the compiler-dev mailing list