From 484fa3b7cdcac69ad8469af3547e2f661eaa0101 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 29 May 2014 14:39:21 +0400 Subject: [PATCH] Fix invalidating built-ins psi in consecutive test runs --- .../references/BuiltInsReferenceResolver.java | 8 ++++++- .../JetLightCodeInsightFixtureTestCase.java | 22 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java b/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java index f8908057e4d..d60b3db91d5 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java +++ b/idea/src/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolver.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 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. @@ -33,6 +33,7 @@ import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.asJava.LightClassUtil; import org.jetbrains.jet.context.ContextPackage; import org.jetbrains.jet.context.GlobalContextImpl; @@ -80,6 +81,11 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent { }); } + @TestOnly + public Set getBuiltInsSources() { + return builtInsSources; + } + private void initialize() { assert bindingContext == null : "Attempt to initialize twice"; diff --git a/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java b/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java index 543a134ad36..a0363a0ce8f 100644 --- a/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java +++ b/idea/tests/org/jetbrains/jet/plugin/JetLightCodeInsightFixtureTestCase.java @@ -22,15 +22,22 @@ import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.startup.StartupManager; import com.intellij.openapi.util.io.FileUtil; +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.testFramework.LightProjectDescriptor; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.InTextDirectivesUtils; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.plugin.references.BuiltInsReferenceResolver; import org.jetbrains.jet.utils.UtilsPackage; import java.io.File; import java.io.IOException; import java.util.List; +import java.util.Set; public abstract class JetLightCodeInsightFixtureTestCase extends LightCodeInsightFixtureTestCase { @Override @@ -39,6 +46,21 @@ public abstract class JetLightCodeInsightFixtureTestCase extends LightCodeInsigh ((StartupManagerImpl) StartupManager.getInstance(getProject())).runPostStartupActivities(); } + @Override + protected void tearDown() throws Exception { + Set builtInsSources = getProject().getComponent(BuiltInsReferenceResolver.class).getBuiltInsSources(); + FileManager fileManager = ((PsiManagerEx) PsiManager.getInstance(getProject())).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 (JetFile source : builtInsSources) { + FileViewProvider provider = source.getViewProvider(); + fileManager.setViewProvider(provider.getVirtualFile(), provider); + } + } + @NotNull @Override protected LightProjectDescriptor getProjectDescriptor() {