mapstruct / mapstruct-spring-extensions

Helpful additions to MapStruct when using the Spring Framework.
Apache License 2.0
144 stars 33 forks source link

Error when compiling with Eclipse #57

Open Chessray opened 1 year ago

Chessray commented 1 year ago
    With following environment  `compiler: Eclipse JDT (IDE) 1.4.200.v20220802-0458, environment: Java 17.0.4.1 (Eclipse Adoptium)`, adapter class will NOT be generating method for all of the converters, but it only generate the class.
[Error - 4:53:17 AM] Sep 30, 2022, 4:53:17 AM Exception thrown by Java annotation processor org.mapstruct.extensions.spring.converter.ConverterMapperProcessor@67b39ba
java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl cannot be cast to class javax.lang.model.element.AnnotationMirror (org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @6f270916; javax.lang.model.element.AnnotationMirror is in module java.compiler of loader 'platform')
java.lang.Exception: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl cannot be cast to class javax.lang.model.element.AnnotationMirror (org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @6f270916; javax.lang.model.element.AnnotationMirror is in module java.compiler of loader 'platform')
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:172)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:124)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:172)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:138)
    at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:953)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:450)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:379)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:311)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:273)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:188)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1024)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:254)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:311)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:400)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:403)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:514)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:462)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:544)
    at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:524)
    at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:420)
    at org.eclipse.jdt.ls.core.internal.handlers.BuildWorkspaceHandler.buildProjects(BuildWorkspaceHandler.java:112)
    at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$28(JDTLanguageServer.java:885)
    at org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer.lambda$55(JDTLanguageServer.java:1070)
    at java.base/java.util.concurrent.CompletableFuture$UniApply.tryFire(Unknown Source)
    at java.base/java.util.concurrent.CompletableFuture$Completion.exec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl cannot be cast to class javax.lang.model.element.AnnotationMirror (org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @6f270916; javax.lang.model.element.AnnotationMirror is in module java.compiler of loader 'platform')
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
    at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
    at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
    at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.toSourceTargetTypeNamePairs(ConverterMapperProcessor.java:104)
    at java.base/java.util.Optional.map(Unknown Source)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.getExternalConversionMappings(ConverterMapperProcessor.java:95)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.buildDescriptor(ConverterMapperProcessor.java:77)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.process(ConverterMapperProcessor.java:63)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:142)
    ... 34 more

Originally posted by @myatmin in https://github.com/mapstruct/mapstruct-spring-extensions/issues/53#issuecomment-1263110178

Chessray commented 1 year ago

Hello @myatmin,

Could you please provide a minimum example project for this behaviour - including the Eclipse project files?

Chessray commented 1 year ago

Closed as no reaction in nearly a year.

myatmin commented 10 months ago

Hi @Chessray,

Please accept my sincerest apologies. I missed out this issue notification.

I only have VSCode devcontainer sample project. mapstruct-example.zip

Can you just copy java files from the following package com.mapstruct.example.mapstructexample.mapper to your blank Eclipse project and see whether it generate all of the classes like adapter class and converter class?

myatmin commented 10 months ago

Hi @Chessray ,

I managed to open the sample project in Eclipse. Following error message is still encountered. Exception thrown by Java annotation processor org.mapstruct.extensions.spring.converter.ConverterMapperProcessor@7ea584e6

java.lang.Exception: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl cannot be cast to class javax.lang.model.element.AnnotationMirror (org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @183f9933; javax.lang.model.element.AnnotationMirror is in module java.compiler of loader 'platform')
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:172)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:124)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:172)
    at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:138)
    at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:953)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:450)
    at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:426)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:406)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214)
    at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:338)
    at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:273)
    at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:188)
    at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:1079)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:296)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:352)
    at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:441)
    at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
    at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:444)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:555)
    at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:503)
    at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:585)
    at org.eclipse.core.internal.resources.Workspace.buildInternal(Workspace.java:594)
    at org.eclipse.core.internal.resources.Workspace.build(Workspace.java:490)
    at org.eclipse.ui.actions.BuildAction$1.runInWorkspace(BuildAction.java:291)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl cannot be cast to class javax.lang.model.element.AnnotationMirror (org.eclipse.jdt.internal.compiler.apt.model.AnnotationValueImpl is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @183f9933; javax.lang.model.element.AnnotationMirror is in module java.compiler of loader 'platform')
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.toFromToMappings(ConverterMapperProcessor.java:160)
    at java.base/java.util.Optional.map(Optional.java:260)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.getExternalConversionMappings(ConverterMapperProcessor.java:152)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.buildAdapterDescriptor(ConverterMapperProcessor.java:137)
    at org.mapstruct.extensions.spring.converter.ConverterMapperProcessor.process(ConverterMapperProcessor.java:101)
    at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:142)
    ... 27 more
Chessray commented 10 months ago

Your project setup is wrong. You've configured the processors as regular Maven dependencies instead of annotation processing additions. Check https://mapstruct.org/documentation/stable/reference/html/#_apache_maven and https://mapstruct.org/documentation/spring-extensions/reference/html/#_apache_maven

myatmin commented 10 months ago

Hi @Chessray ,

Yes, I edited to correct one when I opened it in Eclipse. Here is the sample project. mapstruct-example.zip

It's having issue with ECJ but working fine with Javac. (Tried with IntelliJ) VSCode Java and Eclipse use ECJ and having problem with @ExternalConversion.

Chessray commented 7 months ago

Judging from the linked thread, this issue has to be fixed inside ECJ; therefore I'll close this one.

myatmin commented 3 months ago

Hi @Chessray,

After ECJ team checking of the above mentioned issue, actually ECJ followed the implementation correctly. Detail explanation can be found in this comment. Hibernate metamodel generator also corrected their generation issue too. See the issue link in this comment.