Update hack for restore validity of builtins files
This commit is contained in:
+3
-10
@@ -28,6 +28,7 @@ import com.intellij.psi.FileViewProvider
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.impl.PsiManagerEx
|
||||
import com.intellij.psi.impl.file.impl.FileManager
|
||||
import com.intellij.psi.impl.source.PsiFileImpl
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode
|
||||
@@ -57,16 +58,8 @@ public abstract class JetLightCodeInsightFixtureTestCase : LightCodeInsightFixtu
|
||||
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
||||
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
||||
|
||||
val builtInsSources = getProject().getComponent<BuiltInsReferenceResolver>(javaClass<BuiltInsReferenceResolver>()).getBuiltInsSources()
|
||||
val fileManager = (PsiManager.getInstance(getProject()) as PsiManagerEx).getFileManager()
|
||||
|
||||
super.tearDown()
|
||||
|
||||
// Restore mapping between PsiFiles and VirtualFiles dropped in FileManager.cleanupForNextTest(),
|
||||
// otherwise built-ins psi elements will become invalid in next test.
|
||||
for (source in builtInsSources) {
|
||||
val provider = source.getViewProvider()
|
||||
fileManager.setViewProvider(provider.getVirtualFile(), provider)
|
||||
unInvalidateBuiltins(getProject()) {
|
||||
super.tearDown()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.test
|
||||
|
||||
import com.intellij.ide.startup.impl.StartupManagerImpl
|
||||
import com.intellij.openapi.startup.StartupManager
|
||||
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
|
||||
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase
|
||||
import org.jetbrains.kotlin.idea.actions.internal.KotlinInternalMode
|
||||
import org.jetbrains.kotlin.test.JetTestUtils
|
||||
|
||||
public abstract class KotlinLightPlatformCodeInsightFixtureTestCase: LightPlatformCodeInsightFixtureTestCase() {
|
||||
private var kotlinInternalModeOriginalValue: Boolean = false
|
||||
|
||||
override fun setUp() {
|
||||
super.setUp()
|
||||
(StartupManager.getInstance(getProject()) as StartupManagerImpl).runPostStartupActivities()
|
||||
VfsRootAccess.allowRootAccess(JetTestUtils.getHomeDirectory())
|
||||
|
||||
kotlinInternalModeOriginalValue = KotlinInternalMode.enabled
|
||||
KotlinInternalMode.enabled = true
|
||||
}
|
||||
|
||||
override fun tearDown() {
|
||||
KotlinInternalMode.enabled = kotlinInternalModeOriginalValue
|
||||
VfsRootAccess.disallowRootAccess(JetTestUtils.getHomeDirectory())
|
||||
|
||||
unInvalidateBuiltins(getProject()) {
|
||||
super.tearDown()
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2010-2015 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.idea.test;
|
||||
|
||||
public interface RunnableWithException {
|
||||
void run() throws Exception;
|
||||
}
|
||||
@@ -18,8 +18,10 @@ package org.jetbrains.kotlin.idea.test
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil.updateModel
|
||||
import com.intellij.psi.impl.source.PsiFileImpl
|
||||
import com.intellij.testFramework.LightPlatformTestCase
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.util.Consumer
|
||||
@@ -27,8 +29,7 @@ import org.jetbrains.kotlin.diagnostics.Severity
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
||||
import org.jetbrains.kotlin.idea.js.KotlinJavaScriptLibraryManager
|
||||
import org.jetbrains.kotlin.idea.test.KotlinStdJSProjectDescriptor
|
||||
import org.jetbrains.kotlin.idea.test.ProjectDescriptorWithStdlibSources
|
||||
import org.jetbrains.kotlin.idea.references.BuiltInsReferenceResolver
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
|
||||
public enum class ModuleKind {
|
||||
@@ -74,3 +75,20 @@ public fun JetFile.dumpTextWithErrors(): String {
|
||||
public fun closeAndDeleteProject(): Unit =
|
||||
ApplicationManager.getApplication().runWriteAction() { LightPlatformTestCase.closeAndDeleteProject() }
|
||||
|
||||
public fun unInvalidateBuiltins(project: Project, runnable: RunnableWithException) {
|
||||
val builtInsSources = project.getComponent<org.jetbrains.kotlin.idea.references.BuiltInsReferenceResolver>(javaClass<BuiltInsReferenceResolver>()).getBuiltInsSources()
|
||||
|
||||
runnable.run()
|
||||
|
||||
// Base tearDown() invalidates builtins. Restore them with brute force.
|
||||
for (source in builtInsSources) {
|
||||
val psiFileImpl = source as PsiFileImpl
|
||||
val field = javaClass<PsiFileImpl>().getDeclaredField("myInvalidated")!!
|
||||
field.setAccessible(true)
|
||||
field.set(psiFileImpl, false)
|
||||
}
|
||||
}
|
||||
|
||||
public fun unInvalidateBuiltins(project: Project, runnable: () -> Unit) {
|
||||
unInvalidateBuiltins(project, RunnableWithException { runnable() })
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user