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");