[FIR] Fix the inability to retrieve an annotation argument

Fix an issue where an inherited @JsName from
another module was not accessible in a child class.

The issue can only be reproduced in the codegen box tests
and cannot be reproduced in the FIR FE checker tests.
This commit is contained in:
Alexander Korepanov
2023-09-05 16:29:37 +02:00
committed by Space Team
parent ea9e2eb41a
commit 238344758b
6 changed files with 45 additions and 1 deletions
@@ -777,7 +777,7 @@ fun FirDeclaration.hasAnnotationOrInsideAnnotatedClass(classId: ClassId, session
symbol.hasAnnotationOrInsideAnnotatedClass(classId, session)
fun FirBasedSymbol<*>.getAnnotationFirstArgument(classId: ClassId, session: FirSession): FirExpression? {
val annotation = getAnnotationByClassId(classId, session) as? FirAnnotationCall
val annotation = getAnnotationByClassId(classId, session)
return annotation?.argumentMapping?.mapping?.values?.firstOrNull()
}
@@ -5142,6 +5142,12 @@ public class FirJsBoxTestGenerated extends AbstractFirJsBoxTest {
runTest("js/js.translator/testData/box/inheritance/childPrototype.kt");
}
@Test
@TestMetadata("classInheritsJsNameFromOtherModule.kt")
public void testClassInheritsJsNameFromOtherModule() throws Exception {
runTest("js/js.translator/testData/box/inheritance/classInheritsJsNameFromOtherModule.kt");
}
@Test
@TestMetadata("complexInitializationOrder.kt")
public void testComplexInitializationOrder() throws Exception {
@@ -5248,6 +5248,12 @@ public class FirJsES6BoxTestGenerated extends AbstractFirJsES6BoxTest {
runTest("js/js.translator/testData/box/inheritance/childPrototype.kt");
}
@Test
@TestMetadata("classInheritsJsNameFromOtherModule.kt")
public void testClassInheritsJsNameFromOtherModule() throws Exception {
runTest("js/js.translator/testData/box/inheritance/classInheritsJsNameFromOtherModule.kt");
}
@Test
@TestMetadata("complexInitializationOrder.kt")
public void testComplexInitializationOrder() throws Exception {
@@ -5248,6 +5248,12 @@ public class IrBoxJsES6TestGenerated extends AbstractIrBoxJsES6Test {
runTest("js/js.translator/testData/box/inheritance/childPrototype.kt");
}
@Test
@TestMetadata("classInheritsJsNameFromOtherModule.kt")
public void testClassInheritsJsNameFromOtherModule() throws Exception {
runTest("js/js.translator/testData/box/inheritance/classInheritsJsNameFromOtherModule.kt");
}
@Test
@TestMetadata("complexInitializationOrder.kt")
public void testComplexInitializationOrder() throws Exception {
@@ -5142,6 +5142,12 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest {
runTest("js/js.translator/testData/box/inheritance/childPrototype.kt");
}
@Test
@TestMetadata("classInheritsJsNameFromOtherModule.kt")
public void testClassInheritsJsNameFromOtherModule() throws Exception {
runTest("js/js.translator/testData/box/inheritance/classInheritsJsNameFromOtherModule.kt");
}
@Test
@TestMetadata("complexInitializationOrder.kt")
public void testComplexInitializationOrder() throws Exception {
@@ -0,0 +1,20 @@
// MODULE: lib
// FILE: TestDemo1.kt
package TestDemo1
abstract class Class {
open val ok = "OK"
@JsName("okFun")
fun ok() = ok
}
// FILE: TestDemo2.kt
// MODULE: main(lib)
package TestDemo2
import TestDemo1.Class
class MyClass : Class()
fun box() = MyClass().ok()