[LL API] Avoid designation path calculation for illegal class names
diff --git a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt
index 1fbc095..65c2dbc 100644
--- a/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt
+++ b/analysis/analysis-api/testData/components/psiTypeProvider/psiType/forExpression/class_object_constructor.txt
@@ -1,2 +1,2 @@
-KtType: Outer.`<no name provided>`.Inner
+KtType: Inner
 PsiType: null
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt
index 4a021d1..a763ea9 100644
--- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt
+++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/api/FirDesignation.kt
@@ -124,8 +124,11 @@
         return declaration
     }
 
-    val chain = generateSequence(containingClassId) { it.outerClassId }.map { resolveChunk(it) }
-    return chain.toMutableList().also { it.reverse() }
+    return generateSequence(containingClassId) { it.outerClassId }
+        .dropWhile { it.shortClassName.isSpecial }
+        .map { resolveChunk(it) }
+        .toList()
+        .asReversed()
 }
 
 private fun getTargetSession(target: FirDeclaration): FirSession {
diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.fir.kt b/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.fir.kt
new file mode 100644
index 0000000..e4f4174
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.fir.kt
@@ -0,0 +1,10 @@
+// FIR_COMPARISON
+// LANGUAGE: +DataObjects
+
+interface I {
+    fun foo()
+}
+
+val o = <!UNRESOLVED_REFERENCE!>data<!><!SYNTAX!><!> object<!SYNTAX!><!>: I {
+    <!WRONG_MODIFIER_CONTAINING_DECLARATION!>override<!> fun foo() {}
+}
diff --git a/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.kt b/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.kt
index c80e42f..e25a782 100644
--- a/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.kt
+++ b/compiler/testData/diagnostics/tests/dataClasses/dataObjectLiteral.kt
@@ -1,4 +1,4 @@
-// FIR_IDENTICAL
+// FIR_COMPARISON
 // LANGUAGE: +DataObjects
 
 interface I {