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] javac crash @Getter(lazy=true) #3481

Closed
lrozenblyum opened this issue Aug 11, 2023 · 3 comments · Fixed by #3482
Closed

[BUG] javac crash @Getter(lazy=true) #3481

lrozenblyum opened this issue Aug 11, 2023 · 3 comments · Fixed by #3482

Comments

@lrozenblyum
Copy link

lrozenblyum commented Aug 11, 2023

Describe the bug
javac crashes when @Getter(lazy=true) with specific content is encountered in the code

To Reproduce

import java.util.function.Predicate;
import java.util.stream.Stream;
import lombok.Getter;

public class Sample {
	@Getter(lazy = true)
	private final String something = Stream.<String>empty()
		.filter(this.contains("test")) // also com.google.common.base.Predicates.alwaysTrue() would trigger the bug
		.skip(true ? 1 : 0)
		.findAny()
		.get();

	private Predicate<String> contains(String s) {
		return (checked -> checked.contains(s));
	}
}

mvn clean compile crashes:

An exception has occurred in the compiler (17.0.8). Please file a bug against the Java compiler via the Java bug reporting page (https://bugreport.java.com) after checking the Bug Database (https://bugs.java.com) for duplicates. Include your program, the following diagnostic, and the parameters passed to the Java compiler in your report. Thank you.
java.lang.ClassCastException: class com.sun.tools.javac.tree.JCTree$JCMethodInvocation cannot be cast to class com.sun.tools.javac.tree.JCTree$JCConditional (com.sun.tools.javac.tree.JCTree$JCMethodInvocation and com.sun.tools.javac.tree.JCTree$JCConditional are in module jdk.compiler of loader 'app')
        at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr$ConditionalType.dup(ArgumentAttr.java:426)
        at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.processArg(ArgumentAttr.java:240)
        at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.processArg(ArgumentAttr.java:219)
        at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.visitApply(ArgumentAttr.java:313)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
        at jdk.compiler/com.sun.tools.javac.comp.ArgumentAttr.attribArg(ArgumentAttr.java:197)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:675)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribArgs(Attr.java:778)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2559)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:4270)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2450)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2568)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:4270)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2450)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2568)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSelect(Attr.java:4270)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2450)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitApply(Attr.java:2568)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1797)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribExpr(Attr.java:723)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitVarDef(Attr.java:1315)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCVariableDecl.accept(JCTree.java:1027)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:770)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1449)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1091)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitIf(Attr.java:2199)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1553)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:770)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1449)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1091)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitSynchronized(Attr.java:1867)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCSynchronized.accept(JCTree.java:1409)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:770)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1449)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1091)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitIf(Attr.java:2199)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1553)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:770)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1449)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1091)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1239)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:921)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:677)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:751)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:5479)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5370)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5201)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:5146)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1317)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
        at org.codehaus.plexus.compiler.javac.JavaxToolsCompiler.compileInProcess(JavaxToolsCompiler.java:136)
        at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:182)
        at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1209)
        at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:198)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:137)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:210)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:156)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:148)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
        at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:56)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:305)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:192)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:105)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:957)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:289)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:193)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:282)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)

Expected behavior
Successful compilation

Version info (please complete the following information):

  • Lombok version: 1.18.28
  • javac: 17.0.8 (Oracle)
  • Maven: 3.6.3

Additional context
Eclipse compiles the code without errors

@lrozenblyum
Copy link
Author

Maybe duplicate or related to #3448

@Rawi01
Copy link
Collaborator

Rawi01 commented Aug 13, 2023

Yes, it is a duplicated and caused by type resolution for arguments. It happens if an initializer contains method arguments with different types. The fix is almost finished.

@rzwitserloot
Copy link
Collaborator

Duplicate of #3314.

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.

3 participants