Iniital implementation of synthetic extensions for SAM-adapter functions (non-static only)

This commit is contained in:
Valentin Kipyatkov
2015-07-28 17:13:09 +03:00
parent 8b3870cc33
commit 729085ec9a
106 changed files with 624 additions and 364 deletions
@@ -0,0 +1,20 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.url = javaClass.url + "/"
javaClass.htmlFile += "1"
javaClass.<!UNRESOLVED_REFERENCE!>URL<!>
javaClass.<!UNRESOLVED_REFERENCE!>uRL<!>
javaClass.<!UNRESOLVED_REFERENCE!>HTMLFile<!>
javaClass.<!UNRESOLVED_REFERENCE!>hTMLFile<!>
javaClass.<!UNRESOLVED_REFERENCE!>htmlfile<!>
}
// FILE: JavaClass.java
public class JavaClass {
public String getURL() { return true; }
public void setURL(String value) { }
public String getHTMLFile() { return true; }
public void setHTMLFile(String value) { }
}
@@ -0,0 +1,14 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getHTMLFile(): kotlin.String!
public open fun getURL(): kotlin.String!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setHTMLFile(/*0*/ value: kotlin.String!): kotlin.Unit
public open fun setURL(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,31 @@
// FILE: KotlinFile.kt
open class KotlinClass1 : JavaClass1() {
public fun getSomethingKotlin1(): Int = 1
}
class KotlinClass2 : JavaClass2() {
public fun getSomethingKotlin2(): Int = 1
}
fun foo(k: KotlinClass2) {
useInt(k.getSomething1())
useInt(k.something1)
useInt(k.getSomething2())
useInt(k.something2)
useInt(k.getSomethingKotlin1())
useInt(k.getSomethingKotlin2())
k.<!UNRESOLVED_REFERENCE!>somethingKotlin1<!>
k.<!UNRESOLVED_REFERENCE!>somethingKotlin2<!>
}
fun useInt(<!UNUSED_PARAMETER!>i<!>: Int) {}
// FILE: JavaClass1.java
public class JavaClass1 {
public int getSomething1() { return 1; }
}
// FILE: JavaClass2.java
public class JavaClass2 extends KotlinClass1 {
public int getSomething2() { return 1; }
}
@@ -0,0 +1,42 @@
package
internal fun foo(/*0*/ k: KotlinClass2): kotlin.Unit
internal fun useInt(/*0*/ i: kotlin.Int): kotlin.Unit
public open class JavaClass1 {
public constructor JavaClass1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class JavaClass2 : KotlinClass1 {
public constructor JavaClass2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun getSomething1(): kotlin.Int
public open fun getSomething2(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun getSomethingKotlin1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal open class KotlinClass1 : JavaClass1 {
public constructor KotlinClass1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun getSomething1(): kotlin.Int
public final fun getSomethingKotlin1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class KotlinClass2 : JavaClass2 {
public constructor KotlinClass2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun getSomething1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun getSomething2(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun getSomethingKotlin1(): kotlin.Int
public final fun getSomethingKotlin2(): 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,6 @@
// FILE: KotlinFile.kt
import java.io.File
fun foo(file: File) {
file.absolutePath.length()
}
@@ -0,0 +1,3 @@
package
internal fun foo(/*0*/ file: java.io.File): kotlin.Unit
@@ -0,0 +1,21 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.<!UNRESOLVED_REFERENCE!>something1<!>
javaClass.<!UNRESOLVED_REFERENCE!>something2<!>
javaClass.<!UNRESOLVED_REFERENCE!>somethingStatic<!>
javaClass.<!UNRESOLVED_REFERENCE!>somethingVoid<!>
javaClass.<!UNRESOLVED_REFERENCE!>ter<!>
}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething1(int p) { return p; }
public <T> T getSomething2() { return null; }
public static int getSomethingStatic() { return 1; }
public void getSomethingVoid() { }
public int getter() { return 1; }
}
@@ -0,0 +1,17 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething1(/*0*/ p: kotlin.Int): kotlin.Int
public open fun </*0*/ T : kotlin.Any!> getSomething2(): T!
public open fun getSomethingVoid(): kotlin.Unit
public open fun getter(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public open fun getSomethingStatic(): kotlin.Int
}
@@ -0,0 +1,30 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
<!VAL_REASSIGNMENT!>javaClass.something1<!>++
<!VAL_REASSIGNMENT!>javaClass.something2<!>++
<!VAL_REASSIGNMENT!>javaClass.something3<!>++
<!VAL_REASSIGNMENT!>javaClass.something4<!>++
<!VAL_REASSIGNMENT!>javaClass.something5<!>++
<!VAL_REASSIGNMENT!>javaClass.something6<!> = null
}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething1() { return 1; }
public void setSomething1(int value, char c) { }
public int getSomething2() { return 1; }
public void setSomething2(String value) { }
public int getSomething3() { return 1; }
public int setSomething3(int value) { return value; }
public int getSomething4() { return 1; }
public <T> void setSomething4(int value) { return value; }
public int getSomething5() { return 1; }
public static void setSomething5(int value) { }
public int[] getSomething6() { return null; }
public void setSomething6(int... value) { }
}
@@ -0,0 +1,24 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething1(): kotlin.Int
public open fun getSomething2(): kotlin.Int
public open fun getSomething3(): kotlin.Int
public open fun getSomething4(): kotlin.Int
public open fun getSomething5(): kotlin.Int
public open fun getSomething6(): kotlin.IntArray!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething1(/*0*/ value: kotlin.Int, /*1*/ c: kotlin.Char): kotlin.Unit
public open fun setSomething2(/*0*/ value: kotlin.String!): kotlin.Unit
public open fun setSomething3(/*0*/ value: kotlin.Int): kotlin.Int
public open fun </*0*/ T : kotlin.Any!> setSomething4(/*0*/ value: kotlin.Int): kotlin.Unit
public open fun setSomething6(/*0*/ vararg value: kotlin.Int /*kotlin.IntArray!*/): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public open fun setSomething5(/*0*/ value: kotlin.Int): kotlin.Unit
}
@@ -0,0 +1,19 @@
// FILE: KotlinFile.kt
interface C : A, B
fun foo(c: C) {
c.setSomething(c.getSomething() + 1)
c.something++
}
// FILE: A.java
public interface A {
int getSomething();
}
// FILE: B.java
public interface B {
int getSomething();
void setSomething(int value);
}
@@ -0,0 +1,27 @@
package
public /*synthesized*/ fun A(/*0*/ function: () -> kotlin.Int): A
internal fun foo(/*0*/ c: C): kotlin.Unit
public interface A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal interface C : A, B {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun getSomething(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,10 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass<String>) {
javaClass.something += "x"
}
// FILE: JavaClass.java
public class JavaClass<T> {
public T getSomething() { return null; }
public void setSomething(T value) { }
}
@@ -0,0 +1,12 @@
package
internal fun foo(/*0*/ javaClass: JavaClass<kotlin.String>): kotlin.Unit
public open class JavaClass</*0*/ T : kotlin.Any!> {
public constructor JavaClass</*0*/ T : kotlin.Any!>()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): T!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething(/*0*/ value: T!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,20 @@
// FILE: KotlinFile.kt
class KotlinClass {
public fun getSomething(): Int = 1
}
fun foo(javaClass: JavaClass, kotlinClass: KotlinClass) {
useInt(javaClass.getSomething())
useInt(javaClass.something)
<!VAL_REASSIGNMENT!>javaClass.something<!> = 1
javaClass.<!UNRESOLVED_REFERENCE!>Something<!>
useInt(kotlinClass.getSomething())
kotlinClass.<!UNRESOLVED_REFERENCE!>something<!>
}
fun useInt(<!UNUSED_PARAMETER!>i<!>: Int) {}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething() { return 1; }
}
@@ -0,0 +1,20 @@
package
internal fun foo(/*0*/ javaClass: JavaClass, /*1*/ kotlinClass: KotlinClass): kotlin.Unit
internal fun useInt(/*0*/ i: kotlin.Int): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal final class KotlinClass {
public constructor KotlinClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun getSomething(): 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,10 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.something++
}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething() { return 1; }
public void setSomething(int value) { }
}
@@ -0,0 +1,12 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,12 @@
// FILE: KotlinFile.kt
fun JavaClass.foo() {
useInt(getSomething())
useInt(something)
}
fun useInt(<!UNUSED_PARAMETER!>i<!>: Int) {}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething() { return 1; }
}
@@ -0,0 +1,12 @@
package
internal fun useInt(/*0*/ i: kotlin.Int): kotlin.Unit
internal fun JavaClass.foo(): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): 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,30 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.isSomething = !javaClass.isSomething
javaClass.isSomething2 = !javaClass.isSomething2
javaClass.<!UNRESOLVED_REFERENCE!>something<!>
javaClass.<!FUNCTION_CALL_EXPECTED!>isSomethingWrong<!>
javaClass.<!UNRESOLVED_REFERENCE!>somethingWrong<!>
}
// FILE: JavaClass.java
public class JavaClass {
public boolean isSomething() {
return true;
}
public void setSomething(boolean value) {
}
public boolean getIsSomething2() {
return true;
}
public void setIsSomething2(boolean value) {
}
public int isSomethingWrong() {
return 1;
}
}
@@ -0,0 +1,15 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getIsSomething2(): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun isSomething(): kotlin.Boolean
public open fun isSomethingWrong(): kotlin.Int
public open fun setIsSomething2(/*0*/ value: kotlin.Boolean): kotlin.Unit
public open fun setSomething(/*0*/ value: kotlin.Boolean): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,29 @@
// FILE: KotlinFile.kt
open class KotlinClass {
public open fun getSomething1(): Int = 1
public open fun setSomething2(value: Int) {}
}
fun foo(javaClass: JavaClass) {
useInt(javaClass.getSomething1())
useInt(javaClass.<!UNRESOLVED_REFERENCE!>something1<!>)
javaClass.setSomething2(javaClass.getSomething2() + 1)
javaClass.something2 = javaClass.something2 + 1
}
fun useInt(<!UNUSED_PARAMETER!>i<!>: Int) {}
// FILE: JavaClass.java
public class JavaClass extends KotlinClass implements JavaInterface {
public int getSomething1() { return 1; }
public int getSomething2() { return 1; }
public void setSomething2(int value) {}
}
// FILE: JavaInterface.java
public class JavaInterface {
int getSomething2();
}
@@ -0,0 +1,31 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
internal fun useInt(/*0*/ i: kotlin.Int): kotlin.Unit
public open class JavaClass : KotlinClass, JavaInterface {
public constructor JavaClass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething1(): kotlin.Int
public open override /*1*/ fun getSomething2(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun setSomething2(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class JavaInterface {
public constructor JavaInterface()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun getSomething2(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal open class KotlinClass {
public constructor KotlinClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething2(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,52 @@
// FILE: KotlinFile.kt
abstract class KotlinClass : JavaClass(), KotlinInterface, JavaInterface {
override fun getSomething1(): Int = 1
override fun getSomething3(): String = ""
override fun setSomething4(value: String) {}
override fun getSomething5(): String = ""
}
interface KotlinInterface {
public fun getSomething1(): Int
public fun getSomething4(): String
}
fun foo(k: KotlinClass) {
useInt(k.getSomething1())
useInt(k.something1)
useInt(k.getSomething2())
useInt(k.something2)
useString(k.getSomething3())
useString(k.something3)
k.setSomething4("")
k.something4 += ""
k.setSomething4(<!NULL_FOR_NONNULL_TYPE!>null<!>)
k.something4 = null
useString(k.getSomething5())
useString(k.something5)
k.setSomething5(1)
k.something5 = <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>
}
fun useInt(<!UNUSED_PARAMETER!>i<!>: Int) {}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaClass.java
public class JavaClass {
public int getSomething1() { return 1; }
public int getSomething2() { return 1; }
public Object getSomething3() { return null; }
}
// FILE: JavaInterface.java
public interface JavaInterface {
String getSomething4();
void setSomething4(String value);
Object getSomething5();
void setSomething5(Object value);
}
@@ -0,0 +1,47 @@
package
internal fun foo(/*0*/ k: KotlinClass): kotlin.Unit
internal fun useInt(/*0*/ i: kotlin.Int): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething1(): kotlin.Int
public open fun getSomething2(): kotlin.Int
public open fun getSomething3(): kotlin.Any!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*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 getSomething4(): kotlin.String!
public abstract fun getSomething5(): kotlin.Any!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething4(/*0*/ value: kotlin.String!): kotlin.Unit
public abstract fun setSomething5(/*0*/ value: kotlin.Any!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal abstract class KotlinClass : JavaClass, KotlinInterface, JavaInterface {
public constructor KotlinClass()
public open override /*3*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*2*/ fun getSomething1(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun getSomething2(): kotlin.Int
public open override /*1*/ fun getSomething3(): kotlin.String
public abstract override /*2*/ /*fake_override*/ fun getSomething4(): kotlin.String!
public open override /*1*/ fun getSomething5(): kotlin.String
public open override /*3*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ fun setSomething4(/*0*/ value: kotlin.String): kotlin.Unit
public abstract override /*1*/ /*fake_override*/ fun setSomething5(/*0*/ value: kotlin.Any!): kotlin.Unit
public open override /*3*/ /*fake_override*/ fun toString(): kotlin.String
}
internal interface KotlinInterface {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething1(): kotlin.Int
public abstract fun getSomething4(): kotlin.String
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: KotlinFile.kt
abstract class KotlinClass : JavaInterface1, JavaInterface2 {
override fun getSomething(): String = ""
}
fun foo(k: KotlinClass) {
useString(k.getSomething())
useString(k.something)
if (<!SENSELESS_COMPARISON!>k.something == null<!>) return
k.setSomething(1)
<!VAL_REASSIGNMENT!>k.something<!> = <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>
}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaInterface1.java
public interface JavaInterface1 {
String getSomething();
}
// FILE: JavaInterface2.java
public interface JavaInterface2 {
void setSomething(int value);
}
@@ -0,0 +1,29 @@
package
public /*synthesized*/ fun JavaInterface1(/*0*/ function: () -> kotlin.String!): JavaInterface1
public /*synthesized*/ fun JavaInterface2(/*0*/ function: (kotlin.Int) -> kotlin.Unit): JavaInterface2
internal fun foo(/*0*/ k: KotlinClass): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public interface JavaInterface1 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.String!
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 open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal abstract class KotlinClass : JavaInterface1, JavaInterface2 {
public constructor KotlinClass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething(): kotlin.String
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,25 @@
// FILE: KotlinFile.kt
abstract class KotlinClass : JavaInterface1, JavaInterface2 {
override fun getSomething(): String = ""
}
fun foo(k: KotlinClass) {
useString(k.getSomething())
useString(k.something)
if (<!SENSELESS_COMPARISON!>k.something == null<!>) return
k.setSomething("")
k.something = ""
}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaInterface1.java
public interface JavaInterface1 {
String getSomething();
}
// FILE: JavaInterface2.java
public interface JavaInterface2 {
void setSomething(String value);
}
@@ -0,0 +1,29 @@
package
public /*synthesized*/ fun JavaInterface1(/*0*/ function: () -> kotlin.String!): JavaInterface1
public /*synthesized*/ fun JavaInterface2(/*0*/ function: (kotlin.String!) -> kotlin.Unit): JavaInterface2
internal fun foo(/*0*/ k: KotlinClass): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public interface JavaInterface1 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.String!
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 open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
internal abstract class KotlinClass : JavaInterface1, JavaInterface2 {
public constructor KotlinClass()
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething(): kotlin.String
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,28 @@
// FILE: KotlinFile.kt
abstract class KotlinClass : JavaInterface3 {
override fun getSomething(): String = ""
}
fun foo(k: KotlinClass) {
useString(k.getSomething())
useString(k.something)
if (<!SENSELESS_COMPARISON!>k.something == null<!>) return
k.setSomething("")
k.something = ""
}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaInterface1.java
public interface JavaInterface1 {
String getSomething();
}
// FILE: JavaInterface2.java
public interface JavaInterface2 {
void setSomething(String value);
}
// FILE: JavaInterface3.java
public interface JavaInterface3 extends JavaInterface1, JavaInterface2 {}
@@ -0,0 +1,37 @@
package
public /*synthesized*/ fun JavaInterface1(/*0*/ function: () -> kotlin.String!): JavaInterface1
public /*synthesized*/ fun JavaInterface2(/*0*/ function: (kotlin.String!) -> kotlin.Unit): JavaInterface2
internal fun foo(/*0*/ k: KotlinClass): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public interface JavaInterface1 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.String!
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 open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JavaInterface3 : JavaInterface1, JavaInterface2 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun getSomething(): kotlin.String!
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal abstract class KotlinClass : JavaInterface3 {
public constructor KotlinClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,29 @@
// FILE: KotlinFile.kt
abstract class KotlinClass : JavaInterface3 {
override fun getSomething(): String = ""
}
fun foo(k: KotlinClass) {
useString(k.getSomething())
useString(k.something)
if (<!SENSELESS_COMPARISON!>k.something == null<!>) return
k.setSomething("")
k.something = ""
}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaInterface1.java
public interface JavaInterface1 {
String getSomething();
}
// FILE: JavaInterface2.java
public interface JavaInterface2 {
String getSomething();
void setSomething(String value);
}
// FILE: JavaInterface3.java
public interface JavaInterface3 extends JavaInterface1, JavaInterface2 {}
@@ -0,0 +1,37 @@
package
public /*synthesized*/ fun JavaInterface1(/*0*/ function: () -> kotlin.String!): JavaInterface1
internal fun foo(/*0*/ k: KotlinClass): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public interface JavaInterface1 {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.String!
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 getSomething(): kotlin.String!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface JavaInterface3 : JavaInterface1, JavaInterface2 {
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*2*/ /*fake_override*/ fun getSomething(): kotlin.String!
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
}
internal abstract class KotlinClass : JavaInterface3 {
public constructor KotlinClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,18 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.somethingPublic
javaClass.<!UNRESOLVED_REFERENCE!>somethingProtected<!>
javaClass.<!UNRESOLVED_REFERENCE!>somethingPrivate<!>
javaClass.<!UNRESOLVED_REFERENCE!>somethingPackage<!>
<!VAL_REASSIGNMENT!>javaClass.somethingPublic<!> = 1
}
// FILE: JavaClass.java
public class JavaClass {
public int getSomethingPublic() { return 1; }
protected int getSomethingProtected() { return 1; }
private int getSomethingPrivate() { return 1; }
int getSomethingPackage() { return 1; }
protected void setSomethingPublic(int value) {}
}
@@ -0,0 +1,15 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public/*package*/ open fun getSomethingPackage(): kotlin.Int
private open fun getSomethingPrivate(): kotlin.Int
protected/*protected and package*/ open fun getSomethingProtected(): kotlin.Int
public open fun getSomethingPublic(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
protected/*protected and package*/ open fun setSomethingPublic(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,22 @@
// FILE: KotlinFile.kt
fun foo(o: JavaClass2) {
useString(o.something)
o.something = ""
o.setSomething(1)
o.something = <!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!> // we generate extension property for JavaClass2 with more specific type
o.something += "1"
}
fun useString(<!UNUSED_PARAMETER!>i<!>: String) {}
// FILE: JavaClass1.java
public class JavaClass1 {
public Object getSomething() { return null; }
public void setSomething(Object value) { }
}
// FILE: JavaClass2.java
public class JavaClass2 extends JavaClass1 {
public String getSomething() { return ""; }
}
@@ -0,0 +1,22 @@
package
internal fun foo(/*0*/ o: JavaClass2): kotlin.Unit
internal fun useString(/*0*/ i: kotlin.String): kotlin.Unit
public open class JavaClass1 {
public constructor JavaClass1()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open fun getSomething(): kotlin.Any!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open fun setSomething(/*0*/ value: kotlin.Any!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public open class JavaClass2 : JavaClass1 {
public constructor JavaClass2()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ fun getSomething(): kotlin.String!
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun setSomething(/*0*/ value: kotlin.Any!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,9 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.<!UNRESOLVED_REFERENCE!>something<!> = 1
}
// FILE: JavaClass.java
public class JavaClass {
public void setSomething(int value) { }
}
@@ -0,0 +1,11 @@
package
internal fun foo(/*0*/ javaClass: JavaClass): kotlin.Unit
public open class JavaClass {
public constructor JavaClass()
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 fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -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
}
@@ -0,0 +1,16 @@
// FILE: KotlinFile.kt
fun <T: B> foo(t: T) {
t.setSomething(t.getSomething() + 1)
t.something++
}
// FILE: A.java
public interface A {
int getSomething();
}
// FILE: B.java
public interface B extends A {
void setSomething(int value);
}
@@ -0,0 +1,19 @@
package
public /*synthesized*/ fun A(/*0*/ function: () -> kotlin.Int): A
internal fun </*0*/ T : B> foo(/*0*/ t: T): kotlin.Unit
public interface A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface B : A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public abstract override /*1*/ /*fake_override*/ fun getSomething(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public abstract fun setSomething(/*0*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}