[Analysis API] tests: use tagged caret to find declaration to analyze in the air against
We cannot use a KtFile as analysis context. ^KT-55527
This commit is contained in:
committed by
Space Team
parent
66de893963
commit
ba3a3915c7
+1
-2
@@ -16,14 +16,13 @@ import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
|
|||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.TestServices
|
import org.jetbrains.kotlin.test.services.TestServices
|
||||||
import org.jetbrains.kotlin.test.services.assertions
|
import org.jetbrains.kotlin.test.services.assertions
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
|
||||||
|
|
||||||
abstract class AbstractFileImportingScopeContextTest : AbstractAnalysisApiBasedSingleModuleTest() {
|
abstract class AbstractFileImportingScopeContextTest : AbstractAnalysisApiBasedSingleModuleTest() {
|
||||||
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||||
val ktFile = ktFiles.first()
|
val ktFile = ktFiles.first()
|
||||||
val renderDefaultImportingScope = Directives.RENDER_DEFAULT_IMPORTING_SCOPE in module.directives
|
val renderDefaultImportingScope = Directives.RENDER_DEFAULT_IMPORTING_SCOPE in module.directives
|
||||||
|
|
||||||
analyseForTest(ktFile.children.firstIsInstance()) {
|
analyseForTest(ktFile) {
|
||||||
val ktScopeContext = ktFile.getImportingScopeContext()
|
val ktScopeContext = ktFile.getImportingScopeContext()
|
||||||
|
|
||||||
val scopeContextStringRepresentation = render(ktScopeContext, renderDefaultImportingScope)
|
val scopeContextStringRepresentation = render(ktScopeContext, renderDefaultImportingScope)
|
||||||
|
|||||||
+1
-1
@@ -18,7 +18,7 @@ abstract class AbstractReferenceShortenerForWholeFileTest : AbstractAnalysisApiB
|
|||||||
val file = ktFiles.first()
|
val file = ktFiles.first()
|
||||||
|
|
||||||
val shortening = executeOnPooledThreadInReadAction {
|
val shortening = executeOnPooledThreadInReadAction {
|
||||||
analyseForTest(file.declarations.first()) {
|
analyseForTest(file) {
|
||||||
collectPossibleReferenceShortenings(file)
|
collectPossibleReferenceShortenings(file)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
class A {
|
class A<caret_onAirContext> {
|
||||||
abstract class B {
|
abstract class B {
|
||||||
abstract val b: A.B
|
abstract val b: A.B
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
import c.b
|
import c.b
|
||||||
|
|
||||||
val a = 5 // some KtElement to analyze in the air against
|
val a<caret_onAirContext> = 5
|
||||||
|
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
import other.A as AAA
|
import other.A as AAA
|
||||||
|
|
||||||
val a = 5 // some KtElement to analyze in the air against
|
val a<caret_onAirContext> = 5
|
||||||
|
|
||||||
// FILE: other/other.kt
|
// FILE: other/other.kt
|
||||||
package other
|
package other
|
||||||
|
|||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
// RENDER_DEFAULT_IMPORTING_SCOPE
|
// RENDER_DEFAULT_IMPORTING_SCOPE
|
||||||
|
|
||||||
val a = 5 // some KtElement to analyze in the air against
|
val a<caret_onAirContext> = 5
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
import other.A
|
import other.A
|
||||||
|
|
||||||
val a = 5 // some KtElement to analyze in the air against
|
val a<caret_onAirContext> = 5
|
||||||
|
|
||||||
// FILE: other/other.kt
|
// FILE: other/other.kt
|
||||||
package other
|
package other
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// FILE: main.kt
|
// FILE: main.kt
|
||||||
import other.*
|
import other.*
|
||||||
|
|
||||||
val a = 5 // some KtElement to analyze in the air against
|
val a<caret_onAirContext> = 5
|
||||||
|
|
||||||
// FILE: other/other.kt
|
// FILE: other/other.kt
|
||||||
package other
|
package other
|
||||||
|
|||||||
+20
@@ -17,11 +17,13 @@ import org.jetbrains.kotlin.analysis.test.framework.TestWithDisposable
|
|||||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkerProvider
|
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkersSourceFilePreprocessor
|
import org.jetbrains.kotlin.analysis.test.framework.services.ExpressionMarkersSourceFilePreprocessor
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.services.libraries.CompilerExecutor
|
import org.jetbrains.kotlin.analysis.test.framework.services.libraries.CompilerExecutor
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.FrontendKind
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.utils.SkipTestException
|
import org.jetbrains.kotlin.analysis.test.framework.utils.SkipTestException
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.TestConfiguration
|
import org.jetbrains.kotlin.test.TestConfiguration
|
||||||
@@ -192,6 +194,20 @@ abstract class AbstractAnalysisApiBasedTest : TestWithDisposable() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoke the analysis in the context of given [file]
|
||||||
|
*
|
||||||
|
* To perform the test for in-air analysis, it will look for the declaration marked with the caret `<caret_onAirContext>`
|
||||||
|
*/
|
||||||
|
protected fun <R> analyseForTest(file: KtFile, action: KtAnalysisSession.(KtElement) -> R): R {
|
||||||
|
return if (configurator.analyseInDependentSession) {
|
||||||
|
val declaration = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtDeclaration>(file, ON_AIR_CONTEXT_CARET_TAG)
|
||||||
|
analyseForTest(declaration, action)
|
||||||
|
} else {
|
||||||
|
analyze(file, action = { action(file) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
fun initTestInfo(testInfo: TestInfo) {
|
fun initTestInfo(testInfo: TestInfo) {
|
||||||
this.testInfo = KotlinTestInfo(
|
this.testInfo = KotlinTestInfo(
|
||||||
@@ -200,4 +216,8 @@ abstract class AbstractAnalysisApiBasedTest : TestWithDisposable() {
|
|||||||
tags = testInfo.tags
|
tags = testInfo.tags
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
private const val ON_AIR_CONTEXT_CARET_TAG = "onAirContext"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user