Skip to content

StackOverflow with ImmutableLists #1825

@g8OW0oF6

Description

@g8OW0oF6

While trying to compile this code, I get a stackoverflow:

@Mapper
public abstract class StackOverflowMapper {

        public abstract A mapBtoA(B other);

	public abstract AElement mapBElementToAElement(BElement other);

	protected ImmutableList<AElement> mapImmutableList(ImmutableList<BElement> test) {
                var mapped = test.stream().map(this::mapBElementToAElement).collect(Collectors.toList());
		return ImmutableList.copyOf(mapped);
	}

}

class AElement {
	public String stuff;
}

class A {
	public ImmutableList<AElement> test;
}

class BElement {
	public String stuff;
}

class B {
	public ImmutableList<BElement> test;
}

Error:

Internal error in the mapping processor: java.lang.StackOverflowError    at 
jdk.compiler/com.sun.tools.javac.code.Types.freshTypeVariables(Types.java:4417)      at 
jdk.compiler/com.sun.tools.javac.code.Types.capture(Types.java:4363)    at 
jdk.compiler/com.sun.tools.javac.code.Types.isSubtype(Types.java:1096)       at 
jdk.compiler/com.sun.tools.javac.code.Types.isSubtypeUncheckedInternal(Types.java:1022)      at 
jdk.compiler/com.sun.tools.javac.code.Types.isSubtypeUnchecked(Types.java:1008)      at 
jdk.compiler/com.sun.tools.javac.code.Types.isConvertible(Types.java:607)       at 
jdk.compiler/com.sun.tools.javac.code.Types.isAssignable(Types.java:2319)    at 
jdk.compiler/com.sun.tools.javac.code.Types.isAssignable(Types.java:2287)    at 
jdk.compiler/com.sun.tools.javac.model.JavacTypes.isAssignable(JavacTypes.java:105)          at 
org.mapstruct.ap.spi.DefaultBuilderProvider.isBuildMethod(DefaultBuilderProvider.java:269)     at 
org.mapstruct.ap.spi.DefaultBuilderProvider.findBuildMethods(DefaultBuilderProvider.java:236)        at 
org.mapstruct.ap.spi.DefaultBuilderProvider.findBuilderInfo(DefaultBuilderProvider.java:167)         at 
org.mapstruct.ap.spi.ImmutablesBuilderProvider.findBuilderInfo(ImmutablesBuilderProvider.java:49)       at 
org.mapstruct.ap.spi.DefaultBuilderProvider.findBuilderInfo(DefaultBuilderProvider.java:96)          at 
org.mapstruct.ap.internal.model.common.TypeFactory.findBuilder(TypeFactory.java:530)         at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:189)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)    at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)    at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)    at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)    at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)    at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:280)     at 
org.mapstruct.ap.internal.model.common.TypeFactory.getType(TypeFactory.java:180)        at 
org.mapstruct.ap.internal.model.common.BuilderType.create(BuilderType.java:98)       at 
org.mapstruct.ap.internal.model.common.Type.<init>(Type.java:160)
...

Java version: 11.0.2, vendor: AdoptOpenJDK

I know ImmutableLists are not supported, but shouldn't this work with the mapImmutableList method?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions