1f0fb4823f
Previously, packages `java.lang` and `kotlin.jvm` were imported on JVM by default on the same rights, causing problems when the same classifier existed both in `java.lang` and `kotlin.jvm`. Since the only known case of such conflict were type aliases to JVM classes, the corresponding classes (expansions of those type aliases) were manually excluded from default imports. This made the code in DefaultImportProvider complicated and resulted in multiple problems, regarding both correctness and performance (see82364ad3e5,a9f2f5c7d0,dd3dbda719). This change adds a new concept, a "low priority import", and treats `java.lang` as such. Since these imports are now separated from the rest of default imports in LazyImportScope via secondaryClassImportResolver, conflicts between classifiers are handled naturally: the one from `kotlin.jvm` always wins (unless the one from `java.lang` is imported explicitly, of course). This approach is simpler, safer and does not require any memory to cache anything. Skip ResolveToJava.kt test for javac-based resolve; it now fails because of a weird issue which I didn't have time to investigate (this is OK because it's a corner case of an experimental functionality)
57 lines
1.7 KiB
Kotlin
Vendored
57 lines
1.7 KiB
Kotlin
Vendored
// !WITH_NEW_INFERENCE
|
|
// !CHECK_TYPE
|
|
// JAVAC_SKIP
|
|
|
|
// FILE: f.kt
|
|
|
|
import java.*
|
|
import java.util.*
|
|
import <!UNRESOLVED_REFERENCE!>utils<!>.*
|
|
|
|
import java.io.PrintStream
|
|
import <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Comparable<!> as Com
|
|
|
|
val l : MutableList<in Int> = ArrayList<Int>()
|
|
|
|
fun test(<!UNUSED_PARAMETER!>l<!> : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.util.List<Int><!>) {
|
|
val <!UNUSED_VARIABLE!>x<!> : java.<!UNRESOLVED_REFERENCE!>List<!>
|
|
val <!UNUSED_VARIABLE!>y<!> : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.util.List<Int><!>
|
|
val <!UNUSED_VARIABLE!>b<!> : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Object<!>
|
|
val <!UNUSED_VARIABLE!>z<!> : java.<!UNRESOLVED_REFERENCE!>utils<!>.<!DEBUG_INFO_MISSING_UNRESOLVED!>List<!><Int>
|
|
|
|
val <!UNUSED_VARIABLE!>f<!> : java.io.File? = null
|
|
|
|
Collections.<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER, FUNCTION_CALL_EXPECTED!>emptyList<!>
|
|
Collections.<!FUNCTION_CALL_EXPECTED!>emptyList<Int><!>
|
|
Collections.emptyList<Int>()
|
|
Collections.<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>()
|
|
|
|
checkSubtype<Set<Int>?>(Collections.singleton<Int>(1))
|
|
Collections.singleton<Int>(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1.0<!>)
|
|
|
|
<!RESOLUTION_TO_CLASSIFIER!>List<!><Int>
|
|
|
|
|
|
val <!UNUSED_VARIABLE!>o<!> = "sdf" as <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Object<!>
|
|
|
|
try {
|
|
// ...
|
|
}
|
|
catch(e: Exception) {
|
|
System.out.println(e.message)
|
|
}
|
|
|
|
PrintStream("sdf")
|
|
|
|
val c : <!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>Com<Int><!>? = null
|
|
|
|
checkSubtype<<!PLATFORM_CLASS_MAPPED_TO_KOTLIN!>java.lang.Comparable<Int><!>?>(c)
|
|
|
|
// Collections.sort<Integer>(ArrayList<Integer>())
|
|
xxx.<!UNRESOLVED_REFERENCE!>Class<!>()
|
|
}
|
|
|
|
|
|
// FILE: f.kt
|
|
package xxx
|
|
import java.lang.Class; |