[Fir2Ir] Introduce testing with IrFakeOverrideBuilder

^KT-61514
This commit is contained in:
Pavel Kunyavskiy
2023-08-28 15:09:22 +02:00
committed by Space Team
parent bf9cae6410
commit 91e96e9f31
58 changed files with 54467 additions and 7 deletions
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_STDLIB // WITH_STDLIB
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// MODULE: lib // MODULE: lib
// FILE: JavaAnn.java // FILE: JavaAnn.java
@@ -1,5 +1,6 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_REFLECT // WITH_REFLECT
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// FIR_DUMP // FIR_DUMP
// DUMP_IR // DUMP_IR
@@ -1,5 +1,6 @@
// FIR_DUMP // FIR_DUMP
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
annotation class Ann(@Ann(1) val e: Int) annotation class Ann(@Ann(1) val e: Int)
@@ -1,6 +1,7 @@
// WITH_STDLIB // WITH_STDLIB
// WITH_REFLECT // WITH_REFLECT
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// FIR_DUMP // FIR_DUMP
// DUMP_IR // DUMP_IR
@@ -1,4 +1,5 @@
// IGNORE_BACKEND: WASM // IGNORE_BACKEND: WASM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61384
// WITH_STDLIB // WITH_STDLIB
// MODULE: lib1 // MODULE: lib1
@@ -1,5 +1,6 @@
// IGNORE_BACKEND: WASM // IGNORE_BACKEND: WASM
// WITH_STDLIB // WITH_STDLIB
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61384
// MODULE: lib1 // MODULE: lib1
+1
View File
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
import java.util.HashSet import java.util.HashSet
interface A : Set<String> interface A : Set<String>
@@ -1,5 +1,6 @@
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
// SKIP_JDK6 // SKIP_JDK6
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
@@ -2,6 +2,7 @@
// FE 1.0 incorrectly resolves reference `Some::foo` (KT-45315) // FE 1.0 incorrectly resolves reference `Some::foo` (KT-45315)
// DONT_TARGET_EXACT_BACKEND: WASM // DONT_TARGET_EXACT_BACKEND: WASM
// WASM_MUTE_REASON: Wasm box test does not support disabling only K1 mode with IGNORE_BACKEND directive // WASM_MUTE_REASON: Wasm box test does not support disabling only K1 mode with IGNORE_BACKEND directive
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// ISSUE: KT-55909 // ISSUE: KT-55909
// DUMP_IR // DUMP_IR
@@ -1,6 +1,7 @@
// IGNORE_BACKEND: WASM // IGNORE_BACKEND: WASM
// WASM_MUTE_REASON: STDLIB_COLLECTION_INHERITANCE // WASM_MUTE_REASON: STDLIB_COLLECTION_INHERITANCE
// KJS_WITH_FULL_RUNTIME // KJS_WITH_FULL_RUNTIME
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// DONT_TARGET_EXACT_BACKEND: NATIVE // DONT_TARGET_EXACT_BACKEND: NATIVE
interface A : Set<String> interface A : Set<String>
@@ -1,4 +1,5 @@
// WITH_STDLIB // WITH_STDLIB
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
abstract class A : AbstractMutableList<Int>() abstract class A : AbstractMutableList<Int>()
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// FILE: J.java // FILE: J.java
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// FILE: B.java // FILE: B.java
public abstract class B<E> extends A<E> implements L<E> { public abstract class B<E> extends A<E> implements L<E> {
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_STDLIB // WITH_STDLIB
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// FILE: removeAtBridgeClashWithJava.kt // FILE: removeAtBridgeClashWithJava.kt
abstract class AJALI : JavaAbstractList<Int>() abstract class AJALI : JavaAbstractList<Int>()
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// WITH_STDLIB // WITH_STDLIB
// FULL_JDK // FULL_JDK
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61384
// WITH_STDLIB // WITH_STDLIB
// MODULE: lib // MODULE: lib
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61384
// WITH_STDLIB // WITH_STDLIB
// MODULE: lib // MODULE: lib
@@ -1,4 +1,5 @@
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
fun <T> select(a: T, b: T) : T = a fun <T> select(a: T, b: T) : T = a
@@ -1,6 +1,7 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND_K1: ANY // IGNORE_BACKEND_K1: ANY
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// K1_STATUS: java.lang.AssertionError: There is still an unbound symbol after generation of IR module <main> // K1_STATUS: java.lang.AssertionError: There is still an unbound symbol after generation of IR module <main>
fun <T> select(a: T, b: T) : T = a fun <T> select(a: T, b: T) : T = a
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// ISSUE: KT-51194 // ISSUE: KT-51194
// MODULE: coreLib_1 // MODULE: coreLib_1
@@ -1,4 +1,5 @@
// IGNORE_BACKEND: WASM // IGNORE_BACKEND: WASM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61384
// MODULE: lib // MODULE: lib
// FILE: l.kt // FILE: l.kt
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// MODULE: m1 // MODULE: m1
// FILE: m1/THash.java // FILE: m1/THash.java
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// DUMP_IR // DUMP_IR
// FULL_JDK // FULL_JDK
// WITH_REFLECT // WITH_REFLECT
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// ISSUE: KT-59550 // ISSUE: KT-59550
// FILE: Intermediate.java // FILE: Intermediate.java
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// ISSUE: KT-59550 (related) // ISSUE: KT-59550 (related)
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// MODULE: m1 // MODULE: m1
// FILE: Base.kt // FILE: Base.kt
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// ISSUE: KT-59550 // ISSUE: KT-59550
// FILE: Intermediate.java // FILE: Intermediate.java
@@ -1,5 +1,7 @@
// ISSUE: KT-55828 // ISSUE: KT-55828
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
interface MyCollection<out E1> { interface MyCollection<out E1> {
fun foo(): E1 fun foo(): E1
val bar: E1 val bar: E1
@@ -1,5 +1,7 @@
// ISSUE: KT-55828 // ISSUE: KT-55828
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
interface MyCollection { interface MyCollection {
fun foo(): String fun foo(): String
val bar: String val bar: String
@@ -1,4 +1,5 @@
// WITH_STDLIB // WITH_STDLIB
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
class ArrayDeque<E> : AbstractMutableList<E> { class ArrayDeque<E> : AbstractMutableList<E> {
+1
View File
@@ -1,4 +1,5 @@
// MODULE: lib // MODULE: lib
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61543
// FILE: lib.kt // FILE: lib.kt
// KT-41765 // KT-41765
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// IGNORE_BACKEND_K1: JVM_IR // IGNORE_BACKEND_K1: JVM_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// Field VS property: case 4.1 // Field VS property: case 4.1
// See KT-50082 // See KT-50082
// DUMP_IR // DUMP_IR
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// FULL_JDK // FULL_JDK
// ISSUE: KT-45584 // ISSUE: KT-45584
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// FULL_JDK // FULL_JDK
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// ISSUE: KT-45584 // ISSUE: KT-45584
// FILE: PlaceholderExceptionSupport.java // FILE: PlaceholderExceptionSupport.java
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// WITH_STDLIB // WITH_STDLIB
// ISSUE: KT-56538 // ISSUE: KT-56538
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM_IR // TARGET_BACKEND: JVM_IR
// DUMP_IR // DUMP_IR
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// FILE: javapackage/PackagePrivateGrandparentInterface.java // FILE: javapackage/PackagePrivateGrandparentInterface.java
package javapackage; package javapackage;
+1
View File
@@ -1,5 +1,6 @@
// SKIP_JDK6 // SKIP_JDK6
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// FULL_JDK // FULL_JDK
// WITH_STDLIB // WITH_STDLIB
@@ -1,5 +1,6 @@
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// FULL_JDK // FULL_JDK
@@ -1,5 +1,6 @@
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
// WITH_STDLIB // WITH_STDLIB
// FULL_JDK // FULL_JDK
+1
View File
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// java.lang.NoSuchMethodError: java.util.TreeMap.remove // java.lang.NoSuchMethodError: java.util.TreeMap.remove
// IGNORE_BACKEND: ANDROID // IGNORE_BACKEND: ANDROID
+1
View File
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// WITH_STDLIB // WITH_STDLIB
// FILE: Fn.java // FILE: Fn.java
public interface Fn<T, R> { public interface Fn<T, R> {
+1
View File
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// WITH_STDLIB // WITH_STDLIB
// FILE: Fn.java // FILE: Fn.java
public interface Fn<T, R> { public interface Fn<T, R> {
+1
View File
@@ -2,6 +2,7 @@
// WITH_STDLIB // WITH_STDLIB
// DUMP_IR // DUMP_IR
// DUMP_CFG // DUMP_CFG
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// RENDERER_CFG_LEVELS // RENDERER_CFG_LEVELS
class FlyweightCapableTreeStructure class FlyweightCapableTreeStructure
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// WITH_STDLIB // WITH_STDLIB
// binary representation of fractional part of phi = (sqrt(5) - 1) / 2 // binary representation of fractional part of phi = (sqrt(5) - 1) / 2
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
import java.util.AbstractMap import java.util.AbstractMap
@@ -1,5 +1,6 @@
// ISSUE: KT-57655 // ISSUE: KT-57655
// !LANGUAGE: +ImplicitSignedToUnsignedIntegerConversion // !LANGUAGE: +ImplicitSignedToUnsignedIntegerConversion
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61386
// ALLOW_KOTLIN_PACKAGE // ALLOW_KOTLIN_PACKAGE
// WITH_STDLIB // WITH_STDLIB
// DUMP_IR // DUMP_IR
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// MODULE: lib // MODULE: lib
// FILE: A.java // FILE: A.java
@@ -1,4 +1,5 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// MODULE: lib // MODULE: lib
// FILE: A.java // FILE: A.java
@@ -1,4 +1,6 @@
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION: KT-61370
// MODULE: lib // MODULE: lib
// FILE: A.java // FILE: A.java
@@ -0,0 +1,39 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.test.backend.ir
import org.jetbrains.kotlin.test.WrappedException
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.assertions
import org.jetbrains.kotlin.test.services.moduleStructure
class CodegenWithIrFakeOverrideGeneratorSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override fun check(failedAssertions: List<WrappedException>) {
if (!mainDirectiveEnabled) return
if (failedAssertions.isEmpty() && suppressDirectiveEnabled) {
testServices.assertions.fail {
"Looks like this test can be unmuted. Remove $IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION directive "
}
}
}
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
return when {
!mainDirectiveEnabled -> failedAssertions
suppressDirectiveEnabled -> emptyList()
else -> failedAssertions
}
}
private val mainDirectiveEnabled: Boolean
get() = ENABLE_IR_FAKE_OVERRIDE_GENERATION in testServices.moduleStructure.allDirectives
private val suppressDirectiveEnabled: Boolean
get() = IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION in testServices.moduleStructure.allDirectives
}
@@ -39,7 +39,7 @@ class IrActualizerAndPluginsFacade(
inputArtifact.irPluginContext.symbolTable as SymbolTable, // TODO: it's strange place to get it. inputArtifact.irPluginContext.symbolTable as SymbolTable, // TODO: it's strange place to get it.
inputArtifact.irMangler, inputArtifact.irMangler,
mapOf(module.name to module.friendDependencies.map { it.moduleName }), mapOf(module.name to module.friendDependencies.map { it.moduleName }),
useIrFakeOverrideBuilder = false, useIrFakeOverrideBuilder = CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in module.directives,
) )
inputArtifact.irActualizerResult = result inputArtifact.irActualizerResult = result
} }
@@ -242,6 +242,19 @@ object CodegenTestDirectives : SimpleDirectivesContainer() {
Ignore exceptions in AbstractFirLoadK2CompiledKotlin tests Ignore exceptions in AbstractFirLoadK2CompiledKotlin tests
""".trimIndent() """.trimIndent()
) )
val ENABLE_IR_FAKE_OVERRIDE_GENERATION by directive(
description = """
Enables fake-override generation in FIR2IR using IR f/o generator. KT-61514
""".trimIndent()
)
// String to allow and enforce issue id. Value is not actually used.
val IGNORE_CODEGEN_WITH_IR_FAKE_OVERRIDE_GENERATION by stringDirective(
description = """
Suppresses test if $ENABLE_IR_FAKE_OVERRIDE_GENERATION directive enabled
""".trimIndent()
)
} }
fun extractIgnoredDirectiveForTargetBackend( fun extractIgnoredDirectiveForTargetBackend(
@@ -10,10 +10,7 @@ import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor import org.jetbrains.kotlin.backend.common.serialization.signature.IdSignatureDescriptor
import org.jetbrains.kotlin.builtins.DefaultBuiltIns import org.jetbrains.kotlin.builtins.DefaultBuiltIns
import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.constant.EvaluatedConstTracker import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
@@ -172,6 +169,7 @@ fun ModuleCompilerAnalyzedOutput.convertToJsIr(
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()), .putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = null, inlineConstTracker = null,
allowNonCachedDeclarations = false, allowNonCachedDeclarations = false,
useIrFakeOverrideBuilder = module.shouldUseIrFakeOverrideBuilderInConvertToIr()
) )
return convertToIr( return convertToIr(
@@ -105,7 +105,8 @@ class Fir2IrJvmResultsConverter(
evaluatedConstTracker = compilerConfiguration evaluatedConstTracker = compilerConfiguration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()), .putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = compilerConfiguration[CommonConfigurationKeys.INLINE_CONST_TRACKER], inlineConstTracker = compilerConfiguration[CommonConfigurationKeys.INLINE_CONST_TRACKER],
allowNonCachedDeclarations = false allowNonCachedDeclarations = false,
useIrFakeOverrideBuilder = module.shouldUseIrFakeOverrideBuilderInConvertToIr(),
) )
val (irModuleFragment, components, pluginContext) = firOutputPart.firAnalyzerFacade.result.outputs.single().convertToIr( val (irModuleFragment, components, pluginContext) = firOutputPart.firAnalyzerFacade.result.outputs.single().convertToIr(
fir2IrExtensions, fir2IrExtensions,
@@ -5,16 +5,26 @@
package org.jetbrains.kotlin.test.frontend.fir package org.jetbrains.kotlin.test.frontend.fir
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.platform.isJs import org.jetbrains.kotlin.platform.isJs
import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.model.BackendKinds import org.jetbrains.kotlin.test.model.BackendKinds
import org.jetbrains.kotlin.test.model.Frontend2BackendConverter import org.jetbrains.kotlin.test.model.Frontend2BackendConverter
import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.TestServices
/**
* In multi-platform projects this option is passed to IrActualizer instead
* @see [IrActualizerAndPluginsFacade]
*/
fun TestModule.shouldUseIrFakeOverrideBuilderInConvertToIr() =
CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION in directives &&
!languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)
class Fir2IrResultsConverter( class Fir2IrResultsConverter(
testServices: TestServices testServices: TestServices
) : Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>( ) : Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>(
@@ -167,7 +167,8 @@ fun ModuleCompilerAnalyzedOutput.convertToWasmIr(
evaluatedConstTracker = configuration evaluatedConstTracker = configuration
.putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()), .putIfAbsent(CommonConfigurationKeys.EVALUATED_CONST_TRACKER, EvaluatedConstTracker.create()),
inlineConstTracker = null, inlineConstTracker = null,
allowNonCachedDeclarations = false allowNonCachedDeclarations = false,
useIrFakeOverrideBuilder = module.shouldUseIrFakeOverrideBuilderInConvertToIr(),
) )
return convertToIr( return convertToIr(
@@ -14,8 +14,10 @@ import org.jetbrains.kotlin.test.builders.configureFirHandlersStep
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.FirParser
import org.jetbrains.kotlin.test.backend.ir.CodegenWithIrFakeOverrideGeneratorSuppressor
import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler import org.jetbrains.kotlin.test.backend.ir.IrDiagnosticsHandler
import org.jetbrains.kotlin.test.builders.configureIrHandlersStep import org.jetbrains.kotlin.test.builders.configureIrHandlersStep
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.ENABLE_IR_FAKE_OVERRIDE_GENERATION
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.directives.configureFirParser import org.jetbrains.kotlin.test.directives.configureFirParser
import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter
@@ -90,3 +92,16 @@ open class AbstractFirLightTreeBlackBoxCodegenTest : AbstractFirBlackBoxCodegenT
@FirPsiCodegenTest @FirPsiCodegenTest
open class AbstractFirPsiBlackBoxCodegenTest : AbstractFirBlackBoxCodegenTestBase(FirParser.Psi) open class AbstractFirPsiBlackBoxCodegenTest : AbstractFirBlackBoxCodegenTestBase(FirParser.Psi)
open class AbstractFirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTest : AbstractFirLightTreeBlackBoxCodegenTest() {
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
with(builder) {
defaultDirectives {
+ENABLE_IR_FAKE_OVERRIDE_GENERATION
}
useAfterAnalysisCheckers(::CodegenWithIrFakeOverrideGeneratorSuppressor)
}
}
}
@@ -279,6 +279,10 @@ fun generateJUnit5CompilerTests(args: Array<String>, mainClassName: String?) {
model("codegen/box") model("codegen/box")
} }
testClass<AbstractFirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTest> {
model("codegen/box")
}
testClass<AbstractFirLightTreeBlackBoxCodegenTest>("FirLightTreeBlackBoxModernJdkCodegenTestGenerated") { testClass<AbstractFirLightTreeBlackBoxCodegenTest>("FirLightTreeBlackBoxModernJdkCodegenTestGenerated") {
model("codegen/boxModernJdk") model("codegen/boxModernJdk")
} }