diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CliTestModuleCompilers.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CliTestModuleCompilers.kt index 3a089b35da6..25bef52dc7c 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CliTestModuleCompilers.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CliTestModuleCompilers.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.cliArgument +import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.platform.isJs import org.jetbrains.kotlin.platform.jvm.isJvm @@ -16,6 +17,7 @@ import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirective import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.compilerConfigurationProvider import org.jetbrains.kotlin.test.services.sourceFileProvider import org.jetbrains.kotlin.test.services.standardLibrariesPathProvider import org.jetbrains.kotlin.test.util.KtTestUtil @@ -39,6 +41,7 @@ abstract class CliTestModuleCompiler : TestModuleCompiler() { buildCompilerOptions(module, testServices), compilationErrorExpected = Directives.COMPILATION_ERRORS in module.directives, libraryName = module.name, + extraClasspath = buildExtraClasspath(module, testServices), ) override fun compileTestModuleToLibrarySources(module: TestModule, testServices: TestServices): Path { @@ -55,6 +58,12 @@ abstract class CliTestModuleCompiler : TestModuleCompiler() { return librarySourcesPath } + private fun buildExtraClasspath(module: TestModule, testServices: TestServices): List = buildList { + addAll(buildPlatformExtraClasspath(module, testServices)) + } + + protected open fun buildPlatformExtraClasspath(module: TestModule, testServices: TestServices): List = emptyList() + private fun buildCompilerOptions(module: TestModule, testServices: TestServices): List = buildList { addAll(buildCommonCompilerOptions(module)) addAll(buildPlatformCompilerOptions(module, testServices)) @@ -101,6 +110,13 @@ class JvmJarTestModuleCompiler : CliTestModuleCompiler() { addAll(listOf(K2JVMCompilerArguments::jdkHome.cliArgument, jdkHome.toString())) } } + + override fun buildPlatformExtraClasspath(module: TestModule, testServices: TestServices): List = buildList { + val compilerConfiguration = testServices.compilerConfigurationProvider.getCompilerConfiguration(module) + for (file in compilerConfiguration.jvmClasspathRoots) { + add(file.absolutePath) + } + } } class JsKlibTestModuleCompiler : CliTestModuleCompiler() { diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CompilerExecutor.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CompilerExecutor.kt index c75ee6b3ae4..5cadeddd77c 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CompilerExecutor.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/CompilerExecutor.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.analysis.test.framework.services.libraries import org.jetbrains.kotlin.analysis.test.framework.utils.SkipTestException import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.cliArgument import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.test.MockLibraryUtil +import org.jetbrains.kotlin.test.services.JUnit5Assertions import java.nio.file.Path import kotlin.io.path.* @@ -21,9 +21,10 @@ internal object CompilerExecutor { options: List, compilationErrorExpected: Boolean, libraryName: String, + extraClasspath: List, ): Path { val library = try { - compile(compilerKind, sourcesPath, options, libraryName) + compile(compilerKind, sourcesPath, options, libraryName, extraClasspath) } catch (e: Throwable) { if (!compilationErrorExpected) { throw IllegalStateException("Unexpected compilation error while compiling library", e) @@ -40,7 +41,13 @@ internal object CompilerExecutor { return library } - private fun compile(compilerKind: CompilerKind, sourcesPath: Path, options: List, libraryName: String): Path { + private fun compile( + compilerKind: CompilerKind, + sourcesPath: Path, + options: List, + libraryName: String, + extraClasspath: List, + ): Path { val sourceFiles = sourcesPath.toFile().walkBottomUp() val library = when (compilerKind) { CompilerKind.JVM -> sourcesPath / "$libraryName.jar" @@ -49,13 +56,20 @@ internal object CompilerExecutor { when (compilerKind) { CompilerKind.JVM -> { - val commands = buildList { - sourceFiles.mapTo(this) { it.absolutePath } + val extraOptions = buildList { addAll(options) - add(K2JVMCompilerArguments::destination.cliArgument); add(library.absolutePathString()) add("-XXLanguage:-${LanguageFeature.SkipStandaloneScriptsInSourceRoots.name}") } - MockLibraryUtil.runJvmCompiler(commands) + + MockLibraryUtil.compileLibraryToJar( + sourcesPath = sourcesPath.absolutePathString(), + contentDir = sourcesPath.toFile(), + jarName = libraryName, + extraOptions = extraOptions, + assertions = JUnit5Assertions, + useJava11 = true, + extraClasspath = extraClasspath, + ) } CompilerKind.JS -> { val commands = buildList { diff --git a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/TestModuleCompiler.kt b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/TestModuleCompiler.kt index 0a7170f9fae..b848dc16050 100644 --- a/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/TestModuleCompiler.kt +++ b/analysis/analysis-test-framework/tests/org/jetbrains/kotlin/analysis/test/framework/services/libraries/TestModuleCompiler.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 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. */ @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.sourceFileProvider import org.jetbrains.kotlin.test.util.KtTestUtil import java.nio.file.Path +import kotlin.io.path.createDirectories import kotlin.io.path.createFile import kotlin.io.path.div import kotlin.io.path.writeText @@ -21,7 +22,10 @@ abstract class TestModuleCompiler : TestService { val tmpDir = KtTestUtil.tmpDir("testSourcesToCompile").toPath() for (testFile in module.files) { val text = testServices.sourceFileProvider.getContentOfSourceFile(testFile) - val tmpSourceFile = (tmpDir / testFile.name).createFile() + val filePath = tmpDir / testFile.relativePath + filePath.parent.createDirectories() + + val tmpSourceFile = filePath.createFile() tmpSourceFile.writeText(text) } return compile(tmpDir, module, testServices) diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt index 3e7db043686..e55dc0fd206 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/test/configurators/AnalysisApiFirLibraryBinaryTestConfigurator.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2024 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. */ @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.AnalysisApiFirT import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtLibraryBinaryModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtModuleFactory import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory +import org.jetbrains.kotlin.analysis.test.framework.services.configuration.AnalysisApiJvmEnvironmentConfigurator import org.jetbrains.kotlin.analysis.test.framework.services.libraries.* import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar @@ -38,6 +39,7 @@ object AnalysisApiFirLibraryBinaryTestConfigurator : AnalysisApiTestConfigurator builder.apply { useAdditionalService { DispatchingTestModuleCompiler() } useAdditionalService { TestModuleDecompilerJar() } + useConfigurators(::AnalysisApiJvmEnvironmentConfigurator) } } diff --git a/analysis/symbol-light-classes/testData/structure/Classes.lib.txt b/analysis/symbol-light-classes/testData/structure/Classes.lib.txt index f70e5eeea2f..b185673003e 100644 --- a/analysis/symbol-light-classes/testData/structure/Classes.lib.txt +++ b/analysis/symbol-light-classes/testData/structure/Classes.lib.txt @@ -15,23 +15,6 @@ FinalClass.class: ClsClassImpl: Object (java.lang.Object) ] -AbstractClass.class: - KtClass: - line: 6 - name: AbstractClass - qualifier: cba.AbstractClass - light: KtLightClassForDecompiledDeclaration - name: AbstractClass - qualifier: cba.AbstractClass - superTypes: [ - PsiType:Object - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [] - supers: [ - ClsClassImpl: Object (java.lang.Object) - ] - ChildOfOpen.class: KtClass: line: 6 @@ -49,6 +32,23 @@ ChildOfOpen.class: KtLightClassForDecompiledDeclaration: OpenClassFromAbstractClass (cba.OpenClassFromAbstractClass) ] +AbstractClass.class: + KtClass: + line: 6 + name: AbstractClass + qualifier: cba.AbstractClass + light: KtLightClassForDecompiledDeclaration + name: AbstractClass + qualifier: cba.AbstractClass + superTypes: [ + PsiType:Object + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [] + supers: [ + ClsClassImpl: Object (java.lang.Object) + ] + OpenClassFromAbstractClass.class: KtClass: line: 6 diff --git a/analysis/symbol-light-classes/testData/structure/EnumEntries.lib.txt b/analysis/symbol-light-classes/testData/structure/EnumEntries.lib.txt index 41b38269122..e1b9c59fafd 100644 --- a/analysis/symbol-light-classes/testData/structure/EnumEntries.lib.txt +++ b/analysis/symbol-light-classes/testData/structure/EnumEntries.lib.txt @@ -1,20 +1,3 @@ -BaseInterface.class: - KtClass: - line: 6 - name: BaseInterface - qualifier: one.two.BaseInterface - light: KtLightClassForDecompiledDeclaration - name: BaseInterface - qualifier: one.two.BaseInterface - superTypes: [ - PsiType:Object - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [] - supers: [ - ClsClassImpl: Object (java.lang.Object) - ] - EnumClassWithInterface.class: KtClass: line: 6 @@ -48,6 +31,23 @@ EnumClassWithInterface.class: qualifier: one.two.EnumClassWithInterface.NewSecondEntryWithBody light: null +BaseInterface.class: + KtClass: + line: 6 + name: BaseInterface + qualifier: one.two.BaseInterface + light: KtLightClassForDecompiledDeclaration + name: BaseInterface + qualifier: one.two.BaseInterface + superTypes: [ + PsiType:Object + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [] + supers: [ + ClsClassImpl: Object (java.lang.Object) + ] + EnumEntries.class: KtClass: line: 6 diff --git a/analysis/symbol-light-classes/testData/structure/InterfaceAndClasses.lib.txt b/analysis/symbol-light-classes/testData/structure/InterfaceAndClasses.lib.txt index ddece986b70..6b7e0233d7d 100644 --- a/analysis/symbol-light-classes/testData/structure/InterfaceAndClasses.lib.txt +++ b/analysis/symbol-light-classes/testData/structure/InterfaceAndClasses.lib.txt @@ -1,60 +1,39 @@ -OpenBaseClass.class: +FinalClassWithComplexInterface.class: KtClass: line: 6 - name: OpenBaseClass - qualifier: my.OpenBaseClass + name: FinalClassWithComplexInterface + qualifier: my.FinalClassWithComplexInterface light: KtLightClassForDecompiledDeclaration - name: OpenBaseClass - qualifier: my.OpenBaseClass + name: FinalClassWithComplexInterface + qualifier: my.FinalClassWithComplexInterface superTypes: [ PsiType:Object + PsiType:ComplexInterface ] superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) + ] + supers: [ + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) + ] + +OnlyTransitiveInterface.class: + KtClass: + line: 6 + name: OnlyTransitiveInterface + qualifier: my.OnlyTransitiveInterface + light: KtLightClassForDecompiledDeclaration + name: OnlyTransitiveInterface + qualifier: my.OnlyTransitiveInterface + superTypes: [ + PsiType:OpenComplexClass + ] + superClass: KtLightClassForDecompiledDeclaration: OpenComplexClass (my.OpenComplexClass) interfaces: [] supers: [ - ClsClassImpl: Object (java.lang.Object) - ] - -FinalClassWithBaseInterface.class: - KtClass: - line: 6 - name: FinalClassWithBaseInterface - qualifier: my.FinalClassWithBaseInterface - light: KtLightClassForDecompiledDeclaration - name: FinalClassWithBaseInterface - qualifier: my.FinalClassWithBaseInterface - superTypes: [ - PsiType:Object - PsiType:BaseInterface1 - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - ] - -AbstractClassWithBaseInterface.class: - KtClass: - line: 6 - name: AbstractClassWithBaseInterface - qualifier: my.AbstractClassWithBaseInterface - light: KtLightClassForDecompiledDeclaration - name: AbstractClassWithBaseInterface - qualifier: my.AbstractClassWithBaseInterface - superTypes: [ - PsiType:Object - PsiType:BaseInterface2 - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) + KtLightClassForDecompiledDeclaration: OpenComplexClass (my.OpenComplexClass) ] BaseInterface1.class: @@ -115,21 +94,111 @@ FinalClassWithSeveralBaseInterfaces.class: KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) ] -OnlyTransitiveInterface.class: +ComplexInterface.class: KtClass: line: 6 - name: OnlyTransitiveInterface - qualifier: my.OnlyTransitiveInterface + name: ComplexInterface + qualifier: my.ComplexInterface light: KtLightClassForDecompiledDeclaration - name: OnlyTransitiveInterface - qualifier: my.OnlyTransitiveInterface + name: ComplexInterface + qualifier: my.ComplexInterface superTypes: [ - PsiType:OpenComplexClass + PsiType:BaseInterface1 + PsiType:BaseInterface2 + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) ] - superClass: KtLightClassForDecompiledDeclaration: OpenComplexClass (my.OpenComplexClass) - interfaces: [] supers: [ - KtLightClassForDecompiledDeclaration: OpenComplexClass (my.OpenComplexClass) + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) + ] + +AbstractClassWithBaseInterface.class: + KtClass: + line: 6 + name: AbstractClassWithBaseInterface + qualifier: my.AbstractClassWithBaseInterface + light: KtLightClassForDecompiledDeclaration + name: AbstractClassWithBaseInterface + qualifier: my.AbstractClassWithBaseInterface + superTypes: [ + PsiType:Object + PsiType:BaseInterface2 + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) + ] + supers: [ + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) + ] + +AbstractClassTransitiveBaseInterface.class: + KtClass: + line: 6 + name: AbstractClassTransitiveBaseInterface + qualifier: my.AbstractClassTransitiveBaseInterface + light: KtLightClassForDecompiledDeclaration + name: AbstractClassTransitiveBaseInterface + qualifier: my.AbstractClassTransitiveBaseInterface + superTypes: [ + PsiType:AbstractClassWithBaseInterface + PsiType:BaseInterface1 + ] + superClass: KtLightClassForDecompiledDeclaration: AbstractClassWithBaseInterface (my.AbstractClassWithBaseInterface) + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + ] + supers: [ + KtLightClassForDecompiledDeclaration: AbstractClassWithBaseInterface (my.AbstractClassWithBaseInterface) + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + ] + +FinalClassWithBaseInterface.class: + KtClass: + line: 6 + name: FinalClassWithBaseInterface + qualifier: my.FinalClassWithBaseInterface + light: KtLightClassForDecompiledDeclaration + name: FinalClassWithBaseInterface + qualifier: my.FinalClassWithBaseInterface + superTypes: [ + PsiType:Object + PsiType:BaseInterface1 + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + ] + supers: [ + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) + ] + +OpenComplexClass.class: + KtClass: + line: 6 + name: OpenComplexClass + qualifier: my.OpenComplexClass + light: KtLightClassForDecompiledDeclaration + name: OpenComplexClass + qualifier: my.OpenComplexClass + superTypes: [ + PsiType:AbstractClassTransitiveBaseInterface + PsiType:ComplexInterface + ] + superClass: KtLightClassForDecompiledDeclaration: AbstractClassTransitiveBaseInterface (my.AbstractClassTransitiveBaseInterface) + interfaces: [ + KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) + ] + supers: [ + KtLightClassForDecompiledDeclaration: AbstractClassTransitiveBaseInterface (my.AbstractClassTransitiveBaseInterface) + KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) ] AbstractClassWithComplexInterface.class: @@ -177,89 +246,20 @@ FinalClassWithComplexInterfaceAndBaseInterface.class: KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) ] -FinalClassWithComplexInterface.class: +OpenBaseClass.class: KtClass: line: 6 - name: FinalClassWithComplexInterface - qualifier: my.FinalClassWithComplexInterface + name: OpenBaseClass + qualifier: my.OpenBaseClass light: KtLightClassForDecompiledDeclaration - name: FinalClassWithComplexInterface - qualifier: my.FinalClassWithComplexInterface + name: OpenBaseClass + qualifier: my.OpenBaseClass superTypes: [ PsiType:Object - PsiType:ComplexInterface ] superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) - ] + interfaces: [] supers: [ ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) - ] - -AbstractClassTransitiveBaseInterface.class: - KtClass: - line: 6 - name: AbstractClassTransitiveBaseInterface - qualifier: my.AbstractClassTransitiveBaseInterface - light: KtLightClassForDecompiledDeclaration - name: AbstractClassTransitiveBaseInterface - qualifier: my.AbstractClassTransitiveBaseInterface - superTypes: [ - PsiType:AbstractClassWithBaseInterface - PsiType:BaseInterface1 - ] - superClass: KtLightClassForDecompiledDeclaration: AbstractClassWithBaseInterface (my.AbstractClassWithBaseInterface) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - ] - supers: [ - KtLightClassForDecompiledDeclaration: AbstractClassWithBaseInterface (my.AbstractClassWithBaseInterface) - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - ] - -ComplexInterface.class: - KtClass: - line: 6 - name: ComplexInterface - qualifier: my.ComplexInterface - light: KtLightClassForDecompiledDeclaration - name: ComplexInterface - qualifier: my.ComplexInterface - superTypes: [ - PsiType:BaseInterface1 - PsiType:BaseInterface2 - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: BaseInterface1 (my.BaseInterface1) - KtLightClassForDecompiledDeclaration: BaseInterface2 (my.BaseInterface2) - ] - -OpenComplexClass.class: - KtClass: - line: 6 - name: OpenComplexClass - qualifier: my.OpenComplexClass - light: KtLightClassForDecompiledDeclaration - name: OpenComplexClass - qualifier: my.OpenComplexClass - superTypes: [ - PsiType:AbstractClassTransitiveBaseInterface - PsiType:ComplexInterface - ] - superClass: KtLightClassForDecompiledDeclaration: AbstractClassTransitiveBaseInterface (my.AbstractClassTransitiveBaseInterface) - interfaces: [ - KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) - ] - supers: [ - KtLightClassForDecompiledDeclaration: AbstractClassTransitiveBaseInterface (my.AbstractClassTransitiveBaseInterface) - KtLightClassForDecompiledDeclaration: ComplexInterface (my.ComplexInterface) ] diff --git a/analysis/symbol-light-classes/testData/structure/Interfaces.lib.txt b/analysis/symbol-light-classes/testData/structure/Interfaces.lib.txt index 501b78d9923..67c745454c9 100644 --- a/analysis/symbol-light-classes/testData/structure/Interfaces.lib.txt +++ b/analysis/symbol-light-classes/testData/structure/Interfaces.lib.txt @@ -15,6 +15,23 @@ SingleInterface.class: ClsClassImpl: Object (java.lang.Object) ] +BaseInterface1.class: + KtClass: + line: 6 + name: BaseInterface1 + qualifier: abc.BaseInterface1 + light: KtLightClassForDecompiledDeclaration + name: BaseInterface1 + qualifier: abc.BaseInterface1 + superTypes: [ + PsiType:Object + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [] + supers: [ + ClsClassImpl: Object (java.lang.Object) + ] + BaseInterface2.class: KtClass: line: 6 @@ -32,26 +49,6 @@ BaseInterface2.class: ClsClassImpl: Object (java.lang.Object) ] -InterfaceWithTransitive.class: - KtClass: - line: 6 - name: InterfaceWithTransitive - qualifier: abc.InterfaceWithTransitive - light: KtLightClassForDecompiledDeclaration - name: InterfaceWithTransitive - qualifier: abc.InterfaceWithTransitive - superTypes: [ - PsiType:InterfaceWithBase - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: InterfaceWithBase (abc.InterfaceWithBase) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: InterfaceWithBase (abc.InterfaceWithBase) - ] - InterfaceWithBase.class: KtClass: line: 6 @@ -75,20 +72,23 @@ InterfaceWithBase.class: KtLightClassForDecompiledDeclaration: BaseInterface2 (abc.BaseInterface2) ] -BaseInterface1.class: +InterfaceWithTransitive.class: KtClass: line: 6 - name: BaseInterface1 - qualifier: abc.BaseInterface1 + name: InterfaceWithTransitive + qualifier: abc.InterfaceWithTransitive light: KtLightClassForDecompiledDeclaration - name: BaseInterface1 - qualifier: abc.BaseInterface1 + name: InterfaceWithTransitive + qualifier: abc.InterfaceWithTransitive superTypes: [ - PsiType:Object + PsiType:InterfaceWithBase ] superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [] + interfaces: [ + KtLightClassForDecompiledDeclaration: InterfaceWithBase (abc.InterfaceWithBase) + ] supers: [ ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: InterfaceWithBase (abc.InterfaceWithBase) ] diff --git a/analysis/symbol-light-classes/testData/structure/Objects.lib.txt b/analysis/symbol-light-classes/testData/structure/Objects.lib.txt index 3082bfad629..27cc67eca35 100644 --- a/analysis/symbol-light-classes/testData/structure/Objects.lib.txt +++ b/analysis/symbol-light-classes/testData/structure/Objects.lib.txt @@ -1,3 +1,80 @@ +ObjectsKt.class: +ObjectWithInterface.class: + KtObjectDeclaration: + line: 6 + name: ObjectWithInterface + qualifier: two.ObjectWithInterface + light: KtLightClassForDecompiledDeclaration + name: ObjectWithInterface + qualifier: two.ObjectWithInterface + superTypes: [ + PsiType:Object + PsiType:BaseInterface + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) + ] + supers: [ + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) + ] + +NonBaseClass.class: + KtClass: + line: 6 + name: NonBaseClass + qualifier: two.NonBaseClass + light: KtLightClassForDecompiledDeclaration + name: NonBaseClass + qualifier: two.NonBaseClass + superTypes: [ + PsiType:BaseClass + ] + superClass: KtLightClassForDecompiledDeclaration: BaseClass (two.BaseClass) + interfaces: [] + supers: [ + KtLightClassForDecompiledDeclaration: BaseClass (two.BaseClass) + ] + +ObjectWithNonBaseInterface.class: + KtObjectDeclaration: + line: 6 + name: ObjectWithNonBaseInterface + qualifier: two.ObjectWithNonBaseInterface + light: KtLightClassForDecompiledDeclaration + name: ObjectWithNonBaseInterface + qualifier: two.ObjectWithNonBaseInterface + superTypes: [ + PsiType:Object + PsiType:NonBaseInterface + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [ + KtLightClassForDecompiledDeclaration: NonBaseInterface (two.NonBaseInterface) + ] + supers: [ + ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: NonBaseInterface (two.NonBaseInterface) + ] + +Object.class: + KtObjectDeclaration: + line: 6 + name: Object + qualifier: two.Object + light: KtLightClassForDecompiledDeclaration + name: Object + qualifier: two.Object + superTypes: [ + PsiType:Object + ] + superClass: ClsClassImpl: Object (java.lang.Object) + interfaces: [] + supers: [ + ClsClassImpl: Object (java.lang.Object) + ] + ObjectWithClassAndInterface.class: KtObjectDeclaration: line: 6 @@ -19,14 +96,14 @@ ObjectWithClassAndInterface.class: KtLightClassForDecompiledDeclaration: NonBaseInterface (two.NonBaseInterface) ] -BaseInterface.class: +AnotherInterface.class: KtClass: line: 6 - name: BaseInterface - qualifier: two.BaseInterface + name: AnotherInterface + qualifier: two.AnotherInterface light: KtLightClassForDecompiledDeclaration - name: BaseInterface - qualifier: two.BaseInterface + name: AnotherInterface + qualifier: two.AnotherInterface superTypes: [ PsiType:Object ] @@ -36,38 +113,24 @@ BaseInterface.class: ClsClassImpl: Object (java.lang.Object) ] -NonBaseClass.class: +NonBaseInterface.class: KtClass: line: 6 - name: NonBaseClass - qualifier: two.NonBaseClass + name: NonBaseInterface + qualifier: two.NonBaseInterface light: KtLightClassForDecompiledDeclaration - name: NonBaseClass - qualifier: two.NonBaseClass + name: NonBaseInterface + qualifier: two.NonBaseInterface superTypes: [ - PsiType:BaseClass - ] - superClass: KtLightClassForDecompiledDeclaration: BaseClass (two.BaseClass) - interfaces: [] - supers: [ - KtLightClassForDecompiledDeclaration: BaseClass (two.BaseClass) - ] - -Object.class: - KtObjectDeclaration: - line: 6 - name: Object - qualifier: two.Object - light: KtLightClassForDecompiledDeclaration - name: Object - qualifier: two.Object - superTypes: [ - PsiType:Object + PsiType:BaseInterface ] superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [] + interfaces: [ + KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) + ] supers: [ ClsClassImpl: Object (java.lang.Object) + KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) ] BaseClass.class: @@ -104,27 +167,6 @@ ObjectWithClass.class: KtLightClassForDecompiledDeclaration: BaseClass (two.BaseClass) ] -ObjectWithInterface.class: - KtObjectDeclaration: - line: 6 - name: ObjectWithInterface - qualifier: two.ObjectWithInterface - light: KtLightClassForDecompiledDeclaration - name: ObjectWithInterface - qualifier: two.ObjectWithInterface - superTypes: [ - PsiType:Object - PsiType:BaseInterface - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) - ] - ObjectWithClassAndJavaInterface.class: KtObjectDeclaration: line: 6 @@ -146,35 +188,14 @@ ObjectWithClassAndJavaInterface.class: ClsClassImpl: Runnable (java.lang.Runnable) ] -ObjectsKt.class: -NonBaseInterface.class: +BaseInterface.class: KtClass: line: 6 - name: NonBaseInterface - qualifier: two.NonBaseInterface + name: BaseInterface + qualifier: two.BaseInterface light: KtLightClassForDecompiledDeclaration - name: NonBaseInterface - qualifier: two.NonBaseInterface - superTypes: [ - PsiType:BaseInterface - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: BaseInterface (two.BaseInterface) - ] - -AnotherInterface.class: - KtClass: - line: 6 - name: AnotherInterface - qualifier: two.AnotherInterface - light: KtLightClassForDecompiledDeclaration - name: AnotherInterface - qualifier: two.AnotherInterface + name: BaseInterface + qualifier: two.BaseInterface superTypes: [ PsiType:Object ] @@ -184,24 +205,3 @@ AnotherInterface.class: ClsClassImpl: Object (java.lang.Object) ] -ObjectWithNonBaseInterface.class: - KtObjectDeclaration: - line: 6 - name: ObjectWithNonBaseInterface - qualifier: two.ObjectWithNonBaseInterface - light: KtLightClassForDecompiledDeclaration - name: ObjectWithNonBaseInterface - qualifier: two.ObjectWithNonBaseInterface - superTypes: [ - PsiType:Object - PsiType:NonBaseInterface - ] - superClass: ClsClassImpl: Object (java.lang.Object) - interfaces: [ - KtLightClassForDecompiledDeclaration: NonBaseInterface (two.NonBaseInterface) - ] - supers: [ - ClsClassImpl: Object (java.lang.Object) - KtLightClassForDecompiledDeclaration: NonBaseInterface (two.NonBaseInterface) - ] - diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.descriptors.java similarity index 91% rename from compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java rename to compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.descriptors.java index bfd28edc7b3..dfdd6c8b239 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.fir.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.descriptors.java @@ -24,10 +24,6 @@ public abstract class AbstractKotlinClass /* AbstractKotlinClass*/ { } public static final class Companion /* KotlinClass.Companion*/ { - @java.lang.Deprecated() - @kotlin.jvm.JvmStatic() - public static void getCompanionLateinitStaticVariable$annotations();// getCompanionLateinitStaticVariable$annotations() - @org.jetbrains.annotations.NotNull() public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() @@ -42,10 +38,6 @@ public static final class Companion /* KotlinClass.Companion*/ { } public static final class Companion /* AbstractKotlinClass.Companion*/ { - @java.lang.Deprecated() - @kotlin.jvm.JvmStatic() - public static void getCompanionLateinitStaticVariable$annotations();// getCompanionLateinitStaticVariable$annotations() - @org.jetbrains.annotations.NotNull() public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.java index dfdd6c8b239..bfd28edc7b3 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.java @@ -24,6 +24,10 @@ public abstract class AbstractKotlinClass /* AbstractKotlinClass*/ { } public static final class Companion /* KotlinClass.Companion*/ { + @java.lang.Deprecated() + @kotlin.jvm.JvmStatic() + public static void getCompanionLateinitStaticVariable$annotations();// getCompanionLateinitStaticVariable$annotations() + @org.jetbrains.annotations.NotNull() public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() @@ -38,6 +42,10 @@ public static final class Companion /* KotlinClass.Companion*/ { } public static final class Companion /* AbstractKotlinClass.Companion*/ { + @java.lang.Deprecated() + @kotlin.jvm.JvmStatic() + public static void getCompanionLateinitStaticVariable$annotations();// getCompanionLateinitStaticVariable$annotations() + @org.jetbrains.annotations.NotNull() public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.lib.java new file mode 100644 index 00000000000..52c76aadf00 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/LateinitProperties.lib.java @@ -0,0 +1,90 @@ +public abstract class AbstractKotlinClass /* AbstractKotlinClass*/ { + @org.jetbrains.annotations.NotNull() + public static final AbstractKotlinClass.Companion Companion; + + public Custom classLateinitVariable; + + public static Custom companionLateinitStaticVariable; + + public static Custom companionLateinitVariable; + + @org.jetbrains.annotations.NotNull() + public final Custom getClassLateinitVariable();// getClassLateinitVariable() + + @org.jetbrains.annotations.NotNull() + public static final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() + + public AbstractKotlinClass();// .ctor() + + public final void setClassLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);// setClassLateinitVariable(Custom) + + public static final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitStaticVariable(Custom) + + class Companion ... +} + +public static final class Companion /* AbstractKotlinClass.Companion*/ { + @org.jetbrains.annotations.NotNull() + public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() + + @org.jetbrains.annotations.NotNull() + public final Custom getCompanionLateinitVariable();// getCompanionLateinitVariable() + + private Companion();// .ctor() + + public final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitStaticVariable(Custom) + + public final void setCompanionLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitVariable(Custom) +} + +public static final class Companion /* KotlinClass.Companion*/ { + @org.jetbrains.annotations.NotNull() + public final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() + + @org.jetbrains.annotations.NotNull() + public final Custom getCompanionLateinitVariable();// getCompanionLateinitVariable() + + private Companion();// .ctor() + + public final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitStaticVariable(Custom) + + public final void setCompanionLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitVariable(Custom) +} + +public final class Custom /* Custom*/ { + public Custom();// .ctor() +} + +public final class KotlinClass /* KotlinClass*/ { + @org.jetbrains.annotations.NotNull() + public static final KotlinClass.Companion Companion; + + public Custom classLateinitVariable; + + public static Custom companionLateinitStaticVariable; + + public static Custom companionLateinitVariable; + + @org.jetbrains.annotations.NotNull() + public final Custom getClassLateinitVariable();// getClassLateinitVariable() + + @org.jetbrains.annotations.NotNull() + public static final Custom getCompanionLateinitStaticVariable();// getCompanionLateinitStaticVariable() + + public KotlinClass();// .ctor() + + public final void setClassLateinitVariable(@org.jetbrains.annotations.NotNull() Custom);// setClassLateinitVariable(Custom) + + public static final void setCompanionLateinitStaticVariable(@org.jetbrains.annotations.NotNull() Custom);// setCompanionLateinitStaticVariable(Custom) + + class Companion ... +} + +public final class LateinitPropertiesKt /* LateinitPropertiesKt*/ { + public static Custom topLevelLateinit; + + @org.jetbrains.annotations.NotNull() + public static final Custom getTopLevelLateinit();// getTopLevelLateinit() + + public static final void setTopLevelLateinit(@org.jetbrains.annotations.NotNull() Custom);// setTopLevelLateinit(Custom) +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.lib.java index 4908a4dc30a..4155a984799 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.lib.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/enumMembers.lib.java @@ -1,3 +1,9 @@ +public static final class Companion /* State.Companion*/ { + private Companion();// .ctor() + + public final boolean done(@org.jetbrains.annotations.NotNull() State);// done(State) +} + public static final class Companion /* Event.Companion*/ { @kotlin.jvm.JvmStatic() @org.jetbrains.annotations.Nullable() @@ -6,12 +12,6 @@ public static final class Companion /* Event.Companion*/ { private Companion();// .ctor() } -public static final class Companion /* State.Companion*/ { - private Companion();// .ctor() - - public final boolean done(@org.jetbrains.annotations.NotNull() State);// done(State) -} - public enum Event /* Event*/ { ON_CREATE, ON_START, diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.lib.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.lib.java index 7b6e592796f..bc0979f3c41 100644 --- a/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.lib.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/objects.lib.java @@ -78,6 +78,14 @@ public static final class Companion /* C2.Companion*/ { private Companion();// .ctor() } +public static final class Companion /* I.Companion*/ { + private Companion();// .ctor() +} + +public static final class Companion /* ClassWithConstContainer.Companion*/ { + private Companion();// .ctor() +} + public static final class Companion /* C.Companion*/ { @kotlin.jvm.JvmStatic() @org.jetbrains.annotations.NotNull() @@ -105,14 +113,6 @@ public static final class Companion /* C.Companion*/ { public final void setX(@org.jetbrains.annotations.NotNull() java.lang.String);// setX(java.lang.String) } -public static final class Companion /* I.Companion*/ { - private Companion();// .ctor() -} - -public static final class Companion /* ClassWithConstContainer.Companion*/ { - private Companion();// .ctor() -} - public final class ConstContainer /* ConstContainer*/ { @org.jetbrains.annotations.NotNull() public static final ConstContainer INSTANCE;