diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt index 375de8e1639..35879ee7cac 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/elements/lightAnnotations.kt @@ -95,12 +95,11 @@ class KtLightAnnotationForSourceEntry( override fun getReferences() = originalExpression?.references.orEmpty() override fun getLanguage() = KotlinLanguage.INSTANCE override fun getNavigationElement() = originalExpression - override fun isPhysical(): Boolean = false + override fun isPhysical(): Boolean = originalExpression?.containingFile == kotlinOrigin.containingFile override fun getTextRange() = originalExpression?.textRange ?: TextRange.EMPTY_RANGE override fun getParent() = parent override fun getText() = originalExpression?.text.orEmpty() - override fun getContainingFile(): PsiFile? = if (originalExpression?.containingFile == kotlinOrigin.containingFile) - kotlinOrigin.containingFile else delegate.containingFile + override fun getContainingFile(): PsiFile? = if (isPhysical) kotlinOrigin.containingFile else delegate.containingFile override fun replace(newElement: PsiElement): PsiElement { val value = (newElement as? PsiLiteral)?.value as? String ?: return this @@ -250,6 +249,8 @@ class KtLightAnnotationForSourceEntry( else -> LightElementValue(value, parent, ktOrigin) } + override fun isPhysical() = true + override fun getName() = null private fun wrapAnnotationValue(value: PsiAnnotationMemberValue): PsiAnnotationMemberValue = wrapAnnotationValue(value, this, { diff --git a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt index 335094970b2..3b73e3b77e9 100644 --- a/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/asJava/KtLightAnnotationTest.kt @@ -78,6 +78,7 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { val annotation = myFixture.findClass("AnnotatedClass").methods.first { it.name == "bar" }.parameterList.parameters.single() .expectAnnotations(2).single { it.qualifiedName == "Qualifier" } val annotationAttributeVal = annotation.findAttributeValue("value") as PsiElement + TestCase.assertTrue(annotationAttributeVal.isPhysical) assertTextRangeAndValue("\"foo\"", "foo", annotationAttributeVal) } @@ -500,7 +501,6 @@ class KtLightAnnotationTest : KotlinLightCodeInsightFixtureTestCase() { private fun assertTextAndRange(expected: String, psiElement: PsiElement) { TestCase.assertEquals("mismatch for $psiElement of ${psiElement.javaClass}", expected, psiElement.text) TestCase.assertEquals(expected, psiElement.textRange.substring(psiElement.containingFile.text)) - TestCase.assertEquals(psiElement, PsiAnchor.create(psiElement).retrieve()) } private fun assertIsKtLightAnnotation(expected: String, psiElement: PsiElement) {