Skip to content

NoSuchElementException with InheritInverseConfiguration and nested properties with 1.6.0 #3670

Description

@jjlharrison

Expected behavior

No error as with 1.5.5.Final.

Actual behavior

src/main/java/example/mapstruct/ExampleMapper.java:9:17
java: Internal error in the mapping processor: java.util.NoSuchElementException
    at java.base/java.util.ArrayList$Itr.next(ArrayList.java:1053)
    at org.mapstruct.ap.internal.util.Collections.first(Collections.java:51)
    at org.mapstruct.ap.internal.model.NestedTargetPropertyMappingHolder$Builder.groupByTargetReferences(NestedTargetPropertyMappingHolder.java:365)
    at org.mapstruct.ap.internal.model.NestedTargetPropertyMappingHolder$Builder.build(NestedTargetPropertyMappingHolder.java:143)
    at org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.handleDefinedNestedTargetMapping(BeanMappingMethod.java:1175)
    at org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.handleDefinedMappings(BeanMappingMethod.java:1125)
    at org.mapstruct.ap.internal.model.BeanMappingMethod$Builder.build(BeanMappingMethod.java:292)
    at org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMappingMethods(MapperCreationProcessor.java:427)
    at org.mapstruct.ap.internal.processor.MapperCreationProcessor.getMapper(MapperCreationProcessor.java:188)
    at org.mapstruct.ap.internal.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:142)
    at org.mapstruct.ap.internal.processor.MapperCreationProcessor.process(MapperCreationProcessor.java:85)
    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 org.jetbrains.jps.javac.APIWrappers$ProcessorWrapper.process(APIWrappers.java:209)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
    at java.base/java.lang.reflect.Method.invoke(Method.java:580)
    at org.jetbrains.jps.javac.APIWrappers$1.invoke(APIWrappers.java:366)
    at org.mapstruct.ap.MappingProcessor.process(Unknown Source)
    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:1279)
    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.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:238)
    at org.jetbrains.jps.incremental.java.JavaBuilder.lambda$compileJava$2(JavaBuilder.java:516)
    at org.jetbrains.jps.incremental.java.JavaBuilder.invokeJavac(JavaBuilder.java:578)
    at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:514)
    at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:358)
    at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:283)
    at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:237)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1609)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1238)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1389)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1203)
    at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:971)
    at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:527)
    at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:236)
    at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:135)
    at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:387)
    at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:212)
    at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:211)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1570)  

Steps to reproduce the problem

@Mapper
public abstract class ExampleMapper {
    @Mapping(target = "name", source = ".", qualifiedByName = "getFromFlatObject")
    public abstract ObjectWithFlatProperties map(ObjectWithNestedProperties objectA);

    @InheritInverseConfiguration
    @Mapping(target = "nestedObject.nestedName", source = "name")
    public abstract ObjectWithNestedProperties map(ObjectWithFlatProperties objectB);

    @Named("getFromFlatObject")
    protected String mapFromFlatObject(final ObjectWithNestedProperties object) {
        // Some logic here
        return object.getNestedObject().getNestedName();
    }
}
@Value
public class NestedObject {
    String nestedName;
}
@Value
public class ObjectWithFlatProperties {
    String name;
}
@Value
public class ObjectWithNestedProperties {
    NestedObject nestedObject;
}

MapStruct Version

1.6.0

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions