KT-8530 Synthetic properties doesn't work with smart casts

#KT-8530 Fixed
This commit is contained in:
Valentin Kipyatkov
2015-07-17 15:13:39 +03:00
parent b6027a0efe
commit 23cfe88b71
19 changed files with 229 additions and 71 deletions
@@ -0,0 +1,28 @@
// FILE: KotlinFile.kt
fun foo(o: JavaInterface2): Int {
if (o is JavaClass) {
<!DEBUG_INFO_SMARTCAST!>o<!>.something++
return <!DEBUG_INFO_SMARTCAST!>o<!>.x + o.something2
}
return 0
}
// FILE: JavaClass.java
public abstract class JavaClass extends BaseClass implements JavaInterface {
public int getSomething() { return 1; }
public void setSomething(int value) { }
}
// FILE: BaseClass.java
public abstract class BaseClass implements JavaInterface {
}
// FILE: JavaInterface.java
public interface JavaInterface {
int getX();
}
// FILE: JavaInterface2.java
public interface JavaInterface2 {
int getSomething2();
}
@@ -0,0 +1,37 @@
package
public /*synthesized*/ fun JavaInterface(/*0*/ function: () -> kotlin.Int): JavaInterface
public /*synthesized*/ fun JavaInterface2(/*0*/ function: () -> kotlin.Int): JavaInterface2
internal fun foo(/*0*/ o: JavaInterface2): kotlin.Int
public abstract class BaseClass : JavaInterface {
public constructor BaseClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun getX(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class JavaClass : BaseClass, JavaInterface {
public constructor JavaClass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): kotlin.Int
public abstract override /*2*/ /*fake_override*/ fun getX(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JavaInterface {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getX(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JavaInterface2 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething2(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,23 @@
// FILE: KotlinFile.kt
fun Any.foo(): Int {
if (this is JavaClass) {
something++
return x
}
return 0
}
// FILE: JavaClass.java
public abstract class JavaClass extends BaseClass implements JavaInterface {
public int getSomething() { return 1; }
public void setSomething(int value) { }
}
// FILE: BaseClass.java
public abstract class BaseClass implements JavaInterface {
}
// FILE: JavaInterface.java
public interface JavaInterface {
int getX();
}
@@ -0,0 +1,29 @@
package
public /*synthesized*/ fun JavaInterface(/*0*/ function: () -> kotlin.Int): JavaInterface
internal fun kotlin.Any.foo(): kotlin.Int
public abstract class BaseClass : JavaInterface {
public constructor BaseClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun getX(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class JavaClass : BaseClass, JavaInterface {
public constructor JavaClass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): kotlin.Int
public abstract override /*2*/ /*fake_override*/ fun getX(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JavaInterface {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getX(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}