[FIR Test] Migrate AbstractFirLoadCompiledKotlin to new test infrastructure

Also introduce two different modes for those tests:
- load metadata compiled with K1
- load metadata compiled with K2
This commit is contained in:
Dmitriy Novozhilov
2023-04-17 11:54:59 +03:00
committed by Space Team
parent 63829876b7
commit 6287968511
253 changed files with 9801 additions and 3015 deletions
@@ -50,7 +50,7 @@ abstract class AbstractFirLoadBinariesTest : AbstractFirResolveWithSessionTestCa
KotlinTestUtils.assertEqualsToFile(
File(testDataPath),
builder.toString()
builder.toString().trimEnd() + "\n"
)
}
}
@@ -1,66 +0,0 @@
/*
* Copyright 2010-2019 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.fir
import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.toAbstractProjectEnvironment
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectFileSearchScope
import org.jetbrains.kotlin.jvm.compiler.AbstractLoadJavaTest
import org.jetbrains.kotlin.jvm.compiler.LoadDescriptorUtil.compileKotlinToDirAndGetModule
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.test.ConfigurationKind
import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.KotlinTestUtils.newConfiguration
import org.jetbrains.kotlin.test.TestJdkKind
import java.io.File
abstract class AbstractFirLoadCompiledKotlin : AbstractFirLoadBinariesTest() {
protected lateinit var tmpdir: File
override fun setUp() {
super.setUp()
tmpdir = KotlinTestUtils.tmpDirForTest(this)
}
override fun createEnvironment(): KotlinCoreEnvironment {
return createEnvironmentWithMockJdk(ConfigurationKind.JDK_NO_RUNTIME)
}
@OptIn(ObsoleteTestInfrastructure::class)
fun doTest(path: String) {
val moduleDescriptor = compileKtFileToTmpDir(path)
val packageFqName = FqName("test")
val configuration = newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, listOf(tmpdir), emptyList<File>())
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
prepareProjectExtensions(environment.project)
val sessionWithDependency = FirTestSessionFactoryHelper.createSessionForTests(environment.toAbstractProjectEnvironment(), AbstractProjectFileSearchScope.EMPTY)
val testDataDirectoryPath =
"compiler/fir/analysis-tests/testData/loadCompiledKotlin/" +
path
.removePrefix("compiler/testData/loadJava/compiledKotlin/")
.removeSuffix(File(path).name)
File(testDataDirectoryPath).mkdirs()
checkPackageContent(sessionWithDependency, packageFqName, moduleDescriptor, "$testDataDirectoryPath${getTestName(false)}.txt")
}
private fun compileKtFileToTmpDir(path: String): ModuleDescriptor {
val file = File(path)
val configuration = newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK, emptyList(), emptyList<File>())
AbstractLoadJavaTest.updateConfigurationWithDirectives(file.readText(), configuration)
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
return compileKotlinToDirAndGetModule(listOf(file), tmpdir, environment)
}
}
@@ -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
import org.jetbrains.kotlin.test.directives.CodegenTestDirectives
import org.jetbrains.kotlin.test.directives.extractIgnoredDirectivesForTargetBackend
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
import org.jetbrains.kotlin.test.directives.model.SimpleDirective
import org.jetbrains.kotlin.test.directives.model.ValueDirective
import org.jetbrains.kotlin.test.model.AfterAnalysisChecker
import org.jetbrains.kotlin.test.model.FrontendKinds
import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
class FirMetadataLoadingTestSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) {
override val directiveContainers: List<DirectivesContainer>
get() = listOf(CodegenTestDirectives)
override fun suppressIfNeeded(failedAssertions: List<WrappedException>): List<WrappedException> {
val moduleStructure = testServices.moduleStructure
val directive = when (testServices.defaultsProvider.defaultFrontend) {
FrontendKinds.ClassicFrontend -> CodegenTestDirectives.IGNORE_FIR_METADATA_LOADING_K1
FrontendKinds.FIR -> CodegenTestDirectives.IGNORE_FIR_METADATA_LOADING_K2
else -> shouldNotBeCalled()
}
if (moduleStructure.modules.any { directive in it.directives }) {
return if (failedAssertions.isNotEmpty()) {
emptyList()
} else {
listOf(AssertionError("Looks like this test can be unmuted. Remove ${directive.name} directive").wrap())
}
}
return failedAssertions
}
}
@@ -0,0 +1,174 @@
/*
* 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
import com.intellij.openapi.vfs.StandardFileSystems
import com.intellij.openapi.vfs.VirtualFileManager
import org.jetbrains.kotlin.cli.common.prepareJvmSessions
import org.jetbrains.kotlin.cli.jvm.compiler.VfsBasedProjectEnvironment
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.BinaryModuleData
import org.jetbrains.kotlin.fir.DependencyListForCliModule
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
import org.jetbrains.kotlin.fir.declarations.utils.nameOrSpecialName
import org.jetbrains.kotlin.fir.renderer.FirRenderer
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
import org.jetbrains.kotlin.test.backend.handlers.JvmBinaryArtifactHandler
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.services.*
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndRemoveRedundantEmptyLinesAtTheEnd
import org.jetbrains.kotlin.test.utils.MultiModuleInfoDumper
import org.jetbrains.kotlin.test.utils.withExtension
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled
import java.io.File
class LoadedMetadataDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler(testServices) {
private val dumper: MultiModuleInfoDumper = MultiModuleInfoDumper()
override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) {
val emptyModule = TestModule(
name = "empty", JvmPlatforms.defaultJvmPlatform, TargetBackend.JVM_IR, FrontendKinds.FIR,
BackendKinds.IrBackend, ArtifactKinds.Jvm, files = emptyList(),
allDependencies = listOf(DependencyDescription(module.name, DependencyKind.Binary, DependencyRelation.RegularDependency)),
RegisteredDirectives.Empty, LanguageVersionSettingsImpl.DEFAULT
)
val configuration = testServices.compilerConfigurationProvider.getCompilerConfiguration(emptyModule)
val environment = VfsBasedProjectEnvironment(
testServices.compilerConfigurationProvider.getProject(emptyModule),
VirtualFileManager.getInstance().getFileSystem(StandardFileSystems.FILE_PROTOCOL),
testServices.compilerConfigurationProvider.getPackagePartProviderFactory(emptyModule)
)
val binaryModuleData = BinaryModuleData.initialize(
Name.identifier(emptyModule.name),
JvmPlatforms.defaultJvmPlatform,
JvmPlatformAnalyzerServices
)
val session = prepareJvmSessions(
files = emptyList<KtFile>(),
configuration, environment, Name.identifier(emptyModule.name),
extensionRegistrars = emptyList(),
environment.getSearchScopeForProjectLibraries(),
DependencyListForCliModule.build(binaryModuleData),
isCommonSource = { false },
fileBelongsToModule = { _, _ -> false },
createProviderAndScopeForIncrementalCompilation = { null }
).single().session
val packageFqName = FqName("test")
dumper.builderForModule(module)
.append(collectPackageContent(session, packageFqName, extractNames(module, packageFqName)))
}
@Suppress("warnings")
override fun processAfterAllModules(someAssertionWasFailed: Boolean) {
if (dumper.isEmpty()) return
val testDataFile = testServices.moduleStructure.originalTestDataFiles.first()
val commonExtension = ".fir.txt"
val (specificExtension, otherSpecificExtension) = when (testServices.defaultsProvider.defaultFrontend) {
FrontendKinds.ClassicFrontend -> ".fir.k1.txt" to ".fir.k2.txt"
FrontendKinds.FIR -> ".fir.k2.txt" to ".fir.k1.txt"
else -> shouldNotBeCalled()
}
val commonFirDump = testDataFile.withExtension(commonExtension)
val specificFirDump = testDataFile.withExtension(specificExtension)
val expectedFile = when {
commonFirDump.exists() -> commonFirDump
else -> specificFirDump
}
val actualText = dumper.generateResultingDump()
assertions.assertEqualsToFile(expectedFile, actualText, message = { "Content is not equal" })
if (commonFirDump.exists() && specificFirDump.exists()) {
assertions.fail {
"""
Common dump ${commonFirDump.name} and specific ${specificFirDump.name} exist at the same time
Please remove ${specificFirDump.name}
""".trimIndent()
}
}
if (!commonFirDump.exists()) {
val otherFirDump = testDataFile.withExtension(otherSpecificExtension)
checkK1AndK2DumpsIdentity(specificFirDump, otherFirDump, commonFirDump)
}
}
private fun checkK1AndK2DumpsIdentity(file1: File, file2: File, commonFile: File) {
if (!file1.exists() || !file2.exists()) return
val dump1 = file1.readText().trimTrailingWhitespacesAndRemoveRedundantEmptyLinesAtTheEnd()
val dump2 = file2.readText().trimTrailingWhitespacesAndRemoveRedundantEmptyLinesAtTheEnd()
if (dump1 == dump2) {
commonFile.writeText(dump1)
file1.delete()
file2.delete()
assertions.fail {
"""
Files ${file1.name} and ${file2.name} are identical
Generating ${commonFile.name} and deleting ${file1.name} and ${file2.name}
""".trimIndent()
}
}
}
private fun collectPackageContent(session: FirSession, packageFqName: FqName, declarationNames: Collection<Name>): String {
val provider = session.symbolProvider
val builder = StringBuilder()
val firRenderer = FirRenderer(builder)
for (name in declarationNames) {
for (symbol in provider.getTopLevelCallableSymbols(packageFqName, name)) {
firRenderer.renderElementAsString(symbol.fir)
builder.appendLine()
}
}
for (name in declarationNames) {
val classLikeSymbol = provider.getClassLikeSymbolByClassId(ClassId.topLevel(packageFqName.child(name))) ?: continue
firRenderer.renderElementAsString(classLikeSymbol.fir)
builder.appendLine()
}
return builder.toString().trimEnd()
}
private fun extractNames(module: TestModule, packageFqName: FqName): Collection<Name> {
testServices.dependencyProvider.getArtifactSafe(module, FrontendKinds.ClassicFrontend)
?.let { return extractNames(it, packageFqName) }
testServices.dependencyProvider.getArtifactSafe(module, FrontendKinds.FIR)
?.let { return extractNames(it, packageFqName) }
error("Frontend artifact for module $module not found")
}
private fun extractNames(artifact: ClassicFrontendOutputArtifact, packageFqName: FqName): Collection<Name> {
return DescriptorUtils.getAllDescriptors(artifact.analysisResult.moduleDescriptor.getPackage(packageFqName).memberScope)
.mapTo(sortedSetOf()) { it.name }
}
private fun extractNames(artifact: FirOutputArtifact, packageFqName: FqName): Collection<Name> {
return sortedSetOf<Name>().apply {
for (part in artifact.partsForDependsOnModules) {
val files = part.session.firProvider.getFirFilesByPackage(packageFqName)
files.flatMapTo(this) { file ->
file.declarations.mapNotNull { (it as? FirMemberDeclaration)?.nameOrSpecialName }
}
}
}
}
}
@@ -0,0 +1,75 @@
/*
* 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.runners
import org.jetbrains.kotlin.test.*
import org.jetbrains.kotlin.test.backend.ir.IrBackendInput
import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.builders.configureJvmArtifactsHandlersStep
import org.jetbrains.kotlin.test.directives.ConfigurationDirectives.WITH_STDLIB
import org.jetbrains.kotlin.test.directives.configureFirParser
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontend2IrConverter
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade
import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendOutputArtifact
import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter
import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
import org.jetbrains.kotlin.test.model.*
import org.jetbrains.kotlin.test.runners.codegen.commonConfigurationForTest
abstract class AbstractFirLoadCompiledKotlinTestBase<F : ResultingArtifact.FrontendOutput<F>> :
AbstractKotlinCompilerWithTargetBackendTest(TargetBackend.JVM_IR)
{
protected abstract val frontendKind: FrontendKind<F>
protected abstract val frontendFacade: Constructor<FrontendFacade<F>>
protected abstract val frontendToBackendConverter: Constructor<Frontend2BackendConverter<F, IrBackendInput>>
override fun TestConfigurationBuilder.configuration() {
commonConfigurationForTest(
frontendKind,
frontendFacade,
frontendToBackendConverter,
::JvmIrBackendFacade
)
configureJvmArtifactsHandlersStep {
useHandlers(::LoadedMetadataDumpHandler)
}
forTestsMatching("compiler/testData/loadJava/compiledKotlinWithStdlib/*") {
defaultDirectives {
+WITH_STDLIB
}
}
useAfterAnalysisCheckers(::FirMetadataLoadingTestSuppressor)
}
}
open class AbstractFirLoadK1CompiledKotlin : AbstractFirLoadCompiledKotlinTestBase<ClassicFrontendOutputArtifact>() {
override val frontendKind: FrontendKind<ClassicFrontendOutputArtifact>
get() = FrontendKinds.ClassicFrontend
override val frontendFacade: Constructor<FrontendFacade<ClassicFrontendOutputArtifact>>
get() = ::ClassicFrontendFacade
override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<ClassicFrontendOutputArtifact, IrBackendInput>>
get() = ::ClassicFrontend2IrConverter
}
open class AbstractFirLoadK2CompiledKotlin : AbstractFirLoadCompiledKotlinTestBase<FirOutputArtifact>() {
override val frontendKind: FrontendKind<FirOutputArtifact>
get() = FrontendKinds.FIR
override val frontendFacade: Constructor<FrontendFacade<FirOutputArtifact>>
get() = ::FirFrontendFacade
override val frontendToBackendConverter: Constructor<Frontend2BackendConverter<FirOutputArtifact, IrBackendInput>>
get() = ::Fir2IrResultsConverter
override fun configure(builder: TestConfigurationBuilder) {
super.configure(builder)
builder.configureFirParser(FirParser.LightTree)
}
}
@@ -16,6 +16,11 @@ fun String.trimTrailingWhitespacesAndAddNewlineAtEOF(): String =
fun String.trimTrailingWhitespaces(): String =
this.split('\n').joinToString(separator = "\n") { it.trimEnd() }
fun String.trimTrailingWhitespacesAndRemoveRedundantEmptyLinesAtTheEnd(): String {
val lines = this.split('\n').map { it.trimEnd() }
return lines.dropLastWhile { it.isBlank() }.joinToString("\n", postfix = "\n")
}
fun String.convertLineSeparators(separator: String = DEFAULT_LINE_SEPARATOR): String {
return replace(Regex.fromLiteral("\r\n|\r|\n"), separator)
}
@@ -12,6 +12,7 @@ abstract class DependencyProvider : TestService {
abstract fun getTestModule(name: String): TestModule
abstract fun <A : ResultingArtifact<A>> getArtifact(module: TestModule, kind: TestArtifactKind<A>): A
abstract fun <A : ResultingArtifact<A>> getArtifactSafe(module: TestModule, kind: TestArtifactKind<A>): A?
abstract fun unregisterAllArtifacts(module: TestModule)
abstract fun copy(): DependencyProvider
@@ -26,7 +27,7 @@ class DependencyProviderImpl(
private val assertions: Assertions
get() = testServices.assertions
private val testModulesByName = testModules.map { it.name to it }.toMap()
private val testModulesByName = testModules.associateBy { it.name }
private val artifactsByModule: MutableMap<TestModule, MutableMap<TestArtifactKind<*>, ResultingArtifact<*>>> = mutableMapOf()
@@ -34,11 +35,13 @@ class DependencyProviderImpl(
return testModulesByName[name] ?: assertions.fail { "Module $name is not defined" }
}
override fun <A : ResultingArtifact<A>> getArtifact(module: TestModule, kind: TestArtifactKind<A>): A {
val artifact = artifactsByModule.getMap(module)[kind]
?: error("Artifact with kind $kind is not registered for module ${module.name}")
override fun <A : ResultingArtifact<A>> getArtifactSafe(module: TestModule, kind: TestArtifactKind<A>): A? {
@Suppress("UNCHECKED_CAST")
return artifact as A
return artifactsByModule.getMap(module)[kind] as A?
}
override fun <A : ResultingArtifact<A>> getArtifact(module: TestModule, kind: TestArtifactKind<A>): A {
return getArtifactSafe(module, kind) ?: error("Artifact with kind $kind is not registered for module ${module.name}")
}
fun <A : ResultingArtifact<A>> registerArtifact(module: TestModule, artifact: ResultingArtifact<A>) {
@@ -0,0 +1,43 @@
public final annotation class Ann : R|kotlin/Annotation| {
public constructor(): R|test/Ann|
}
public sealed class Sealed : R|kotlin/Any| {
public final val z: R|test/Z|
public get(): R|test/Z|
@R|test/Ann|() protected constructor(@R|test/Ann|() z: R|test/Z|): R|test/Sealed|
public final class Derived : R|test/Sealed| {
@R|test/Ann|() public constructor(z: R|test/Z|): R|test/Sealed.Derived|
}
}
public final class Test : R|kotlin/Any| {
public final val z: R|test/Z|
public get(): R|test/Z|
@R|test/Ann|() public constructor(@R|test/Ann|() z: R|test/Z|): R|test/Test|
@R|test/Ann|() public constructor(z: R|test/Z|, @R|test/Ann|() a: R|kotlin/Int|): R|test/Test|
@R|test/Ann|() private constructor(z: R|test/Z|, @R|test/Ann|() s: R|kotlin/String|): R|test/Test|
}
@R|kotlin/jvm/JvmInline|() public final inline class Z : R|kotlin/Any| {
public open operator fun equals(other: R|kotlin/Any?|): R|kotlin/Boolean|
public open fun hashCode(): R|kotlin/Int|
public open fun toString(): R|kotlin/String|
public final val x: R|kotlin/Int|
public get(): R|kotlin/Int|
public constructor(x: R|kotlin/Int|): R|test/Z|
}
@@ -0,0 +1,19 @@
@R|kotlin/Deprecated|(message = String(Class)) public final class Class : R|kotlin/Any| {
public constructor(): R|test/Class|
@R|kotlin/Deprecated|(message = String(Nested)) public final class Nested : R|kotlin/Any| {
public constructor(): R|test/Class.Nested|
}
@R|kotlin/Deprecated|(message = String(Inner)) public final inner class Inner : R|kotlin/Any| {
public test/Class.constructor(): R|test/Class.Inner|
}
@R|kotlin/Deprecated|(message = String(companion object)) public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Class.Companion|
}
}
@@ -0,0 +1,27 @@
public final annotation class Anno : R|kotlin/Annotation| {
public final val t: R|java/lang/annotation/ElementType|
public get(): R|java/lang/annotation/ElementType|
public constructor(t: R|java/lang/annotation/ElementType|): R|test/Anno|
}
@R|test/Anno|(t = R|java/lang/annotation/ElementType.METHOD|) public final class Class : R|kotlin/Any| {
public constructor(): R|test/Class|
@R|test/Anno|(t = R|java/lang/annotation/ElementType.PARAMETER|) public final inner class Inner : R|kotlin/Any| {
public test/Class.constructor(): R|test/Class.Inner|
}
@R|test/Anno|(t = R|java/lang/annotation/ElementType.TYPE|) public final class Nested : R|kotlin/Any| {
public constructor(): R|test/Class.Nested|
}
@R|test/Anno|(t = R|java/lang/annotation/ElementType.ANNOTATION_TYPE|) public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Class.Companion|
}
}
@@ -0,0 +1,19 @@
public final annotation class Anno : R|kotlin/Annotation| {
public constructor(): R|test/Anno|
}
public final class Class : R|kotlin/Any| {
public constructor(): R|test/Class|
@R|test/Anno|() public final class Nested : R|kotlin/Any| {
public constructor(): R|test/Class.Nested|
}
@R|test/Anno|() public final inner class Inner : R|kotlin/Any| {
public test/Class.constructor(): R|test/Class.Inner|
}
}
@@ -0,0 +1,28 @@
public final annotation class A : R|kotlin/Annotation| {
public final val s: R|kotlin/String|
public get(): R|kotlin/String|
public constructor(s: R|kotlin/String|): R|test/A|
}
public final class Outer : R|kotlin/Any| {
public constructor(): R|test/Outer|
public final class Nested : R|kotlin/Any| {
public final val x: R|kotlin/String|
public get(): R|kotlin/String|
public constructor(@R|test/A|(s = String(nested)) x: R|kotlin/String|): R|test/Outer.Nested|
}
public final inner class Inner : R|kotlin/Any| {
public final val y: R|kotlin/String|
public get(): R|kotlin/String|
public test/Outer.constructor(@R|test/A|(s = String(inner)) y: R|kotlin/String|): R|test/Outer.Inner|
}
}
@@ -0,0 +1,28 @@
public final class Class : R|kotlin/Any| {
@PROPERTY:R|test/IntAnno|() public final val R|kotlin/Int|.extension: R|kotlin/Int|
public get(): R|kotlin/Int|
@PROPERTY:R|test/DoubleAnno|() public final val R|kotlin/Double|.extension: R|kotlin/Int|
public get(): R|kotlin/Int|
@PROPERTY:R|test/StringAnno|() public final val R|kotlin/String|.extension: R|kotlin/String|
public get(): R|kotlin/String|
public constructor(): R|test/Class|
}
public final annotation class DoubleAnno : R|kotlin/Annotation| {
public constructor(): R|test/DoubleAnno|
}
public final annotation class IntAnno : R|kotlin/Annotation| {
public constructor(): R|test/IntAnno|
}
public final annotation class StringAnno : R|kotlin/Annotation| {
public constructor(): R|test/StringAnno|
}
@@ -0,0 +1,23 @@
@PROPERTY:R|test/IntAnno|() public final val R|kotlin/Int|.extension: R|kotlin/Int|
public get(): R|kotlin/Int|
@PROPERTY:R|test/StringAnno|() public final val R|kotlin/String|.extension: R|kotlin/String|
public get(): R|kotlin/String|
@PROPERTY:R|test/DoubleAnno|() public final val R|kotlin/Double|.extension: R|kotlin/Int|
public get(): R|kotlin/Int|
public final annotation class DoubleAnno : R|kotlin/Annotation| {
public constructor(): R|test/DoubleAnno|
}
public final annotation class IntAnno : R|kotlin/Annotation| {
public constructor(): R|test/IntAnno|
}
public final annotation class StringAnno : R|kotlin/Annotation| {
public constructor(): R|test/StringAnno|
}
@@ -0,0 +1,30 @@
public final annotation class A : R|kotlin/Annotation| {
public final val value: R|kotlin/String|
public get(): R|kotlin/String|
public constructor(value: R|kotlin/String|): R|test/A|
}
public final annotation class B : R|kotlin/Annotation| {
public final val value: R|kotlin/Array<kotlin/String>|
public get(): R|kotlin/Array<kotlin/String>|
public constructor(value: R|kotlin/Array<kotlin/String>|): R|test/B|
}
public abstract interface I : R|kotlin/Any| {
public abstract var getterAndSetter: R|kotlin/Int|
@R|test/A|(value = String(getter)) public get(): R|kotlin/Int|
@R|test/B|(value = <implicitArrayOf>(String(setter))) public set(value: R|kotlin/Int|): R|kotlin/Unit|
@PROPERTY:R|test/A|(value = String(property)) public abstract var propertyAndGetter: R|kotlin/Int|
@R|test/B|(value = <implicitArrayOf>(String(getter))) public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
@PROPERTY:R|test/A|(value = String(property)) public abstract var propertyAndSetter: R|kotlin/Int|
public get(): R|kotlin/Int|
@R|test/B|(value = <implicitArrayOf>(String(setter))) public set(value: R|kotlin/Int|): R|kotlin/Unit|
}
@@ -1,4 +1,6 @@
//ALLOW_AST_ACCESS
// IGNORE_FIR_METADATA_LOADING_K2
// Ignore reason: KT-58028
package test
class ConstructorTypeParamClassObjectTypeConflict<test> {
@@ -42,4 +44,4 @@ class TestClassObjectAndClassConflict {
val bla = { "More" }()
val some = bla
}
}
@@ -0,0 +1,74 @@
public final class Int : R|kotlin/Any| {
public constructor(): R|test/Int|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Int.Companion|
}
}
public final class Outer : R|kotlin/Any| {
public constructor(): R|test/Outer|
public final class Pub : R|kotlin/Any| {
public constructor(): R|test/Outer.Pub|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Outer.Pub.Companion|
}
}
private final class Pri : R|kotlin/Any| {
public constructor(): R|test/Outer.Pri|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Outer.Pri.Companion|
}
}
public final class Int : R|kotlin/Any| {
public constructor(): R|test/Outer.Int|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Outer.Int.Companion|
}
}
protected final class Pro : R|kotlin/Any| {
public constructor(): R|test/Outer.Pro|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Outer.Pro.Companion|
}
}
}
private final class Pri : R|kotlin/Any| {
public constructor(): R|test/Pri|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Pri.Companion|
}
}
public final class Pub : R|kotlin/Any| {
public constructor(): R|test/Pub|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Pub.Companion|
}
}
@@ -0,0 +1,36 @@
public final class Test : R|kotlin/Any| {
public constructor(): R|test/Test|
public final companion object Companion : R|kotlin/Any| {
public final fun incProp4(): R|kotlin/Unit|
public final const val constProp8: R|kotlin/Int| = Int(80)
public get(): R|kotlin/Int|
public final val prop1: R|kotlin/Int|
public get(): R|kotlin/Int|
public final var prop2: R|kotlin/Int|
public get(): R|kotlin/Int|
protected set(value: R|kotlin/Int|): R|kotlin/Unit|
public final val prop3: R|kotlin/Int|
public get(): R|kotlin/Int|
public final var prop4: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
public final var prop5: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
public final var prop7: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(i: R|kotlin/Int|): R|kotlin/Unit|
private constructor(): R|test/Test.Companion|
}
}
@@ -0,0 +1,34 @@
public abstract interface Test : R|kotlin/Any| {
public final companion object Companion : R|kotlin/Any| {
public final fun incProp4(): R|kotlin/Unit|
public final const val constProp8: R|kotlin/Int| = Int(80)
public get(): R|kotlin/Int|
public final val prop1: R|kotlin/Int|
public get(): R|kotlin/Int|
public final var prop2: R|kotlin/Int|
public get(): R|kotlin/Int|
protected set(value: R|kotlin/Int|): R|kotlin/Unit|
public final val prop3: R|kotlin/Int|
public get(): R|kotlin/Int|
public final var prop4: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
public final var prop5: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(value: R|kotlin/Int|): R|kotlin/Unit|
public final var prop7: R|kotlin/Int|
public get(): R|kotlin/Int|
public set(i: R|kotlin/Int|): R|kotlin/Unit|
private constructor(): R|test/Test.Companion|
}
}
@@ -0,0 +1,21 @@
public final class InheritMethodsDifferentReturnTypes : R|kotlin/Any| {
public constructor(): R|test/InheritMethodsDifferentReturnTypes|
public abstract interface Super1 : R|kotlin/Any| {
public abstract fun bar(): R|kotlin/String?|
public abstract fun foo(): R|kotlin/CharSequence?|
}
public abstract interface Super2 : R|kotlin/Any| {
public abstract fun bar(): R|kotlin/CharSequence?|
public abstract fun foo(): R|kotlin/String?|
}
public abstract interface Sub : R|test/InheritMethodsDifferentReturnTypes.Super1|, R|test/InheritMethodsDifferentReturnTypes.Super2| {
}
}
@@ -0,0 +1,21 @@
public final class InheritMethodsDifferentReturnTypesGeneric : R|kotlin/Any| {
public constructor(): R|test/InheritMethodsDifferentReturnTypesGeneric|
public abstract interface Super1<F, B> : R|kotlin/Any| {
public abstract fun bar(): R|B?|
public abstract fun foo(): R|F?|
}
public abstract interface Super2<FF, BB> : R|kotlin/Any| {
public abstract fun bar(): R|BB?|
public abstract fun foo(): R|FF?|
}
public abstract interface Sub : R|test/InheritMethodsDifferentReturnTypesGeneric.Super1<kotlin/String, kotlin/CharSequence>|, R|test/InheritMethodsDifferentReturnTypesGeneric.Super2<kotlin/CharSequence, kotlin/String>| {
}
}
@@ -0,0 +1,6 @@
public abstract interface RemoveRedundantProjectionKind : R|kotlin/Any| {
public abstract fun f(p0: R|kotlin/collections/Collection<kotlin/CharSequence?>?|): R|kotlin/Unit|
public abstract fun f(p0: R|kotlin/Comparable<kotlin/CharSequence?>?|): R|kotlin/Unit|
}
@@ -0,0 +1,14 @@
public final class Some : R|kotlin/Any| {
public constructor(): R|test/Some|
public final companion object Companion : R|kotlin/Any| {
private constructor(): R|test/Some.Companion|
public final annotation class TestAnnotation : R|kotlin/Annotation| {
public constructor(): R|test/Some.Companion.TestAnnotation|
}
}
}
@@ -0,0 +1 @@
public final fun <T> foo(t: R|T|): R|T|
@@ -0,0 +1,32 @@
public abstract interface PropagateTypeArgumentNullable : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun invOutR(): R|kotlin/collections/MutableList<kotlin/collections/List<kotlin/String?>>|
public abstract fun invOutS(p: R|kotlin/collections/MutableList<kotlin/collections/List<kotlin/String?>>|): R|kotlin/Unit|
public abstract fun invR(): R|kotlin/collections/MutableList<kotlin/String?>|
public abstract fun outOutS(p: R|kotlin/collections/List<kotlin/collections/List<kotlin/String?>>|): R|kotlin/Unit|
public abstract fun outR(): R|kotlin/collections/List<kotlin/String?>|
public abstract fun outS(p: R|kotlin/collections/List<kotlin/String?>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/PropagateTypeArgumentNullable.Super| {
public abstract fun invOutR(): R|kotlin/collections/MutableList<kotlin/collections/List<kotlin/String?>>|
public abstract fun invOutS(p: R|kotlin/collections/MutableList<kotlin/collections/List<kotlin/String?>>|): R|kotlin/Unit|
public abstract fun invR(): R|kotlin/collections/MutableList<kotlin/String?>|
public abstract fun outOutS(p: R|kotlin/collections/List<kotlin/collections/List<kotlin/String?>>|): R|kotlin/Unit|
public abstract fun outR(): R|kotlin/collections/List<kotlin/String?>|
public abstract fun outS(p: R|kotlin/collections/List<kotlin/String?>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface ChangeProjectionKind1 : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/ChangeProjectionKind1.Super| {
public abstract fun foo(p: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface ChangeProjectionKind2 : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/ChangeProjectionKind2.Super| {
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,19 @@
public abstract interface DeeplySubstitutedClassParameter : R|kotlin/Any| {
public abstract interface Super<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(t: R|T|): R|kotlin/Unit|
}
public abstract interface Middle<E> : R|test/DeeplySubstitutedClassParameter.Super<E>| {
public abstract fun foo(t: R|E|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/DeeplySubstitutedClassParameter.Middle<kotlin/String>| {
public abstract fun foo(t: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,17 @@
public abstract interface DeeplySubstitutedClassParameter2 : R|kotlin/Any| {
public abstract interface Super<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(t: R|T|): R|kotlin/Unit|
}
public abstract interface Middle<E> : R|test/DeeplySubstitutedClassParameter2.Super<E>| {
}
public abstract interface Sub : R|test/DeeplySubstitutedClassParameter2.Middle<kotlin/String>| {
public abstract fun foo(t: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritMutability : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritMutability.Super| {
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritNotVararg : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/Array<out kotlin/String>?|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritNotVararg.Super| {
public abstract fun foo(p0: R|kotlin/Array<out kotlin/String>?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritNotVarargInteger : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/Array<out kotlin/Int>?|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritNotVarargInteger.Super| {
public abstract fun foo(p0: R|kotlin/Array<out kotlin/Int>?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritNotVarargNotNull : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/Array<out kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritNotVarargNotNull.Super| {
public abstract fun foo(p: R|kotlin/Array<out kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritNotVarargPrimitive : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/IntArray?|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritNotVarargPrimitive.Super| {
public abstract fun foo(p0: R|kotlin/IntArray?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritNullability : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/String|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritNullability.Super| {
public abstract fun foo(p0: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritProjectionKind : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritProjectionKind.Super| {
public abstract fun foo(p: R|kotlin/collections/MutableList<in kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritReadOnliness : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritReadOnliness.Super| {
public abstract fun foo(p: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritVararg : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(vararg p0: R|kotlin/Array<out kotlin/String?>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritVararg.Super| {
public abstract fun foo(vararg p0: R|kotlin/Array<out kotlin/String?>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritVarargInteger : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(vararg p0: R|kotlin/Array<out kotlin/Int?>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritVarargInteger.Super| {
public abstract fun foo(vararg p0: R|kotlin/Array<out kotlin/Int?>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritVarargNotNull : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(vararg p: R|kotlin/Array<out kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritVarargNotNull.Super| {
public abstract fun foo(vararg p: R|kotlin/Array<out kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface InheritVarargPrimitive : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(vararg p0: R|kotlin/IntArray|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/InheritVarargPrimitive.Super| {
public abstract fun foo(vararg p0: R|kotlin/IntArray|): R|kotlin/Unit|
}
}
@@ -0,0 +1,21 @@
public abstract interface Kt3302 : R|kotlin/Any| {
public abstract interface BSONObject : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun put(p0: R|kotlin/String|, p1: R|kotlin/Any|): R|kotlin/Any?|
}
public abstract interface LinkedHashMap<K, V> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun put(key: R|K|, value: R|V|): R|V?|
}
public abstract interface BasicBSONObject : R|test/Kt3302.LinkedHashMap<kotlin/String, kotlin/Any>|, R|test/Kt3302.BSONObject| {
public abstract fun put(key: R|kotlin/String|, value: R|kotlin/Any|): R|kotlin/Any?|
}
}
@@ -0,0 +1,14 @@
public abstract interface MutableToReadOnly : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/MutableToReadOnly.Super| {
public abstract fun foo(p: R|kotlin/collections/MutableList<kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface NotNullToNullable : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/String|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/NotNullToNullable.Super| {
public abstract fun foo(p0: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface NullableToNotNull : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/String?|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/NullableToNotNull.Super| {
public abstract fun foo(p0: R|kotlin/String?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface NullableToNotNullKotlinSignature : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/String?|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/NullableToNotNullKotlinSignature.Super| {
public abstract fun foo(p: R|kotlin/String?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface OverrideWithErasedParameter : R|kotlin/Any| {
public abstract interface Super<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|T?|): R|kotlin/Unit|
}
public abstract interface Sub<T> : R|test/OverrideWithErasedParameter.Super<T>| {
public abstract fun foo(p0: R|T?|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface ReadOnlyToMutable : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/ReadOnlyToMutable.Super| {
public abstract fun foo(p: R|kotlin/collections/List<kotlin/String>|): R|kotlin/Unit|
}
}
@@ -0,0 +1,21 @@
public abstract interface SubclassFromGenericAndNot : R|kotlin/Any| {
public abstract interface NonGeneric : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(p0: R|kotlin/String|): R|kotlin/Unit|
}
public abstract interface Generic<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(key: R|T|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/SubclassFromGenericAndNot.NonGeneric|, R|test/SubclassFromGenericAndNot.Generic<kotlin/String>| {
public abstract fun foo(key: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface SubstitutedClassParameter : R|kotlin/Any| {
public abstract interface Super<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(t: R|T|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/SubstitutedClassParameter.Super<kotlin/String>| {
public abstract fun foo(t: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,21 @@
public abstract interface SubstitutedClassParameters : R|kotlin/Any| {
public abstract interface Super1<T> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(t: R|T|): R|kotlin/Unit|
}
public abstract interface Super2<E> : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(t: R|E|): R|kotlin/Unit|
}
public abstract interface Sub : R|test/SubstitutedClassParameters.Super1<kotlin/String>|, R|test/SubstitutedClassParameters.Super2<kotlin/String>| {
public abstract fun foo(t: R|kotlin/String|): R|kotlin/Unit|
}
}
@@ -0,0 +1,14 @@
public abstract interface AddNotNullJavaSubtype : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(): R|kotlin/CharSequence?|
}
public abstract interface Sub : R|test/AddNotNullJavaSubtype.Super| {
public abstract fun foo(): R|kotlin/String|
}
}
@@ -0,0 +1,14 @@
public abstract interface AddNotNullSameJavaType : R|kotlin/Any| {
public abstract interface Super : R|kotlin/Any| {
public abstract fun dummy(): R|kotlin/Unit|
public abstract fun foo(): R|kotlin/CharSequence?|
}
public abstract interface Sub : R|test/AddNotNullSameJavaType.Super| {
public abstract fun foo(): R|kotlin/CharSequence|
}
}

Some files were not shown because too many files have changed in this diff Show More