Move: Fix processing of calls and callable references

Fix CCE on callable references to Java methods.
Fix qualification of callable references without receivers.
Fix processing of calls/callable references to object extensions
and extension members.
Do not explicate short companion references

 #KT-16809 Fixed
This commit is contained in:
Alexey Sedunov
2017-03-22 16:08:47 +03:00
parent 58495555dc
commit 1d0162402e
52 changed files with 1577 additions and 42 deletions
@@ -0,0 +1,55 @@
package baz
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
fun test() {
foo.A().classMember()
foo.A().classExtension()
foo.O.objectMember1()
foo.O.objectMember2()
foo.O.objectExtension()
foo.A.companionMember()
foo.A.companionExtension()
foo.J().javaClassMember()
foo.J.javaClassStaticMember()
foo.topLevel()
with(foo.O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(foo.A) { 1.companionExtensionMember() }
foo.A()::classMember
foo.A::classMember
foo.A()::classExtension
foo.A::classExtension
foo.O::objectMember1
foo.O::objectMember2
foo.O::objectExtension
foo.A.Companion::companionMember
(foo.A)::companionMember
foo.A.Companion::companionExtension
(foo.A)::companionExtension
foo.J()::javaClassMember
foo.J::javaClassMember
foo.J::javaClassStaticMember
//::topLevel // not usable without import
with(foo.A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(foo.J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,57 @@
package bar
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
class X
fun <caret>test() {
foo.A().classMember()
foo.A().classExtension()
foo.O.objectMember1()
foo.O.objectMember2()
foo.O.objectExtension()
foo.A.companionMember()
foo.A.companionExtension()
foo.J().javaClassMember()
foo.J.javaClassStaticMember()
foo.topLevel()
with(foo.O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(foo.A) { 1.companionExtensionMember() }
foo.A()::classMember
foo.A::classMember
foo.A()::classExtension
foo.A::classExtension
foo.O::objectMember1
foo.O::objectMember2
foo.O::objectExtension
foo.A.Companion::companionMember
(foo.A)::companionMember
foo.A.Companion::companionExtension
(foo.A)::companionExtension
foo.J()::javaClassMember
foo.J::javaClassMember
foo.J::javaClassStaticMember
//::topLevel // not usable without import
with(foo.A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(foo.J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "bar/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "baz"
}
@@ -0,0 +1,59 @@
package baz
import foo.A
import foo.J
import foo.O
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
import foo.topLevel
fun test() {
A().classMember()
A().classExtension()
O.objectMember1()
O.objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
O::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,56 @@
package bar
import foo.*
import foo.O.objectMember2
import foo.O.objectExtensionMember2
class X
fun <caret>test() {
A().classMember()
A().classExtension()
O.objectMember1()
objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "bar/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "baz"
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,52 @@
package foo
import foo.O.objectExtensionMember2
fun test() {
A().classMember()
A().classExtension()
O.objectMember1()
O.objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
O::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
//::topLevel // not usable without import
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,57 @@
package bar
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
class X
fun <caret>test() {
foo.A().classMember()
foo.A().classExtension()
foo.O.objectMember1()
foo.O.objectMember2()
foo.O.objectExtension()
foo.A.companionMember()
foo.A.companionExtension()
foo.J().javaClassMember()
foo.J.javaClassStaticMember()
foo.topLevel()
with(foo.O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(foo.A) { 1.companionExtensionMember() }
foo.A()::classMember
foo.A::classMember
foo.A()::classExtension
foo.A::classExtension
foo.O::objectMember1
foo.O::objectMember2
foo.O::objectExtension
foo.A.Companion::companionMember
(foo.A)::companionMember
foo.A.Companion::companionExtension
(foo.A)::companionExtension
foo.J()::javaClassMember
foo.J::javaClassMember
foo.J::javaClassStaticMember
//::topLevel // not usable without import
with(foo.A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(foo.J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "bar/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "foo"
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,52 @@
package foo
import foo.O.objectExtensionMember2
fun test() {
A().classMember()
A().classExtension()
O.objectMember1()
O.objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
O::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,56 @@
package bar
import foo.*
import foo.O.objectMember2
import foo.O.objectExtensionMember2
class X
fun <caret>test() {
A().classMember()
A().classExtension()
O.objectMember1()
objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "bar/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "foo"
}
@@ -0,0 +1,59 @@
package bar
import foo.A
import foo.J
import foo.O
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
import foo.topLevel
fun test() {
A().classMember()
A().classExtension()
O.objectMember1()
O.objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
O::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,55 @@
package foo
import foo.O.objectMember2
import foo.O.objectExtensionMember2
class X
fun <caret>test() {
A().classMember()
A().classExtension()
O.objectMember1()
objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "foo/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "bar"
}
@@ -0,0 +1,59 @@
package bar
import foo.A
import foo.J
import foo.O
import foo.O.objectExtensionMember2
import foo.classExtension
import foo.companionExtension
import foo.objectExtension
import foo.topLevel
fun test() {
A().classMember()
A().classExtension()
O.objectMember1()
O.objectMember2()
O.objectExtension()
A.companionMember()
A.companionExtension()
J().javaClassMember()
J.javaClassStaticMember()
topLevel()
with(O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(A) { 1.companionExtensionMember() }
A()::classMember
A::classMember
A()::classExtension
A::classExtension
O::objectMember1
O::objectMember2
O::objectExtension
A.Companion::companionMember
(A)::companionMember
A.Companion::companionExtension
(A)::companionExtension
J()::javaClassMember
J::javaClassMember
J::javaClassStaticMember
::topLevel
with(A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,11 @@
package foo;
public class J {
public void javaClassMember() {
}
public static void javaClassStaticMember() {
}
}
@@ -0,0 +1,54 @@
package foo
import foo.O.objectExtensionMember2
class X
fun <caret>test() {
foo.A().classMember()
foo.A().classExtension()
foo.O.objectMember1()
foo.O.objectMember2()
foo.O.objectExtension()
foo.A.companionMember()
foo.A.companionExtension()
foo.J().javaClassMember()
foo.J.javaClassStaticMember()
foo.topLevel()
with(foo.O) { 1.objectExtensionMember1() }
1.objectExtensionMember2()
with(foo.A) { 1.companionExtensionMember() }
foo.A()::classMember
foo.A::classMember
foo.A()::classExtension
foo.A::classExtension
foo.O::objectMember1
foo.O::objectMember2
foo.O::objectExtension
foo.A.Companion::companionMember
(foo.A)::companionMember
foo.A.Companion::companionExtension
(foo.A)::companionExtension
foo.J()::javaClassMember
foo.J::javaClassMember
foo.J::javaClassStaticMember
::topLevel
with(foo.A()) {
classMember()
this.classMember()
classExtension()
this.classExtension()
this::classMember
this::classExtension
}
with(foo.J()) {
javaClassMember()
this.javaClassMember()
this::javaClassMember
}
}
@@ -0,0 +1,51 @@
package foo
class A {
fun classMember() {
}
companion object {
fun companionMember() {
}
fun Int.companionExtensionMember() {
}
}
}
fun A.classExtension() {
}
object O {
fun objectMember1() {
}
fun objectMember2() {
}
fun Int.objectExtensionMember1() {
}
fun Int.objectExtensionMember2() {
}
}
fun O.objectExtension() {
}
fun A.Companion.companionExtension() {
}
fun topLevel() {
}
@@ -0,0 +1,5 @@
{
"mainFile": "foo/usages.kt",
"type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS",
"targetPackage": "bar"
}