You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Eric Milles (Jira)" <ji...@apache.org> on 2023/02/23 22:23:00 UTC

[jira] [Assigned] (GROOVY-10937) record + lombok + groovy == Cannot specify duplicate annotation on the same member : lombok.NonNull

     [ https://issues.apache.org/jira/browse/GROOVY-10937?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Eric Milles reassigned GROOVY-10937:
------------------------------------

    Assignee: Eric Milles

> record + lombok + groovy == Cannot specify duplicate annotation on the same member : lombok.NonNull
> ---------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-10937
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10937
>             Project: Groovy
>          Issue Type: Bug
>          Components: Compiler
>    Affects Versions: 4.0.9
>            Reporter: Marcin Zajaczkowski
>            Assignee: Eric Milles
>            Priority: Minor
>
> I've bumped into a strange looking compilation error in a project using JDK 17 record, Lombok's @NotNull and Groovy for tests. It took me a while to find a construction which causes that, as:
>  # Compilation error occurs in a Groovy class not related to the problematic Java record.
>  # Groovy class must have (non related) inner interface or class.
>  # Record has must have two (or more) fields with @NotNull annotation from Lombok.
>  # Some (other) Groovy class has to refer to that record.
> For example:
> {code:java}
> // Java
> public record SampleRecordWithNonNullFromLombok(
>         @NonNull
>         String nonNullField,
>         @NonNull        //Two or more @NulNull annotated fields are required to trigger the problem
>         String nonNullField2
> ) {}
> //Groovy
> class ClassWithReferenceToRecord {
>     private SampleRecordWithNonNullFromLombok sampleRecord
> }
> class ReproducerClass {  //it fails to compile
>     interface RequiredToReproduceProblem {
>     }
> }{code}
> The error is:
> {code:java}
> [ERROR] Failed to execute goal org.codehaus.gmavenplus:gmavenplus-plugin:1.13.1:compileTests (default) on project record-lombok-groovy: Error occurred while calling a method on a Groovy class from classpath.: InvocationTargetException: startup failed:
> [ERROR] .../ReproducerClass.groovy: -1: Cannot specify duplicate annotation on the same member : lombok.NonNull
> [ERROR]  @ line -1, column -1.
> [ERROR] 1 error
> {code}
> I created a shrank version of a reproducer:
> [https://github.com/szpak/code-examples-and-poc/tree/master/record-lombok-groovy]
>  
> It might be a problem with the way how Lombok generates .class for Java record, however, I start here as Groovy compilation is the final reason.
> I have observed that error occasionally with Groovy 3(.0.14), but it occurs every time with 4(0.9).



--
This message was sent by Atlassian Jira
(v8.20.10#820010)