[light classes] create enum references as PsiReferenceExpressions
Ensure that enum constants with special characters in their names are properly ignored
diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt
index cdf6865..6b5537f 100644
--- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt
+++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/symbolLightUtils.kt
@@ -200,7 +200,7 @@
private fun KtEnumEntryAnnotationValue.asPsiReferenceExpression(parent: PsiElement): SymbolPsiReference? {
val fqName = this.callableId?.asSingleFqName()?.asString() ?: return null
val psiReference = parent.project.withElementFactorySafe {
- createExpressionFromText(fqName, parent) as PsiReferenceExpression
+ createExpressionFromText(fqName, parent) as? PsiReferenceExpression
} ?: return null
return SymbolPsiReference(sourcePsi, parent, psiReference)
diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.java b/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.java
new file mode 100644
index 0000000..1c478ee
--- /dev/null
+++ b/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.java
@@ -0,0 +1,4 @@
+@p.Anno(value = ?)
+public final class Foo /* p.Foo*/ {
+ public Foo();// .ctor()
+}
diff --git a/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.kt b/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.kt
new file mode 100644
index 0000000..4917d33
--- /dev/null
+++ b/analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.kt
@@ -0,0 +1,9 @@
+// PSI: org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
+// EXPECTED: p.Anno
+package p
+
+@Anno(E.`TA-DA`)
+class Fo<caret>o {}
+
+enum class E {`TA-DA`, `TA-TA` }
+annotation class Anno(val value: E)
\ No newline at end of file
diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java
index cc75aef..b289a3b 100644
--- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java
+++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesAnnotationEqualityForSourceTestGenerated.java
@@ -31,6 +31,12 @@
}
@Test
+ @TestMetadata("EnumConstantNameInQuotes.kt")
+ public void testEnumConstantNameInQuotes() throws Exception {
+ runTest("analysis/symbol-light-classes/testData/annotationsEquality/EnumConstantNameInQuotes.kt");
+ }
+
+ @Test
@TestMetadata("ExplicitRetension.kt")
public void testExplicitRetension() throws Exception {
runTest("analysis/symbol-light-classes/testData/annotationsEquality/ExplicitRetension.kt");