diff --git a/idea/resources/inspectionDescriptions/UnsafeCastFromDynamic.html b/idea/resources/inspectionDescriptions/UnsafeCastFromDynamic.html new file mode 100644 index 00000000000..b45ce8d5451 --- /dev/null +++ b/idea/resources/inspectionDescriptions/UnsafeCastFromDynamic.html @@ -0,0 +1,5 @@ + + +This inspection reports expressions with dynamic type in the specified inspection scope that are implicitly casted to another type. + + diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 9ad15aa8f07..003bdbe99f0 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -1553,6 +1553,14 @@ language="kotlin" /> + + + + test.kt + 13 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to String + + + test.kt + 14 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Any + + + test.kt + 15 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Unit + + + test.kt + 22 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to String + + + test.kt + 36 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Any + + + test.kt + 40 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Unit + + + test.kt + 47 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Unit + + + test.kt + 43 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to String + + + test.kt + 43 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Any + + + test.kt + 43 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Unit + + + test.kt + 45 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Any + + + test.kt + 45 + light_idea_test_case + + Implicit (unsafe) cast from dynamic type + Implicit (unsafe) cast from dynamic to Unit + + diff --git a/idea/testData/inspections/dynamic/js/inspectionData/inspections.test b/idea/testData/inspections/dynamic/js/inspectionData/inspections.test new file mode 100644 index 00000000000..f04022532d2 --- /dev/null +++ b/idea/testData/inspections/dynamic/js/inspectionData/inspections.test @@ -0,0 +1 @@ +// INSPECTION_CLASS: org.jetbrains.kotlin.idea.inspections.UnsafeCastFromDynamicInspection diff --git a/idea/testData/inspections/dynamic/js/test.kt b/idea/testData/inspections/dynamic/js/test.kt new file mode 100644 index 00000000000..53f7358e432 --- /dev/null +++ b/idea/testData/inspections/dynamic/js/test.kt @@ -0,0 +1,48 @@ +class A { + fun foo(i: Int) {} +} + +fun bar(d: dynamic, s: String, a: Any, u: Unit) {} + +fun main(args: Array) { + val d: dynamic = Any() + var s: String = "" + var a: Any = "" + var u: Unit = Unit + + s = d + a = d + u = d + + s = d as String + a = d as Any + u = d as Unit + + if (d is String) { + s = d + d.subSequence(1, 2) + } + + if (d is A) { + d.foo(1) + } + + if (a is String) { + s = a + a.length + } + + if (d is Any) { + a = d + } + + if (d is Unit) { + u = d + } + + bar(d, d.boo, d, d) + bar(d, d as String, d as Any, d as Unit) + bar(d.aaa, d.bbb as String, d.ccc(), d.ddd {}) + + return d +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java index 2b5b144a278..85b1bbaf13b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/InspectionTestGenerated.java @@ -160,6 +160,12 @@ public class InspectionTestGenerated extends AbstractInspectionTest { doTest(fileName); } + @TestMetadata("dynamic/js/inspectionData/inspections.test") + public void testDynamic_js_inspectionData_Inspections_test() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/dynamic/js/inspectionData/inspections.test"); + doTest(fileName); + } + @TestMetadata("equalsAndHashCode/inspectionData/inspections.test") public void testEqualsAndHashCode_inspectionData_Inspections_test() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspections/equalsAndHashCode/inspectionData/inspections.test");