[analysis api, tests] simplify tests
This commit is contained in:
+1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.api.calls.KtCallInfo
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest
|
||||||
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.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
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
|
||||||
|
|||||||
+1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.compare
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
import org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.stringRepresentation
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest
|
||||||
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.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
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
|
||||||
|
|||||||
+1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.compil
|
|||||||
import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode
|
import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
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.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtValueArgument
|
import org.jetbrains.kotlin.psi.KtValueArgument
|
||||||
|
|||||||
+1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.expres
|
|||||||
|
|
||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtWhenExpression
|
import org.jetbrains.kotlin.psi.KtWhenExpression
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.expres
|
|||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.expres
|
|||||||
import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions
|
import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions
|
||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.psi.KtValueArgument
|
import org.jetbrains.kotlin.psi.KtValueArgument
|
||||||
|
|||||||
+1
@@ -12,6 +12,7 @@ import com.intellij.psi.PsiElementVisitor
|
|||||||
import org.jetbrains.kotlin.analysis.api.analyse
|
import org.jetbrains.kotlin.analysis.api.analyse
|
||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
|
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
import org.jetbrains.kotlin.asJava.elements.KtLightElement
|
||||||
|
|||||||
+1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.smartC
|
|||||||
|
|
||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.symbol
|
|||||||
|
|
||||||
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.base.AbstractAnalysisApiBasedSingleModuleTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBasedSingleModuleTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiBase
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSyntheticJavaPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSyntheticJavaPropertySymbol
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
|||||||
import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions
|
import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
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
|
||||||
|
|||||||
+1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.components.typeIn
|
|||||||
|
|
||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtExpression
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
|
|||||||
+1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.analysis.api.components.KtTypeRendererOptions
|
|||||||
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.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
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
|
||||||
|
|||||||
+1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test.cases.scopes
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
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
|
||||||
|
|||||||
+27
-23
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtDeclarationSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
|
import org.jetbrains.kotlin.analysis.test.framework.utils.executeOnPooledThreadInReadAction
|
||||||
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
@@ -44,32 +45,35 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiSingleFileTest() {
|
|||||||
PrettyRenderingMode.RENDER_SYMBOLS_NESTED -> renderingOptions.copy(renderClassMembers = true)
|
PrettyRenderingMode.RENDER_SYMBOLS_NESTED -> renderingOptions.copy(renderClassMembers = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
val pointersWithRendered = analyseOnPooledThreadInReadAction(ktFile) {
|
val pointersWithRendered = executeOnPooledThreadInReadAction {
|
||||||
val (symbols, symbolForPrettyRendering) = collectSymbols(ktFile, testServices)
|
analyseForTest(ktFile) {
|
||||||
|
val (symbols, symbolForPrettyRendering) = collectSymbols(ktFile, testServices)
|
||||||
|
|
||||||
val pointerWithRenderedSymbol = symbols.map { symbol ->
|
val pointerWithRenderedSymbol = symbols.map { symbol ->
|
||||||
PointerWithRenderedSymbol(
|
PointerWithRenderedSymbol(
|
||||||
if (createPointers) symbol.createPointer() else null,
|
if (createPointers) symbol.createPointer() else null,
|
||||||
renderSymbolForComparison(symbol),
|
renderSymbolForComparison(symbol),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
val pointerWithPrettyRenderedSymbol = symbolForPrettyRendering.map { symbol ->
|
val pointerWithPrettyRenderedSymbol = symbolForPrettyRendering.map { symbol ->
|
||||||
PointerWithRenderedSymbol(
|
PointerWithRenderedSymbol(
|
||||||
if (createPointers) symbol.createPointer() else null,
|
if (createPointers) symbol.createPointer() else null,
|
||||||
when (symbol) {
|
when (symbol) {
|
||||||
is KtDeclarationSymbol -> symbol.render(prettyRenderOptions)
|
is KtDeclarationSymbol -> symbol.render(prettyRenderOptions)
|
||||||
is KtFileSymbol -> prettyPrint {
|
is KtFileSymbol -> prettyPrint {
|
||||||
printCollection(symbol.getFileScope().getAllSymbols().asIterable(), separator = "\n\n") {
|
printCollection(symbol.getFileScope().getAllSymbols().asIterable(), separator = "\n\n") {
|
||||||
append((it as KtDeclarationSymbol).render(prettyRenderOptions))
|
append((it as KtDeclarationSymbol).render(prettyRenderOptions))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else -> error(symbol::class.toString())
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
SymbolPointersData(pointerWithRenderedSymbol, pointerWithPrettyRenderedSymbol)
|
else -> error(symbol::class.toString())
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
SymbolPointersData(pointerWithRenderedSymbol, pointerWithPrettyRenderedSymbol)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
compareResults(pointersWithRendered, testServices)
|
compareResults(pointersWithRendered, testServices)
|
||||||
@@ -97,7 +101,7 @@ abstract class AbstractSymbolTest : AbstractAnalysisApiSingleFileTest() {
|
|||||||
pointersWithRendered: List<PointerWithRenderedSymbol>,
|
pointersWithRendered: List<PointerWithRenderedSymbol>,
|
||||||
testServices: TestServices,
|
testServices: TestServices,
|
||||||
) {
|
) {
|
||||||
val restored = analyseOnPooledThreadInReadAction(ktFile) {
|
val restored = analyseForTest(ktFile) {
|
||||||
pointersWithRendered.map { (pointer, expectedRender) ->
|
pointersWithRendered.map { (pointer, expectedRender) ->
|
||||||
val restored = pointer!!.restoreSymbol()
|
val restored = pointer!!.restoreSymbol()
|
||||||
?: error("Symbol $expectedRender was not restored")
|
?: error("Symbol $expectedRender was not restored")
|
||||||
|
|||||||
-12
@@ -23,16 +23,4 @@ abstract class AbstractAnalysisApiBasedSingleModuleTest : AbstractAnalysisApiBas
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected abstract fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices)
|
protected abstract fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices)
|
||||||
|
|
||||||
protected inline fun <R> analyseOnPooledThreadInReadAction(context: KtElement, crossinline action: KtAnalysisSession.() -> R): R =
|
|
||||||
executeOnPooledThreadInReadAction {
|
|
||||||
analyseForTest(context) { action() }
|
|
||||||
}
|
|
||||||
|
|
||||||
protected inline fun <T> runReadAction(crossinline runnable: () -> T): T {
|
|
||||||
return ApplicationManager.getApplication().runReadAction(Computable { runnable() })
|
|
||||||
}
|
|
||||||
|
|
||||||
protected inline fun <R> executeOnPooledThreadInReadAction(crossinline action: () -> R): R =
|
|
||||||
ApplicationManager.getApplication().executeOnPooledThread<R> { runReadAction(action) }.get()
|
|
||||||
}
|
}
|
||||||
+39
-32
@@ -5,25 +5,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.test.framework.base
|
package org.jetbrains.kotlin.analysis.test.framework.base
|
||||||
|
|
||||||
|
import com.intellij.mock.MockProject
|
||||||
import com.intellij.openapi.util.Disposer
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import com.intellij.testFramework.TestDataFile
|
import com.intellij.testFramework.TestDataFile
|
||||||
import junit.framework.ComparisonFailure
|
import junit.framework.ComparisonFailure
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.*
|
||||||
import org.jetbrains.kotlin.analysis.api.analyse
|
|
||||||
import org.jetbrains.kotlin.analysis.api.analyseInDependedAnalysisSession
|
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
import org.jetbrains.kotlin.analysis.test.framework.AnalysisApiTestDirectives
|
||||||
import org.jetbrains.kotlin.analysis.test.framework.TestWithDisposable
|
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.libraries.LibraryWasNotCompiledDueToExpectedCompilationError
|
|
||||||
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.utils.SkipTestException
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
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.ExecutionListenerBasedDisposableProvider
|
import org.jetbrains.kotlin.test.ExecutionListenerBasedDisposableProvider
|
||||||
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
import org.jetbrains.kotlin.test.InTextDirectivesUtils
|
||||||
|
import org.jetbrains.kotlin.test.TestConfiguration
|
||||||
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||||
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
|
||||||
import org.jetbrains.kotlin.test.builders.testConfiguration
|
import org.jetbrains.kotlin.test.builders.testConfiguration
|
||||||
@@ -51,7 +51,7 @@ abstract class AbstractAnalysisApiBasedTest : TestWithDisposable() {
|
|||||||
protected lateinit var testDataPath: Path
|
protected lateinit var testDataPath: Path
|
||||||
private set
|
private set
|
||||||
|
|
||||||
private lateinit var moduleStructure: TestModuleStructure
|
private lateinit var testServices: TestServices
|
||||||
|
|
||||||
protected open fun configureTest(builder: TestConfigurationBuilder) {
|
protected open fun configureTest(builder: TestConfigurationBuilder) {
|
||||||
configurator.configureTest(builder, disposable)
|
configurator.configureTest(builder, disposable)
|
||||||
@@ -126,47 +126,54 @@ abstract class AbstractAnalysisApiBasedTest : TestWithDisposable() {
|
|||||||
this.testInfo = this@AbstractAnalysisApiBasedTest.testInfo
|
this.testInfo = this@AbstractAnalysisApiBasedTest.testInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
protected open fun handleInitializationError(exception: Throwable, moduleStructure: TestModuleStructure): InitializationErrorAction =
|
@OptIn(InvalidWayOfUsingAnalysisSession::class)
|
||||||
InitializationErrorAction.THROW
|
|
||||||
|
|
||||||
enum class InitializationErrorAction {
|
|
||||||
IGNORE, THROW
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun runTest(@TestDataFile path: String) {
|
protected fun runTest(@TestDataFile path: String) {
|
||||||
testDataPath = configurator.preprocessTestDataPath(Paths.get(path))
|
testDataPath = configurator.preprocessTestDataPath(Paths.get(path))
|
||||||
val testConfiguration = testConfiguration(path, configure)
|
val testConfiguration = createTestConfiguration()
|
||||||
Disposer.register(disposable, testConfiguration.rootDisposable)
|
testServices = testConfiguration.testServices
|
||||||
val testServices = testConfiguration.testServices
|
val moduleStructure = createModuleStructure(testConfiguration)
|
||||||
val moduleStructure =
|
|
||||||
testConfiguration.moduleStructureExtractor.splitTestDataByModules(path, testConfiguration.directives)
|
|
||||||
testServices.register(TestModuleStructure::class, moduleStructure)
|
|
||||||
this.moduleStructure = moduleStructure
|
|
||||||
testConfiguration.testServices.register(TestModuleStructure::class, moduleStructure)
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
testConfiguration.preAnalysisHandlers.forEach { preprocessor -> preprocessor.preprocessModuleStructure(moduleStructure) }
|
prepareToTheAnalysis(testConfiguration)
|
||||||
} catch(ignored: LibraryWasNotCompiledDueToExpectedCompilationError) {
|
} catch (ignored: SkipTestException) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
testConfiguration.preAnalysisHandlers.forEach { preprocessor ->
|
if (configurator.analyseInDependentSession && isDependentModeDisabledForTheTest()) {
|
||||||
preprocessor.prepareSealedClassInheritors(moduleStructure)
|
return
|
||||||
}
|
|
||||||
|
|
||||||
moduleStructure.modules.forEach { module ->
|
|
||||||
val files = testServices.ktModuleProvider.getModuleFiles(module)
|
|
||||||
configurator.prepareFilesInModule(files, module, testServices)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
doTestByFileStructure(moduleStructure, testServices)
|
doTestByFileStructure(moduleStructure, testServices)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun createTestConfiguration(): TestConfiguration {
|
||||||
|
val testConfiguration = testConfiguration(testDataPath.toString(), configure)
|
||||||
|
Disposer.register(disposable, testConfiguration.rootDisposable)
|
||||||
|
return testConfiguration
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun createModuleStructure(testConfiguration: TestConfiguration): TestModuleStructure {
|
||||||
|
val moduleStructure = testConfiguration.moduleStructureExtractor.splitTestDataByModules(testDataPath.toString(), testConfiguration.directives)
|
||||||
|
testServices.register(TestModuleStructure::class, moduleStructure)
|
||||||
|
return moduleStructure
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun prepareToTheAnalysis(testConfiguration: TestConfiguration) {
|
||||||
|
val moduleStructure = testServices.moduleStructure
|
||||||
|
testConfiguration.preAnalysisHandlers.forEach { preprocessor -> preprocessor.preprocessModuleStructure(moduleStructure) }
|
||||||
|
testConfiguration.preAnalysisHandlers.forEach { preprocessor -> preprocessor.prepareSealedClassInheritors(moduleStructure) }
|
||||||
|
|
||||||
|
moduleStructure.modules.forEach { module ->
|
||||||
|
val files = testServices.ktModuleProvider.getModuleFiles(module)
|
||||||
|
configurator.prepareFilesInModule(files, module, testServices)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun isDependentModeDisabledForTheTest(): Boolean =
|
||||||
|
AnalysisApiTestDirectives.DISABLE_DEPENDED_MODE in testServices.moduleStructure.allDirectives
|
||||||
|
|
||||||
protected fun <R> analyseForTest(contextElement: KtElement, action: KtAnalysisSession.() -> R): R {
|
protected fun <R> analyseForTest(contextElement: KtElement, action: KtAnalysisSession.() -> R): R {
|
||||||
return if (configurator.analyseInDependentSession
|
return if (configurator.analyseInDependentSession) {
|
||||||
&& AnalysisApiTestDirectives.DISABLE_DEPENDED_MODE !in this.moduleStructure.allDirectives
|
|
||||||
) {
|
|
||||||
val originalContainingFile = contextElement.containingKtFile
|
val originalContainingFile = contextElement.containingKtFile
|
||||||
val fileCopy = originalContainingFile.copy() as KtFile
|
val fileCopy = originalContainingFile.copy() as KtFile
|
||||||
analyseInDependedAnalysisSession(originalContainingFile, PsiTreeUtil.findSameElementInCopy(contextElement, fileCopy), action)
|
analyseInDependedAnalysisSession(originalContainingFile, PsiTreeUtil.findSameElementInCopy(contextElement, fileCopy), action)
|
||||||
|
|||||||
-5
@@ -24,11 +24,6 @@ inline fun <T> runReadAction(crossinline runnable: () -> T): T {
|
|||||||
fun <R> executeOnPooledThreadInReadAction(action: () -> R): R =
|
fun <R> executeOnPooledThreadInReadAction(action: () -> R): R =
|
||||||
ApplicationManager.getApplication().executeOnPooledThread<R> { runReadAction(action) }.get()
|
ApplicationManager.getApplication().executeOnPooledThread<R> { runReadAction(action) }.get()
|
||||||
|
|
||||||
inline fun <R> analyseOnPooledThreadInReadAction(context: KtElement, crossinline action: KtAnalysisSession.() -> R): R =
|
|
||||||
executeOnPooledThreadInReadAction {
|
|
||||||
analyse(context) { action() }
|
|
||||||
}
|
|
||||||
|
|
||||||
fun PsiElement?.position(): String {
|
fun PsiElement?.position(): String {
|
||||||
if (this == null) return "(unknown)"
|
if (this == null) return "(unknown)"
|
||||||
return offsetToLineAndColumn(containingFile.viewProvider.document, textRange.startOffset).toString()
|
return offsetToLineAndColumn(containingFile.viewProvider.document, textRange.startOffset).toString()
|
||||||
|
|||||||
-5
@@ -45,11 +45,6 @@ abstract class AbstractSymbolLightClassesTestBase(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleInitializationError(exception: Throwable, moduleStructure: TestModuleStructure): InitializationErrorAction {
|
|
||||||
return if (Directives.IGNORE_FIR in moduleStructure.allDirectives) InitializationErrorAction.IGNORE
|
|
||||||
else InitializationErrorAction.THROW
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||||
if (stopIfCompilationErrorDirectivePresent && CompilerExecutor.Directives.COMPILATION_ERRORS in module.directives) {
|
if (stopIfCompilationErrorDirectivePresent && CompilerExecutor.Directives.COMPILATION_ERRORS in module.directives) {
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user