From 077f49f33bc0257c3f4ca014b36d87ea54c6baee Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Fri, 7 Apr 2023 15:32:26 +0300 Subject: [PATCH] [FIR JS] KT-57822: Don't report the diagnostic for non-qualifiers ^KT-57822 Fixed --- .../js/checkers/expression/FirJsNativeRttiChecker.kt | 4 ++++ .../testsWithJsStdLib/externalInterfaceClassLiteral.kt | 10 ++++++++++ .../runners/DiagnosticsTestWithJsStdLibGenerated.java | 6 ++++++ .../FirPsiJsOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ 4 files changed, 26 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt diff --git a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsNativeRttiChecker.kt b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsNativeRttiChecker.kt index f98651429dc..c86f6197468 100644 --- a/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsNativeRttiChecker.kt +++ b/compiler/fir/checkers/checkers.js/src/org/jetbrains/kotlin/fir/analysis/js/checkers/expression/FirJsNativeRttiChecker.kt @@ -27,6 +27,10 @@ object FirJsNativeRttiChecker : FirBasicExpressionChecker() { private fun checkGetClassCall(expression: FirGetClassCall, context: CheckerContext, reporter: DiagnosticReporter) { val declarationToCheck = expression.argument.typeRef.toRegularClassSymbol(context.session) ?: return + if (expression.arguments.firstOrNull() !is FirResolvedQualifier) { + return + } + if (declarationToCheck.isNativeInterface(context)) { reporter.reportOn(expression.source, FirJsErrors.EXTERNAL_INTERFACE_AS_CLASS_LITERAL, context) } diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt b/compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt new file mode 100644 index 00000000000..66babc56ff7 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt @@ -0,0 +1,10 @@ +// FIR_IDENTICAL +// ISSUE: KT-57822 + +external interface Foo + +fun bar() { + foo()::class.simpleName +} + +external fun foo(): Foo diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsTestWithJsStdLibGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsTestWithJsStdLibGenerated.java index 0c681fc4177..fd33c84bf9b 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsTestWithJsStdLibGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsTestWithJsStdLibGenerated.java @@ -30,6 +30,12 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicUnresolved.kt"); } + @Test + @TestMetadata("externalInterfaceClassLiteral.kt") + public void testExternalInterfaceClassLiteral() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt"); + } + @Test @TestMetadata("funConstructorCallJS.kt") public void testFunConstructorCallJS() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java index debf89221ed..5f22496a6a6 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java @@ -31,6 +31,12 @@ public class FirPsiJsOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiJ runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicUnresolved.kt"); } + @Test + @TestMetadata("externalInterfaceClassLiteral.kt") + public void testExternalInterfaceClassLiteral() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/externalInterfaceClassLiteral.kt"); + } + @Test @TestMetadata("funConstructorCallJS.kt") public void testFunConstructorCallJS() throws Exception {