Move: Fix ClassCastException on processing of callable references to Java methods
 #KT-16809 Fixed
diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt
index 16f4d202..9a014ff 100644
--- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt
+++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt
@@ -42,6 +42,7 @@
 import org.jetbrains.kotlin.descriptors.*
 import org.jetbrains.kotlin.idea.KotlinFileType
 import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
+import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
 import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
 import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
 import org.jetbrains.kotlin.idea.codeInsight.KotlinFileReferencesResolver
@@ -354,8 +355,13 @@
 
             is UnqualifiableMoveRenameUsageInfo -> {
                 val file = with(usage) { if (addImportToOriginalFile) originalFile else counterpart(originalFile) } as KtFile
-                val declaration = counterpart(usage.referencedElement!!).unwrapped as KtDeclaration
-                ImportInsertHelper.getInstance(usage.project).importDescriptor(file, declaration.resolveToDescriptor())
+                val declaration = counterpart(usage.referencedElement!!).unwrapped
+                val referencedDescriptor = when (declaration) {
+                                               is KtDeclaration -> declaration.resolveToDescriptor()
+                                               is PsiMember -> declaration.getJavaMemberDescriptor()
+                                               else -> null
+                                           } ?: continue@usageLoop
+                ImportInsertHelper.getInstance(usage.project).importDescriptor(file, referencedDescriptor)
             }
 
             is MoveRenameUsageInfo -> {
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/Foo.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/Foo.kt
new file mode 100644
index 0000000..fdcb9d1
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/Foo.kt
@@ -0,0 +1,4 @@
+package source
+
+fun test() = J::bar
+
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/J.java
new file mode 100644
index 0000000..179df86
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/source/J.java
@@ -0,0 +1,7 @@
+package source;
+
+public class J {
+    public static void bar() {
+
+    }
+}
\ No newline at end of file
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/target/Test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/target/Test.kt
new file mode 100644
index 0000000..34ad565
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/after/target/Test.kt
@@ -0,0 +1,7 @@
+package target
+
+import source.J.bar
+
+class Test {
+    val x = J::bar
+}
\ No newline at end of file
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/Foo.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/Foo.kt
new file mode 100644
index 0000000..8b9734b
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/Foo.kt
@@ -0,0 +1,7 @@
+package source
+
+fun test() = J::bar
+
+class <caret>Test {
+    val x = J::bar
+}
\ No newline at end of file
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/J.java
new file mode 100644
index 0000000..179df86
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/before/source/J.java
@@ -0,0 +1,7 @@
+package source;
+
+public class J {
+    public static void bar() {
+
+    }
+}
\ No newline at end of file
diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/callableRefToJavaMethod.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/callableRefToJavaMethod.test
new file mode 100644
index 0000000..1a649bb
--- /dev/null
+++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/callableRefToJavaMethod.test
@@ -0,0 +1,5 @@
+{
+  "mainFile": "source/Foo.kt",
+  "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
+  "targetPackage": "target"
+}
diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java
index f0dd610..41adc91 100644
--- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java
+++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java
@@ -420,6 +420,12 @@
         doTest(fileName);
     }
 
+    @TestMetadata("kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/callableRefToJavaMethod.test")
+    public void testKotlin_moveTopLevelDeclarations_misc_callableReftoJavaMethod_CallableRefToJavaMethod() throws Exception {
+        String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/callableReftoJavaMethod/callableRefToJavaMethod.test");
+        doTest(fileName);
+    }
+
     @TestMetadata("kotlin/moveTopLevelDeclarations/misc/companionExtensionMemberRef/companionExtensionMemberRef.test")
     public void testKotlin_moveTopLevelDeclarations_misc_companionExtensionMemberRef_CompanionExtensionMemberRef() throws Exception {
         String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/companionExtensionMemberRef/companionExtensionMemberRef.test");