projectlombok / lombok

Very spicy additions to the Java programming language.
https://projectlombok.org/
Other
12.84k stars 2.38k forks source link

[BUG] Support for Eclipse 2024-06 (4.32) #3688

Closed JanMosigItemis closed 1 month ago

JanMosigItemis commented 3 months ago

Describe the bug Like https://github.com/projectlombok/lombok/issues/3620 but for Eclipse 4.32.

Lombok annotation handler class lombok.eclipse.handlers.HandleBuilder failed
java.lang.NoSuchMethodError: 'void org.eclipse.jdt.internal.compiler.ast.CaseStatement.<init>(org.eclipse.jdt.internal.compiler.ast.Expression, int, int)'
    at lombok.eclipse.Eclipse.createCaseStatement(Eclipse.java:285)
    at lombok.eclipse.handlers.singulars.EclipseJavaUtilListSingularizer.appendBuildCode(EclipseJavaUtilListSingularizer.java:75)
    at lombok.eclipse.handlers.HandleBuilder.generateBuildMethod(HandleBuilder.java:821)
    at lombok.eclipse.handlers.HandleBuilder.handle(HandleBuilder.java:563)
    at lombok.eclipse.HandlerLibrary$AnnotationHandlerContainer.handle(HandlerLibrary.java:106)
    at lombok.eclipse.HandlerLibrary.handleAnnotation(HandlerLibrary.java:237)
    at lombok.eclipse.TransformEclipseAST$AnnotationVisitor.visitAnnotationOnType(TransformEclipseAST.java:269)
    at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:107)
    at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
    at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:74)

To Reproduce Load a lombokified project into the workspace and check the error log.

Expected behavior Full support for Eclipse 2024-06 (4.32)

Version info:

Fix would be appreciated 👍

Rawi01 commented 3 months ago

Please try the edge version

dpolivaev commented 3 months ago

The mentioned edge version page contains no download link.

Rawi01 commented 3 months ago

img

dpolivaev commented 3 months ago

Wow

massimiliano commented 3 months ago

I've tested the edge version with Eclipse 2024-06 and it works. Thank you.

JanMosigItemis commented 3 months ago

Tested it with above config and edge version: 1.18.33 (2024-05-17 21:31:34 UTC). Works. Thanks 🍰

ingogriebsch commented 3 months ago

I tested the edge version of Friday, June 14, 2024 with Spring STS (Version 4.23.0.RELEASE, Build Id: 202406070037, Revision: d779a8466c4c261d699f49bcbb9dddbe217c0e89) and it works. :)

cosmacol commented 3 months ago

Since upgrading from Eclipse 2024-03 with Lombok 1.18.32 (edge) to Eclipse 2024-06 with Lombok 1.18.34 (stable), I get sparse errors in the Eclipse annotations side strip related to usage of Lombok-generated constructs (usually related to usage of a missing .builder() method, which should be actually provided by @Builder).

No actual errors in the errors view of Eclipse, and the code starts and debugs normally - the "errors" are only displayed in the current editor annotations.

The behavior is not consistent, in most of the classes it works normally, on other it never works - it seems that, for each class, either it works or not - maybe related to some aspects of the class breaking the Eclipse editor integration of Lombok?

EDIT: seems similar to #3699

nimo23 commented 2 months ago

I also get this error after updating lombok to 1.18.34:

