[Analysis API] Run code fragment compilation tests against libraries

This commit is contained in:
Yan Zhulanow
2023-08-22 15:56:16 +09:00
committed by Space Team
parent dbb7e788b2
commit 4b80c2197f
45 changed files with 425 additions and 105 deletions
@@ -0,0 +1,302 @@
/*
* 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.analysis.api.fir.test.cases.generated.cases.components.compilerFacility;
import com.intellij.testFramework.TestDataPath;
import org.jetbrains.kotlin.test.util.KtTestUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.analysis.api.fir.test.configurators.AnalysisApiFirTestConfiguratorFactory;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfiguratorFactoryData;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.TestModuleKind;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisSessionMode;
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiMode;
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.compilerFacility.AbstractCompilerFacilityTest;
import org.jetbrains.kotlin.test.TestMetadata;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.regex.Pattern;
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.analysis.api.GenerateAnalysisApiTestsKt}. DO NOT MODIFY MANUALLY */
@SuppressWarnings("all")
@TestMetadata("analysis/analysis-api/testData/components/compilerFacility/compilation")
@TestDataPath("$PROJECT_ROOT")
public class FirIdeNormalAnalysisLibrarySourceModuleCompilerFacilityTestGenerated extends AbstractCompilerFacilityTest {
@NotNull
@Override
public AnalysisApiTestConfigurator getConfigurator() {
return AnalysisApiFirTestConfiguratorFactory.INSTANCE.createConfigurator(
new AnalysisApiTestConfiguratorFactoryData(
FrontendKind.Fir,
TestModuleKind.LibrarySource,
AnalysisSessionMode.Normal,
AnalysisApiMode.Ide
)
);
}
@Test
public void testAllFilesPresentInCompilation() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/compilerFacility/compilation"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("classKinds.kt")
public void testClassKinds() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/classKinds.kt");
}
@Test
@TestMetadata("imports.kt")
public void testImports() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/imports.kt");
}
@Test
@TestMetadata("multipleFiles.kt")
public void testMultipleFiles() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/multipleFiles.kt");
}
@Test
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/simple.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments")
@TestDataPath("$PROJECT_ROOT")
public class CodeFragments {
@Test
public void testAllFilesPresentInCodeFragments() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("customName.kt")
public void testCustomName() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/customName.kt");
}
@Test
@TestMetadata("imports.kt")
public void testImports() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/imports.kt");
}
@Test
@TestMetadata("inlineFunctionUsage.kt")
public void testInlineFunctionUsage() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/inlineFunctionUsage.kt");
}
@Test
@TestMetadata("inlineFunctionUsageSource.kt")
public void testInlineFunctionUsageSource() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/inlineFunctionUsageSource.kt");
}
@Test
@TestMetadata("local.kt")
public void testLocal() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/local.kt");
}
@Test
@TestMetadata("simple.kt")
public void testSimple() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/simple.kt");
}
@Nested
@TestMetadata("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing")
@TestDataPath("$PROJECT_ROOT")
public class Capturing {
@Test
public void testAllFilesPresentInCapturing() throws Exception {
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
}
@Test
@TestMetadata("contextReceiver.kt")
public void testContextReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/contextReceiver.kt");
}
@Test
@TestMetadata("contextReceiverExplicit.kt")
public void testContextReceiverExplicit() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/contextReceiverExplicit.kt");
}
@Test
@TestMetadata("extensionReceiver.kt")
public void testExtensionReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/extensionReceiver.kt");
}
@Test
@TestMetadata("extensionReceiverExplicit.kt")
public void testExtensionReceiverExplicit() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/extensionReceiverExplicit.kt");
}
@Test
@TestMetadata("extensionReceiverLabeled.kt")
public void testExtensionReceiverLabeled() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/extensionReceiverLabeled.kt");
}
@Test
@TestMetadata("initializer.kt")
public void testInitializer() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/initializer.kt");
}
@Test
@TestMetadata("local.kt")
public void testLocal() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/local.kt");
}
@Test
@TestMetadata("localFunction.kt")
public void testLocalFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunction.kt");
}
@Test
@TestMetadata("localFunctionContainingClassClosure.kt")
public void testLocalFunctionContainingClassClosure() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionContainingClassClosure.kt");
}
@Test
@TestMetadata("localFunctionExtensionReceiverClosure.kt")
public void testLocalFunctionExtensionReceiverClosure() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionExtensionReceiverClosure.kt");
}
@Test
@TestMetadata("localFunctionLambdaParameterClosure.kt")
public void testLocalFunctionLambdaParameterClosure() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionLambdaParameterClosure.kt");
}
@Test
@TestMetadata("localFunctionLocalClosure.kt")
public void testLocalFunctionLocalClosure() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionLocalClosure.kt");
}
@Test
@TestMetadata("localFunctionLocalClosureMutating.kt")
public void testLocalFunctionLocalClosureMutating() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionLocalClosureMutating.kt");
}
@Test
@TestMetadata("localFunctionMultipleCapturing.kt")
public void testLocalFunctionMultipleCapturing() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionMultipleCapturing.kt");
}
@Test
@TestMetadata("localFunctionParameterClosure.kt")
public void testLocalFunctionParameterClosure() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localFunctionParameterClosure.kt");
}
@Test
@TestMetadata("localMutated.kt")
public void testLocalMutated() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/localMutated.kt");
}
@Test
@TestMetadata("multipleClassAndFunctionContextReceivers.kt")
public void testMultipleClassAndFunctionContextReceivers() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/multipleClassAndFunctionContextReceivers.kt");
}
@Test
@TestMetadata("multipleClassContextReceivers.kt")
public void testMultipleClassContextReceivers() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/multipleClassContextReceivers.kt");
}
@Test
@TestMetadata("multipleFunctionContextReceivers.kt")
public void testMultipleFunctionContextReceivers() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/multipleFunctionContextReceivers.kt");
}
@Test
@TestMetadata("nestedOuterClass.kt")
public void testNestedOuterClass() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/nestedOuterClass.kt");
}
@Test
@TestMetadata("objectFunction.kt")
public void testObjectFunction() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/objectFunction.kt");
}
@Test
@TestMetadata("outerClass.kt")
public void testOuterClass() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/outerClass.kt");
}
@Test
@TestMetadata("outerClassMutated.kt")
public void testOuterClassMutated() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/outerClassMutated.kt");
}
@Test
@TestMetadata("outerClassMutatedPrivate.kt")
public void testOuterClassMutatedPrivate() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/outerClassMutatedPrivate.kt");
}
@Test
@TestMetadata("preferCorrectResolve.kt")
public void testPreferCorrectResolve() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/preferCorrectResolve.kt");
}
@Test
@TestMetadata("privateMemberCall.kt")
public void testPrivateMemberCall() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/privateMemberCall.kt");
}
@Test
@TestMetadata("secondClassContextReceiver.kt")
public void testSecondClassContextReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/secondClassContextReceiver.kt");
}
@Test
@TestMetadata("singleClassContextReceiver.kt")
public void testSingleClassContextReceiver() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/singleClassContextReceiver.kt");
}
@Test
@TestMetadata("valueParameter.kt")
public void testValueParameter() throws Exception {
runTest("analysis/analysis-api/testData/components/compilerFacility/compilation/codeFragments/capturing/valueParameter.kt");
}
}
}
}
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.test.model.TestModule
import org.jetbrains.kotlin.test.services.ServiceRegistrationData
import org.jetbrains.kotlin.test.services.TestModuleStructure
import org.jetbrains.kotlin.test.services.TestServices
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
object AnalysisApiFirLibrarySourceTestConfigurator : AnalysisApiTestConfigurator() {
override val analyseInDependentSession: Boolean get() = false
@@ -41,6 +42,7 @@ object AnalysisApiFirLibrarySourceTestConfigurator : AnalysisApiTestConfigurator
useAdditionalService<KtModuleFactory> { KtLibrarySourceModuleFactory() }
useDirectives(SealedClassesInheritorsCaclulatorPreAnalysisHandler.Directives)
usePreAnalysisHandlers(::SealedClassesInheritorsCaclulatorPreAnalysisHandler)
useConfigurators(::JvmEnvironmentConfigurator)
}
}
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.codegen.ClassBuilderFactories
import org.jetbrains.kotlin.config.CommonConfigurationKeys
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.util.DumpIrTreeOptions
@@ -199,7 +200,13 @@ private class CollectingIrGenerationExtension : IrGenerationExtension {
override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
assertFalse { ::result.isInitialized }
val dumpOptions = DumpIrTreeOptions(normalizeNames = true, stableOrder = true)
val dumpOptions = DumpIrTreeOptions(
normalizeNames = true,
stableOrder = true,
printModuleName = false,
printFilePath = false
)
result = moduleFragment.dump(dumpOptions)
}
}
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/classKinds.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:classKinds.kt
CLASS ANNOTATION_CLASS name:Anno modality:OPEN visibility:public superTypes:[kotlin.Annotation]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Anno
CONSTRUCTOR visibility:public <> () returnType:<root>.Anno [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunction.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunction.kt
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
FUN LOCAL_FUNCTION name:call visibility:local modality:FINAL <> (a:kotlin.Int, b:kotlin.String) returnType:kotlin.Unit
@@ -16,7 +16,7 @@ MODULE_FRAGMENT name:<Sources of main>
CONST String type=kotlin.String value="foo"
VAR name:z type:kotlin.Unit [val]
GET_OBJECT 'CLASS IR_EXTERNAL_DECLARATION_STUB OBJECT name:Unit modality:FINAL visibility:public superTypes:[kotlin.Any]' type=kotlin.Unit
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionContainingClassClosure.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionContainingClassClosure.kt
CLASS CLASS name:Foo modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Foo
CONSTRUCTOR visibility:public <> () returnType:<root>.Foo [primary]
@@ -30,7 +30,7 @@ MODULE_FRAGMENT name:<Sources of main>
FUN name:consume visibility:public modality:FINAL <> (obj:<root>.Foo) returnType:kotlin.Unit
VALUE_PARAMETER name:obj index:0 type:<root>.Foo
BLOCK_BODY
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionExtensionReceiverClosure.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionExtensionReceiverClosure.kt
FUN name:block visibility:public modality:FINAL <T> (obj:T of <root>.block, block:@[ExtensionFunctionType] kotlin.Function1<T of <root>.block, kotlin.Unit>) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:obj index:0 type:T of <root>.block
@@ -25,7 +25,7 @@ MODULE_FRAGMENT name:<Sources of main>
CALL 'public final fun consume (text: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
text: GET_VAR '$this$block: kotlin.String declared in <root>.test.<anonymous>' type=kotlin.String origin=null
CALL 'local final fun call (): kotlin.Unit declared in <root>.test.<anonymous>' type=kotlin.Unit origin=null
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionLambdaParameterClosure.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLambdaParameterClosure.kt
FUN name:block visibility:public modality:FINAL <T> (obj:T of <root>.block, block:kotlin.Function1<T of <root>.block, kotlin.Unit>) returnType:kotlin.Unit
TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] reified:false
VALUE_PARAMETER name:obj index:0 type:T of <root>.block
@@ -25,7 +25,7 @@ MODULE_FRAGMENT name:<Sources of main>
CALL 'public final fun consume (text: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
text: GET_VAR 'foo: kotlin.String declared in <root>.test.<anonymous>' type=kotlin.String origin=null
CALL 'local final fun call (): kotlin.Unit declared in <root>.test.<anonymous>' type=kotlin.Unit origin=null
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionLocalClosure.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLocalClosure.kt
FUN name:consume visibility:public modality:FINAL <> (n:kotlin.Int) returnType:kotlin.Unit
VALUE_PARAMETER name:n index:0 type:kotlin.Int
BLOCK_BODY
@@ -12,7 +12,7 @@ MODULE_FRAGMENT name:<Sources of main>
CALL 'public final fun consume (n: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
n: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test' type=kotlin.Int origin=null
CALL 'local final fun call (): kotlin.Unit declared in <root>.test' type=kotlin.Unit origin=null
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionLocalClosureMutating.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionLocalClosureMutating.kt
FUN name:test visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:x type:kotlin.Int [var]
@@ -9,7 +9,7 @@ MODULE_FRAGMENT name:<Sources of main>
SET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Unit origin=EQ
CONST Int type=kotlin.Int value=1
CALL 'local final fun call (): kotlin.Unit declared in <root>.test' type=kotlin.Unit origin=null
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionMultipleCapturing.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionMultipleCapturing.kt
CLASS CLASS name:Foo modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.Foo
CONSTRUCTOR visibility:public <> () returnType:<root>.Foo [primary]
@@ -40,7 +40,7 @@ MODULE_FRAGMENT name:<Sources of main>
FUN name:consume visibility:public modality:FINAL <> (obj:kotlin.Any) returnType:kotlin.Unit
VALUE_PARAMETER name:obj index:0 type:kotlin.Any
BLOCK_BODY
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/localFunctionParameterClosure.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:localFunctionParameterClosure.kt
FUN name:consume visibility:public modality:FINAL <> (n:kotlin.Int) returnType:kotlin.Unit
VALUE_PARAMETER name:n index:0 type:kotlin.Int
BLOCK_BODY
@@ -11,7 +11,7 @@ MODULE_FRAGMENT name:<Sources of main>
CALL 'public final fun consume (n: kotlin.Int): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
n: GET_VAR 'x: kotlin.Int declared in <root>.test' type=kotlin.Int origin=null
CALL 'local final fun call (): kotlin.Unit declared in <root>.test' type=kotlin.Unit origin=null
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:MyCodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.MyCodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.MyCodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/inlineFunctionUsageSource.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:inlineFunctionUsageSource.kt
FUN name:call visibility:public modality:FINAL <> (block:kotlin.Function1<kotlin.Int, kotlin.Int>) returnType:kotlin.Unit [inline]
VALUE_PARAMETER name:block index:0 type:kotlin.Function1<kotlin.Int, kotlin.Int>
BLOCK_BODY
@@ -12,7 +12,7 @@ MODULE_FRAGMENT name:<Sources of main>
BLOCK_BODY
VAR name:x type:kotlin.Int [val]
CONST Int type=kotlin.Int value=0
FILE fqName:<root> fileName:/fragment.kt
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/fragment.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:fragment.kt
CLASS CLASS name:CodeFragment modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.CodeFragment
CONSTRUCTOR visibility:public <> () returnType:<root>.CodeFragment [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/imports.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:imports.kt
FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
CALL 'public final fun writeText (text: kotlin.String, charset: java.nio.charset.Charset): kotlin.Unit declared in kotlin.io' type=kotlin.Unit origin=null
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:main fileName:/main.kt
MODULE_FRAGMENT
FILE fqName:main fileName:main.kt
CLASS OBJECT name:Main modality:FINAL visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:main.Main
CONSTRUCTOR visibility:private <> () returnType:main.Main [primary]
@@ -1,5 +1,5 @@
MODULE_FRAGMENT name:<Sources of main>
FILE fqName:<root> fileName:/simple.kt
MODULE_FRAGMENT
FILE fqName:<root> fileName:simple.kt
FUN name:main visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.IrFileEntry
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.IrErrorType
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
@@ -62,6 +61,8 @@ data class DumpIrTreeOptions(
val printFlagsInDeclarationReferences: Boolean = true,
val printSignatures: Boolean = false,
val printTypeAbbreviations: Boolean = true,
val printModuleName: Boolean = true,
val printFilePath: Boolean = true,
)
private fun IrFile.shouldSkipDump(): Boolean {
@@ -241,14 +241,22 @@ class RenderIrElementVisitor(private val options: DumpIrTreeOptions = DumpIrTree
override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?): String =
"?DECLARATION? ${declaration::class.java.simpleName} $declaration"
override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?): String =
"MODULE_FRAGMENT name:${declaration.name}"
override fun visitModuleFragment(declaration: IrModuleFragment, data: Nothing?): String {
return buildString {
append("MODULE_FRAGMENT")
if (options.printModuleName) {
append(" name:").append(declaration.name)
}
}
}
override fun visitExternalPackageFragment(declaration: IrExternalPackageFragment, data: Nothing?): String =
"EXTERNAL_PACKAGE_FRAGMENT fqName:${declaration.packageFqName}"
override fun visitFile(declaration: IrFile, data: Nothing?): String =
"FILE fqName:${declaration.packageFqName} fileName:${declaration.path}"
override fun visitFile(declaration: IrFile, data: Nothing?): String {
val fileName = if (options.printFilePath) declaration.path else declaration.name
return "FILE fqName:${declaration.packageFqName} fileName:$fileName"
}
override fun visitFunction(declaration: IrFunction, data: Nothing?): String =
declaration.runTrimEnd {
@@ -82,6 +82,18 @@ internal fun AnalysisApiTestGroup.generateAnalysisApiTests() {
}
}
component(
"compilerFacility",
filter = testModuleKindIs(TestModuleKind.Source, TestModuleKind.LibrarySource)
and frontendIs(FrontendKind.Fir)
and analysisSessionModeIs(AnalysisSessionMode.Normal)
and analysisApiModeIs(AnalysisApiMode.Ide)
) {
test(AbstractCompilerFacilityTest::class) {
model("compilation", pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
}
}
group(filter = testModuleKindIs(TestModuleKind.Source, TestModuleKind.ScriptSource)) {
generateAnalysisApiComponentsTests()
generateAnalysisApiNonComponentsTests()
@@ -220,18 +232,6 @@ private fun AnalysisApiTestGroup.generateAnalysisApiComponentsTests() {
}
}
component(
"compilerFacility",
filter = testModuleKindIs(TestModuleKind.Source)
and frontendIs(FrontendKind.Fir)
and analysisSessionModeIs(AnalysisSessionMode.Normal)
and analysisApiModeIs(AnalysisApiMode.Ide)
) {
test(AbstractCompilerFacilityTest::class) {
model("compilation", pattern = TestGeneratorUtil.KT_WITHOUT_DOTS_IN_NAME)
}
}
component("compileTimeConstantProvider") {
test(AbstractCompileTimeConstantEvaluatorTest::class) {
model(it, "evaluate")