Correctly dispose KotlinCoreEnvironment after use
This commit is contained in:
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.js.test
|
|||||||
|
|
||||||
import com.intellij.mock.MockVirtualFileSystem
|
import com.intellij.mock.MockVirtualFileSystem
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
@@ -183,27 +184,38 @@ class EncodeSignatureTest {
|
|||||||
""")
|
""")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("ObjectLiteralToLambda")
|
||||||
private fun assertSignature(expectedEncoding: String, codeSnippet: String, name: String = "test") {
|
private fun assertSignature(expectedEncoding: String, codeSnippet: String, name: String = "test") {
|
||||||
val environment = createEnvironment()
|
val disposable = object : Disposable {
|
||||||
val project = environment.project
|
override fun dispose() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val fs = MockVirtualFileSystem()
|
val environment = createEnvironment(disposable)
|
||||||
val file = fs.file("sample.kt", codeSnippet).findFileByPath("/sample.kt")
|
try {
|
||||||
val psiManager = PsiManager.getInstance(project)
|
val project = environment.project
|
||||||
val psiFile = psiManager.findFile(file) as KtFile
|
|
||||||
|
|
||||||
val configuration = environment.configuration.copy()
|
val fs = MockVirtualFileSystem()
|
||||||
configuration.put(JSConfigurationKeys.LIBRARY_FILES, LibrarySourcesConfig.JS_STDLIB)
|
val file = fs.file("sample.kt", codeSnippet).findFileByPath("/sample.kt")
|
||||||
configuration.put(CommonConfigurationKeys.MODULE_NAME, "sample")
|
val psiManager = PsiManager.getInstance(project)
|
||||||
|
val psiFile = psiManager.findFile(file) as KtFile
|
||||||
|
|
||||||
val analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(listOf(psiFile), LibrarySourcesConfig(project, configuration))
|
val configuration = environment.configuration.copy()
|
||||||
val module = analysisResult.moduleDescriptor
|
configuration.put(JSConfigurationKeys.LIBRARY_FILES, LibrarySourcesConfig.JS_STDLIB)
|
||||||
val rootPackage = module.getPackage(FqName.ROOT)
|
configuration.put(CommonConfigurationKeys.MODULE_NAME, "sample")
|
||||||
|
|
||||||
val testDescriptor = findTestCallable(rootPackage, name) ?:
|
val analysisResult = TopDownAnalyzerFacadeForJS.analyzeFiles(listOf(psiFile), LibrarySourcesConfig(project, configuration))
|
||||||
error("Descriptor named `$name` was not found in provided snippet: $codeSnippet")
|
val module = analysisResult.moduleDescriptor
|
||||||
val actualEncoding = encodeSignature(testDescriptor)
|
val rootPackage = module.getPackage(FqName.ROOT)
|
||||||
Assert.assertEquals(expectedEncoding, actualEncoding)
|
|
||||||
|
val testDescriptor = findTestCallable(rootPackage, name) ?:
|
||||||
|
error("Descriptor named `$name` was not found in provided snippet: $codeSnippet")
|
||||||
|
val actualEncoding = encodeSignature(testDescriptor)
|
||||||
|
Assert.assertEquals(expectedEncoding, actualEncoding)
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
Disposer.dispose(disposable)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun findTestCallable(scope: MemberScope, name: String): CallableMemberDescriptor? {
|
private fun findTestCallable(scope: MemberScope, name: String): CallableMemberDescriptor? {
|
||||||
@@ -227,7 +239,7 @@ class EncodeSignatureTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createEnvironment(): KotlinCoreEnvironment {
|
fun createEnvironment(disposable: Disposable): KotlinCoreEnvironment {
|
||||||
return KotlinCoreEnvironment.createForTests(Disposable { }, CompilerConfiguration(), EnvironmentConfigFiles.JS_CONFIG_FILES)
|
return KotlinCoreEnvironment.createForTests(disposable, CompilerConfiguration(), EnvironmentConfigFiles.JS_CONFIG_FILES)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user