Create from Usage: Suggest "Create function/secondary constructor" quick fix on argument type mismatch

#KT-11864 Fixed
(cherry picked from commit 1912783)
This commit is contained in:
Alexey Sedunov
2016-06-15 17:55:13 +03:00
parent 5296b61ce9
commit 69704c017f
13 changed files with 57 additions and 4 deletions
@@ -0,0 +1,6 @@
// "Create function 'foo'" "true"
fun foo(n: Int) {}
fun test() {
foo("a<caret>bc")
}
@@ -0,0 +1,10 @@
// "Create function 'foo'" "true"
fun foo(n: Int) {}
fun test() {
foo("abc")
}
fun foo(n: String) {
throw UnsupportedOperationException("not implemented") //To change body of created functions use File | Settings | File Templates.
}
@@ -0,0 +1,7 @@
// "Create secondary constructor" "true"
// ERROR: None of the following functions can be called with the arguments supplied: <br>public constructor Foo(n: Int) defined in Foo<br>public constructor Foo(n: String) defined in Foo
class Foo(val n: Int)
fun test() {
val foo = Foo("a<caret>bc")
}
@@ -0,0 +1,9 @@
// "Create secondary constructor" "true"
// ERROR: None of the following functions can be called with the arguments supplied: <br>public constructor Foo(n: Int) defined in Foo<br>public constructor Foo(n: String) defined in Foo
class Foo(val n: Int) {
constructor(n: String) : this(<caret>)
}
fun test() {
val foo = Foo("abc")
}
@@ -1,5 +1,6 @@
// "Add non-null asserted (!!) call" "false"
// ACTION: Change parameter 's' type of function 'other' to 'String?'
// ACTION: Create function 'other'
// ERROR: Type mismatch: inferred type is String? but Int was expected
fun test() {
val s: String? = ""
@@ -1,6 +1,7 @@
// "Let 'B' implement interface 'A<Int>'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'B'
// ACTION: Convert to expression body
// ACTION: Create function 'foo'
// ERROR: Type mismatch: inferred type is B but A<Int> was expected
package let.implement
@@ -1,6 +1,7 @@
// "Let 'B' implement interface 'A<*>'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'B'
// ACTION: Convert to expression body
// ACTION: Create function 'foo'
// ERROR: Type mismatch: inferred type is B but A<*> was expected
package let.implement
@@ -1,6 +1,7 @@
// "Let 'B' implement interface 'A<Int>'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'B'
// ACTION: Convert to expression body
// ACTION: Create function 'foo'
// ERROR: Type mismatch: inferred type is B but A<Int> was expected
package let.implement
@@ -2,6 +2,7 @@
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'String'
// ACTION: Convert to expression body
// ACTION: To raw string literal
// ACTION: Create function 'foo'
// ERROR: Type mismatch: inferred type is String but A was expected
package let.implement