Conditional mapping with @TargetPropertyName fails for nested update mappings
Expected behavior
The compilation to succeed.
Actual behavior
The following error is generated by MapStruct during compilation:
/* @Generated( value = "org.mapstruct.ap.MappingProcessor", date = "2025-01-27T14:14:13+0100", comments = "version: 1.6.3, compiler: javac, environment: Java 21.0.5 (Eclipse Adoptium)" ) */ public class ClassMapperImpl implements ClassMapper { @Override public ClassB normalMappingWorks(ClassA source) { if ( source == null ) { return null; } ClassB classB = new ClassB(); if ( canMap( source, "param" ) ) { classB.setParam( nestedClassAToNestedClassB( source.getParam() ) ); } return classB; } @Override public void updateMappingFails(ClassA source, ClassB target) { if ( source == null ) { return; } if ( canMap( source, "FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> ext.targetPropertyName [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 50, column 16] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${ext.targetPropertyName} [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" in macro "arguments" at line 50, column 14] - Reached through: @arguments [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" in macro "methodCall" at line 32, column 53] - Reached through: @methodCall [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 24, column 9] - Reached through: @compress single_line=true [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 9, column 1] ---- Java stack trace (for programmers): ---- org.mapstruct.ap.shaded.freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at org.mapstruct.ap.shaded.freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370) at org.mapstruct.ap.shaded.freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:104) at org.mapstruct.ap.shaded.freemarker.core.DollarVariable.accept(DollarVariable.java:63) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitAndTransform(Environment.java:502) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:104) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeNestedContent(Environment.java:621) at org.mapstruct.ap.shaded.freemarker.core.BodyInstruction.accept(BodyInstruction.java:60) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelWriter.writeModel(ModelWriter.java:69) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.createSourceFile(MapperRenderingProcessor.java:62) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.writeToSourceFile(MapperRenderingProcessor.java:39) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:29) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:24) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:400) at org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:380) at org.mapstruct.ap.MappingProcessor.processMapperElements(MappingProcessor.java:329) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:213) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1021) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:937) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1265) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1380) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1272) 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:126) at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:214) at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1228) at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:215) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314) at org.codehaus.classworlds.Launcher.main(Launcher.java:41)FreeMarker template error (DEBUG mode; use RETHROW in production!): The following has evaluated to null or missing: ==> ext.targetPropertyName [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 50, column 16] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${ext.targetPropertyName} [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" in macro "arguments" at line 50, column 14] - Reached through: @arguments [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" in macro "methodCall" at line 32, column 53] - Reached through: @methodCall [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 24, column 9] - Reached through: @compress single_line=true [in template "org/mapstruct/ap/internal/model/MethodReference.ftl" at line 9, column 1] ---- Java stack trace (for programmers): ---- org.mapstruct.ap.shaded.freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...] at org.mapstruct.ap.shaded.freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401) at org.mapstruct.ap.shaded.freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370) at org.mapstruct.ap.shaded.freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:104) at org.mapstruct.ap.shaded.freemarker.core.DollarVariable.accept(DollarVariable.java:63) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitAndTransform(Environment.java:502) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:104) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeNestedContent(Environment.java:621) at org.mapstruct.ap.shaded.freemarker.core.BodyInstruction.accept(BodyInstruction.java:60) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:377) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacroOrFunctionCommonPart(Environment.java:877) at org.mapstruct.ap.shaded.freemarker.core.Environment.invokeMacro(Environment.java:813) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:84) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelIncludeDirective.execute(ModelIncludeDirective.java:48) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:452) at org.mapstruct.ap.shaded.freemarker.core.UnifiedCall.accept(UnifiedCall.java:102) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:371) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:291) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244) at org.mapstruct.ap.shaded.freemarker.core.Environment.visitIteratorBlock(Environment.java:645) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108) at org.mapstruct.ap.shaded.freemarker.core.IteratorBlock.accept(IteratorBlock.java:94) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:335) at org.mapstruct.ap.shaded.freemarker.core.Environment.visit(Environment.java:341) at org.mapstruct.ap.shaded.freemarker.core.Environment.process(Environment.java:314) at org.mapstruct.ap.shaded.freemarker.template.Template.process(Template.java:383) at org.mapstruct.ap.internal.writer.FreeMarkerModelElementWriter.write(FreeMarkerModelElementWriter.java:35) at org.mapstruct.ap.internal.writer.FreeMarkerWritable.write(FreeMarkerWritable.java:19) at org.mapstruct.ap.internal.writer.ModelWriter.writeModel(ModelWriter.java:69) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.createSourceFile(MapperRenderingProcessor.java:62) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.writeToSourceFile(MapperRenderingProcessor.java:39) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:29) at org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:24) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:400) at org.mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:380) at org.mapstruct.ap.MappingProcessor.processMapperElements(MappingProcessor.java:329) at org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:213) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:1021) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:937) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1265) at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1380) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1272) 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:126) at org.codehaus.plexus.compiler.javac.JavacCompiler.performCompile(JavacCompiler.java:214) at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:1228) at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:215) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute(DefaultMojosExecutionStrategy.java:39) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314) at org.codehaus.classworlds.Launcher.main(Launcher.java:41)
Steps to reproduce the problem
- Create 2 classes (ClassA and ClassB), both each having a nested property of the same name (param) and structurally similar type (NestedClassA and NestedClassB, respectively).
- Specify a mapper:
ClassB normalMappingWorks(ClassA source); void updateMappingFails(ClassA source, @MappingTarget ClassB target);
- and a condition:
@Condition default boolean canMap(Object source, @TargetPropertyName String propertyName) { return true; }
- Compilation fails, producing the above error.
- If the update mapping is commented out, the generation works.
A MCVE is attached (tested with Java 21 Maven 3.9.9): mcve.zip
MapStruct Version
MapStruct 1.6.3