Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] @Getter(lazy=true) Compilation error (no suitable method found) #3314

Closed
NipponSunrise opened this issue Dec 16, 2022 · 0 comments · Fixed by #3482
Closed

[BUG] @Getter(lazy=true) Compilation error (no suitable method found) #3314

NipponSunrise opened this issue Dec 16, 2022 · 0 comments · Fixed by #3482
Milestone

Comments

@NipponSunrise
Copy link

NipponSunrise commented Dec 16, 2022

Describe the bug
The code below gives this compilation error:

11:55:45: Executing ':Main.main()'...


> Task :compileJava FAILED

Deprecated Gradle features were used in this build, making it incompatible with Gradle 8.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

See https://docs.gradle.org/7.5.1/userguide/command_line_interface.html#sec:command_line_warnings
1 actionable task: 1 executed
W:\Projects\tests\Lombok-Bug\src\main\java\org\example\Main.java:15: error: no suitable method found for collect(Collector<String,CAP#1,Map<Integer,Object>>)
    @Getter(lazy = true)
    ^
    method Stream.<R#1>collect(Supplier<R#1>,BiConsumer<R#1,? super String>,BiConsumer<R#1,R#1>) is not applicable
      (cannot infer type-variable(s) R#1
        (actual and formal argument lists differ in length))
    method Stream.<R#2,A>collect(Collector<? super String,A,R#2>) is not applicable
      (cannot infer type-variable(s) R#2,A
        (argument mismatch; Duration cannot be converted to Collector<? super String,A,R#2>))
  where R#1,T,R#2,A are type-variables:
    R#1 extends Object declared in method <R#1>collect(Supplier<R#1>,BiConsumer<R#1,? super T>,BiConsumer<R#1,R#1>)
    T extends Object declared in interface Stream
    R#2 extends Object declared in method <R#2,A>collect(Collector<? super T,A,R#2>)
    A extends Object declared in method <R#2,A>collect(Collector<? super T,A,R#2>)
  where CAP#1 is a fresh type-variable:
    CAP#1 extends Object from capture of ?
1 error

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 704ms
11:55:46: Execution finished ':Main.main()'.

To Reproduce
Main.java

package org.example;

import lombok.Getter;
import reactor.core.publisher.Mono;

import java.time.Duration;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;

public class Main {


    @Getter(lazy = true)
    private final Mono<Map<Integer, String>> mono =
            Mono.just(new String[]{"a", "b", "c", "d"})
                    .map(Arrays::asList)
                    .map(list -> list.stream().collect(Collectors.toMap(String::hashCode, v -> v)))
                    .cache(a -> Duration.ofSeconds(10),
                            v -> Duration.ofSeconds(10),
                            () -> Duration.ofSeconds(10)
                    );

/* Similar code that works as expected

    @Getter(lazy = true)
    private final Mono<Map<Integer, String>> mono =
            Mono.just(new String[]{"a", "b", "c", "d"})
                    .map(Arrays::asList)
                    .map(list -> list.stream().collect(Collectors.toMap(String::hashCode, v -> v)))
                    .cache(a -> Duration.ofSeconds(10),
                            v -> Duration.ofSeconds(10),
                            () -> Duration.ZERO   // <--------The only difference is in this line
                    );


    @Getter(lazy = true)
    private final Mono<Map<Integer, String>> mono =
            Mono.just(new String[]{"a", "b", "c", "d"})
                    .map(Arrays::asList)
                    .map(list -> list.stream().collect(Collectors.toMap(String::hashCode, v -> v)));

*/


    public static void main(String[] args) {
        new Main().getMono().subscribe(v -> System.out.println(v));
    }
}

build.gradle

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.24'
    annotationProcessor 'org.projectlombok:lombok:1.18.24'

    implementation 'io.projectreactor:reactor-core:3.5.1'
}

Expected behavior
Successful compilation. Code should run as expected.

Version info:

  • Lombok version: 1.18.24
  • JDK: 17.0.1, 17.0.5.
  • IDE: Intellij Idea 2022.3
  • Gradle: 7.5.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants