Add performance hack for unInvalidate Files from stdlib in tests.
This commit is contained in:
+1
-1
@@ -71,7 +71,7 @@ public abstract class JetLightCodeInsightFixtureTestCase : LightCodeInsightFixtu
|
|||||||
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
||||||
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
||||||
|
|
||||||
unInvalidateBuiltins(getProject()) {
|
unInvalidateBuiltinsAndStdLib(getProject()) {
|
||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -40,7 +40,7 @@ public abstract class KotlinLightPlatformCodeInsightFixtureTestCase: LightPlatfo
|
|||||||
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
||||||
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
||||||
|
|
||||||
unInvalidateBuiltins(getProject()) {
|
unInvalidateBuiltinsAndStdLib(getProject()) {
|
||||||
super.tearDown()
|
super.tearDown()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,17 +21,23 @@ import com.intellij.openapi.module.Module
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.openapi.roots.ModifiableRootModel
|
import com.intellij.openapi.roots.ModifiableRootModel
|
||||||
import com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel
|
import com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import com.intellij.psi.PsiManager
|
||||||
|
import com.intellij.psi.impl.PsiManagerEx
|
||||||
|
import com.intellij.psi.impl.file.impl.FileManagerImpl
|
||||||
import com.intellij.psi.impl.source.PsiFileImpl
|
import com.intellij.psi.impl.source.PsiFileImpl
|
||||||
import com.intellij.testFramework.LightPlatformTestCase
|
import com.intellij.testFramework.LightPlatformTestCase
|
||||||
import com.intellij.testFramework.LightProjectDescriptor
|
|
||||||
import com.intellij.util.Consumer
|
import com.intellij.util.Consumer
|
||||||
import org.jetbrains.kotlin.diagnostics.Severity
|
import org.jetbrains.kotlin.diagnostics.Severity
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker
|
import org.jetbrains.kotlin.idea.caches.resolve.LibraryModificationTracker
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.JetClassFileViewProvider
|
||||||
|
import org.jetbrains.kotlin.idea.decompiler.JetClsFile
|
||||||
import org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager
|
import org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager
|
||||||
import org.jetbrains.kotlin.idea.references.BuiltInsReferenceResolver
|
import org.jetbrains.kotlin.idea.references.BuiltInsReferenceResolver
|
||||||
import org.jetbrains.kotlin.psi.JetFile
|
import org.jetbrains.kotlin.psi.JetFile
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
public enum class ModuleKind {
|
public enum class ModuleKind {
|
||||||
KOTLIN_JVM_WITH_STDLIB_SOURCES,
|
KOTLIN_JVM_WITH_STDLIB_SOURCES,
|
||||||
@@ -80,21 +86,37 @@ public fun JetFile.dumpTextWithErrors(): String {
|
|||||||
public fun closeAndDeleteProject(): Unit =
|
public fun closeAndDeleteProject(): Unit =
|
||||||
ApplicationManager.getApplication().runWriteAction() { LightPlatformTestCase.closeAndDeleteProject() }
|
ApplicationManager.getApplication().runWriteAction() { LightPlatformTestCase.closeAndDeleteProject() }
|
||||||
|
|
||||||
public fun unInvalidateBuiltins(project: Project, runnable: RunnableWithException) {
|
public fun unInvalidateBuiltinsAndStdLib(project: Project, runnable: RunnableWithException) {
|
||||||
val builtInsSources = BuiltInsReferenceResolver.getInstance(project).builtInsSources!!
|
val builtInsSources = BuiltInsReferenceResolver.getInstance(project).builtInsSources!!
|
||||||
|
|
||||||
|
val stdLibViewProviders = HashSet<JetClassFileViewProvider>()
|
||||||
|
val vFileToViewProviderMap = ((PsiManager.getInstance(project) as PsiManagerEx).fileManager as FileManagerImpl).vFileToViewProviderMap
|
||||||
|
for ((file, viewProvider) in vFileToViewProviderMap) {
|
||||||
|
if (file.isStdLibFile && viewProvider is JetClassFileViewProvider) {
|
||||||
|
stdLibViewProviders.add(viewProvider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
runnable.run()
|
runnable.run()
|
||||||
|
|
||||||
// Base tearDown() invalidates builtins. Restore them with brute force.
|
// Base tearDown() invalidates builtins and std-lib files. Restore them with brute force.
|
||||||
for (source in builtInsSources) {
|
fun unInvalidateFile(file: PsiFileImpl) {
|
||||||
val field = javaClass<PsiFileImpl>().getDeclaredField("myInvalidated")!!
|
val field = javaClass<PsiFileImpl>().getDeclaredField("myInvalidated")!!
|
||||||
field.setAccessible(true)
|
field.setAccessible(true)
|
||||||
field.set(source, false)
|
field.set(file, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
builtInsSources.forEach { unInvalidateFile(it) }
|
||||||
|
stdLibViewProviders.forEach {
|
||||||
|
it.allFiles.forEach { unInvalidateFile(it as JetClsFile) }
|
||||||
|
vFileToViewProviderMap.set(it.virtualFile, it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun unInvalidateBuiltins(project: Project, runnable: () -> Unit) {
|
private val VirtualFile.isStdLibFile: Boolean get() = presentableUrl.contains("kotlin-runtime.jar")
|
||||||
unInvalidateBuiltins(project, RunnableWithException { runnable() })
|
|
||||||
|
public fun unInvalidateBuiltinsAndStdLib(project: Project, runnable: () -> Unit) {
|
||||||
|
unInvalidateBuiltinsAndStdLib(project, RunnableWithException { runnable() })
|
||||||
}
|
}
|
||||||
|
|
||||||
public fun invalidateLibraryCache(project: Project) {
|
public fun invalidateLibraryCache(project: Project) {
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ abstract public class KotlinLightQuickFixTestCase extends LightQuickFixTestCase
|
|||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory());
|
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory());
|
||||||
|
|
||||||
TestPackage.unInvalidateBuiltins(getProject(), new RunnableWithException() {
|
TestPackage.unInvalidateBuiltinsAndStdLib(getProject(), new RunnableWithException() {
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
KotlinLightQuickFixTestCase.super.tearDown();
|
KotlinLightQuickFixTestCase.super.tearDown();
|
||||||
|
|||||||
+1
-1
@@ -72,7 +72,7 @@ public abstract class KotlinAndroidTestCaseBase extends UsefulTestCase {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void tearDown() throws Exception {
|
protected void tearDown() throws Exception {
|
||||||
TestPackage.unInvalidateBuiltins(getProject(), new RunnableWithException() {
|
TestPackage.unInvalidateBuiltinsAndStdLib(getProject(), new RunnableWithException() {
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
KotlinAndroidTestCaseBase.super.tearDown();
|
KotlinAndroidTestCaseBase.super.tearDown();
|
||||||
|
|||||||
Reference in New Issue
Block a user