From d609579e555abed58bd7bb9878c3b7750c41c4e8 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Fri, 6 Oct 2017 20:00:17 +0300 Subject: [PATCH] `FakeFileForLightClass` tries to use `ktFile.originalFile.virtualFile` --- .../asJava/elements/FakeFileForLightClass.kt | 4 ++- .../tests/KotlinDetachedUastTest.kt | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/FakeFileForLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/FakeFileForLightClass.kt index 53b0cc673d2..8645df9afd3 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/FakeFileForLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/FakeFileForLightClass.kt @@ -33,7 +33,9 @@ open class FakeFileForLightClass( private val lightClass: () -> KtLightClass, private val stub: () -> PsiClassHolderFileStub<*>, private val packageFqName: FqName = ktFile.packageFqName -) : ClsFileImpl(ClassFileViewProvider(ktFile.manager, ktFile.viewProvider.virtualFile)) { +) : ClsFileImpl(ClassFileViewProvider(ktFile.manager, ktFile.virtualFile ?: + ktFile.originalFile.virtualFile ?: + ktFile.viewProvider.virtualFile)) { override fun getPackageName() = packageFqName.asString() override fun getStub() = stub() diff --git a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt index c75a1df7437..5de28db16ac 100644 --- a/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt +++ b/plugins/uast-kotlin/tests/KotlinDetachedUastTest.kt @@ -16,10 +16,12 @@ package org.jetbrains.uast.test.kotlin +import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiLanguageInjectionHost import com.intellij.testFramework.LightProjectDescriptor import junit.framework.TestCase +import org.jetbrains.kotlin.asJava.elements.KtLightElement import org.jetbrains.kotlin.idea.core.copied import org.jetbrains.kotlin.idea.test.KotlinLightCodeInsightFixtureTestCase import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescriptor @@ -32,8 +34,7 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() { override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE - - fun testStringAnnotationWithEmpty() { + fun testLiteralInAnnotation() { val psiFile = myFixture.configureByText("AnnotatedClass.kt", """ class AnnotatedClass { @@ -42,17 +43,24 @@ class KotlinDetachedUastTest : KotlinLightCodeInsightFixtureTestCase() { } """.trimIndent()) - fun psiElement(file: PsiFile): Any? = (file.findElementAt(file.text.indexOf("\"\"")) ?: error("not found")) + fun psiElement(file: PsiFile): PsiElement = file.findElementAt(file.text.indexOf("\"\"")).orFail("literal") .getParentOfType(false).orFail("host") - .toUElement().orFail("uelement").getParentOfType(false) - .orFail("UClass").psi.orFail("psi").also { - } + .toUElement().orFail("uElement").getParentOfType(false) + .orFail("UClass").psi.orFail("psi") - TestCase.assertNotNull("base", psiElement(psiFile)) + psiElement(psiFile).let { + // Otherwise following asserts have no sense + TestCase.assertTrue("psi element should be light ", it is KtLightElement<*, *>) + } val copied = psiFile.copied() - TestCase.assertNull("vf for $copied", copied.virtualFile) - TestCase.assertNotNull("copy", psiElement(copied)) + TestCase.assertNull("virtual file for copy should be null", copied.virtualFile) + TestCase.assertNotNull("psi element in copy", psiElement(copied)) + TestCase.assertSame("copy.originalFile should be psiFile", copied.originalFile, psiFile) + TestCase.assertSame("virtualFiles of element and file itself should be the same", + psiElement(copied).containingFile.originalFile.virtualFile, + copied.originalFile.virtualFile) } + } fun T?.orFail(msg: String): T = this ?: error(msg) \ No newline at end of file