Choose Java field during overload resolution with a pure Kotlin property

^KT-31244 Fixed
This commit is contained in:
Denis Zharkov
2019-12-17 17:58:49 +03:00
parent aa8578b675
commit e8131d6e30
20 changed files with 326 additions and 3 deletions
@@ -0,0 +1,27 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.<!AMBIGUITY!>name<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Double>() }
c.<!AMBIGUITY!>size<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
CompressionType.ZIP::name checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<Double>>() }
c::size checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,27 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.name checkType { _<Double>() }
c.size checkType { _<String>() }
CompressionType.ZIP::name checkType { _<kotlin.reflect.KProperty0<Double>>() }
c::size checkType { _<kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,26 @@
// SKIP_TXT
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.<!AMBIGUITY!>name<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Double>() }
c.<!AMBIGUITY!>size<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
CompressionType.ZIP::name checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<Double>>() }
c::size checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,26 @@
// SKIP_TXT
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Double>() }
c.<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
CompressionType.ZIP::<!OVERLOAD_RESOLUTION_AMBIGUITY!>name<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<Double>>() }
c::<!OVERLOAD_RESOLUTION_AMBIGUITY!>size<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,27 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload +NewInference
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.<!AMBIGUITY!>name<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><Double>() }
c.<!AMBIGUITY!>size<!> <!INAPPLICABLE_CANDIDATE!>checkType<!> { <!UNRESOLVED_REFERENCE!>_<!><String>() }
CompressionType.ZIP::name checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<Double>>() }
c::size checkType { <!UNRESOLVED_REFERENCE!>_<!><kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,27 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload +NewInference
// !CHECK_TYPE
// FILE: CompressionType.java
public enum CompressionType {
ZIP(1.0);
public final double name;
CompressionType(double name) {
this.name = name;
}
}
// FILE: CollectionWithSize.java
public abstract class CollectionWithSize implements java.util.Collection<String> {
public final String size = "";
}
// FILE: main.kt
fun main(c: CollectionWithSize) {
CompressionType.ZIP.name checkType { _<Double>() }
c.size checkType { _<String>() }
CompressionType.ZIP::name checkType { _<kotlin.reflect.KProperty0<Double>>() }
c::size checkType { _<kotlin.reflect.KProperty0<String>>() }
}
@@ -0,0 +1,16 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload
// FILE: a/JClass.java
package a;
public class JClass {
public static int foo = 42;
}
// FILE: a.kt
package b
val foo = 42
// FILE: b.kt
import a.JClass.foo
import b.foo
fun test() { <!AMBIGUITY!>foo<!> }
@@ -0,0 +1,16 @@
// SKIP_TXT
// !LANGUAGE: +PreferJavaFieldOverload
// FILE: a/JClass.java
package a;
public class JClass {
public static int foo = 42;
}
// FILE: a.kt
package b
val foo = 42
// FILE: b.kt
import a.JClass.foo
import b.foo
fun test() { <!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!> }