Push Down: Initial Support

This commit is contained in:
Alexey Sedunov
2015-07-28 21:28:39 +03:00
parent 5168ccc159
commit a66ef47887
42 changed files with 1638 additions and 356 deletions
+8
View File
@@ -0,0 +1,8 @@
class <caret>A {
// INFO: {"checked": "true"}
val x = 1
// INFO: {"checked": "true"}
fun foo() {
}
}
@@ -0,0 +1,2 @@
Cannot perform refactoring.
Class <b><code>A</code></b> is final
@@ -0,0 +1,12 @@
class X {
open class <caret>A {
// INFO: {"checked": "true"}
fun foo(): Int = bar() + A.bar() + X.A.bar()
companion object {
fun bar() = 1
}
}
}
class B : X.A
@@ -0,0 +1,13 @@
class X {
open class A {
companion object {
fun bar() = 1
}
}
}
class B : X.A {
// INFO: {"checked": "true"}
fun foo(): Int = X.A.bar() + X.A.bar() + X.A.bar()
}
+12
View File
@@ -0,0 +1,12 @@
open class <caret>A {
// INFO: {"checked": "true", "toAbstract": "true"}
private fun foo() {
}
}
class B : A {
fun foo() {
}
}
+10
View File
@@ -0,0 +1,10 @@
open class A {
// INFO: {"checked": "true", "toAbstract": "true"}
protected abstract fun foo()
}
class B : A {
override fun foo() {
}
}
+4
View File
@@ -0,0 +1,4 @@
class A {
val x: Int = 1
}
@@ -0,0 +1,2 @@
Cannot perform refactoring.
Caret should be positioned inside a class to push members from
@@ -0,0 +1,8 @@
object <caret>O {
// INFO: {"checked": "true"}
val x = 1
// INFO: {"checked": "true"}
fun foo() {
}
}
@@ -0,0 +1,2 @@
Cannot perform refactoring.
Object <b><code>O</code></b> is final
+3
View File
@@ -0,0 +1,3 @@
fun <caret>test() {
}
@@ -0,0 +1,2 @@
Cannot perform refactoring.
Caret should be positioned inside a class to push members from
+34
View File
@@ -0,0 +1,34 @@
abstract class <caret>A {
// INFO: {"checked": "true"}
val x = 1
// INFO: {"checked": "true"}
val y: Int get() = 2
// INFO: {"checked": "true"}
val z: Int by lazy { 3 }
// INFO: {"checked": "true"}
abstract val t: Int
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true"}
inner class X {
}
// INFO: {"checked": "true"}
class Y {
}
}
abstract class B : A() {
}
class C : A() {
override val t = 1
override fun bar(s: String) = s.length()
}
@@ -0,0 +1,55 @@
abstract class A {
}
abstract class B : A() {
// INFO: {"checked": "true"}
val x = 1
// INFO: {"checked": "true"}
val y: Int get() = 2
// INFO: {"checked": "true"}
val z: Int by lazy { 3 }
// INFO: {"checked": "true"}
abstract val t: Int
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true"}
inner class X {
}
// INFO: {"checked": "true"}
class Y {
}
}
class C : A() {
val t = 1
// INFO: {"checked": "true"}
val x = 1
// INFO: {"checked": "true"}
val y: Int get() = 2
// INFO: {"checked": "true"}
val z: Int by lazy { 3 }
fun bar(s: String) = s.length()
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
inner class X {
}
// INFO: {"checked": "true"}
class Y {
}
}
@@ -0,0 +1,34 @@
abstract class <caret>A {
// INFO: {"checked": "true", "toAbstract": "true"}
val x = 1
// INFO: {"checked": "true", "toAbstract": "true"}
val y: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
val z: Int by lazy { 3 }
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val t: Int
// INFO: {"checked": "true", "toAbstract": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true", "toAbstract": "true"}
inner class X {
}
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
abstract class B : A() {
}
class C : A() {
override val t = 1
override fun bar(s: String) = s.length()
}
@@ -0,0 +1,64 @@
abstract class A {
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val x: Int
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val y: Int
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val z: Int
// INFO: {"checked": "true", "toAbstract": "true"}
abstract fun foo(n: Int): Boolean
}
abstract class B : A() {
// INFO: {"checked": "true", "toAbstract": "true"}
override val x = 1
// INFO: {"checked": "true", "toAbstract": "true"}
override val y: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
override val z: Int by lazy { 3 }
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val t: Int
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true", "toAbstract": "true"}
inner class X {
}
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
class C : A() {
val t = 1
// INFO: {"checked": "true", "toAbstract": "true"}
override val x = 1
// INFO: {"checked": "true", "toAbstract": "true"}
override val y: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
override val z: Int by lazy { 3 }
fun bar(s: String) = s.length()
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
inner class X {
}
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
@@ -0,0 +1,29 @@
interface Z<T>
open class <caret>A<T> {
// INFO: {"checked": "true"}
val t1: T
// INFO: {"checked": "true"}
val t2: Z<T>
// INFO: {"checked": "true"}
fun foo<S>(t1: T, t2: Z<T>, s1: S, s2: Z<S>): Boolean = true
// INFO: {"checked": "true"}
inner class X : Z<T> {
}
// INFO: {"checked": "true"}
class Y<U> : Z<U> {
}
}
class B<S> : A<Z<S>>() {
}
class C<K> : A<B<K>>() {
}
@@ -0,0 +1,47 @@
interface Z<T>
open class A<T> {
}
class B<S> : A<Z<S>>() {
// INFO: {"checked": "true"}
val t1: Z<S>
// INFO: {"checked": "true"}
val t2: Z<Z<S>>
// INFO: {"checked": "true"}
fun foo<S>(t1: Z<S>, t2: Z<Z<S>>, s1: S, s2: Z<S>): Boolean = true
// INFO: {"checked": "true"}
inner class X : Z<Z<S>> {
}
// INFO: {"checked": "true"}
class Y<U> : Z<U> {
}
}
class C<K> : A<B<K>>() {
// INFO: {"checked": "true"}
val t1: B<K>
// INFO: {"checked": "true"}
val t2: Z<B<K>>
// INFO: {"checked": "true"}
fun foo<S>(t1: B<K>, t2: Z<B<K>>, s1: S, s2: Z<S>): Boolean = true
// INFO: {"checked": "true"}
inner class X : Z<B<K>> {
}
// INFO: {"checked": "true"}
class Y<U> : Z<U> {
}
}
@@ -0,0 +1,31 @@
interface <caret>I {
// INFO: {"checked": "true"}
val x: Int get() = 2
// INFO: {"checked": "true"}
val y: Int
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
fun bar(s: String)
// INFO: {"checked": "true"}
class Y {
}
}
abstract class A : I
class B : I {
override val y = 1
override fun bar(s: String) = s.length()
}
interface J : I
interface K : I {
override val y: Int get() = 1
override fun bar(s: String) = s.length()
}
@@ -0,0 +1,69 @@
interface I {
}
abstract class A : I {
// INFO: {"checked": "true"}
val x: Int get() = 2
// INFO: {"checked": "true"}
abstract val y: Int
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true"}
class Y {
}
}
class B : I {
val y = 1
// INFO: {"checked": "true"}
val x: Int get() = 2
fun bar(s: String) = s.length()
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
class Y {
}
}
interface J : I {
// INFO: {"checked": "true"}
val x: Int get() = 2
// INFO: {"checked": "true"}
val y: Int
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
fun bar(s: String)
// INFO: {"checked": "true"}
class Y {
}
}
interface K : I {
val y: Int get() = 1
// INFO: {"checked": "true"}
val x: Int get() = 2
fun bar(s: String) = s.length()
// INFO: {"checked": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true"}
class Y {
}
}
@@ -0,0 +1,31 @@
interface <caret>I {
// INFO: {"checked": "true", "toAbstract": "true"}
val x: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
val y: Int
// INFO: {"checked": "true", "toAbstract": "true"}
fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
fun bar(s: String)
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
abstract class A : I
class B : I {
override val y = 1
override fun bar(s: String) = s.length()
}
interface J : I
interface K : I {
override val y: Int get() = 1
override fun bar(s: String) = s.length()
}
@@ -0,0 +1,74 @@
interface I {
// INFO: {"checked": "true", "toAbstract": "true"}
val x: Int
// INFO: {"checked": "true", "toAbstract": "true"}
fun foo(n: Int): Boolean
}
abstract class A : I {
// INFO: {"checked": "true", "toAbstract": "true"}
override val x: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
abstract val y: Int
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
abstract fun bar(s: String)
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
class B : I {
val y = 1
// INFO: {"checked": "true", "toAbstract": "true"}
override val x: Int get() = 2
fun bar(s: String) = s.length()
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
interface J : I {
// INFO: {"checked": "true", "toAbstract": "true"}
override val x: Int get() = 2
// INFO: {"checked": "true", "toAbstract": "true"}
val y: Int
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
fun bar(s: String)
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
interface K : I {
val y: Int get() = 1
// INFO: {"checked": "true", "toAbstract": "true"}
override val x: Int get() = 2
fun bar(s: String) = s.length()
// INFO: {"checked": "true", "toAbstract": "true"}
override fun foo(n: Int): Boolean = n > 0
// INFO: {"checked": "true", "toAbstract": "true"}
class Y {
}
}
@@ -0,0 +1,12 @@
// INFO: {"checked": "true"}
interface X
// INFO: {"checked": "true"}
interface Y
// INFO: {"checked": "true"}
interface Z
open class <caret>A : X, Y, Z
class B : A(), Z
@@ -0,0 +1,12 @@
// INFO: {"checked": "true"}
interface X
// INFO: {"checked": "true"}
interface Y
// INFO: {"checked": "true"}
interface Z
open class A
class B : A(), Z, X, Y
@@ -0,0 +1,14 @@
interface I
// INFO: {"checked": "true"}
interface X<T>
// INFO: {"checked": "true"}
interface Y<T>
// INFO: {"checked": "true"}
interface Z<T>
open class <caret>A<T, U> : X<T>, Y<X<I>>, Z<Y<U>>
class B<S> : A<X<S>, Y<S>>(), Z<I>
@@ -0,0 +1,14 @@
interface I
// INFO: {"checked": "true"}
interface X<T>
// INFO: {"checked": "true"}
interface Y<T>
// INFO: {"checked": "true"}
interface Z<T>
open class A<T, U>
class B<S> : A<X<S>, Y<S>>(), Z<I>, X<X<S>>, Y<X<I>>