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
|
package org.jetbrains.kotlin.visualizer.psi
|
||||||
|
|
||||||
import org.jetbrains.kotlin.checkers.KotlinMultiFileTestWithJava
|
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.compiler.visualizer.PsiRenderer
|
||||||
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
import org.jetbrains.kotlin.resolve.lazy.JvmResolveUtil
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||||
import org.jetbrains.kotlin.test.TestJdkKind
|
import org.jetbrains.kotlin.test.TestJdkKind
|
||||||
|
import org.jetbrains.kotlin.visualizer.AbstractVisualizer
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
abstract class AbstractPsiVisualizer: KotlinMultiFileTestWithJava<Void?, Void?>() {
|
abstract class AbstractPsiVisualizer : AbstractVisualizer() {
|
||||||
lateinit var replacement: Pair<String, String>
|
override fun doVisualizerTest(file: File, environment: KotlinCoreEnvironment) {
|
||||||
|
|
||||||
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)
|
|
||||||
val ktFiles = environment.getSourceFiles()
|
val ktFiles = environment.getSourceFiles()
|
||||||
val analysisResult = JvmResolveUtil.analyze(ktFiles, environment)
|
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)
|
val expectedPath = file.absolutePath.replace(replacement.first, replacement.second)
|
||||||
KotlinTestUtils.assertEqualsToFile(File(expectedPath), psiRenderResult)
|
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