K2: generate implicit dispatch receivers for static members called

#KT-55371 Fixed
#KT-55372 Fixed
This commit is contained in:
Mikhail Glukhikh
2023-01-16 16:59:33 +01:00
committed by Space Team
parent 9cfcf057ef
commit 4167a69e30
17 changed files with 328 additions and 27 deletions
@@ -0,0 +1,28 @@
// FIR_IDENTICAL
// FILE: javapackage/PackagePrivateGrandparentAbstractClass.java
package javapackage;
/*package-private*/ interface PackagePrivateGrandparentInterface {
static void publicStaticMethod() {}
String publicStaticField = "OK";
}
// FILE: javapackage/PublicParentClass.java
package javapackage;
public class PublicParentClass implements PackagePrivateGrandparentInterface {}
// FILE: Child.kt
import javapackage.PublicParentClass
class Child : PublicParentClass() {
fun foo(): String {
<!UNRESOLVED_REFERENCE!>publicStaticMethod<!>() // Error!
PublicParentClass.<!UNRESOLVED_REFERENCE!>publicStaticMethod<!>() // Error!
return publicStaticField // Ok!
}
}
@@ -0,0 +1,32 @@
package
public final class Child : javapackage.PublicParentClass {
public constructor Child()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
package javapackage {
public/*package*/ interface PackagePrivateGrandparentInterface {
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
// Static members
public const final val publicStaticField: kotlin.String = "OK"
public open fun publicStaticMethod(): kotlin.Unit
}
public open class PublicParentClass : javapackage.PackagePrivateGrandparentInterface {
public constructor PublicParentClass()
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
// Static members
public const final override /*1*/ /*fake_override*/ val publicStaticField: kotlin.String = "OK"
}
}
@@ -0,0 +1,20 @@
// FILE: javapackage/PackagePrivateGrandparentAbstractClass.java
package javapackage;
/*package-private*/ abstract class PackagePrivateGrandparentAbstractClass {
public static void publicStaticMethod() {}
}
// FILE: javapackage/KotlinParentClass.kt
package javapackage
internal open class KotlinParentClass : PackagePrivateGrandparentAbstractClass()
// FILE: Child.kt
import javapackage.KotlinParentClass
internal class Child : KotlinParentClass() {
fun foo() {
<!INVISIBLE_REFERENCE!>publicStaticMethod<!>()
}
}
@@ -0,0 +1,20 @@
// FILE: javapackage/PackagePrivateGrandparentAbstractClass.java
package javapackage;
/*package-private*/ abstract class PackagePrivateGrandparentAbstractClass {
public static void publicStaticMethod() {}
}
// FILE: javapackage/KotlinParentClass.kt
package javapackage
internal open class KotlinParentClass : PackagePrivateGrandparentAbstractClass()
// FILE: Child.kt
import javapackage.KotlinParentClass
internal class Child : KotlinParentClass() {
fun foo() {
<!INVISIBLE_MEMBER!>publicStaticMethod<!>()
}
}
@@ -0,0 +1,29 @@
package
internal final class Child : javapackage.KotlinParentClass {
public constructor Child()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
package javapackage {
internal open class KotlinParentClass : javapackage.PackagePrivateGrandparentAbstractClass {
public constructor KotlinParentClass()
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/*package*/ abstract class PackagePrivateGrandparentAbstractClass {
public/*package*/ constructor PackagePrivateGrandparentAbstractClass()
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
// Static members
public open fun publicStaticMethod(): kotlin.Unit
}
}