java.lang.NullPointerException: Cannot invoke "Object.getClass()" because "compilationUnit" is null
    at lombok.eclipse.handlers.EclipseHandlerUtil.setDocComment(EclipseHandlerUtil.java:2841)
    at lombok.eclipse.handlers.EclipseHandlerUtil.setDocComment(EclipseHandlerUtil.java:2830)
    at lombok.eclipse.handlers.HandleConstructor.generateConstructorJavadoc(HandleConstructor.java:609)
    at lombok.eclipse.handlers.HandleConstructor.generate(HandleConstructor.java:290)
    at lombok.eclipse.handlers.HandleConstructor.generateConstructor(HandleConstructor.java:246)
    at lombok.eclipse.handlers.HandleConstructor$HandleAllArgsConstructor.handle(HandleConstructor.java:165)
    at lombok.eclipse.HandlerLibrary$AnnotationHandlerContainer.handle(HandlerLibrary.java:106)
    at lombok.eclipse.HandlerLibrary.handleAnnotation(HandlerLibrary.java:237)
    at lombok.eclipse.TransformEclipseAST$AnnotationVisitor.visitAnnotationOnType(TransformEclipseAST.java:269)
    at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:107)
    at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
    at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:74)
    at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
    at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:69)
    at lombok.eclipse.EclipseAST.traverse(EclipseAST.java:224)
    at lombok.eclipse.TransformEclipseAST.go(TransformEclipseAST.java:226)
    at lombok.eclipse.TransformEclipseAST.transform(TransformEclipseAST.java:187)
    at lombok.eclipse.TransformEclipseAST.transform_swapped(TransformEclipseAST.java:104)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at lombok.launch.PatchFixesHider$Util.invokeMethod(PatchFixesHider.java:146)
    at lombok.launch.PatchFixesHider$Transform.transform_swapped(PatchFixesHider.java:272)
    at org.eclipse.jdt.internal.compiler.parser.Parser.endParse(Parser.java:11535)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12735)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12965)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12922)
    at org.eclipse.jdt.internal.compiler.parser.Parser.dietParse(Parser.java:11306)
    at org.eclipse.jdt.internal.compiler.parser.SourceTypeConverter.convert(SourceTypeConverter.java:152)
    at org.eclipse.jdt.internal.compiler.parser.SourceTypeConverter.buildCompilationUnit(SourceTypeConverter.java:99)
    at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.accept(HierarchyResolver.java:186)
    at org.eclipse.jdt.internal.compiler.lookup.LookupEnvironment.askForType(LookupEnvironment.java:381)
    at org.eclipse.jdt.internal.compiler.lookup.PackageBinding.getTypeOrPackage(PackageBinding.java:276)
    at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findImport(CompilationUnitScope.java:626)
    at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.findSingleImport(CompilationUnitScope.java:698)
    at org.eclipse.jdt.internal.compiler.lookup.CompilationUnitScope.faultInImports(CompilationUnitScope.java:525)
    at org.eclipse.jdt.internal.compiler.lookup.Scope.getBinding(Scope.java:2229)
    at org.eclipse.jdt.internal.compiler.ast.Argument.bind(Argument.java:126)
    at org.eclipse.jdt.internal.compiler.ast.LambdaExpression.resolveType(LambdaExpression.java:413)
    at org.eclipse.jdt.internal.compiler.ast.FunctionalExpression.resolveType(FunctionalExpression.java:189)
    at org.eclipse.jdt.internal.compiler.ast.FieldDeclaration.resolve(FieldDeclaration.java:309)
    at org.eclipse.jdt.internal.compiler.lookup.FieldBinding.constant(FieldBinding.java:226)
    at org.eclipse.jdt.internal.compiler.lookup.FieldBinding.constant(FieldBinding.java:253)
    at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.getOtherFieldBindings(QualifiedNameReference.java:746)
    at org.eclipse.jdt.internal.compiler.ast.QualifiedNameReference.resolveType(QualifiedNameReference.java:1119)
    at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:866)
    at org.eclipse.jdt.internal.compiler.ast.MessageSend.resolveType(MessageSend.java:815)
    at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.skipResolveInitializerIfAlreadyCalled2(LocalDeclaration.java:383)
    at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:358)
    at org.eclipse.jdt.internal.compiler.ast.LocalDeclaration.resolve(LocalDeclaration.java:258)
    at org.eclipse.jdt.internal.compiler.ast.Statement.resolveWithBindings(Statement.java:498)
    at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveStatements(ASTNode.java:726)
    at org.eclipse.jdt.internal.compiler.ast.Block.resolve(Block.java:128)
    at org.eclipse.jdt.internal.compiler.ast.ForeachStatement.resolve(ForeachStatement.java:683)
    at org.eclipse.jdt.internal.compiler.ast.Statement.resolveWithBindings(Statement.java:498)
    at org.eclipse.jdt.internal.compiler.ast.ASTNode.resolveStatements(ASTNode.java:726)
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:714)
    at org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:409)
    at org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:612)
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1517)
    at org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1646)
    at org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:666)
    at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:861)
    at org.eclipse.jdt.internal.core.hierarchy.HierarchyResolver.resolve(HierarchyResolver.java:661)
    at org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.buildSupertypes(HierarchyBuilder.java:132)
    at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.build(IndexBasedHierarchyBuilder.java:157)
    at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:323)
    at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1281)
    at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:94)
    at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:740)
    at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:805)
    at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:862)
    at org.eclipse.jdt.internal.core.SourceType.newSupertypeHierarchy(SourceType.java:813)
    at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getTypeHierarchy(SuperTypeHierarchyCache.java:144)
    at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getTypeHierarchy(SuperTypeHierarchyCache.java:96)
    at org.eclipse.jdt.internal.corext.util.SuperTypeHierarchyCache.getMethodOverrideTester(SuperTypeHierarchyCache.java:105)
    at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.getOverrideIndicators(OverrideIndicatorLabelDecorator.java:174)
    at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.lambda$0(OverrideIndicatorLabelDecorator.java:138)
    at org.eclipse.jdt.internal.core.JavaModelManager.cacheZipFiles(JavaModelManager.java:5765)
    at org.eclipse.jdt.internal.core.JavaModelManager.callReadOnly(JavaModelManager.java:5754)
    at org.eclipse.jdt.core.JavaCore.callReadOnly(JavaCore.java:6130)
    at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.computeAdornmentFlags(OverrideIndicatorLabelDecorator.java:129)
    at org.eclipse.jdt.ui.OverrideIndicatorLabelDecorator.decorate(OverrideIndicatorLabelDecorator.java:266)
    at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:254)
    at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:105)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
    at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:359)
    at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:345)
    at org.eclipse.ui.internal.decorators.DecorationScheduler$1.queue(DecorationScheduler.java:410)
    at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:388)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

