Skip to content

Build failure on usage of self-referenced condition without any reasonable logs #207

@bacecek

Description

@bacecek

In case of using self-referenced condition like this:

@ConditionExpression("!@BeforePie", imports = [BeforePie::class])
annotation class BeforePie

We've got build failure without any problem explanation:

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptWithoutKotlincTask$KaptExecutionWorkAction

With --stacktrace option:

Caused by: java.lang.StackOverflowError
        at jdk.compiler/com.sun.tools.javac.code.Attribute$Class.accept(Attribute.java:139)
        at com.yandex.yatagan.lang.jap.JavaxAnnotationImpl$ValueImpl.accept(JavaxAnnotationImpl.kt:73)
        at com.yandex.yatagan.lang.compiled.CtAnnotationBase$Companion$AsTypes.visitArray(CtAnnotationBase.kt:81)
        at com.yandex.yatagan.lang.compiled.CtAnnotationBase$Companion$AsTypes.visitArray(CtAnnotationBase.kt:79)
        at com.yandex.yatagan.lang.jap.JavaxAnnotationImpl$ValueImpl$accept$1.visitArray(JavaxAnnotationImpl.kt:100)
        at com.yandex.yatagan.lang.jap.JavaxAnnotationImpl$ValueImpl$accept$1.visitArray(JavaxAnnotationImpl.kt:73)
        at jdk.compiler/com.sun.tools.javac.code.Attribute$Array.accept(Attribute.java:347)
        at com.yandex.yatagan.lang.jap.JavaxAnnotationImpl$ValueImpl.accept(JavaxAnnotationImpl.kt:73)
        at com.yandex.yatagan.lang.compiled.CtAnnotationBase.getTypes(CtAnnotationBase.kt:38)
        at com.yandex.yatagan.lang.compiled.CtConditionExpressionAnnotationImpl.getImports(builtinAnnotationImpls.kt:66)
        at com.yandex.yatagan.core.model.impl.ConditionExpressionHolder.<init>(ConditionExpressionHolder.kt:43)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl$conditionExpressionHolder$2.invoke(FeatureModelImpl.kt:78)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl$conditionExpressionHolder$2.invoke(FeatureModelImpl.kt:77)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:86)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl.getConditionExpressionHolder(FeatureModelImpl.kt:77)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl.getConditionScope(FeatureModelImpl.kt:39)
        at com.yandex.yatagan.core.model.impl.parsing.ExpressionFactoryForParsing.parseVariable(ExpressionFactoryForParsing.kt:43)
        at com.yandex.yatagan.core.model.impl.parsing.BooleanExpressionParser.buildExpressionTree(BooleanExpressionParser.kt:234)
        at com.yandex.yatagan.core.model.impl.parsing.BooleanExpressionParser.parse(BooleanExpressionParser.kt:59)
        at com.yandex.yatagan.core.model.impl.ConditionExpressionHolder.<init>(ConditionExpressionHolder.kt:55)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl$conditionExpressionHolder$2.invoke(FeatureModelImpl.kt:78)
        at com.yandex.yatagan.core.model.impl.FeatureModelImpl$conditionExpressionHolder$2.invoke(FeatureModelImpl.kt:77)
        at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:86)
... 

Build failure itself is correct behavior, but it's hard to understand that the problem is with condition.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions