Create fir visualizer abstract test class and extract common code with psi tests
This commit is contained in:
committed by
Mikhail Glukhikh
parent
fe328f8c7a
commit
2179f97006
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.visualizer
|
||||
|
||||
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractVisualizer : KotlinMultiFileTestWithJava<Void?, Void?>() {
|
||||
lateinit var replacement: Pair<String, String>
|
||||
|
||||
override fun createTestModule(name: String): Void? = null
|
||||
|
||||
override fun createTestFile(module: Void?, fileName: String?, text: String?, directives: MutableMap<String, String>?): Void? = null
|
||||
|
||||
override fun doMultiFileTest(file: File, modules: MutableMap<String, ModuleAndDependencies>?, files: MutableList<Void?>) {
|
||||
val environment = createEnvironment(file)
|
||||
doVisualizerTest(file, environment)
|
||||
}
|
||||
|
||||
abstract fun doVisualizerTest(file: File, environment: KotlinCoreEnvironment)
|
||||
|
||||
override fun isKotlinSourceRootNeeded(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getTestJdkKind(file: File): TestJdkKind {
|
||||
return TestJdkKind.FULL_JDK
|
||||
}
|
||||
|
||||
override fun getConfigurationKind(): ConfigurationKind {
|
||||
return ConfigurationKind.ALL
|
||||
}
|
||||
|
||||
fun doFirBuilderDataTest(filePath: String) {
|
||||
replacement = "fir\\psi2fir" to "visualizer"
|
||||
doTest(filePath)
|
||||
}
|
||||
|
||||
fun doUncommonCasesTest(filePath: String) {
|
||||
replacement = "testFiles" to "resultFiles"
|
||||
doTest(filePath)
|
||||
}
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
/*
|
||||
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.visualizer.fir
|
||||
|
||||
import com.intellij.openapi.extensions.Extensions
|
||||
import com.intellij.psi.PsiElementFinder
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM
|
||||
import org.jetbrains.kotlin.compiler.visualizer.FirVisualizer
|
||||
import org.jetbrains.kotlin.fir.builder.RawFirBuilder
|
||||
import org.jetbrains.kotlin.fir.createSession
|
||||
import org.jetbrains.kotlin.fir.render
|
||||
import org.jetbrains.kotlin.fir.resolve.FirProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.impl.FirProviderImpl
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirTotalResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.service
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.visualizer.AbstractVisualizer
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractFirVisualizer : AbstractVisualizer() {
|
||||
override fun doVisualizerTest(file: File, environment: KotlinCoreEnvironment) {
|
||||
Extensions.getArea(environment.project)
|
||||
.getExtensionPoint(PsiElementFinder.EP_NAME)
|
||||
.unregisterExtension(JavaElementFinder::class.java)
|
||||
|
||||
val ktFiles = environment.getSourceFiles()
|
||||
val scope = GlobalSearchScope.filesScope(environment.project, ktFiles.mapNotNull { it.virtualFile })
|
||||
.uniteWith(TopDownAnalyzerFacadeForJVM.AllJavaSourcesInProjectScope(environment.project))
|
||||
val session = createSession(environment, scope)
|
||||
|
||||
val builder = RawFirBuilder(session, stubMode = false)
|
||||
|
||||
val transformer = FirTotalResolveTransformer()
|
||||
val firFiles = ktFiles.map {
|
||||
val firFile = builder.buildFirFile(it)
|
||||
(session.service<FirProvider>() as FirProviderImpl).recordFile(firFile)
|
||||
firFile
|
||||
}.also {
|
||||
try {
|
||||
transformer.processFiles(it)
|
||||
} catch (e: Exception) {
|
||||
it.forEach { println(it.render()) }
|
||||
throw e
|
||||
}
|
||||
}
|
||||
|
||||
//compare
|
||||
val renderer = FirVisualizer(firFiles.first())
|
||||
val psiRenderResult = renderer.render()
|
||||
|
||||
val expectedPath = file.absolutePath.replace(replacement.first, replacement.second)
|
||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), psiRenderResult)
|
||||
}
|
||||
}
|
||||
+4
-31
@@ -6,22 +6,17 @@
|
||||
package org.jetbrains.kotlin.visualizer.psi
|
||||
|
||||
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.compiler.visualizer.PsiRenderer
|
||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import org.jetbrains.kotlin.visualizer.AbstractVisualizer
|
||||
import java.io.File
|
||||
|
||||
abstract class AbstractPsiVisualizer: KotlinMultiFileTestWithJava<Void?, Void?>() {
|
||||
lateinit var replacement: Pair<String, String>
|
||||
|
||||
override fun createTestModule(name: String): Void? = null
|
||||
|
||||
override fun createTestFile(module: Void?, fileName: String?, text: String?, directives: MutableMap<String, String>?): Void? = null
|
||||
|
||||
override fun doMultiFileTest(file: File, modules: MutableMap<String, ModuleAndDependencies>?, files: MutableList<Void?>) {
|
||||
val environment = createEnvironment(file)
|
||||
abstract class AbstractPsiVisualizer : AbstractVisualizer() {
|
||||
override fun doVisualizerTest(file: File, environment: KotlinCoreEnvironment) {
|
||||
val ktFiles = environment.getSourceFiles()
|
||||
val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
|
||||
|
||||
@@ -31,26 +26,4 @@ abstract class AbstractPsiVisualizer: KotlinMultiFileTestWithJava<Void?, Void?>(
|
||||
val expectedPath = file.absolutePath.replace(replacement.first, replacement.second)
|
||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), psiRenderResult)
|
||||
}
|
||||
|
||||
override fun isKotlinSourceRootNeeded(): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
override fun getTestJdkKind(file: File): TestJdkKind {
|
||||
return TestJdkKind.FULL_JDK
|
||||
}
|
||||
|
||||
override fun getConfigurationKind(): ConfigurationKind {
|
||||
return ConfigurationKind.ALL
|
||||
}
|
||||
|
||||
fun doFirBuilderDataTest(filePath: String) {
|
||||
replacement = "fir\\psi2fir" to "visualizer"
|
||||
doTest(filePath)
|
||||
}
|
||||
|
||||
fun doUncommonCasesTest(filePath: String) {
|
||||
replacement = "testFiles" to "resultFiles"
|
||||
doTest(filePath)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user