Skip to content

java.lang.StackOverflowError due graph generation #255

@SergoSmyk

Description

@SergoSmyk

The DI graph generation throws StackOverflowError when using specific generics combination.

Library version: 0.4.0-alpha05

Repro steps or stacktrace:

To repro we need to use @motif.Object inheritance functionality. The generic type should have bounds where specified generic type is the class itself.

The type which we want to provide

interface Foo<ItSelf> {
 fun foo(): IntSelf
}

Any class which implements Foo:

class SomeClass : Foo<SomeClass> {
   override fun foo(): SomeClass
}

The interface which will be implemented by @motif.Object (motif inheritance functionality)

interface ObjectComponent<T : Foo<T>> {
  fun create(): T
}

@motif.Object declaration

@motif.Object
abstract class Objects: ObjectComponent<SomeClass>

Stacktrace:

exception: java.lang.StackOverflowError
	at com.squareup.kotlinpoet.UtilKt.toImmutableList(Util.kt:31)
	at com.squareup.kotlinpoet.TypeName.<init>(TypeName.kt:70)
	at com.squareup.kotlinpoet.TypeName.<init>(TypeName.kt)
	at com.squareup.kotlinpoet.ClassName.<init>(ClassName.kt:34)
	at com.squareup.kotlinpoet.ClassName.<init>(ClassName.kt:29)
	at com.squareup.kotlinpoet.ClassName.<init>(ClassName.kt:55)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKClassName(j2kInterop.kt:66)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKParameterizedTypeName(j2kInterop.kt:76)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:103)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeVariableName(j2kInterop.kt:85)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:104)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKWildcardTypeName(j2kInterop.kt:95)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:105)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKParameterizedTypeName(j2kInterop.kt:77)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:103)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeVariableName(j2kInterop.kt:85)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:104)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKWildcardTypeName(j2kInterop.kt:95)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:105)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKParameterizedTypeName(j2kInterop.kt:77)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:103)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeVariableName(j2kInterop.kt:85)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:104)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKWildcardTypeName(j2kInterop.kt:95)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:105)
	...
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:105)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKParameterizedTypeName(j2kInterop.kt:77)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:103)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeVariableName(j2kInterop.kt:85)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:104)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKWildcardTypeName(j2kInterop.kt:95)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:105)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKParameterizedTypeName(j2kInterop.kt:77)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeName(j2kInterop.kt:103)
	at com.squareup.kotlinpoet.javapoet.J2kInteropKt.toKTypeVariableName(j2kInterop.kt:85)

    When running <kotlinc>.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions