amend! Java Direct: Stop recursive constant initializer evaluation Java Direct: Stop recursive constant initializer evaluation Cyclic Java constants (`A = B + 1; B = A + 1`) made the evaluation of field initializers recurse until StackOverflowError. Treat a field whose initializer is being evaluated as not constant (JLS 4.12.4), so kotlinc compiles and javac reports the invalid Java. A cycle through a Kotlin `const val` is reported by Kotlin as a non-constant initializer. The PSI facade still overflows on it, so that test is pinned to java-direct. The Analysis API LL FIR runners use the PSI facade and still overflow while evaluating the corresponding symbol light-class field. Mute that runner with KT-90993 until the PSI-side cycle is fixed; the java-direct compiler diagnostic remains covered. ^KT-90790 Fixed ^KT-90993 Co-authored-by: Junie <junie@jetbrains.com>
diff --git a/compiler/testData/diagnostics/tests/j+k/javaKotlinConstantCycle.kt b/compiler/testData/diagnostics/tests/j+k/javaKotlinConstantCycle.kt index 649d294..b81c998 100644 --- a/compiler/testData/diagnostics/tests/j+k/javaKotlinConstantCycle.kt +++ b/compiler/testData/diagnostics/tests/j+k/javaKotlinConstantCycle.kt
@@ -1,6 +1,7 @@ // RUN_PIPELINE_TILL: FRONTEND // USE_PSI_JAVA_FACADE: false // ISSUE: KT-90790 +// MUTE_LL_FIR: KT-90993 StackOverflowError: symbol light class constant evaluation recurses through the PSI Java constant evaluator // FILE: p/Greeter.java package p;