[FIR IDE] Move and rename RawFirFragmentForLazyBodiesBuilder into Fir Ide module
This commit is contained in:
committed by
TeamCityServer
parent
0569f810cf
commit
c5372be267
@@ -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) {}
|
|
||||||
}
|
|
||||||
-10
@@ -1,10 +0,0 @@
|
|||||||
// FUNCTION: foo
|
|
||||||
|
|
||||||
package test.classes
|
|
||||||
|
|
||||||
class Outer<X> {
|
|
||||||
fun foo() {
|
|
||||||
val z = object { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// FUNCTION: foo
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
fun bar(): Int {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun foo(): Int {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
// PROPERTY: foo
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
val bar: Int = 10
|
|
||||||
|
|
||||||
val foo: Int = 0
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
// PROPERTY: foo
|
|
||||||
|
|
||||||
package test
|
|
||||||
|
|
||||||
val bar: Int = 10
|
|
||||||
|
|
||||||
var foo: Int = 0
|
|
||||||
-7
@@ -21,7 +21,6 @@ import org.jetbrains.kotlin.codegen.flags.AbstractWriteFlagsTest
|
|||||||
import org.jetbrains.kotlin.codegen.ir.*
|
import org.jetbrains.kotlin.codegen.ir.*
|
||||||
import org.jetbrains.kotlin.fir.AbstractFirLoadCompiledKotlin
|
import org.jetbrains.kotlin.fir.AbstractFirLoadCompiledKotlin
|
||||||
import org.jetbrains.kotlin.fir.AbstractLazyBodyIsNotTouchedTilContractsPhaseTest
|
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.AbstractRawFirBuilderLazyBodiesTestCase
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderSourceElementMappingTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderSourceElementMappingTestCase
|
||||||
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase
|
||||||
@@ -465,12 +464,6 @@ fun generateJUnit3CompilerTests(args: Array<String>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testGroup("compiler/fir/raw-fir/psi2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") {
|
|
||||||
testClass<AbstractPartialRawFirBuilderTestCase> {
|
|
||||||
model("partialRawBuilder", testMethod = "doRawFirTest")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
testGroup("compiler/fir/raw-fir/light-tree2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") {
|
testGroup("compiler/fir/raw-fir/light-tree2fir/tests-gen", "compiler/fir/raw-fir/psi2fir/testData") {
|
||||||
testClass<AbstractLightTree2FirConverterTestCase> {
|
testClass<AbstractLightTree2FirConverterTestCase> {
|
||||||
model("rawBuilder")
|
model("rawBuilder")
|
||||||
|
|||||||
@@ -1102,6 +1102,9 @@ fun main(args: Array<String>) {
|
|||||||
testClass<AbstractInnerDeclarationsResolvePhaseTest> {
|
testClass<AbstractInnerDeclarationsResolvePhaseTest> {
|
||||||
model("innerDeclarationsResolve")
|
model("innerDeclarationsResolve")
|
||||||
}
|
}
|
||||||
|
testClass<AbstractPartialRawFirBuilderTestCase> {
|
||||||
|
model("partialRawBuilder", testMethod = "doRawFirTest")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
testGroup(
|
testGroup(
|
||||||
|
|||||||
+4
-8
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.api
|
|||||||
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirReplacement
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirReplacement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.*
|
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirReturnExpression
|
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.idea.fir.low.level.api.providers.firIdeProvider
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
object DeclarationCopyBuilder {
|
internal object DeclarationCopyBuilder {
|
||||||
fun <T : KtElement> createDeclarationCopy(
|
fun <T : KtElement> createDeclarationCopy(
|
||||||
state: FirModuleResolveState,
|
state: FirModuleResolveState,
|
||||||
nonLocalDeclaration: KtDeclaration,
|
nonLocalDeclaration: KtDeclaration,
|
||||||
@@ -62,7 +62,6 @@ object DeclarationCopyBuilder {
|
|||||||
if (functionBlock == null || !PsiTreeUtil.isAncestor(functionBlock, replacement.from, true)) {
|
if (functionBlock == null || !PsiTreeUtil.isAncestor(functionBlock, replacement.from, true)) {
|
||||||
return builtFunction
|
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,
|
// 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
|
// 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)) {
|
if (classBody == null || !PsiTreeUtil.isAncestor(classBody, replacement.from, true)) {
|
||||||
return builtClass
|
return builtClass
|
||||||
}
|
}
|
||||||
//TODO Check do we really need this optimisation? Maybe it is not optimisation at all because of Kt travers?
|
|
||||||
|
|
||||||
return buildRegularClassCopy(originalFirClass) {
|
return buildRegularClassCopy(originalFirClass) {
|
||||||
declarations.clear()
|
declarations.clear()
|
||||||
@@ -124,8 +122,6 @@ object DeclarationCopyBuilder {
|
|||||||
|
|
||||||
if (!insideSetterBody) return builtProperty
|
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 originalSetter = originalProperty.setter
|
||||||
val builtSetter = builtProperty.setter
|
val builtSetter = builtProperty.setter
|
||||||
@@ -167,7 +163,7 @@ object DeclarationCopyBuilder {
|
|||||||
originalFirDeclaration: D,
|
originalFirDeclaration: D,
|
||||||
replacement: RawFirReplacement<T>? = null,
|
replacement: RawFirReplacement<T>? = null,
|
||||||
): D {
|
): D {
|
||||||
return RawFirFragmentForLazyBodiesBuilder.buildWithReplacement(
|
return RawFirNonLocalDeclarationBuilder.buildWithReplacement(
|
||||||
session = originalFirDeclaration.moduleData.session,
|
session = originalFirDeclaration.moduleData.session,
|
||||||
baseScopeProvider = originalFirDeclaration.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
baseScopeProvider = originalFirDeclaration.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
||||||
designation = originalFirDeclaration.collectDesignation().path,
|
designation = originalFirDeclaration.collectDesignation().path,
|
||||||
|
|||||||
+3
-3
@@ -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.PsiTreeUtil
|
||||||
import com.intellij.psi.util.parentsOfType
|
import com.intellij.psi.util.parentsOfType
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirNonLocalDeclarationBuilder
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirReplacement
|
import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.RawFirReplacement
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.realPsi
|
import org.jetbrains.kotlin.fir.realPsi
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
@@ -101,7 +101,7 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
|||||||
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
FileTowerProvider(place, onAirGetTowerContextForFile(state, place))
|
||||||
} else {
|
} else {
|
||||||
val validPlace = PsiTreeUtil.findFirstParent(place, false) {
|
val validPlace = PsiTreeUtil.findFirstParent(place, false) {
|
||||||
RawFirFragmentForLazyBodiesBuilder.elementIsApplicable(it as KtElement)
|
RawFirNonLocalDeclarationBuilder.elementIsApplicable(it as KtElement)
|
||||||
} as KtElement
|
} as KtElement
|
||||||
|
|
||||||
FirTowerDataContextAllElementsCollector().also {
|
FirTowerDataContextAllElementsCollector().also {
|
||||||
|
|||||||
+3
-4
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
|
package org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.builder.RawFirFragmentForLazyBodiesBuilder
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
|
import org.jetbrains.kotlin.fir.expressions.FirWrappedDelegateExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock
|
import org.jetbrains.kotlin.fir.expressions.impl.FirLazyBlock
|
||||||
@@ -36,7 +35,7 @@ internal object FirLazyBodiesCalculator {
|
|||||||
|
|
||||||
fun calculateLazyBodiesForFunction(simpleFunction: FirSimpleFunction, designation: List<FirDeclaration>) {
|
fun calculateLazyBodiesForFunction(simpleFunction: FirSimpleFunction, designation: List<FirDeclaration>) {
|
||||||
if (simpleFunction.body !is FirLazyBlock) return
|
if (simpleFunction.body !is FirLazyBlock) return
|
||||||
val newFunction = RawFirFragmentForLazyBodiesBuilder.build(
|
val newFunction = RawFirNonLocalDeclarationBuilder.build(
|
||||||
session = simpleFunction.moduleData.session,
|
session = simpleFunction.moduleData.session,
|
||||||
baseScopeProvider = simpleFunction.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
baseScopeProvider = simpleFunction.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
||||||
designation = designation,
|
designation = designation,
|
||||||
@@ -52,7 +51,7 @@ internal object FirLazyBodiesCalculator {
|
|||||||
require(!secondaryConstructor.isPrimary)
|
require(!secondaryConstructor.isPrimary)
|
||||||
if (secondaryConstructor.body !is FirLazyBlock) return
|
if (secondaryConstructor.body !is FirLazyBlock) return
|
||||||
|
|
||||||
val newFunction = RawFirFragmentForLazyBodiesBuilder.build(
|
val newFunction = RawFirNonLocalDeclarationBuilder.build(
|
||||||
session = secondaryConstructor.moduleData.session,
|
session = secondaryConstructor.moduleData.session,
|
||||||
baseScopeProvider = secondaryConstructor.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
baseScopeProvider = secondaryConstructor.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
||||||
designation = designation,
|
designation = designation,
|
||||||
@@ -67,7 +66,7 @@ internal object FirLazyBodiesCalculator {
|
|||||||
fun calculateLazyBodyForProperty(firProperty: FirProperty, designation: List<FirDeclaration>) {
|
fun calculateLazyBodyForProperty(firProperty: FirProperty, designation: List<FirDeclaration>) {
|
||||||
if (!needCalculatingLazyBodyForProperty(firProperty)) return
|
if (!needCalculatingLazyBodyForProperty(firProperty)) return
|
||||||
|
|
||||||
val newProperty = RawFirFragmentForLazyBodiesBuilder.build(
|
val newProperty = RawFirNonLocalDeclarationBuilder.build(
|
||||||
session = firProperty.moduleData.session,
|
session = firProperty.moduleData.session,
|
||||||
baseScopeProvider = firProperty.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
baseScopeProvider = firProperty.moduleData.session.firIdeProvider.kotlinScopeProvider,
|
||||||
designation = designation,
|
designation = designation,
|
||||||
|
|||||||
+7
-5
@@ -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.
|
* 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 com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
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.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
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.fir.types.FirTypeRef
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
|
||||||
data class RawFirReplacement<T : KtElement>(val from: T, val to: T)
|
internal data class RawFirReplacement<T : KtElement>(val from: T, val to: T)
|
||||||
|
|
||||||
class RawFirFragmentForLazyBodiesBuilder<T : KtElement> private constructor(
|
internal class RawFirNonLocalDeclarationBuilder<T : KtElement> private constructor(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
baseScopeProvider: FirScopeProvider,
|
baseScopeProvider: FirScopeProvider,
|
||||||
private val declarationToBuild: KtDeclaration,
|
private val declarationToBuild: KtDeclaration,
|
||||||
@@ -56,7 +58,7 @@ class RawFirFragmentForLazyBodiesBuilder<T : KtElement> private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val builder = RawFirFragmentForLazyBodiesBuilder(session, baseScopeProvider, declarationToBuild, replacement)
|
val builder = RawFirNonLocalDeclarationBuilder(session, baseScopeProvider, declarationToBuild, replacement)
|
||||||
builder.context.packageFqName = declarationToBuild.containingKtFile.packageFqName
|
builder.context.packageFqName = declarationToBuild.containingKtFile.packageFqName
|
||||||
|
|
||||||
val result = builder.moveNext(designation.iterator(), containingClass = null)
|
val result = builder.moveNext(designation.iterator(), containingClass = null)
|
||||||
@@ -72,7 +74,7 @@ class RawFirFragmentForLazyBodiesBuilder<T : KtElement> private constructor(
|
|||||||
designation: List<FirDeclaration>,
|
designation: List<FirDeclaration>,
|
||||||
rootNonLocalDeclaration: KtDeclaration
|
rootNonLocalDeclaration: KtDeclaration
|
||||||
): FirDeclaration {
|
): FirDeclaration {
|
||||||
val builder = RawFirFragmentForLazyBodiesBuilder<KtElement>(session, baseScopeProvider, rootNonLocalDeclaration)
|
val builder = RawFirNonLocalDeclarationBuilder<KtElement>(session, baseScopeProvider, rootNonLocalDeclaration)
|
||||||
builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName
|
builder.context.packageFqName = rootNonLocalDeclaration.containingKtFile.packageFqName
|
||||||
return builder.moveNext(designation.iterator(), containingClass = null)
|
return builder.moveNext(designation.iterator(), containingClass = null)
|
||||||
}
|
}
|
||||||
+4
-1
@@ -7,9 +7,12 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.providers
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
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.FirProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals
|
import org.jetbrains.kotlin.fir.resolve.providers.FirProviderInternals
|
||||||
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.providers.FirSymbolProvider
|
||||||
|
|||||||
+20
@@ -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) {}
|
||||||
|
}
|
||||||
+5
@@ -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
|
// FUNCTION: foo
|
||||||
|
|
||||||
package test.classes
|
package test.classes
|
||||||
+5
@@ -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
|
// PROPERTY: foo
|
||||||
|
|
||||||
package test.classes
|
package test.classes
|
||||||
Vendored
+15
@@ -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<X> {
|
||||||
|
fun foo() {
|
||||||
|
val z = object { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+16
@@ -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
|
||||||
|
}
|
||||||
+12
@@ -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
|
||||||
+12
@@ -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
|
||||||
+49
-10
@@ -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.
|
* 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 junit.framework.TestCase
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.FirRenderer
|
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
import org.jetbrains.kotlin.fir.psi
|
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||||
import org.jetbrains.kotlin.fir.render
|
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.session.FirSessionFactory
|
||||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
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.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
import org.jetbrains.kotlin.psi.psiUtil.findDescendantOfType
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
|
import org.jetbrains.kotlin.test.testFramework.KtParsingTestCase
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestCase() {
|
abstract class AbstractPartialRawFirBuilderTestCase : KtParsingTestCase(
|
||||||
override fun doRawFirTest(filePath: String) {
|
"",
|
||||||
|
"kt",
|
||||||
|
KotlinParserDefinition()
|
||||||
|
) {
|
||||||
|
|
||||||
|
fun doRawFirTest(filePath: String) {
|
||||||
val fileText = File(filePath).readText()
|
val fileText = File(filePath).readText()
|
||||||
val functionName = InTextDirectivesUtils.findStringWithPrefixes(fileText, FUNCTION_DIRECTIVE)
|
val functionName = InTextDirectivesUtils.findStringWithPrefixes(fileText, FUNCTION_DIRECTIVE)
|
||||||
val propertyName = InTextDirectivesUtils.findStringWithPrefixes(fileText, PROPERTY_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 <T : KtElement> testPartialBuilding(
|
private fun <T : KtElement> testPartialBuilding(
|
||||||
filePath: String,
|
filePath: String,
|
||||||
findPsiElement: (KtFile) -> T
|
findPsiElement: (KtFile) -> T
|
||||||
@@ -82,17 +106,32 @@ abstract class AbstractPartialRawFirBuilderTestCase : AbstractRawFirBuilderTestC
|
|||||||
val file = createKtFile(filePath)
|
val file = createKtFile(filePath)
|
||||||
val elementToBuild = findPsiElement(file) as KtDeclaration
|
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 session = FirSessionFactory.createEmptySession()
|
||||||
val firBuilder = RawFirBuilder(session, StubFirScopeProvider)
|
val firBuilder = RawFirBuilder(session, scopeProvider)
|
||||||
val original = firBuilder.buildFirFile(file)
|
val original = firBuilder.buildFirFile(file)
|
||||||
|
|
||||||
val designationBuilder = DesignationBuilder(elementToBuild)
|
val designationBuilder = DesignationBuilder(elementToBuild)
|
||||||
original.accept(designationBuilder)
|
original.accept(designationBuilder)
|
||||||
TestCase.assertTrue(designationBuilder.built)
|
TestCase.assertTrue(designationBuilder.built)
|
||||||
|
|
||||||
val firElement = RawFirFragmentForLazyBodiesBuilder.build(
|
val firElement = RawFirNonLocalDeclarationBuilder.build(
|
||||||
session,
|
session,
|
||||||
StubFirScopeProvider,
|
scopeProvider,
|
||||||
designationBuilder.designation,
|
designationBuilder.designation,
|
||||||
elementToBuild
|
elementToBuild
|
||||||
)
|
)
|
||||||
+10
-10
@@ -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.
|
* 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 com.intellij.testFramework.TestDataPath;
|
||||||
import org.jetbrains.kotlin.test.JUnit3RunnerWithInners;
|
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 */
|
/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */
|
||||||
@SuppressWarnings("all")
|
@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")
|
@TestDataPath("$PROJECT_ROOT")
|
||||||
@RunWith(JUnit3RunnerWithInners.class)
|
@RunWith(JUnit3RunnerWithInners.class)
|
||||||
public class PartialRawFirBuilderTestCaseGenerated extends AbstractPartialRawFirBuilderTestCase {
|
public class PartialRawFirBuilderTestCaseGenerated extends AbstractPartialRawFirBuilderTestCase {
|
||||||
@@ -26,41 +26,41 @@ public class PartialRawFirBuilderTestCaseGenerated extends AbstractPartialRawFir
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testAllFilesPresentInPartialRawBuilder() throws Exception {
|
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")
|
@TestMetadata("localFunction.kt")
|
||||||
public void testLocalFunction() throws Exception {
|
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")
|
@TestMetadata("memberFunction.kt")
|
||||||
public void testMemberFunction() throws Exception {
|
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")
|
@TestMetadata("memberProperty.kt")
|
||||||
public void testMemberProperty() throws Exception {
|
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")
|
@TestMetadata("paramemtersCatching.kt")
|
||||||
public void testParamemtersCatching() throws Exception {
|
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")
|
@TestMetadata("simpleFunction.kt")
|
||||||
public void testSimpleFunction() throws Exception {
|
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")
|
@TestMetadata("simpleVal.kt")
|
||||||
public void testSimpleVal() throws Exception {
|
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")
|
@TestMetadata("simpleVar.kt")
|
||||||
public void testSimpleVar() throws Exception {
|
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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user