Add mode to run kapt with JVM IR, use in tests

Currently JVM IR is not supported in kapt, so almost all tests are
failing, and thus are muted with IGNORE_BACKEND.

 #KT-49682
This commit is contained in:
Alexander Udalov
2021-12-08 23:05:43 +01:00
parent d089d27bef
commit ebb9659e03
107 changed files with 251 additions and 98 deletions
@@ -85,6 +85,11 @@ public class JVMConfigurationKeys {
public static final CompilerConfigurationKey<Boolean> IR = public static final CompilerConfigurationKey<Boolean> IR =
CompilerConfigurationKey.create("IR"); CompilerConfigurationKey.create("IR");
// Temporary option to make it possible to test kapt with JVM IR. As soon as all tests start to pass, it can be removed,
// and the backend (old or IR) will be deduced from the compiler arguments provided by the user.
public static final CompilerConfigurationKey<Boolean> USE_KAPT_WITH_JVM_IR =
CompilerConfigurationKey.create("Enable JVM IR for kapt");
public static final CompilerConfigurationKey<Boolean> USE_PSI_CLASS_FILES_READING = public static final CompilerConfigurationKey<Boolean> USE_PSI_CLASS_FILES_READING =
CompilerConfigurationKey.create("use a slower (PSI-based) class files reading implementation"); CompilerConfigurationKey.create("use a slower (PSI-based) class files reading implementation");
@@ -185,9 +185,9 @@ object GenerationUtils {
analysisResult: AnalysisResult, analysisResult: AnalysisResult,
configureGenerationState: GenerationState.Builder.() -> Unit = {}, configureGenerationState: GenerationState.Builder.() -> Unit = {},
): GenerationState { ): GenerationState {
/* Currently Kapt3 only works with the old JVM backend, so disable IR for everything except actual bytecode generation. */
val isIrBackend = val isIrBackend =
classBuilderFactory.classBuilderMode == ClassBuilderMode.FULL && configuration.getBoolean(JVMConfigurationKeys.IR) (classBuilderFactory.classBuilderMode == ClassBuilderMode.FULL && configuration.getBoolean(JVMConfigurationKeys.IR)) ||
configuration.getBoolean(JVMConfigurationKeys.USE_KAPT_WITH_JVM_IR)
val generationState = GenerationState.Builder( val generationState = GenerationState.Builder(
project, classBuilderFactory, analysisResult.moduleDescriptor, analysisResult.bindingContext, project, classBuilderFactory, analysisResult.moduleDescriptor, analysisResult.bindingContext,
files, configuration files, configuration
@@ -13,6 +13,7 @@ dependencies {
api(project(":compiler:frontend")) api(project(":compiler:frontend"))
api(project(":compiler:frontend.java")) api(project(":compiler:frontend.java"))
api(project(":compiler:plugin-api")) api(project(":compiler:plugin-api"))
implementation(project(":compiler:backend.jvm.entrypoint"))
compileOnly(toolsJarApi()) compileOnly(toolsJarApi())
compileOnly(project(":kotlin-annotation-processing-cli")) compileOnly(project(":kotlin-annotation-processing-cli"))
@@ -24,23 +24,27 @@ import com.sun.tools.javac.tree.TreeMaker
import com.sun.tools.javac.util.Context import com.sun.tools.javac.util.Context
import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.analyzer.AnalysisResult
import org.jetbrains.kotlin.backend.common.output.OutputFile import org.jetbrains.kotlin.backend.common.output.OutputFile
import org.jetbrains.kotlin.backend.jvm.JvmIrCodegenFactory
import org.jetbrains.kotlin.base.kapt3.AptMode.APT_ONLY import org.jetbrains.kotlin.base.kapt3.AptMode.APT_ONLY
import org.jetbrains.kotlin.base.kapt3.AptMode.WITH_COMPILATION import org.jetbrains.kotlin.base.kapt3.AptMode.WITH_COMPILATION
import org.jetbrains.kotlin.base.kapt3.DetectMemoryLeaksMode import org.jetbrains.kotlin.base.kapt3.DetectMemoryLeaksMode
import org.jetbrains.kotlin.base.kapt3.KaptFlag import org.jetbrains.kotlin.base.kapt3.KaptFlag
import org.jetbrains.kotlin.base.kapt3.KaptOptions import org.jetbrains.kotlin.base.kapt3.KaptOptions
import org.jetbrains.kotlin.base.kapt3.collectJavaSourceFiles import org.jetbrains.kotlin.base.kapt3.collectJavaSourceFiles
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.OUTPUT import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.OUTPUT
import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil import org.jetbrains.kotlin.cli.common.messages.OutputMessageUtil
import org.jetbrains.kotlin.cli.common.output.writeAll import org.jetbrains.kotlin.cli.common.output.writeAll
import org.jetbrains.kotlin.cli.jvm.plugins.ServiceLoaderLite import org.jetbrains.kotlin.cli.jvm.plugins.ServiceLoaderLite
import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.DefaultCodegenFactory
import org.jetbrains.kotlin.codegen.KotlinCodegenFacade import org.jetbrains.kotlin.codegen.KotlinCodegenFacade
import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory
import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.context.ProjectContext
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
@@ -263,6 +267,7 @@ abstract class AbstractKapt3Extension(
type = "java-production" type = "java-production"
) )
val isIrBackend = compilerConfiguration.getBoolean(JVMConfigurationKeys.USE_KAPT_WITH_JVM_IR)
val generationState = GenerationState.Builder( val generationState = GenerationState.Builder(
project, project,
builderFactory, builderFactory,
@@ -271,7 +276,12 @@ abstract class AbstractKapt3Extension(
files, files,
compilerConfiguration compilerConfiguration
).targetId(targetId) ).targetId(targetId)
.isIrBackend(false) .isIrBackend(isIrBackend)
.codegenFactory(
if (isIrBackend)
JvmIrCodegenFactory(compilerConfiguration, compilerConfiguration.get(CLIConfigurationKeys.PHASE_CONFIG))
else DefaultCodegenFactory
)
.build() .build()
val (classFilesCompilationTime) = measureTimeMillis { val (classFilesCompilationTime) = measureTimeMillis {
@@ -7,10 +7,6 @@ package org.jetbrains.kotlin.kapt3.test
import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TargetBackend
/*
Currently Kapt3 only works with the old backend. To enable IR, modify the isIrBackend variable computation in GenerationsUtils.compileFiles()
*/
abstract class AbstractIrClassFileToSourceStubConverterTest : AbstractClassFileToSourceStubConverterTest() { abstract class AbstractIrClassFileToSourceStubConverterTest : AbstractClassFileToSourceStubConverterTest() {
override val backend = TargetBackend.JVM_IR override val backend = TargetBackend.JVM_IR
} }
@@ -37,6 +37,8 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode
import org.jetbrains.kotlin.codegen.CodegenTestFiles import org.jetbrains.kotlin.codegen.CodegenTestFiles
import org.jetbrains.kotlin.codegen.GenerationUtils import org.jetbrains.kotlin.codegen.GenerationUtils
import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory import org.jetbrains.kotlin.codegen.OriginCollectingClassBuilderFactory
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
import org.jetbrains.kotlin.kapt.base.test.JavaKaptContextTest import org.jetbrains.kotlin.kapt.base.test.JavaKaptContextTest
import org.jetbrains.kotlin.kapt3.Kapt3ComponentRegistrar.KaptComponentContributor import org.jetbrains.kotlin.kapt3.Kapt3ComponentRegistrar.KaptComponentContributor
@@ -55,7 +57,6 @@ import org.jetbrains.kotlin.resolve.jvm.extensions.PartialAnalysisHandlerExtensi
import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.TestJdkKind import org.jetbrains.kotlin.test.TestJdkKind
import org.jetbrains.kotlin.test.util.KtTestUtil
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
import org.jetbrains.kotlin.utils.PathUtil import org.jetbrains.kotlin.utils.PathUtil
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
@@ -172,6 +173,14 @@ abstract class AbstractKotlinKapt3Test : KotlinKapt3TestBase() {
} }
} }
override fun updateConfiguration(configuration: CompilerConfiguration) {
super.updateConfiguration(configuration)
if (backend.isIR) {
configuration.put(JVMConfigurationKeys.USE_KAPT_WITH_JVM_IR, true)
}
}
protected fun convert( protected fun convert(
kaptContext: KaptContextForStubGeneration, kaptContext: KaptContextForStubGeneration,
javaFiles: List<File>, javaFiles: List<File>,
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
enum class E { enum class E {
X { X {
override fun a() {} override fun a() {}
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NO_VALIDATION // NO_VALIDATION
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NO_VALIDATION // NO_VALIDATION
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
annotation class Anno1 annotation class Anno1
enum class Colors { WHITE, BLACK } enum class Colors { WHITE, BLACK }
annotation class Anno2( annotation class Anno2(
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
@file:kotlin.jvm.JvmName("AnnotationsTest") @file:kotlin.jvm.JvmName("AnnotationsTest")
package test package test
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
interface Parceler<T> interface Parceler<T>
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
//FILE: lib/R.java //FILE: lib/R.java
package lib; package lib;
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
@Target(AnnotationTarget.FIELD) @Target(AnnotationTarget.FIELD)
annotation class FieldAnno annotation class FieldAnno
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
import kotlin.reflect.KProperty import kotlin.reflect.KProperty
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
/** Test. */ /** Test. */
class Test { class Test {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// !KEEP_KDOC_COMMENTS_IN_STUBS // !KEEP_KDOC_COMMENTS_IN_STUBS
/** Test. */ /** Test. */
class Test { class Test {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
data class User(val firstName: String, val secondName: String, val age: Int) { data class User(val firstName: String, val secondName: String, val age: Int) {
fun procedure() {} fun procedure() {}
} }
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
interface IntfWithoutDefaultImpls interface IntfWithoutDefaultImpls
interface IntfWithDefaultImpls { interface IntfWithDefaultImpls {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// STRICT // STRICT
//FILE: test/ClassRefAnnotation.java //FILE: test/ClassRefAnnotation.java
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// STRICT // STRICT
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Foo( class Foo(
val z: Boolean = true, val z: Boolean = true,
val b: Byte = 0.toByte(), val b: Byte = 0.toByte(),
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// DUMP_DEFAULT_PARAMETER_VALUES // DUMP_DEFAULT_PARAMETER_VALUES
class Foo( class Foo(
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
@file:Suppress("UNRESOLVED_REFERENCE") @file:Suppress("UNRESOLVED_REFERENCE")
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package deprecated package deprecated
@Deprecated("Deprecated annotation") @Deprecated("Deprecated annotation")
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
package kapt package kapt
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Test { class Test {
private val foo = Example.FOO private val foo = Example.FOO
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
enum class Enum1 { enum class Enum1 {
BLACK, WHITE BLACK, WHITE
} }
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
@file:Suppress("UNRESOLVED_REFERENCE", "ANNOTATION_ARGUMENT_MUST_BE_CONST", "NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION") @file:Suppress("UNRESOLVED_REFERENCE", "ANNOTATION_ARGUMENT_MUST_BE_CONST", "NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION")
@@ -27,6 +28,6 @@ class ErrorInDeclarations {
annotation class Anno(val a: KClass<Any>) annotation class Anno(val a: KClass<Any>)
// EXPECTED_ERROR(kotlin:11:1) cannot find symbol
// EXPECTED_ERROR(kotlin:6:1) cannot find symbol
// EXPECTED_ERROR(kotlin:12:1) cannot find symbol // EXPECTED_ERROR(kotlin:12:1) cannot find symbol
// EXPECTED_ERROR(kotlin:7:1) cannot find symbol
// EXPECTED_ERROR(kotlin:13:1) cannot find symbol
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
internal annotation class Anno internal annotation class Anno
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NO_VALIDATION // NO_VALIDATION
// WITH_STDLIB // WITH_STDLIB
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
@file:JvmName("FacadeName") @file:JvmName("FacadeName")
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// WITH_STDLIB // WITH_STDLIB
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class GenericRawSignatures { class GenericRawSignatures {
fun <T> genericFun(): T? = null fun <T> genericFun(): T? = null
fun nonGenericFun(): String? = null fun nonGenericFun(): String? = null
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
import kotlinx.kapt.* import kotlinx.kapt.*
class Test { class Test {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
// FILE: lib/Prop.java // FILE: lib/Prop.java
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
import java.util.concurrent.* import java.util.concurrent.*
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// FILE: a.kt // FILE: a.kt
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class HomeFragment { class HomeFragment {
@Suppress("TOO_MANY_ARGUMENTS", "DELEGATE_SPECIAL_FUNCTION_MISSING") @Suppress("TOO_MANY_ARGUMENTS", "DELEGATE_SPECIAL_FUNCTION_MISSING")
private val categoryNewsListPresenter by moxyPresenter { private val categoryNewsListPresenter by moxyPresenter {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
interface Context interface Context
enum class Result { enum class Result {
@@ -1 +1,3 @@
// IGNORE_BACKEND: JVM_IR
inline class Cl(val a: String) inline class Cl(val a: String)
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Test { class Test {
private var a = FilterValueDelegate<Float>() private var a = FilterValueDelegate<Float>()
private inner class FilterValueDelegate<T> private inner class FilterValueDelegate<T>
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
interface Named { interface Named {
val name: String? val name: String?
} }
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
enum class Color { enum class Color {
BLACK, `WHI-TE` BLACK, `WHI-TE`
} }
@@ -5,5 +7,5 @@ enum class Color {
@Anno(Color.`WHI-TE`) @Anno(Color.`WHI-TE`)
annotation class Anno(val color: Color) annotation class Anno(val color: Color)
// EXPECTED_ERROR(kotlin:5:1) an enum annotation value must be an enum constant // EXPECTED_ERROR(kotlin:7:1) an enum annotation value must be an enum constant
// EXPECTED_ERROR(other:-1:-1) 'WHI-TE' is an invalid Java enum value name // EXPECTED_ERROR(other:-1:-1) 'WHI-TE' is an invalid Java enum value name
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package javadoc package javadoc
/** Simple */ /** Simple */
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: all // !JVM_DEFAULT_MODE: all
interface Foo { interface Foo {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: all-compatibility // !JVM_DEFAULT_MODE: all-compatibility
interface Foo { interface Foo {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: disable // !JVM_DEFAULT_MODE: disable
interface Foo { interface Foo {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// !JVM_DEFAULT_MODE: enable // !JVM_DEFAULT_MODE: enable
interface Foo { interface Foo {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class State @JvmOverloads constructor( class State @JvmOverloads constructor(
val someInt: Int, val someInt: Int,
val someLong: Long, val someLong: Long,
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class JvmStaticTest { class JvmStaticTest {
companion object { companion object {
@JvmStatic @JvmStatic
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Test { class Test {
companion object A { companion object A {
@JvmStatic @JvmStatic
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
fun crashMe(values: List<String>): String { fun crashMe(values: List<String>): String {
throw UnsupportedOperationException() throw UnsupportedOperationException()
} }
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
@file:Suppress("AMBIGUOUS_ANONYMOUS_TYPE_INFERRED") @file:Suppress("AMBIGUOUS_ANONYMOUS_TYPE_INFERRED")
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
internal class MutableEntry<K, V>( internal class MutableEntry<K, V>(
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
import java.util.Date import java.util.Date
fun Date(double: Double): Date = Date(double.times(1000).toLong()) fun Date(double: Double): Date = Date(double.times(1000).toLong())
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
class Test<T : CharSequence, N : Number> { class Test<T : CharSequence, N : Number> {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
class Test<T : CharSequence, N : Number> { class Test<T : CharSequence, N : Number> {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// STRICT // STRICT
class Foo(private val string: String) { class Foo(private val string: String) {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// FILE: kapt/StaticMethod.java // FILE: kapt/StaticMethod.java
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
@file:Suppress("NOTHING_TO_INLINE") @file:Suppress("NOTHING_TO_INLINE")
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
package foo package foo
+4 -3
View File
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
@file:Suppress("UNRESOLVED_REFERENCE", "ANNOTATION_ARGUMENT_MUST_BE_CONST") @file:Suppress("UNRESOLVED_REFERENCE", "ANNOTATION_ARGUMENT_MUST_BE_CONST")
@@ -14,6 +15,6 @@ class ErrorSomeMissingAnnotations
annotation class Anno(val klass: KClass<*>) annotation class Anno(val klass: KClass<*>)
// EXPECTED_ERROR(kotlin:12:1) cannot find symbol // EXPECTED_ERROR(kotlin:10:1) cannot find symbol
// EXPECTED_ERROR(kotlin:6:1) cannot find symbol // EXPECTED_ERROR(kotlin:13:1) cannot find symbol
// EXPECTED_ERROR(kotlin:9:1) cannot find symbol // EXPECTED_ERROR(kotlin:7:1) cannot find symbol
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class T : Runnable { class T : Runnable {
@Override @Override
public override fun run() {} public override fun run() {}
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
interface Intf interface Intf
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// FILE: te/st/a/JavaClass // FILE: te/st/a/JavaClass
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// JAVAC_OPTION -Xmaxerrs=1 // JAVAC_OPTION -Xmaxerrs=1
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
interface Intf { interface Intf {
fun foo(abc: String) fun foo(abc: String)
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class CrashMe { class CrashMe {
val resources = 1 val resources = 1
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package modifiers package modifiers
public class PublicClass public constructor() public class PublicClass public constructor()
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// WITH_STDLIB // WITH_STDLIB
// FILE: a.kt // FILE: a.kt
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Test { class Test {
class Nested { class Nested {
class NestedNested class NestedNested
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// FILE: JavaClass.java // FILE: JavaClass.java
public class JavaClass { public class JavaClass {
public class Foo { public class Foo {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// FILE: test/JavaClass.java // FILE: test/JavaClass.java
package test; package test;
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NON_EXISTENT_CLASS // NON_EXISTENT_CLASS
// NO_VALIDATION // NO_VALIDATION
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NON_EXISTENT_CLASS // NON_EXISTENT_CLASS
// NO_VALIDATION // NO_VALIDATION
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// NON_EXISTENT_CLASS // NON_EXISTENT_CLASS
// NO_VALIDATION // NO_VALIDATION
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
object PrimitiveTypes { object PrimitiveTypes {
const val booleanFalse: Boolean = false const val booleanFalse: Boolean = false
const val booleanTrue: Boolean = true const val booleanTrue: Boolean = true
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Test { class Test {
val simple: String = "123" val simple: String = "123"
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
annotation class Anno annotation class Anno
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS) @Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// FILE: androidx/annotation/RecentlyNullable.java // FILE: androidx/annotation/RecentlyNullable.java
package androidx.annotation; package androidx.annotation;
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// FILE: lib/Anno.java // FILE: lib/Anno.java
package lib; package lib;
public @interface Anno { public @interface Anno {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
package secondary package secondary
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class `:)` { class `:)` {
lateinit val f: String lateinit val f: String
} }
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// STRIP_METADATA // STRIP_METADATA
interface Context interface Context
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
open class Test { open class Test {
open fun getTestNoSuspend(text: String): String { open fun getTestNoSuspend(text: String): String {
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// CORRECT_ERROR_TYPES // CORRECT_ERROR_TYPES
// NO_VALIDATION // NO_VALIDATION
// WITH_STDLIB // WITH_STDLIB
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test.another package test.another
annotation class Anno(val value: String) annotation class Anno(val value: String)
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
object Foo { object Foo {
const val aString: String = "foo" const val aString: String = "foo"
const val aInt: Int = 3 const val aInt: Int = 3
@@ -1,3 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// DUMP_DEFAULT_PARAMETER_VALUES // DUMP_DEFAULT_PARAMETER_VALUES
package test package test
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
class Subject { class Subject {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
internal class Simple { internal class Simple {
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
internal annotation class MyAnnotation internal annotation class MyAnnotation
@@ -1,3 +1,5 @@
// IGNORE_BACKEND: JVM_IR
package test package test
/** /**