[Analysis API] Add containing declarations test with class name clash
Code in 'checkContainingJvmClassName()' is adapted as it contradicted
with the K2 implementation
(see KaFirJavaInteroperabilityComponent.getContainingJvmClassName).
^KT-67963
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeDependentAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeDependentAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
index b43793f..c13053c 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeDependentAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeDependentAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
@@ -46,6 +46,12 @@
}
@Test
+ @TestMetadata("classNameClash.kt")
+ public void testClassNameClash() {
+ runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt");
+ }
+
+ @Test
@TestMetadata("classes.kt")
public void testClasses() {
runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classes.kt");
diff --git a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
index 899f72c..c42b28b 100644
--- a/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
+++ b/analysis/analysis-api-fir/tests-gen/org/jetbrains/kotlin/analysis/api/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirIdeNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
@@ -46,6 +46,12 @@
}
@Test
+ @TestMetadata("classNameClash.kt")
+ public void testClassNameClash() {
+ runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt");
+ }
+
+ @Test
@TestMetadata("classes.kt")
public void testClasses() {
runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classes.kt");
diff --git a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/symbolTestUtils.kt b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/symbolTestUtils.kt
index 6dd0e84..cb67ea4 100644
--- a/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/symbolTestUtils.kt
+++ b/analysis/analysis-api-impl-base/tests/org/jetbrains/kotlin/analysis/api/impl/base/test/cases/symbols/symbolTestUtils.kt
@@ -8,6 +8,8 @@
import org.jetbrains.kotlin.analysis.api.KaSession
import org.jetbrains.kotlin.analysis.api.symbols.KaCallableSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaFileSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaFunctionSymbol
+import org.jetbrains.kotlin.analysis.api.symbols.KaParameterSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaSymbol
import org.jetbrains.kotlin.analysis.api.symbols.KaSymbolOrigin
import org.jetbrains.kotlin.analysis.api.symbols.isLocal
@@ -35,17 +37,17 @@
symbol: KaCallableSymbol,
testServices: TestServices
) {
- if (ktFile.isScript()) return
- val expectedClassName = when {
- symbol.isLocal ->
- null
- ktClass != null ->
- // member
- ktClass.getClassId()?.asFqNameString()
- else ->
- // top-level
- ktFile.javaFileFacadeFqName.asString()
+ fun KaCallableSymbol.computeExpectedJvmClassName(): String? {
+ return when {
+ this is KaParameterSymbol -> (containingSymbol as KaFunctionSymbol).computeExpectedJvmClassName()
+ this.isLocal -> null
+ ktClass != null -> ktClass.getClassId()?.asFqNameString() // Member
+ else -> ktFile.javaFileFacadeFqName.asString() // Top-level
+ }
}
+
+ if (ktFile.isScript()) return
+ val expectedClassName = symbol.computeExpectedJvmClassName()
val actualClassName = symbol.containingJvmClassName
testServices.assertions.assertEquals(expectedClassName, actualClassName) {
"Invalid JvmClassName for $symbol, expected $expectedClassName but $actualClassName found"
diff --git a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
index 3ea349c..db90572 100644
--- a/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
+++ b/analysis/analysis-api-standalone/tests-gen/org/jetbrains/kotlin/analysis/api/standalone/fir/test/cases/generated/cases/components/containingDeclarationProvider/FirStandaloneNormalAnalysisSourceModuleContainingDeclarationProviderByPsiTestGenerated.java
@@ -46,6 +46,12 @@
}
@Test
+ @TestMetadata("classNameClash.kt")
+ public void testClassNameClash() {
+ runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt");
+ }
+
+ @Test
@TestMetadata("classes.kt")
public void testClasses() {
runTest("analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classes.kt");
diff --git a/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt
new file mode 100644
index 0000000..e63c0bc
--- /dev/null
+++ b/analysis/analysis-api/testData/components/containingDeclarationProvider/containingDeclarationByPsi/classNameClash.kt
@@ -0,0 +1,3 @@
+class A(val x: Int) {}
+
+open class A()
\ No newline at end of file