Introduce Type Alias

#KT-12902 Fixed
This commit is contained in:
Alexey Sedunov
2016-07-12 15:49:08 +03:00
parent ce0e5b4b46
commit 130e4fb745
63 changed files with 1482 additions and 90 deletions
@@ -0,0 +1,7 @@
// NAME:
class A<X, Y>
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
No name provided for type alias
@@ -0,0 +1,8 @@
// NAME: C
// SIBLING:
fun foo() {
class A<X, Y>
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
Type alias cannot refer to types which aren't accessible in the scope where it's defined
@@ -0,0 +1,9 @@
// NAME: C
class B<X>
// SIBLING:
fun foo() {
class A<X>
val a: <caret>(B<A<Int>>, A<Int>, A<String>) -> A<Int>
}
@@ -0,0 +1,11 @@
// NAME: C
class B<X>
typealias C<T, U> = (B<T>, T, U) -> T
// SIBLING:
fun foo() {
class A<X>
val a: C<A<Int>, A<String>>
}
@@ -0,0 +1,9 @@
// NAME: B
class A<X, Y>
class B
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
Type B already exists in the target scope
@@ -0,0 +1,10 @@
// NAME: S
// SIBLING:
fun foo() {
val t1: <caret>(Int) -> Boolean
val t2: (Int) -> Boolean
val t3: Int.() -> Boolean
val t4: (Int, Int) -> Boolean
val t5: (Boolean) -> Int
val t6: Function1<Int, Boolean>
}
@@ -0,0 +1,12 @@
typealias S = (Int) -> Boolean
// NAME: S
// SIBLING:
fun foo() {
val t1: S
val t2: S
val t3: Int.() -> Boolean
val t4: (Int, Int) -> Boolean
val t5: (Boolean) -> Int
val t6: S
}
@@ -0,0 +1,16 @@
// NAME: S
class A<X>
// SIBLING:
fun foo() {
class B<T>
val t1: <caret>(B<Int>) -> ((B<Int>) -> Boolean)
val t2: (B<Int>) -> ((B<Int>) -> Boolean)
val t3: ((B<Int>) -> B<Int>) -> Boolean
val t4: Function1<B<Int>, Function1<B<Int>, Boolean>>
val t5: (String) -> ((String) -> Boolean)
val t6: (Int) -> ((String) -> Boolean)
val t7: (A<B<String>>) -> ((A<B<String>>) -> Boolean)
}
@@ -0,0 +1,18 @@
// NAME: S
class A<X>
typealias S<T> = (T) -> ((T) -> Boolean)
// SIBLING:
fun foo() {
class B<T>
val t1: S<B<Int>>
val t2: S<B<Int>>
val t3: ((B<Int>) -> B<Int>) -> Boolean
val t4: S<B<Int>>
val t5: S<String>
val t6: (Int) -> ((String) -> Boolean)
val t7: S<A<B<String>>>
}
@@ -0,0 +1,7 @@
// NAME: F
class A<X, Y>
// SIBLING:
fun foo() {
val a: A<<caret>(Int) -> String, String>
}
@@ -0,0 +1,9 @@
// NAME: F
class A<X, Y>
typealias F = (Int) -> String
// SIBLING:
fun foo() {
val a: A<F, String>
}
@@ -0,0 +1,7 @@
// NAME: B
class A<X, Y>
fun foo() {
// SIBLING:
val a: <caret>A<Int, String>
}
@@ -0,0 +1,9 @@
// NAME: B
class A<X, Y>
fun foo() {
// SIBLING:
typealias B = A<Int, String>
val a: B
}
@@ -0,0 +1,9 @@
// NAME: C
class A<X, Y>
// SIBLING:
fun foo() {
class B<X, Y>
val a: <caret>A<B<Int, String>, B<String, Int>>
}
@@ -0,0 +1,11 @@
// NAME: C
class A<X, Y>
typealias C<T, U> = A<T, U>
// SIBLING:
fun foo() {
class B<X, Y>
val a: C<B<Int, String>, B<String, Int>>
}
@@ -0,0 +1,8 @@
// NAME: B
// VISIBILITY: private
class A<X, Y>
fun foo() {
// SIBLING:
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
'private' is not allowed in the target context
@@ -0,0 +1,7 @@
// NAME: B
class A<X, Y>
class Test {
// SIBLING
val a: <caret>A<Int, String>
}
@@ -0,0 +1,9 @@
// NAME: B
class A<X, Y>
class Test {
typealias B = A<Int, String>
// SIBLING
val a: B
}
@@ -0,0 +1,9 @@
// NAME: C
class A<X, Y>
// SIBLING:
fun foo() {
class B<X, Y>
val a: <caret>A<B<B<Int, String>, String>, B<String, B<Int, String>>>
}
@@ -0,0 +1,11 @@
// NAME: C
class A<X, Y>
typealias C<T, U> = A<T, U>
// SIBLING:
fun foo() {
class B<X, Y>
val a: C<B<B<Int, String>, String>, B<String, B<Int, String>>>
}
@@ -0,0 +1,4 @@
// NAME: A
fun foo() {
val x = <caret>1 + 2
}
@@ -0,0 +1 @@
Cannot perform refactoring without a type
@@ -0,0 +1,7 @@
// NAME: 12
class A<X, Y>
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
Type alias name must be a valid identifier: 12
@@ -0,0 +1,7 @@
// NAME: AN
class A<X, Y>
// SIBLING:
fun foo() {
val a: A<Int, String>?<caret>
}
@@ -0,0 +1,9 @@
// NAME: AN
class A<X, Y>
typealias AN = A<Int, String>?
// SIBLING:
fun foo() {
val a: AN
}
@@ -0,0 +1,8 @@
// NAME: B
// VISIBILITY: private
class A<X, Y>
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1,10 @@
// NAME: B
// VISIBILITY: private
class A<X, Y>
private typealias B = A<Int, String>
// SIBLING:
fun foo() {
val a: B
}
@@ -0,0 +1,8 @@
// NAME: B
// VISIBILITY: protected
class A<X, Y>
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1 @@
'protected' is not allowed in the target context
@@ -0,0 +1,7 @@
// NAME: B
class A<X, Y>
// SIBLING:
fun foo() {
val a: <caret>A<Int, String>
}
@@ -0,0 +1,9 @@
// NAME: B
class A<X, Y>
typealias B = A<Int, String>
// SIBLING:
fun foo() {
val a: B
}
@@ -0,0 +1,9 @@
// NAME: F
class A<X, Y>
// SIBLING:
fun foo() {
class B<X>
val a: A<<caret>(B<Int>) -> B<String>, String>
}
@@ -0,0 +1,11 @@
// NAME: F
class A<X, Y>
typealias F<T, U> = (T) -> U
// SIBLING:
fun foo() {
class B<X>
val a: A<F<B<Int>, B<String>>, String>
}
@@ -0,0 +1,9 @@
// NAME: S
class A<X, Y>
// SIBLING:
fun foo() {
val t1: <caret>A<Int, Boolean>
val t2: A<Int, Boolean>
val t3: A<Boolean, Int>
}
@@ -0,0 +1,11 @@
// NAME: S
class A<X, Y>
typealias S = A<Int, Boolean>
// SIBLING:
fun foo() {
val t1: S
val t2: S
val t3: A<Boolean, Int>
}
@@ -0,0 +1,13 @@
// NAME: S
class A<X, Y>
// SIBLING:
fun foo() {
class B<T>
val t1: <caret>A<B<Int>, A<B<Int>, Boolean>>
val t2: A<B<Int>, A<B<Int>, Boolean>>
val t3: A<String, A<String, Boolean>>
val t4: A<Int, A<String, Boolean>>
val t5: A<(Int) -> Int, A<() -> Int, Boolean>>
}
@@ -0,0 +1,15 @@
// NAME: S
class A<X, Y>
typealias S<T> = A<T, A<T, Boolean>>
// SIBLING:
fun foo() {
class B<T>
val t1: S<B<Int>>
val t2: S<B<Int>>
val t3: S<String>
val t4: A<Int, A<String, Boolean>>
val t5: A<(Int) -> Int, A<() -> Int, Boolean>>
}