diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 9fafed53b61..223b8806a71 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -62,6 +62,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM val renderPropertyAccessors: Boolean = true, val renderDeclarationAttributes: Boolean = false, val renderDeclarationOrigin: Boolean = false, + val renderPackageDirective: Boolean = false, ) { companion object { val Normal = RenderMode( @@ -1368,4 +1369,10 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM override fun visitContractDescription(contractDescription: FirContractDescription) { require(contractDescription is FirEmptyContractDescription) } + + override fun visitPackageDirective(packageDirective: FirPackageDirective) { + if (mode.renderPackageDirective) { + println("package ${packageDirective.packageFqName.asString()}") + } + } } diff --git a/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt b/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt index f01d03dc4d4..6cd8c88a5f6 100644 --- a/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt +++ b/generators/frontend-api-generator/tests/org/jetbrains/kotlin/generators/tests/frontend/api/GenerateTests.kt @@ -16,10 +16,7 @@ import org.jetbrains.kotlin.idea.fir.frontend.api.scopes.AbstractMemberScopeByFq import org.jetbrains.kotlin.idea.fir.frontend.api.symbols.AbstractSymbolByFqNameTest import org.jetbrains.kotlin.idea.fir.frontend.api.symbols.AbstractSymbolByPsiTest import org.jetbrains.kotlin.idea.fir.frontend.api.symbols.AbstractSymbolByReferenceTest -import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLazyBodiesCalculatorTest -import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLazyDeclarationResolveTest -import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirOnAirResolveTest -import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractPartialRawFirBuilderTestCase +import org.jetbrains.kotlin.idea.fir.low.level.api.* import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.AbstractDiagnosticTraversalCounterTest import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.AbstractFirContextCollectionTest import org.jetbrains.kotlin.idea.fir.low.level.api.diagnostic.compiler.based.AbstractDiagnosisCompilerTestDataSpecTest @@ -115,6 +112,10 @@ fun main(args: Array) { testClass { model("partialRawBuilder", testMethod = "doRawFirTest") } + + testClass { + model("getOrBuildFir") + } } testGroup( diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt new file mode 100644 index 00000000000..e434939764f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt @@ -0,0 +1 @@ +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.txt new file mode 100644 index 00000000000..ddacbeaae93 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirImportImpl + +FIR element rendered: +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.kt new file mode 100644 index 00000000000..46106b8880f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.kt @@ -0,0 +1 @@ +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.txt new file mode 100644 index 00000000000..ddacbeaae93 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirImportImpl + +FIR element rendered: +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.kt new file mode 100644 index 00000000000..62c43abd103 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.kt @@ -0,0 +1 @@ +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.txt new file mode 100644 index 00000000000..3e4381a8086 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtDotQualifiedExpression +FIR element: FirImportImpl + +FIR element rendered: +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.kt new file mode 100644 index 00000000000..91fcfc1a4e4 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.kt @@ -0,0 +1,3 @@ +// LOOK_UP_FOR_ELEMENT_OF_TYPE: org.jetbrains.kotlin.psi.KtImportDirective + +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.txt new file mode 100644 index 00000000000..a3cafa9c970 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.txt @@ -0,0 +1,5 @@ +KT element: KtImportDirective +FIR element: FirImportImpl + +FIR element rendered: +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.kt new file mode 100644 index 00000000000..191dcc0b61f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.kt @@ -0,0 +1 @@ +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.txt new file mode 100644 index 00000000000..3e4381a8086 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.txt @@ -0,0 +1,5 @@ +KT element: KtDotQualifiedExpression +FIR element: FirImportImpl + +FIR element rendered: +import a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.kt new file mode 100644 index 00000000000..6f58dd817fb --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.kt @@ -0,0 +1 @@ +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.txt new file mode 100644 index 00000000000..221fce830d1 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirPackageDirectiveImpl + +FIR element rendered: +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.kt new file mode 100644 index 00000000000..cd0e829d04e --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.kt @@ -0,0 +1 @@ +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.txt new file mode 100644 index 00000000000..221fce830d1 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirPackageDirectiveImpl + +FIR element rendered: +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.kt new file mode 100644 index 00000000000..56de1367b5b --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.kt @@ -0,0 +1 @@ +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.txt new file mode 100644 index 00000000000..7e13c37b9ec --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.txt @@ -0,0 +1,5 @@ +KT element: KtDotQualifiedExpression +FIR element: FirPackageDirectiveImpl + +FIR element rendered: +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.kt new file mode 100644 index 00000000000..ab890d25c78 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.kt @@ -0,0 +1 @@ +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.txt new file mode 100644 index 00000000000..25c32c00fc1 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.txt @@ -0,0 +1,5 @@ +KT element: KtPackageDirective +FIR element: FirPackageDirectiveImpl + +FIR element rendered: +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.kt new file mode 100644 index 00000000000..d5f7f924de9 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.kt @@ -0,0 +1 @@ +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.txt new file mode 100644 index 00000000000..7e13c37b9ec --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.txt @@ -0,0 +1,5 @@ +KT element: KtDotQualifiedExpression +FIR element: FirPackageDirectiveImpl + +FIR element rendered: +package a.b.c \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.kt new file mode 100644 index 00000000000..636c59bf10c --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.kt @@ -0,0 +1,11 @@ +class A { + class B { + class C { + val x = 10 + } + } +} + +fun x() { + A.B.C().x +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.txt new file mode 100644 index 00000000000..ee485601e78 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirFunctionCallImpl + +FIR element rendered: +Q|A.B|.R|/A.B.C.C|() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.kt new file mode 100644 index 00000000000..12f7e090e82 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.kt @@ -0,0 +1,11 @@ +class A { + class B { + class C { + val x = 10 + } + } +} + +fun x() { + A.B.C().x +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.txt new file mode 100644 index 00000000000..ad5e92baca8 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.txt @@ -0,0 +1,5 @@ +KT element: KtCallExpression +FIR element: FirFunctionCallImpl + +FIR element rendered: +Q|A.B|.R|/A.B.C.C|() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt new file mode 100644 index 00000000000..18b2a54b404 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt @@ -0,0 +1,11 @@ +class A { + class B { + class C { + val x = 10 + } + } +} + +fun x() { + A.B.C().x +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.txt new file mode 100644 index 00000000000..51e244efac6 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.txt @@ -0,0 +1,5 @@ +KT element: KtNameReferenceExpression +FIR element: FirResolvedQualifierImpl + +FIR element rendered: +Q|A.B| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.kt new file mode 100644 index 00000000000..0589f745162 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.kt @@ -0,0 +1,11 @@ +class A { + class B { + class C { + val x = 10 + } + } +} + +fun x() { + A.B.C().x +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.txt new file mode 100644 index 00000000000..aed76db4cbf --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.txt @@ -0,0 +1,5 @@ +KT element: KtDotQualifiedExpression +FIR element: FirFunctionCallImpl + +FIR element rendered: +Q|A.B|.R|/A.B.C.C|() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.kt new file mode 100644 index 00000000000..92428c462c7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.kt @@ -0,0 +1 @@ +fun x(): List = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.txt new file mode 100644 index 00000000000..57d52d73b68 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.txt @@ -0,0 +1,5 @@ +KT element: KtTypeReference +FIR element: FirErrorTypeRefImpl + +FIR element rendered: + diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.kt new file mode 100644 index 00000000000..f74bf57bba0 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.kt @@ -0,0 +1 @@ +fun x(): ListString> = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.txt new file mode 100644 index 00000000000..ce167e13858 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.kt new file mode 100644 index 00000000000..50dda1c7177 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.kt @@ -0,0 +1 @@ +fun x(): List< String, Int > = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.txt new file mode 100644 index 00000000000..ce167e13858 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt new file mode 100644 index 00000000000..f74bf57bba0 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt @@ -0,0 +1 @@ +fun x(): ListString> = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.txt new file mode 100644 index 00000000000..ce167e13858 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.kt new file mode 100644 index 00000000000..fb72d2fad73 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.kt @@ -0,0 +1 @@ +fun x(): Map Int >> = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.txt new file mode 100644 index 00000000000..6be1d1f2b50 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.kt new file mode 100644 index 00000000000..7c7389ceb39 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.kt @@ -0,0 +1 @@ +fun x(): Map List > = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.txt new file mode 100644 index 00000000000..3e4f0e721a7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/collections/List| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.kt new file mode 100644 index 00000000000..2da0bc0521a --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.kt @@ -0,0 +1 @@ +fun x(): List = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.txt new file mode 100644 index 00000000000..4b9ed7364a8 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.txt @@ -0,0 +1,5 @@ +KT element: KtTypeReference +FIR element: FirResolvedTypeRefImpl + +FIR element rendered: +R|kotlin/collections/List| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.kt new file mode 100644 index 00000000000..8f45d385842 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.kt @@ -0,0 +1 @@ +fun x(): UNRESOLVED Int >> = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.txt new file mode 100644 index 00000000000..6be1d1f2b50 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.kt new file mode 100644 index 00000000000..e9c1214fcf6 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.kt @@ -0,0 +1 @@ +fun x(): UNRESOLVED List > = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.txt new file mode 100644 index 00000000000..3e4f0e721a7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.txt @@ -0,0 +1,5 @@ +KT element: KtTypeProjection +FIR element: FirTypeProjectionWithVarianceImpl + +FIR element rendered: +R|kotlin/collections/List| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.kt new file mode 100644 index 00000000000..a2185bf820c --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.kt @@ -0,0 +1 @@ +fun x(): Map> = TODO() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.txt new file mode 100644 index 00000000000..c4129939fcc --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.txt @@ -0,0 +1,5 @@ +KT element: KtTypeReference +FIR element: FirResolvedTypeRefImpl + +FIR element rendered: +R|kotlin/collections/Map>| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.kt new file mode 100644 index 00000000000..4da19637300 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.kt @@ -0,0 +1 @@ +class X< T >() \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.txt new file mode 100644 index 00000000000..d4b60370963 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.txt @@ -0,0 +1,5 @@ +KT element: KtTypeParameter +FIR element: FirTypeParameterImpl + +FIR element rendered: +T diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.kt new file mode 100644 index 00000000000..0de0cd539b0 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.kt @@ -0,0 +1,3 @@ +enum class X { + ENTRY +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.txt new file mode 100644 index 00000000000..a20ccf8710c --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.txt @@ -0,0 +1,5 @@ +KT element: KtEnumEntry +FIR element: FirEnumEntryImpl + +FIR element rendered: +public final static enum entry ENTRY: R|X| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.kt new file mode 100644 index 00000000000..a4626abdf39 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.kt @@ -0,0 +1 @@ +fun x< T > foo(){} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.txt new file mode 100644 index 00000000000..d4b60370963 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.txt @@ -0,0 +1,5 @@ +KT element: KtTypeParameter +FIR element: FirTypeParameterImpl + +FIR element rendered: +T diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.kt new file mode 100644 index 00000000000..3b8e823282d --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.kt @@ -0,0 +1,3 @@ +fun foo(x: Int) { + +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.txt new file mode 100644 index 00000000000..fc58aacaa82 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.txt @@ -0,0 +1,5 @@ +KT element: KtParameter +FIR element: FirValueParameterImpl + +FIR element rendered: +x: R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.kt new file mode 100644 index 00000000000..3a9aa5bfdfe --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.kt @@ -0,0 +1,2 @@ +val x: String + get() = "" \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.txt new file mode 100644 index 00000000000..abd858fa499 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.txt @@ -0,0 +1,7 @@ +KT element: KtPropertyAccessor +FIR element: FirPropertyAccessorImpl + +FIR element rendered: +public get(): R|kotlin/String| { + ^ String() +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.kt new file mode 100644 index 00000000000..6a627bec0f5 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.kt @@ -0,0 +1,7 @@ +fun y() { + + class X { + fun y(): String + } + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.txt new file mode 100644 index 00000000000..6b56c6bde71 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.txt @@ -0,0 +1,12 @@ +KT element: KtClass +FIR element: FirRegularClassImpl + +FIR element rendered: +local final class X : R|kotlin/Any| { + public constructor(): R|X| { + super() + } + + public final fun y(): R|kotlin/String| + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.kt new file mode 100644 index 00000000000..52e7baaf137 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.kt @@ -0,0 +1,5 @@ +fun y() { + + fun x(): String = "" + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.txt new file mode 100644 index 00000000000..097d31b5d23 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.txt @@ -0,0 +1,7 @@ +KT element: KtNamedFunction +FIR element: FirSimpleFunctionImpl + +FIR element rendered: +local final fun x(): R|kotlin/String| { + ^x String() +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.kt new file mode 100644 index 00000000000..70a67dbe96f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.kt @@ -0,0 +1,5 @@ +fun y() { + + val x: String = "" + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.txt new file mode 100644 index 00000000000..022ef4b78fa --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.txt @@ -0,0 +1,5 @@ +KT element: KtProperty +FIR element: FirPropertyImpl + +FIR element rendered: +lval x: R|kotlin/String| = String() diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.kt new file mode 100644 index 00000000000..e426d15bae7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.kt @@ -0,0 +1,5 @@ +class Y { + + fun x(): String = "" + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.txt new file mode 100644 index 00000000000..557e2ebd431 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.txt @@ -0,0 +1,7 @@ +KT element: KtNamedFunction +FIR element: FirSimpleFunctionImpl + +FIR element rendered: +public final fun x(): R|kotlin/String| { + ^x String() +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.kt new file mode 100644 index 00000000000..dd56794a76b --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.kt @@ -0,0 +1,5 @@ +class Y { + + val x: String = "" + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.txt new file mode 100644 index 00000000000..ca59822541a --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.txt @@ -0,0 +1,6 @@ +KT element: KtProperty +FIR element: FirPropertyImpl + +FIR element rendered: +public final val x: R|kotlin/String| = String() + public get(): R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.kt new file mode 100644 index 00000000000..f76e67549ef --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.kt @@ -0,0 +1,5 @@ +class Y { + + typealias Str = String + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.txt new file mode 100644 index 00000000000..8879e3425b7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.txt @@ -0,0 +1,5 @@ +KT element: KtTypeAlias +FIR element: FirTypeAliasImpl + +FIR element rendered: +public final typealias Str = R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.kt new file mode 100644 index 00000000000..b8c5f1c4061 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.kt @@ -0,0 +1,7 @@ +class Y { + + class X { + fun y(): String + } + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.txt new file mode 100644 index 00000000000..ac046caff9f --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.txt @@ -0,0 +1,12 @@ +KT element: KtClass +FIR element: FirRegularClassImpl + +FIR element rendered: +public final class X : R|kotlin/Any| { + public constructor(): R|Y.X| { + super() + } + + public final fun y(): R|kotlin/String| + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.kt new file mode 100644 index 00000000000..d7b48079617 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.kt @@ -0,0 +1 @@ +class X(val x: Int) \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.txt new file mode 100644 index 00000000000..fc58aacaa82 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.txt @@ -0,0 +1,5 @@ +KT element: KtParameter +FIR element: FirValueParameterImpl + +FIR element rendered: +x: R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.kt new file mode 100644 index 00000000000..af00da3974b --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.kt @@ -0,0 +1 @@ +class X(x: Int) \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.txt new file mode 100644 index 00000000000..fc58aacaa82 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.txt @@ -0,0 +1,5 @@ +KT element: KtParameter +FIR element: FirValueParameterImpl + +FIR element rendered: +x: R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.kt new file mode 100644 index 00000000000..5f680f07a6e --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.kt @@ -0,0 +1,3 @@ +class X(x: Int) { + constructor(y: String): this(1) +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.txt new file mode 100644 index 00000000000..f18e42382a3 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.txt @@ -0,0 +1,5 @@ +KT element: KtParameter +FIR element: FirValueParameterImpl + +FIR element rendered: +y: R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.kt new file mode 100644 index 00000000000..6f79ddb4e20 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.kt @@ -0,0 +1,2 @@ +var x: String + set(value) {} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.txt new file mode 100644 index 00000000000..0e6a12536bb --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.txt @@ -0,0 +1,6 @@ +KT element: KtPropertyAccessor +FIR element: FirPropertyAccessorImpl + +FIR element rendered: +public set(value: R|kotlin/String|): R|kotlin/Unit| { +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.kt new file mode 100644 index 00000000000..ca58b783628 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.kt @@ -0,0 +1,5 @@ + +class X { + fun y(): String +} + \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.txt new file mode 100644 index 00000000000..17ed907f1be --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.txt @@ -0,0 +1,12 @@ +KT element: KtClass +FIR element: FirRegularClassImpl + +FIR element rendered: +public final class X : R|kotlin/Any| { + public constructor(): R|X| { + super() + } + + public final fun y(): R|kotlin/String| + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.kt new file mode 100644 index 00000000000..339b45f7aec --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.kt @@ -0,0 +1,5 @@ + +fun x() { + fun y(): String +} + diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.txt new file mode 100644 index 00000000000..8de3e1a8e7c --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.txt @@ -0,0 +1,8 @@ +KT element: KtNamedFunction +FIR element: FirSimpleFunctionImpl + +FIR element rendered: +public final fun x(): R|kotlin/Unit| { + local final fun y(): R|kotlin/String| + +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.kt new file mode 100644 index 00000000000..4a15fa0c07c --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.kt @@ -0,0 +1,3 @@ + +val x = 1 + diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.txt new file mode 100644 index 00000000000..1d51d7ef6e3 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.txt @@ -0,0 +1,6 @@ +KT element: KtProperty +FIR element: FirPropertyImpl + +FIR element rendered: +public final val x: R|kotlin/Int| = Int(1) + public get(): R|kotlin/Int| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.kt new file mode 100644 index 00000000000..ea103056fa4 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.kt @@ -0,0 +1,3 @@ + +typealias Str = String + diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.txt new file mode 100644 index 00000000000..8879e3425b7 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.txt @@ -0,0 +1,5 @@ +KT element: KtTypeAlias +FIR element: FirTypeAliasImpl + +FIR element rendered: +public final typealias Str = R|kotlin/String| diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractGetOrBuildFirTest.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractGetOrBuildFirTest.kt new file mode 100644 index 00000000000..d1278795524 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractGetOrBuildFirTest.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2010-2021 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.idea.fir.low.level.api + +import com.intellij.psi.PsiElement +import com.intellij.psi.util.PsiTreeUtil +import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.FirRenderer +import org.jetbrains.kotlin.fir.declarations.FirImport +import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.idea.fir.low.level.api.api.getOrBuildFir +import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.AbstractLowLevelApiSingleFileTest +import org.jetbrains.kotlin.idea.fir.low.level.api.test.base.expressionMarkerProvider +import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtFile +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +import org.jetbrains.kotlin.test.services.TestModuleStructure +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions + +abstract class AbstractGetOrBuildFirTest : AbstractLowLevelApiSingleFileTest() { + override fun configureTest(builder: TestConfigurationBuilder) { + super.configureTest(builder) + with(builder) { + useDirectives(Directives) + } + } + + override fun doTestByFileStructure(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices) { + val selectedElement = getElementOfType(ktFile, moduleStructure, testServices) as KtElement + + val actual = resolveWithClearCaches(ktFile) { state -> + val fir = selectedElement.getOrBuildFir(state) + """|KT element: ${selectedElement::class.simpleName} + |FIR element: ${fir::class.simpleName} + | + |FIR element rendered: + |${render(fir)}""".trimMargin() + } + testServices.assertions.assertEqualsToFile(testDataFileSibling(".txt"), actual) + } + + private fun getElementOfType(ktFile: KtFile, moduleStructure: TestModuleStructure, testServices: TestServices): PsiElement { + val selectedElement = testServices.expressionMarkerProvider.getSelectedElement(ktFile) + val expectedType = moduleStructure.allDirectives[Directives.LOOK_UP_FOR_ELEMENT_OF_TYPE].firstOrNull() ?: return selectedElement + @Suppress("UNCHECKED_CAST") val expectedClass = Class.forName(expectedType) as Class + if (expectedClass.isInstance(selectedElement)) return selectedElement + + return listOfNotNull( + PsiTreeUtil.getChildOfType(selectedElement, expectedClass), + ).single { it.textRange == selectedElement.textRange } + } + + private fun render(firElement: FirElement): String = when (firElement) { + is FirImport -> "import ${firElement.importedFqName}" + else -> firElement.render(renderingMode) + } + + private val renderingMode = FirRenderer.RenderMode.Normal.copy( + renderPackageDirective = true, + ) + + private object Directives : SimpleDirectivesContainer() { + val LOOK_UP_FOR_ELEMENT_OF_TYPE by stringDirective("LOOK_UP_FOR_ELEMENT_OF_TYPE") + } +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java new file mode 100644 index 00000000000..cde7ad9dfee --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/GetOrBuildFirTestGenerated.java @@ -0,0 +1,340 @@ +/* + * Copyright 2010-2021 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.idea.fir.low.level.api; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.util.KtTestUtil; +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 GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir") +@TestDataPath("$PROJECT_ROOT") +public class GetOrBuildFirTestGenerated extends AbstractGetOrBuildFirTest { + @Test + public void testAllFilesPresentInGetOrBuildFir() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Nested + @TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport") + @TestDataPath("$PROJECT_ROOT") + public class InImport { + @Test + public void testAllFilesPresentInInImport() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("firstImportNamePart.kt") + public void testFirstImportNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/firstImportNamePart.kt"); + } + + @Test + @TestMetadata("middleImportNamePart.kt") + public void testMiddleImportNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/middleImportNamePart.kt"); + } + + @Test + @TestMetadata("qualifiedImportNamePart.kt") + public void testQualifiedImportNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/qualifiedImportNamePart.kt"); + } + + @Test + @TestMetadata("wholeImportDirective.kt") + public void testWholeImportDirective() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportDirective.kt"); + } + + @Test + @TestMetadata("wholeImportName.kt") + public void testWholeImportName() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inImport/wholeImportName.kt"); + } + } + + @Nested + @TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage") + @TestDataPath("$PROJECT_ROOT") + public class InPackage { + @Test + public void testAllFilesPresentInInPackage() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("firstPackageNamePart.kt") + public void testFirstPackageNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/firstPackageNamePart.kt"); + } + + @Test + @TestMetadata("middlePackageNamePart.kt") + public void testMiddlePackageNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/middlePackageNamePart.kt"); + } + + @Test + @TestMetadata("qualifiedPackageNamePart.kt") + public void testQualifiedPackageNamePart() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/qualifiedPackageNamePart.kt"); + } + + @Test + @TestMetadata("wholePackageDirective.kt") + public void testWholePackageDirective() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageDirective.kt"); + } + + @Test + @TestMetadata("wholePackageName.kt") + public void testWholePackageName() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/inPackage/wholePackageName.kt"); + } + } + + @Nested + @TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions") + @TestDataPath("$PROJECT_ROOT") + public class QualifiedExpressions { + @Test + public void testAllFilesPresentInQualifiedExpressions() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("firstPartOfQualifiedCallWithNestedClasses.kt") + public void testFirstPartOfQualifiedCallWithNestedClasses() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/firstPartOfQualifiedCallWithNestedClasses.kt"); + } + + @Test + @TestMetadata("lastPartOfQualifiedCallWithNestedClasses.kt") + public void testLastPartOfQualifiedCallWithNestedClasses() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/lastPartOfQualifiedCallWithNestedClasses.kt"); + } + + @Test + @TestMetadata("middlePartOfQualifiedCallWithNestedClasses.kt") + public void testMiddlePartOfQualifiedCallWithNestedClasses() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/middlePartOfQualifiedCallWithNestedClasses.kt"); + } + + @Test + @TestMetadata("qualifiedPartOfQualifiedCallWithNestedClasses.kt") + public void testQualifiedPartOfQualifiedCallWithNestedClasses() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/qualifiedExpressions/qualifiedPartOfQualifiedCallWithNestedClasses.kt"); + } + } + + @Nested + @TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types") + @TestDataPath("$PROJECT_ROOT") + public class Types { + @Test + public void testAllFilesPresentInTypes() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("invalidTypeArgumentsCount.kt") + public void testInvalidTypeArgumentsCount() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCount.kt"); + } + + @Test + @TestMetadata("invalidTypeArgumentsCountArgument.kt") + public void testInvalidTypeArgumentsCountArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountArgument.kt"); + } + + @Test + @TestMetadata("invalidTypeArgumentsCountFirstArgument.kt") + public void testInvalidTypeArgumentsCountFirstArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountFirstArgument.kt"); + } + + @Test + @TestMetadata("invalidTypeArgumentsCountLastArgument.kt") + public void testInvalidTypeArgumentsCountLastArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/invalidTypeArgumentsCountLastArgument.kt"); + } + + @Test + @TestMetadata("nestedTypeArgument.kt") + public void testNestedTypeArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/nestedTypeArgument.kt"); + } + + @Test + @TestMetadata("typeArgument.kt") + public void testTypeArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/typeArgument.kt"); + } + + @Test + @TestMetadata("unresolvedTypeArgumentResolvedTypeConsturctor.kt") + public void testUnresolvedTypeArgumentResolvedTypeConsturctor() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeArgumentResolvedTypeConsturctor.kt"); + } + + @Test + @TestMetadata("unresolvedTypeConsturctorResolvedNestedTypeArgument.kt") + public void testUnresolvedTypeConsturctorResolvedNestedTypeArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedNestedTypeArgument.kt"); + } + + @Test + @TestMetadata("unresolvedTypeConsturctorResolvedTypeArgument.kt") + public void testUnresolvedTypeConsturctorResolvedTypeArgument() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/unresolvedTypeConsturctorResolvedTypeArgument.kt"); + } + + @Test + @TestMetadata("wholeType.kt") + public void testWholeType() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/types/wholeType.kt"); + } + } + + @Nested + @TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration") + @TestDataPath("$PROJECT_ROOT") + public class WholeDeclaration { + @Test + public void testAllFilesPresentInWholeDeclaration() throws Exception { + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration"), Pattern.compile("^(.+)\\.kt$"), null, true); + } + + @Test + @TestMetadata("classTypeParemeter.kt") + public void testClassTypeParemeter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/classTypeParemeter.kt"); + } + + @Test + @TestMetadata("enumEntry.kt") + public void testEnumEntry() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/enumEntry.kt"); + } + + @Test + @TestMetadata("functionTypeParemeter.kt") + public void testFunctionTypeParemeter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionTypeParemeter.kt"); + } + + @Test + @TestMetadata("functionValueParameter.kt") + public void testFunctionValueParameter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/functionValueParameter.kt"); + } + + @Test + @TestMetadata("getter.kt") + public void testGetter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/getter.kt"); + } + + @Test + @TestMetadata("localClass.kt") + public void testLocalClass() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localClass.kt"); + } + + @Test + @TestMetadata("localFunction.kt") + public void testLocalFunction() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localFunction.kt"); + } + + @Test + @TestMetadata("localProperty.kt") + public void testLocalProperty() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/localProperty.kt"); + } + + @Test + @TestMetadata("memberFunction.kt") + public void testMemberFunction() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberFunction.kt"); + } + + @Test + @TestMetadata("memberProperty.kt") + public void testMemberProperty() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberProperty.kt"); + } + + @Test + @TestMetadata("memberTypeAlias.kt") + public void testMemberTypeAlias() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/memberTypeAlias.kt"); + } + + @Test + @TestMetadata("nestedClass.kt") + public void testNestedClass() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/nestedClass.kt"); + } + + @Test + @TestMetadata("primaryConstructorValValueParameter.kt") + public void testPrimaryConstructorValValueParameter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValValueParameter.kt"); + } + + @Test + @TestMetadata("primaryConstructorValueParameter.kt") + public void testPrimaryConstructorValueParameter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/primaryConstructorValueParameter.kt"); + } + + @Test + @TestMetadata("secondaryConstructorValueParameter.kt") + public void testSecondaryConstructorValueParameter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/secondaryConstructorValueParameter.kt"); + } + + @Test + @TestMetadata("setter.kt") + public void testSetter() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/setter.kt"); + } + + @Test + @TestMetadata("topLevelClass.kt") + public void testTopLevelClass() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelClass.kt"); + } + + @Test + @TestMetadata("topLevelFunction.kt") + public void testTopLevelFunction() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelFunction.kt"); + } + + @Test + @TestMetadata("topLevelProperty.kt") + public void testTopLevelProperty() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelProperty.kt"); + } + + @Test + @TestMetadata("topLevelTypelTypeAlias.kt") + public void testTopLevelTypelTypeAlias() throws Exception { + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/wholeDeclaration/topLevelTypelTypeAlias.kt"); + } + } +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/ExpressionMarkersSourceFilePreprocessor.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/ExpressionMarkersSourceFilePreprocessor.kt index 651065f39fb..7c5246f66ea 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/ExpressionMarkersSourceFilePreprocessor.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/test/base/ExpressionMarkersSourceFilePreprocessor.kt @@ -6,6 +6,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.test.base import com.intellij.openapi.util.TextRange +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.idea.fir.low.level.api.annotations.PrivateForInline import org.jetbrains.kotlin.idea.fir.low.level.api.util.parentOfType import org.jetbrains.kotlin.psi.KtElement @@ -55,7 +57,9 @@ internal class ExpressionMarkersSourceFilePreprocessor(testServices: TestService class ExpressionMarkerProvider(testServices: TestServices) : TestService { private val selected = mutableMapOf() - @PrivateForInline val atCaret = mutableMapOf() + + @PrivateForInline + val atCaret = mutableMapOf() fun addSelectedExpression(file: TestFile, range: TextRange) { selected[file.relativePath] = range @@ -79,12 +83,16 @@ class ExpressionMarkerProvider(testServices: TestServices) : TestService { fun getSelectedElement(file: KtFile): KtElement { val range = selected[file.name] ?: error("No selected expression found in file") - val elements = file.elementsInRange(range) + val elements = file.elementsInRange(range).trimWhitespaces() if (elements.size != 1) { - error("Expected one element at rage but found ${elements.size} [${elements.joinToString { it.text }}]") + error("Expected one element at rage but found ${elements.size} [${elements.joinToString { it::class.simpleName + ": " + it.text }}]") } return elements.single() as KtElement } + + private fun List.trimWhitespaces(): List = + dropWhile { it is PsiWhiteSpace } + .dropLastWhile { it is PsiWhiteSpace } } val TestServices.expressionMarkerProvider: ExpressionMarkerProvider by TestServices.testServiceAccessor()