Community
Participate
Working Groups
Within the MapStruct team we have received a bug report (https://github.com/mapstruct/mapstruct/issues/2628) from one of our users that were receiving the following ClassCastException when working with Java 17 records. Internal error in the mapping processor: java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.lookup.RecordComponentBinding cannot be cast to class org.eclipse.jdt.internal.compiler.lookup.FieldBinding (org.eclipse.jdt.internal.compiler.lookup.RecordComponentBinding and org.eclipse.jdt.internal.compiler.lookup.FieldBinding are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @5eb054) at org.eclipse.jdt.internal.compiler.apt.model.TypesImpl$3.find(TypesImpl.java:145) at org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.findMemberInHierarchy(TypesImpl.java:208) at org.eclipse.jdt.internal.compiler.apt.model.TypesImpl.asMemberOf(TypesImpl.java:142) at org.mapstruct.ap.internal.util.AbstractTypeUtilsDecorator.asMemberOf(AbstractTypeUtilsDecorator.java:129) at org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.getConstructorAccessor(BeanMappingMethod.java:615) at org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.build(BeanMappingMethod.java:215) at org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMappingMethods(MapperCreationProcessor.java:416) at org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMapper(MapperCreationProcessor.java:179) at org.mapstruct.ap.internal.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:133) at org.mapstruct.ap.internal.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:81) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:338) at org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:318) at org.mapstruct.ap.MappingProcessor.processMapperElements(MappingProcessor.java:267) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:166) at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:142) 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:950) 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:377) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:214) at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:309) at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:79) at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:272) at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:187) at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:853) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:232) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:281) at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:334) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:337) at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:389) at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:410) at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:160) at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:251) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63) RecordMapper.java /mapstruct-eclipse-records/src/main/java/org/example line 6 Annotation Problem (Java 6 processor) This can be reproduced through the project defined in https://github.com/blitzionian/mapstruct-eclipse-records. The exception can be seen if you change the `org.mapstruct.version` to 1.5.0.Beta1 in the pom.xml. I guess that the solution should be in https://git.eclipse.org/c/jdt/eclipse.jdt.core.git/blame/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/model/TypesImpl.java#n141 and instead of casting to `FieldBinding` you need to use `VariableBinding` instead. Or have some other type of implementation for RECORD_COMPONENT elements
This bug is fixed with: https://github.com/eclipse-jdt/eclipse.jdt.core/pull/199