Eclipse details:

eclipse.buildId=4.32.0.20240606-1231
java.version=21.0.3
java.vendor=Eclipse Adoptium

lombok.version=1.18.34
abryantsev commented 2 months ago

I also get sporadical The method builder() is undefined for the type <Name> message in the editor for the very few classes with the @Builder annotation. No stack traces or errors anywhere. The code is compilable. Eclipse version: 2024-06 (4.32.0), Lombok v1.18.34. The same error is for the toBuilder() method if @Builder is used with the toBuilder = true

famod commented 2 months ago

Since Eclipse 2024-06 is generally supported by Lombok 1.18.34, I'd suggest closing this issue and report individual bugs as individual and well scoped issues like #3706 and #3709.

What you guys could try though is to compile your projects via Maven + ECJ + Lombok. See the zipfile in #3709 as an example. You should be able to see some more details with that.

cosmacol commented 2 months ago

Since Eclipse 2024-06 is generally supported by Lombok 1.18.34, I'd suggest closing this issue and report individual bugs as individual and well scoped issues like #3706 and #3709.

What you guys could try though is to compile your projects via Maven + ECJ + Lombok. See the zipfile in #3709 as an example. You should be able to see some more details with that.

In relation to this problem reported in my previous comment: https://github.com/projectlombok/lombok/issues/3688#issuecomment-2198110862 the issue specifically affects, since the upgrade, Eclipse IDE editor integration. The code compiled by Eclipse runs fine, without any errors reported in the Problems pane. My assumption is that, in this case, running ECJ externally would just behave as expected, do you agree?

ahoehma commented 2 months ago

I see many many exceptions in eclipse like this

Lombok annotation handler class lombok.eclipse.handlers.HandleConstructor$HandleAllArgsConstructor failed Stacktrace: java.lang.NullPointerException

eclipse.buildId=4.24.0.202407191701 java.version=22.0.1 java.vendor=Eclipse Adoptium BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=de_DE Framework arguments: -product org.springframework.boot.ide.branding.sts4 Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.springframework.boot.ide.branding.sts4

I'm using already lombok's latest release: -javaagent:D:\Dev\sts-4.20.0.RELEASE\plugins\org.projectlombok.agent_1.18.34/lombok.jar

And there is now edge release or? No edge build has been released since the last stable release of lombok.

nimo23 commented 2 months ago

Whenever I type something into the editor, an error message appears in the error log. Here is a screenshot from eclipse error console:

Screenshot at Jul 26 00-32-06

Eclipse details:

eclipse.buildId=4.32.0.20240606-1231
java.version=21.0.3
java.vendor=Eclipse Adoptium

lombok.version=1.18.34
Rawi01 commented 1 month ago

The original problem was fixed in lombok 1.18.34. For the javadoc/constructor issue, see #3706.