Support loading methods from Java as common properties overrides

This commit is contained in:
Denis Zharkov
2015-10-08 14:19:01 +03:00
parent 396f38e9b3
commit ad68378836
25 changed files with 628 additions and 90 deletions
@@ -0,0 +1,24 @@
public class J extends A {
public boolean okField = false;
public int getValProp() {
return 123;
}
public int getVarProp() {
return 456;
}
public void setVarProp(int x) {
okField = true;
}
public int isProp() {
return 789;
}
public void setProp(int x) {
okField = true;
}
}
@@ -0,0 +1,37 @@
open class A {
open val valProp: Int = -1
open var varProp: Int = -1
open var isProp: Int = -1
}
fun box(): String {
val j = J()
val a: A = j
if (j.valProp != 123) return "fail 1"
if (a.valProp != 123) return "fail 2"
j.varProp = -1
if (!j.okField) return "fail 3"
j.okField = false
a.varProp = -1
if (!j.okField) return "fail 4"
j.okField = false
if (j.varProp != 456) return "fail 5"
if (a.varProp != 456) return "fail 6"
j.isProp = -1
if (!j.okField) return "fail 7"
j.okField = false
a.isProp = -1
if (!j.okField) return "fail 8"
j.okField = false
if (j.isProp != 789) return "fail 9"
if (a.isProp != 789) return "fail 10"
return "OK"
}
@@ -0,0 +1,32 @@
// FILE: A.java
public interface A extends B {
public int getFoo();
public void setFoo(int x);
}
// FILE: BImpl.java
public class BImpl implements B {
public int getFoo() {}
public void setFoo(int x) {}
}
// FILE: main.kt
interface B {
var foo: Int
}
interface C1 : A {
override var foo: Int
}
class D : C1, BImpl()
fun foo() {
BImpl().foo = BImpl().foo + 1
D().foo = D().foo + 2
}
@@ -0,0 +1,40 @@
package
public fun foo(): kotlin.Unit
public interface A : B {
public abstract override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B {
public abstract var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class BImpl : B {
public constructor BImpl()
public open override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface C1 : A {
public abstract override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class D : C1, BImpl {
public constructor D()
public open override /*2*/ /*fake_override*/ var foo: kotlin.Int
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,27 @@
// FILE: A.java
public class A extends B {
public int isFoo() { return 0; }
public void setFoo(int x) {}
}
// FILE: F.java
public class F extends B {
public final int isFoo() { return 0; }
public final void setFoo(int x) {}
}
// FILE: main.kt
open class B {
open var isFoo: Int = 1
}
class C1 : A() {
override var isFoo: Int = 2
}
class C2 : F() {
<!OVERRIDING_FINAL_MEMBER!>override<!> var isFoo: Int = 3
}
@@ -0,0 +1,41 @@
package
public open class A : B {
public constructor A()
public open override /*1*/ var isFoo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class B {
public constructor B()
public open var isFoo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C1 : A {
public constructor C1()
public open override /*1*/ var isFoo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C2 : F {
public constructor C2()
public open override /*1*/ var isFoo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class F : B {
public constructor F()
public final override /*1*/ var isFoo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,25 @@
// FILE: A.java
public class A extends B {
public int getFoo() { return 0; }
}
// FILE: F.java
public class F extends B {
public final int getFoo() { return 0; }
}
// FILE: main.kt
open class B {
open val foo: Int = 1
}
class C1 : A() {
override val foo: Int = 2
}
class C2 : F() {
<!OVERRIDING_FINAL_MEMBER!>override<!> val foo: Int = 3
}
@@ -0,0 +1,41 @@
package
public open class A : B {
public constructor A()
public open override /*1*/ val foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class B {
public constructor B()
public open val foo: kotlin.Int = 1
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C1 : A {
public constructor C1()
public open override /*1*/ val foo: kotlin.Int = 2
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C2 : F {
public constructor C2()
public open override /*1*/ val foo: kotlin.Int = 3
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class F : B {
public constructor F()
public final override /*1*/ val foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,42 @@
// FILE: A.java
public class A extends B {
public int getFoo() { return 0; }
public void setFoo(int x) {}
}
// FILE: F.java
public class F extends B {
public final int getFoo() { return 0; }
public final void setFoo(int x) {}
}
// FILE: ConflictingModality.java
public class ConflictingModality extends B {
public final int getFoo() { return 0; }
public abstract void setFoo(int x) {}
}
// FILE: ConflictingVisibility.java
public class ConflictingVisibility extends B {
public int getFoo() { return 0; }
protected void setFoo(int x) {}
}
// FILE: main.kt
open class B {
// check that final is not overridden
open protected var foo: Int = 1
}
class C1 : A() {
override var foo: Int = 2
}
class C2 : F() {
<!OVERRIDING_FINAL_MEMBER!>override<!> var foo: Int = 3
}
@@ -0,0 +1,59 @@
package
public open class A : B {
public constructor A()
public open override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class B {
public constructor B()
protected open var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C1 : A {
public constructor C1()
public open override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class C2 : F {
public constructor C2()
public open override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class ConflictingModality : B {
public constructor ConflictingModality()
protected open override /*1*/ /*fake_override*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun getFoo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setFoo(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class ConflictingVisibility : B {
public constructor ConflictingVisibility()
public open override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class F : B {
public constructor F()
public final override /*1*/ var foo: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -5,7 +5,7 @@ public fun foo(): kotlin.Unit
@kotlin.jvm.PurelyImplements(value = "kotlin.MutableCollection") public/*package*/ open class A</*0*/ T : kotlin.Any!> : java.util.AbstractCollection<T!>, kotlin.MutableCollection<T> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
@java.lang.Override() public open override /*2*/ val size: kotlin.Int
public open override /*2*/ val size: kotlin.Int
public open override /*2*/ /*fake_override*/ fun add(/*0*/ e: T): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection<T>): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun clear(): kotlin.Unit
@@ -6,7 +6,7 @@ public fun foo(): kotlin.Unit
@kotlin.jvm.PurelyImplements(value = "kotlin.MutableList") public/*package*/ open class A</*0*/ T : kotlin.Any!> : java.util.AbstractList<T!>, kotlin.MutableList<T> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!>()
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int
@java.lang.Override() public open override /*2*/ val size: kotlin.Int
public open override /*2*/ val size: kotlin.Int
public open override /*2*/ /*fake_override*/ fun add(/*0*/ e: T): kotlin.Boolean
public open override /*2*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection<T>): kotlin.Boolean
@@ -6,7 +6,7 @@ public val y: B<kotlin.String>
@kotlin.jvm.PurelyImplements(value = "") public open class A</*0*/ T : kotlin.Any!> : java.util.AbstractList<T!> {
public constructor A</*0*/ T : kotlin.Any!>()
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int
@java.lang.Override() public open override /*1*/ val size: kotlin.Int
public open override /*1*/ val size: kotlin.Int
public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: T!): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection<T!>): kotlin.Boolean
@@ -6,7 +6,7 @@ public fun foo(): kotlin.Unit
@kotlin.jvm.PurelyImplements(value = "kotlin.MutableList") public/*package*/ open class A</*0*/ T : kotlin.Any!, /*1*/ V : kotlin.Any!> : java.util.AbstractList<T!> {
public/*package*/ constructor A</*0*/ T : kotlin.Any!, /*1*/ V : kotlin.Any!>()
protected/*protected and package*/ final override /*1*/ /*fake_override*/ var modCount: kotlin.Int
@java.lang.Override() public open override /*1*/ val size: kotlin.Int
public open override /*1*/ val size: kotlin.Int
public open override /*1*/ /*fake_override*/ fun add(/*0*/ e: T!): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun add(/*0*/ index: kotlin.Int, /*1*/ element: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun addAll(/*0*/ c: kotlin.Collection<T!>): kotlin.Boolean