-
Notifications
You must be signed in to change notification settings - Fork 43
Open
Description
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
Labels
No labels