Push Down: Support moving members from Java to Kotlin class
#KT-9485 Fixed
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
abstract class <caret>A {
|
||||
// INFO: {"checked": "true"}
|
||||
abstract val y: Boolean
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
val z: Int = 1
|
||||
// INFO: {"checked": "true"}
|
||||
abstract fun foo(n: Int, m: Int)
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
fun foo(b: Boolean) = !b
|
||||
}
|
||||
|
||||
class B : A {
|
||||
val x: Int = 2
|
||||
|
||||
val y: Boolean get() = x > 0
|
||||
|
||||
val z: Int = 3
|
||||
|
||||
fun foo(n: Int) = n + 2
|
||||
|
||||
fun foo(n: Int, m: Int) = n + m
|
||||
|
||||
fun foo(b: Boolean) = true
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
Function 'fun foo(Boolean): Boolean' in class B will override corresponding member of class A after refactoring
|
||||
Function 'fun foo(Int, Int): Int' in class B will override corresponding member of class A after refactoring
|
||||
Property 'val y: Boolean' in class B will override corresponding member of class A after refactoring
|
||||
Property 'val z: Int' in class B will override corresponding member of class A after refactoring
|
||||
@@ -0,0 +1,32 @@
|
||||
abstract class <caret>A {
|
||||
// INFO: {"checked": "true"}
|
||||
open val x: Int = 1
|
||||
// INFO: {"checked": "true"}
|
||||
abstract val y: Boolean
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
open val z: Int = 1
|
||||
// INFO: {"checked": "true"}
|
||||
open fun foo(n: Int) = n + 1
|
||||
// INFO: {"checked": "true"}
|
||||
abstract fun foo(n: Int, m: Int)
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
open fun foo(b: Boolean) = !b
|
||||
// INFO: {"checked": "true"}
|
||||
class X
|
||||
}
|
||||
|
||||
class B : A {
|
||||
override val x: Int = 2
|
||||
|
||||
override val y: Boolean get() = x > 0
|
||||
|
||||
override val z: Int = 3
|
||||
|
||||
override fun foo(n: Int) = n + 2
|
||||
|
||||
override fun foo(n: Int, m: Int) = n + m
|
||||
|
||||
override fun foo(b: Boolean) = true
|
||||
|
||||
class X
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
Class B already contains function 'fun foo(Int): Int'
|
||||
Class B already contains nested class named X
|
||||
Class B already contains property 'val x: Int'
|
||||
@@ -0,0 +1,6 @@
|
||||
open class <caret>A {
|
||||
// INFO: {"checked": "true"}
|
||||
val x: Int
|
||||
}
|
||||
|
||||
interface I : A
|
||||
@@ -0,0 +1,2 @@
|
||||
Interface I inherits from class A.
|
||||
It won't be affected by the refactoring
|
||||
@@ -0,0 +1,30 @@
|
||||
open class A {
|
||||
open fun foo(n: Int) {
|
||||
|
||||
}
|
||||
|
||||
open fun bar(n: Int) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
open class <caret>B : A() {
|
||||
// INFO: {"checked": "true"}
|
||||
fun foo() {
|
||||
super.foo(1)
|
||||
super.bar(1)
|
||||
}
|
||||
|
||||
// INFO: {"checked": "true"}
|
||||
override fun foo(n: Int) {
|
||||
|
||||
}
|
||||
|
||||
override fun bar(n: Int) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class C : B() {
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Pushed member won't be available in 'super.bar(1)'
|
||||
@@ -0,0 +1,10 @@
|
||||
open class A {
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
protected open fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
open class A {
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
protected abstract fun foo()
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
override fun foo() {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 = bar() + bar() + bar()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
open class <caret>A {
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
private open fun foo() {
|
||||
|
||||
}
|
||||
|
||||
inner class B : A() {
|
||||
override fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
open class A {
|
||||
// INFO: {"checked": "true", "toAbstract": "true"}
|
||||
protected abstract fun foo()
|
||||
|
||||
inner class B : A() {
|
||||
override fun foo() {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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()
|
||||
}
|
||||
+64
@@ -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 <S> foo(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 <S> foo(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 <S> foo(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 {
|
||||
|
||||
}
|
||||
}
|
||||
+31
@@ -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()
|
||||
}
|
||||
+74
@@ -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,14 @@
|
||||
open class <caret>A {
|
||||
private fun foo() {
|
||||
|
||||
}
|
||||
|
||||
// INFO: {"checked": "true"}
|
||||
fun bar() {
|
||||
foo()
|
||||
}
|
||||
}
|
||||
|
||||
class B : A() {
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
Function 'fun bar()' uses function 'fun foo()', which is not accessible from the class B
|
||||
@@ -0,0 +1,37 @@
|
||||
open class <caret>A {
|
||||
fun foo() {
|
||||
|
||||
}
|
||||
|
||||
// INFO: {"checked": "true"}
|
||||
fun foo(n: Int) {
|
||||
|
||||
}
|
||||
|
||||
fun test() {
|
||||
foo()
|
||||
foo(1)
|
||||
}
|
||||
}
|
||||
|
||||
open class B : A() {
|
||||
|
||||
}
|
||||
|
||||
class C : B() {
|
||||
|
||||
}
|
||||
|
||||
fun A.test() {
|
||||
foo()
|
||||
foo(2)
|
||||
}
|
||||
|
||||
fun test() {
|
||||
A().foo()
|
||||
A().foo(3)
|
||||
B().foo()
|
||||
B().foo(4)
|
||||
C().foo()
|
||||
C().foo(5)
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
Pushed member won't be available in 'foo(1)'
|
||||
Pushed member won't be available in 'foo(2)'
|
||||
Pushed member won't be available in 'foo(3)'
|
||||
@@ -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>
|
||||
+14
@@ -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>>
|
||||
Reference in New Issue
Block a user