From 2378979a99beab0204b87d012047fcc4ff4280fc Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Mon, 23 May 2022 14:58:14 +0200 Subject: [PATCH] [FE JS] Support until operator in `WRONG_OPERATION_WITH_DYNAMIC` error --- .../dynamicTypes/rangeExpression.kt | 2 +- .../dynamicTypes/rangeUntilExpression.dynamic.txt | 2 ++ .../dynamicTypes/rangeUntilExpression.kt | 15 +++++++++++++++ .../dynamicTypes/rangeUntilExpression.txt | 11 +++++++++++ .../DiagnosticsTestWithJsStdLibGenerated.java | 6 ++++++ .../resolve/diagnostics/JsDynamicCallChecker.kt | 6 ++++-- 6 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.dynamic.txt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.kt create mode 100644 compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.txt diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeExpression.kt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeExpression.kt index 888d5666c34..2132aa58ebc 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeExpression.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeExpression.kt @@ -4,7 +4,7 @@ fun foo() { val a: dynamic = Any() val b: dynamic = Any() val c = C() - println(a..b) + println(a..b) println(c..a) println(a.rangeTo(b)) } diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.dynamic.txt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.dynamic.txt new file mode 100644 index 00000000000..cef604e5ea1 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.dynamic.txt @@ -0,0 +1,2 @@ +public final operator fun rangeUntil(/*0*/ p0: dynamic): dynamic +public final fun rangeUntil(/*0*/ p0: dynamic): dynamic diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.kt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.kt new file mode 100644 index 00000000000..b05bac6a5b1 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// !LANGUAGE: +RangeUntilOperator + +fun foo() { + val a: dynamic = Any() + val b: dynamic = Any() + val c = C() + println(a..<b) + println(c.. = TODO("not implemented") +} diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.txt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.txt new file mode 100644 index 00000000000..8b1d380fd63 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.txt @@ -0,0 +1,11 @@ +package + +public fun foo(): kotlin.Unit + +public final class C { + public constructor C() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final operator fun rangeUntil(/*0*/ other: dynamic): kotlin.ranges.ClosedRange + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} 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 688caa73bb0..86bcba8f38c 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 @@ -313,6 +313,12 @@ public class DiagnosticsTestWithJsStdLibGenerated extends AbstractDiagnosticsTes runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeExpression.kt"); } + @Test + @TestMetadata("rangeUntilExpression.kt") + public void testRangeUntilExpression() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/rangeUntilExpression.kt"); + } + @Test @TestMetadata("reified.kt") public void testReified() throws Exception { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsDynamicCallChecker.kt b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsDynamicCallChecker.kt index 77a40b3141f..bc09224dceb 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsDynamicCallChecker.kt +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/resolve/diagnostics/JsDynamicCallChecker.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.js.resolve.diagnostics import com.intellij.psi.PsiElement import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.js.naming.NameSuggestion +import org.jetbrains.kotlin.lexer.KtSingleValueToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.calls.checkers.CallChecker @@ -53,8 +54,9 @@ object JsDynamicCallChecker : CallChecker { in OperatorConventions.IN_OPERATIONS -> { reportInOperation(context, reportOn) } - KtTokens.RANGE -> { - context.trace.report(ErrorsJs.WRONG_OPERATION_WITH_DYNAMIC.on(reportOn, "`..` operation")) + KtTokens.RANGE, KtTokens.RANGE_UNTIL -> { + token as KtSingleValueToken + context.trace.report(ErrorsJs.WRONG_OPERATION_WITH_DYNAMIC.on(reportOn, "`${token.value}` operation")) } } }