Implement quick-fix "let type implement interface" #KT-11404 Fixed

This commit is contained in:
Kirill Rakhman
2016-03-25 02:54:32 +01:00
committed by Mikhail Glukhikh
parent 2198a8c8d0
commit 1e6f507f5e
16 changed files with 290 additions and 0 deletions
@@ -0,0 +1,14 @@
// "Let 'B' implement interface 'A'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A) {
}
interface A
interface C
class B : C
@@ -0,0 +1,14 @@
// "Let 'B' implement interface 'A'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A) {
}
interface A
interface C
class B : C, A
@@ -0,0 +1,13 @@
// "Let 'B' implement interface 'A<Int>'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A<Int>) {
}
interface A<T>
class B
@@ -0,0 +1,13 @@
// "Let 'B' implement interface 'A<Int>'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A<Int>) {
}
interface A<T>
class B : A<Int>
@@ -0,0 +1,16 @@
// "Let 'B' implement interface 'A<Int>'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'B'
// ACTION: Convert to expression body
// ERROR: Type mismatch: inferred type is B but A<Int> was expected
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A<Int>) {
}
interface A<T>
class B : A<String>
@@ -0,0 +1,17 @@
// "Let 'B' implement interface 'A<*>'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'B'
// ACTION: Convert to expression body
// ERROR: Type mismatch: inferred type is B but A<*> was expected
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A<*>) {
}
interface A<T>
class B
@@ -0,0 +1,13 @@
// "Let 'B' implement interface 'A'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A) {
}
interface A
class B
@@ -0,0 +1,13 @@
// "Let 'B' implement interface 'A'" "true"
package let.implement
fun bar() {
foo(B()<caret>)
}
fun foo(a: A) {
}
interface A
class B : A
@@ -0,0 +1,14 @@
// "Let 'C' extend interface 'A'" "true"
package let.extend
fun bar() {
foo(B() as C<caret>)
}
fun foo(a: A) {
}
interface A
interface C
class B : C
@@ -0,0 +1,14 @@
// "Let 'C' extend interface 'A'" "true"
package let.extend
fun bar() {
foo(B() as C<caret>)
}
fun foo(a: A) {
}
interface A
interface C : A
class B : C
@@ -0,0 +1,17 @@
// "Let 'String' implement interface 'A'" "false"
// ACTION: Change parameter 'a' type of function 'let.implement.foo' to 'String'
// ACTION: Convert to expression body
// ACTION: To raw string literal
// ERROR: Type mismatch: inferred type is String but A was expected
package let.implement
fun bar() {
foo("Hello"<caret>)
}
fun foo(a: A) {
}
interface A
@@ -1,6 +1,7 @@
// "Change 'A' function return type to 'B'" "false"
// ACTION: Change 'b' type to 'A'
// ACTION: Convert property initializer to getter
// ACTION: Let 'A' implement interface 'B'
// ERROR: Type mismatch: inferred type is A but B was expected
class A constructor() {}