From c5372be2671b731190511310a5a726ffb9bc315b Mon Sep 17 00:00:00 2001 From: Igor Yakovlev Date: Mon, 10 May 2021 17:09:02 +0200 Subject: [PATCH] [FIR IDE] Move and rename RawFirFragmentForLazyBodiesBuilder into Fir Ide module --- .../partialRawBuilder/localFunction.kt | 15 ----- .../partialRawBuilder/paramemtersCatching.kt | 10 ---- .../partialRawBuilder/simpleFunction.kt | 11 ---- .../testData/partialRawBuilder/simpleVal.kt | 7 --- .../testData/partialRawBuilder/simpleVar.kt | 7 --- .../generators/GenerateJUnit3CompilerTests.kt | 7 --- .../kotlin/generators/tests/GenerateTests.kt | 3 + .../level/api/api/DeclarationCopyBuilder.kt | 12 ++-- .../LowLevelFirApiFacadeForResolveOnAir.kt | 6 +- .../lazy/resolve/FirLazyBodiesCalculator.kt | 7 +-- .../RawFirNonLocalDeclarationBuilder.kt | 12 ++-- .../low/level/api/providers/FirIdeProvider.kt | 5 +- .../partialRawBuilder/localFunction.kt | 20 +++++++ .../partialRawBuilder/localFunction.txt | 0 .../partialRawBuilder/memberFunction.kt | 5 ++ .../partialRawBuilder/memberFunction.txt | 0 .../partialRawBuilder/memberProperty.kt | 5 ++ .../partialRawBuilder/memberProperty.txt | 0 .../partialRawBuilder/paramemtersCatching.kt | 15 +++++ .../partialRawBuilder/paramemtersCatching.txt | 0 .../partialRawBuilder/simpleFunction.kt | 16 +++++ .../partialRawBuilder/simpleFunction.txt | 0 .../testdata/partialRawBuilder/simpleVal.kt | 12 ++++ .../testdata}/partialRawBuilder/simpleVal.txt | 0 .../testdata/partialRawBuilder/simpleVar.kt | 12 ++++ .../testdata}/partialRawBuilder/simpleVar.txt | 0 .../AbstractPartialRawFirBuilderTestCase.kt | 59 +++++++++++++++---- ...PartialRawFirBuilderTestCaseGenerated.java | 20 +++---- 28 files changed, 168 insertions(+), 98 deletions(-) delete mode 100644 compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.kt delete mode 100644 compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.kt delete mode 100644 compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.kt delete mode 100644 compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.kt delete mode 100644 compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.kt rename compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/LazyBodyRawFirBuilder.kt => idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt (92%) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.kt rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/localFunction.txt (100%) rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/memberFunction.kt (52%) rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/memberFunction.txt (100%) rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/memberProperty.kt (56%) rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/memberProperty.txt (100%) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.kt rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/paramemtersCatching.txt (100%) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.kt rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/simpleFunction.txt (100%) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.kt rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/simpleVal.txt (100%) create mode 100644 idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.kt rename {compiler/fir/raw-fir/psi2fir/testData => idea/idea-frontend-fir/idea-fir-low-level-api/testdata}/partialRawBuilder/simpleVar.txt (100%) rename {compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder => idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api}/AbstractPartialRawFirBuilderTestCase.kt (63%) rename {compiler/fir/raw-fir/psi2fir/tests-gen/org/jetbrains/kotlin/fir/builder => idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api}/PartialRawFirBuilderTestCaseGenerated.java (63%) diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.kt b/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.kt deleted file mode 100644 index e25795fcc3a..00000000000 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.kt +++ /dev/null @@ -1,15 +0,0 @@ -// FUNCTION: bar - -package test.locals - -class Owner { - fun foo(i: Int) { - var x = true - - fun bar() { - baz(i, x) - } - } - - fun baz(j: Int, y: Boolean) {} -} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.kt b/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.kt deleted file mode 100644 index 2a665620cd3..00000000000 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.kt +++ /dev/null @@ -1,10 +0,0 @@ -// FUNCTION: foo - -package test.classes - -class Outer { - fun foo() { - val z = object { } - } -} - diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.kt b/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.kt deleted file mode 100644 index 4ffe7e6468c..00000000000 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.kt +++ /dev/null @@ -1,11 +0,0 @@ -// FUNCTION: foo - -package test - -fun bar(): Int { - return -1 -} - -fun foo(): Int { - return 0 -} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.kt b/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.kt deleted file mode 100644 index 5efc88c0425..00000000000 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.kt +++ /dev/null @@ -1,7 +0,0 @@ -// PROPERTY: foo - -package test - -val bar: Int = 10 - -val foo: Int = 0 \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.kt b/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.kt deleted file mode 100644 index 5c3dae0ebd8..00000000000 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.kt +++ /dev/null @@ -1,7 +0,0 @@ -// PROPERTY: foo - -package test - -val bar: Int = 10 - -var foo: Int = 0 \ No newline at end of file diff --git a/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit3CompilerTests.kt b/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit3CompilerTests.kt index 7b01db9bfc0..6fc481645a9 100644 --- a/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit3CompilerTests.kt +++ b/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit3CompilerTests.kt @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.codegen.flags.AbstractWriteFlagsTest import org.jetbrains.kotlin.codegen.ir.* import org.jetbrains.kotlin.fir.AbstractFirLoadCompiledKotlin import org.jetbrains.kotlin.fir.AbstractLazyBodyIsNotTouchedTilContractsPhaseTest -import org.jetbrains.kotlin.fir.builder.AbstractPartialRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderLazyBodiesTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderSourceElementMappingTestCase import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase @@ -465,12 +464,6 @@ fun generateJUnit3CompilerTests(args: Array) { } } - testGroup("compiler/fir/raw-fir/psi2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") { - testClass { - model("partialRawBuilder", testMethod = "doRawFirTest") - } - } - testGroup("compiler/fir/raw-fir/light-tree2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") { testClass { model("rawBuilder") diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index 9f96d3dd856..47017edea4b 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -1102,6 +1102,9 @@ fun main(args: Array) { testClass { model("innerDeclarationsResolve") } + testClass { + model("partialRawBuilder", testMethod = "doRawFirTest") + } } testGroup( diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt index 02854e2cd4c..ece9bf4b097 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/DeclarationCopyBuilder.kt @@ -7,8 +7,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.api import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder -import org.jetbrains.kotlin.fir.builder.RawFirReplacement +import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder +import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirReplacement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.* import org.jetbrains.kotlin.fir.expressions.FirReturnExpression @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.idea.fir.low.level.api.providers.firIdeProvider import org.jetbrains.kotlin.psi.* -object DeclarationCopyBuilder { +internal object DeclarationCopyBuilder { fun createDeclarationCopy( state: FirModuleResolveState, nonLocalDeclaration: KtDeclaration, @@ -62,7 +62,6 @@ object DeclarationCopyBuilder { if (functionBlock == null || !PsiTreeUtil.isAncestor(functionBlock, replacement.from, true)) { return builtFunction } - //TODO Check do we really need this optimisation? Maybe it is not optimisation at all because of Kt travers? // right now we can't resolve builtFunction header properly, as it built right in air, // without file, which is now required for running stages other then body resolve, so we @@ -86,7 +85,6 @@ object DeclarationCopyBuilder { if (classBody == null || !PsiTreeUtil.isAncestor(classBody, replacement.from, true)) { return builtClass } - //TODO Check do we really need this optimisation? Maybe it is not optimisation at all because of Kt travers? return buildRegularClassCopy(originalFirClass) { declarations.clear() @@ -124,8 +122,6 @@ object DeclarationCopyBuilder { if (!insideSetterBody) return builtProperty } - //TODO Check do we really need this optimisation? Maybe it is not optimisation at all because of Kt travers? - val originalSetter = originalProperty.setter val builtSetter = builtProperty.setter @@ -167,7 +163,7 @@ object DeclarationCopyBuilder { originalFirDeclaration: D, replacement: RawFirReplacement? = null, ): D { - return RawFirFragmentForLazyBodiesBuilder.buildWithReplacement( + return RawFirNonLocalDeclarationBuilder.buildWithReplacement( session = originalFirDeclaration.moduleData.session, baseScopeProvider = originalFirDeclaration.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = originalFirDeclaration.collectDesignation().path, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt index 3ec788c067d..c222916b620 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/api/LowLevelFirApiFacadeForResolveOnAir.kt @@ -8,8 +8,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.api import com.intellij.psi.util.PsiTreeUtil import com.intellij.psi.util.parentsOfType import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder -import org.jetbrains.kotlin.fir.builder.RawFirReplacement +import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder +import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirReplacement import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.resolve.* @@ -101,7 +101,7 @@ object LowLevelFirApiFacadeForResolveOnAir { FileTowerProvider(place, onAirGetTowerContextForFile(state, place)) } else { val validPlace = PsiTreeUtil.findFirstParent(place, false) { - RawFirFragmentForLazyBodiesBuilder.elementIsApplicable(it as KtElement) + RawFirNonLocalDeclarationBuilder.elementIsApplicable(it as KtElement) } as KtElement FirTowerDataContextAllElementsCollector().also { diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt index 87c5435db2f..ef8653edc32 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyBodiesCalculator.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression import org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock @@ -36,7 +35,7 @@ internal object FirLazyBodiesCalculator { fun calculateLazyBodiesForFunction(simpleFunction: FirSimpleFunction, designation: List) { if (simpleFunction.body !is FirLazyBlock) return - val newFunction = RawFirFragmentForLazyBodiesBuilder.build( + val newFunction = RawFirNonLocalDeclarationBuilder.build( session = simpleFunction.moduleData.session, baseScopeProvider = simpleFunction.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -52,7 +51,7 @@ internal object FirLazyBodiesCalculator { require(!secondaryConstructor.isPrimary) if (secondaryConstructor.body !is FirLazyBlock) return - val newFunction = RawFirFragmentForLazyBodiesBuilder.build( + val newFunction = RawFirNonLocalDeclarationBuilder.build( session = secondaryConstructor.moduleData.session, baseScopeProvider = secondaryConstructor.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, @@ -67,7 +66,7 @@ internal object FirLazyBodiesCalculator { fun calculateLazyBodyForProperty(firProperty: FirProperty, designation: List) { if (!needCalculatingLazyBodyForProperty(firProperty)) return - val newProperty = RawFirFragmentForLazyBodiesBuilder.build( + val newProperty = RawFirNonLocalDeclarationBuilder.build( session = firProperty.moduleData.session, baseScopeProvider = firProperty.moduleData.session.firIdeProvider.kotlinScopeProvider, designation = designation, diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/LazyBodyRawFirBuilder.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt similarity index 92% rename from compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/LazyBodyRawFirBuilder.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt index 39e69ba1408..c18f0f5e945 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/LazyBodyRawFirBuilder.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/RawFirNonLocalDeclarationBuilder.kt @@ -3,10 +3,12 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.fir.builder +package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve import com.intellij.psi.PsiElement import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.builder.RawFirBuilder +import org.jetbrains.kotlin.fir.builder.RawFirBuilderMode import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol @@ -14,9 +16,9 @@ import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.psi.* -data class RawFirReplacement(val from: T, val to: T) +internal data class RawFirReplacement(val from: T, val to: T) -class RawFirFragmentForLazyBodiesBuilder private constructor( +internal class RawFirNonLocalDeclarationBuilder private constructor( session: FirSession, baseScopeProvider: FirScopeProvider, private val declarationToBuild: KtDeclaration, @@ -56,7 +58,7 @@ class RawFirFragmentForLazyBodiesBuilder private constructor( } } - val builder = RawFirFragmentForLazyBodiesBuilder(session, baseScopeProvider, declarationToBuild, replacement) + val builder = RawFirNonLocalDeclarationBuilder(session, baseScopeProvider, declarationToBuild, replacement) builder.context.packageFqName = declarationToBuild.containingKtFile.packageFqName val result = builder.moveNext(designation.iterator(), containingClass = null) @@ -72,7 +74,7 @@ class RawFirFragmentForLazyBodiesBuilder private constructor( designation: List, rootNonLocalDeclaration: KtDeclaration ): FirDeclaration { - val builder = RawFirFragmentForLazyBodiesBuilder(session, baseScopeProvider, rootNonLocalDeclaration) + val builder = RawFirNonLocalDeclarationBuilder(session, baseScopeProvider, rootNonLocalDeclaration) builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName return builder.moveNext(designation.iterator(), containingClass = null) } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt index 37a7ac02249..eb147ac21c0 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/providers/FirIdeProvider.kt @@ -7,9 +7,12 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.NoMutableState +import org.jetbrains.kotlin.fir.ThreadSafeMutableState import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty +import org.jetbrains.kotlin.fir.originalForSubstitutionOverride import org.jetbrains.kotlin.fir.resolve.providers.FirProvider import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.kt new file mode 100644 index 00000000000..9e21a272489 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.kt @@ -0,0 +1,20 @@ +/* + * 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. + */ + +// FUNCTION: bar + +package test.locals + +class Owner { + fun foo(i: Int) { + var x = true + + fun bar() { + baz(i, x) + } + } + + fun baz(j: Int, y: Boolean) {} +} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.txt diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.kt similarity index 52% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.kt index c9de29c13b9..2b08c4d1e8f 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.kt @@ -1,3 +1,8 @@ +/* + * 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. + */ + // FUNCTION: foo package test.classes diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.txt diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.kt similarity index 56% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.kt index 4e304b774af..82f018abfce 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.kt @@ -1,3 +1,8 @@ +/* + * 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. + */ + // PROPERTY: foo package test.classes diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.txt diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.kt new file mode 100644 index 00000000000..9f4b9395061 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.kt @@ -0,0 +1,15 @@ +/* + * 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. + */ + +// FUNCTION: foo + +package test.classes + +class Outer { + fun foo() { + val z = object { } + } +} + diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.txt diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.kt new file mode 100644 index 00000000000..40b08c53763 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.kt @@ -0,0 +1,16 @@ +/* + * 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. + */ + +// FUNCTION: foo + +package test + +fun bar(): Int { + return -1 +} + +fun foo(): Int { + return 0 +} \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.txt diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.kt new file mode 100644 index 00000000000..24d38005dda --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.kt @@ -0,0 +1,12 @@ +/* + * 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. + */ + +// PROPERTY: foo + +package test + +val bar: Int = 10 + +val foo: Int = 0 \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.txt diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.kt new file mode 100644 index 00000000000..3d08d595614 --- /dev/null +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.kt @@ -0,0 +1,12 @@ +/* + * 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. + */ + +// PROPERTY: foo + +package test + +val bar: Int = 10 + +var foo: Int = 0 \ No newline at end of file diff --git a/compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.txt similarity index 100% rename from compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.txt rename to idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.txt diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt similarity index 63% rename from compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt index ea0bb0e4f9b..fc2fd23b38c 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractPartialRawFirBuilderTestCase.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/AbstractPartialRawFirBuilderTestCase.kt @@ -3,24 +3,36 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.fir.builder +package org.jetbrains.kotlin.idea.fir.low.level.api +import com.intellij.openapi.util.io.FileUtilRt +import com.intellij.util.PathUtil import junit.framework.TestCase -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirRenderer +import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.builder.RawFirBuilder import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.psi -import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.resolve.ScopeSession +import org.jetbrains.kotlin.fir.scopes.FirScope +import org.jetbrains.kotlin.fir.scopes.FirScopeProvider +import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid +import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder +import org.jetbrains.kotlin.parsing.KotlinParserDefinition import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase import java.io.File -abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestCase() { - override fun doRawFirTest(filePath: String) { +abstract class AbstractPartialRawFirBuilderTestCase : KtParsingTestCase( + "", + "kt", + KotlinParserDefinition() +) { + + fun doRawFirTest(filePath: String) { val fileText = File(filePath).readText() val functionName = InTextDirectivesUtils.findStringWithPrefixes(fileText, FUNCTION_DIRECTIVE) val propertyName = InTextDirectivesUtils.findStringWithPrefixes(fileText, PROPERTY_DIRECTIVE) @@ -75,6 +87,18 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC } } + private fun createKtFile(filePath: String): KtFile { + val name = PathUtil.getFileName(filePath) + val extension = FileUtilRt.getExtension(name) + val fileDirectory = PathUtil.getParentPath(filePath) + + myFileExt = extension + val fileText = loadFileDefault(fileDirectory, name) + val ktFile = createPsiFile(name, fileText) as KtFile + myFile = ktFile + return ktFile + } + private fun testPartialBuilding( filePath: String, findPsiElement: (KtFile) -> T @@ -82,17 +106,32 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC val file = createKtFile(filePath) val elementToBuild = findPsiElement(file) as KtDeclaration + val scopeProvider = object : FirScopeProvider() { + override fun getUseSiteMemberScope(klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession): FirTypeScope = + error("Should not be called") + + override fun getStaticMemberScopeForCallables( + klass: FirClass<*>, + useSiteSession: FirSession, + scopeSession: ScopeSession + ): FirScope? = + error("Should not be called") + + override fun getNestedClassifierScope(klass: FirClass<*>, useSiteSession: FirSession, scopeSession: ScopeSession): FirScope? = + error("Should not be called") + } + val session = FirSessionFactory.createEmptySession() - val firBuilder = RawFirBuilder(session, StubFirScopeProvider) + val firBuilder = RawFirBuilder(session, scopeProvider) val original = firBuilder.buildFirFile(file) val designationBuilder = DesignationBuilder(elementToBuild) original.accept(designationBuilder) TestCase.assertTrue(designationBuilder.built) - val firElement = RawFirFragmentForLazyBodiesBuilder.build( + val firElement = RawFirNonLocalDeclarationBuilder.build( session, - StubFirScopeProvider, + scopeProvider, designationBuilder.designation, elementToBuild ) diff --git a/compiler/fir/raw-fir/psi2fir/tests-gen/org/jetbrains/kotlin/fir/builder/PartialRawFirBuilderTestCaseGenerated.java b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/PartialRawFirBuilderTestCaseGenerated.java similarity index 63% rename from compiler/fir/raw-fir/psi2fir/tests-gen/org/jetbrains/kotlin/fir/builder/PartialRawFirBuilderTestCaseGenerated.java rename to idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/PartialRawFirBuilderTestCaseGenerated.java index 6fcf5f918eb..645789f7977 100644 --- a/compiler/fir/raw-fir/psi2fir/tests-gen/org/jetbrains/kotlin/fir/builder/PartialRawFirBuilderTestCaseGenerated.java +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/tests/org/jetbrains/kotlin/idea/fir/low/level/api/PartialRawFirBuilderTestCaseGenerated.java @@ -3,7 +3,7 @@ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.fir.builder; +package org.jetbrains.kotlin.idea.fir.low.level.api; import com.intellij.testFramework.TestDataPath; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; @@ -17,7 +17,7 @@ import java.util.regex.Pattern; /** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") -@TestMetadata("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder") +@TestMetadata("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) public class PartialRawFirBuilderTestCaseGenerated extends AbstractPartialRawFirBuilderTestCase { @@ -26,41 +26,41 @@ public class PartialRawFirBuilderTestCaseGenerated extends AbstractPartialRawFir } public void testAllFilesPresentInPartialRawBuilder() throws Exception { - KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder"), Pattern.compile("^(.+)\\.kt$"), null, true); + KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder"), Pattern.compile("^(.+)\\.kt$"), null, true); } @TestMetadata("localFunction.kt") public void testLocalFunction() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/localFunction.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/localFunction.kt"); } @TestMetadata("memberFunction.kt") public void testMemberFunction() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberFunction.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberFunction.kt"); } @TestMetadata("memberProperty.kt") public void testMemberProperty() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/memberProperty.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/memberProperty.kt"); } @TestMetadata("paramemtersCatching.kt") public void testParamemtersCatching() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/paramemtersCatching.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/paramemtersCatching.kt"); } @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleFunction.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleFunction.kt"); } @TestMetadata("simpleVal.kt") public void testSimpleVal() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVal.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVal.kt"); } @TestMetadata("simpleVar.kt") public void testSimpleVar() throws Exception { - runTest("compiler/fir/raw-fir/psi2fir/testData/partialRawBuilder/simpleVar.kt"); + runTest("idea/idea-frontend-fir/idea-fir-low-level-api/testdata/partialRawBuilder/simpleVar.kt"); } }