FIR IDE: fix leaking of FirJavaElementFinder in tests
This commit is contained in:
committed by
TeamCityServer
parent
61651c685c
commit
a9715de704
+20
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.compiler.based
|
|||||||
|
|
||||||
import com.intellij.mock.MockProject
|
import com.intellij.mock.MockProject
|
||||||
import com.intellij.openapi.Disposable
|
import com.intellij.openapi.Disposable
|
||||||
|
import com.intellij.openapi.util.Disposer
|
||||||
import com.intellij.psi.PsiElementFinder
|
import com.intellij.psi.PsiElementFinder
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import com.intellij.psi.search.ProjectScope
|
import com.intellij.psi.search.ProjectScope
|
||||||
@@ -53,11 +54,28 @@ import org.jetbrains.kotlin.test.frontend.fir.*
|
|||||||
import org.jetbrains.kotlin.test.model.*
|
import org.jetbrains.kotlin.test.model.*
|
||||||
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerTest
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
|
import org.junit.jupiter.api.AfterEach
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.TestInfo
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import kotlin.io.path.nameWithoutExtension
|
import kotlin.io.path.nameWithoutExtension
|
||||||
|
|
||||||
abstract class AbstractCompilerBasedTest : AbstractKotlinCompilerTest() {
|
abstract class AbstractCompilerBasedTest : AbstractKotlinCompilerTest() {
|
||||||
|
private var _disposable: Disposable? = null
|
||||||
|
protected val disposable: Disposable get() = _disposable!!
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
private fun intiDisposable(testInfo: TestInfo) {
|
||||||
|
_disposable = Disposer.newDisposable("disposable for ${testInfo.displayName}")
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
private fun disposeDisposable() {
|
||||||
|
_disposable?.let { Disposer.dispose(it) }
|
||||||
|
_disposable = null
|
||||||
|
}
|
||||||
|
|
||||||
final override fun TestConfigurationBuilder.configuration() {
|
final override fun TestConfigurationBuilder.configuration() {
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = FrontendKinds.FIR
|
frontend = FrontendKinds.FIR
|
||||||
@@ -90,7 +108,8 @@ abstract class AbstractCompilerBasedTest : AbstractKotlinCompilerTest() {
|
|||||||
|
|
||||||
val moduleInfo = TestModuleInfo(module)
|
val moduleInfo = TestModuleInfo(module)
|
||||||
testServices.firModuleInfoProvider.registerModuleData(module, FirModuleInfoBasedModuleData(moduleInfo))
|
testServices.firModuleInfoProvider.registerModuleData(module, FirModuleInfoBasedModuleData(moduleInfo))
|
||||||
val configurator = FirModuleResolveStateConfiguratorForSingleModuleTestImpl(testServices, module, ktFiles, moduleInfo, project)
|
val configurator =
|
||||||
|
FirModuleResolveStateConfiguratorForSingleModuleTestImpl(testServices, module, ktFiles, moduleInfo, disposable)
|
||||||
|
|
||||||
with(project as MockProject) {
|
with(project as MockProject) {
|
||||||
registerTestServices(configurator, ktFiles)
|
registerTestServices(configurator, ktFiles)
|
||||||
|
|||||||
+1
-16
@@ -26,30 +26,15 @@ import org.jetbrains.kotlin.test.services.*
|
|||||||
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
|
import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator
|
||||||
import org.jetbrains.kotlin.test.services.impl.TemporaryDirectoryManagerImpl
|
import org.jetbrains.kotlin.test.services.impl.TemporaryDirectoryManagerImpl
|
||||||
import org.junit.jupiter.api.AfterEach
|
|
||||||
import org.junit.jupiter.api.BeforeEach
|
import org.junit.jupiter.api.BeforeEach
|
||||||
import org.junit.jupiter.api.TestInfo
|
import org.junit.jupiter.api.TestInfo
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import java.nio.file.Paths
|
import java.nio.file.Paths
|
||||||
import kotlin.io.path.nameWithoutExtension
|
import kotlin.io.path.nameWithoutExtension
|
||||||
|
|
||||||
abstract class AbstractLowLevelApiTest {
|
abstract class AbstractLowLevelApiTest: TestWithDisposable() {
|
||||||
private lateinit var testInfo: KotlinTestInfo
|
private lateinit var testInfo: KotlinTestInfo
|
||||||
|
|
||||||
private var _disposable: Disposable? = null
|
|
||||||
protected val disposable: Disposable get() = _disposable!!
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
private fun intiDisposable(testInfo: TestInfo) {
|
|
||||||
_disposable = Disposer.newDisposable("disposable for ${testInfo.displayName}")
|
|
||||||
}
|
|
||||||
|
|
||||||
@AfterEach
|
|
||||||
private fun disposeDisposable() {
|
|
||||||
_disposable?.let { Disposer.dispose(it) }
|
|
||||||
_disposable = null
|
|
||||||
}
|
|
||||||
|
|
||||||
private val configure: TestConfigurationBuilder.() -> Unit = {
|
private val configure: TestConfigurationBuilder.() -> Unit = {
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = FrontendKinds.FIR
|
frontend = FrontendKinds.FIR
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 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.idea.fir.low.level.api.test.base
|
||||||
|
|
||||||
|
import com.intellij.openapi.Disposable
|
||||||
|
import com.intellij.openapi.util.Disposer
|
||||||
|
import org.junit.jupiter.api.AfterEach
|
||||||
|
import org.junit.jupiter.api.BeforeEach
|
||||||
|
import org.junit.jupiter.api.TestInfo
|
||||||
|
|
||||||
|
abstract class TestWithDisposable {
|
||||||
|
private var _disposable: Disposable? = null
|
||||||
|
protected val disposable: Disposable get() = _disposable!!
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
private fun intiDisposable(testInfo: TestInfo) {
|
||||||
|
_disposable = Disposer.newDisposable("disposable for ${testInfo.displayName}")
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
private fun disposeDisposable() {
|
||||||
|
_disposable?.let { Disposer.dispose(it) }
|
||||||
|
_disposable = null
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user