Report error on state in multi-file class with -Xmultifile-parts-inherit

Simplify MultifileClassPartCodegen, remove related tests and change some
tests to use const val instead of val because backing fields for const
properties are stored in the facade, not parts

 #KT-23701 Fixed
This commit is contained in:
Alexander Udalov
2019-01-23 13:25:28 +01:00
parent 6b5a16884c
commit a2f4efbc2a
22 changed files with 88 additions and 474 deletions
@@ -13,4 +13,4 @@ fun box(): String = ::OK.get()
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val OK = run { "OK" }
const val OK = "OK"
@@ -13,7 +13,7 @@ fun box(): String = okInline()
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
internal val ok = run { "OK" }
internal const val ok = "OK"
internal inline fun okInline() =
::ok.get()
@@ -13,7 +13,7 @@ fun box(): String = OK.okRef.get()
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val ok = run { "OK" }
private const val ok = "OK"
object OK {
val okRef = ::ok
@@ -1,42 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = OK
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val O = run { "O" }
// FILE: part2.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
const val K = "K"
// FILE: part3.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val OK: String = run { O + K }
// FILE: irrelevantPart.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val X1: Nothing =
throw AssertionError("X1 should not be initialized")
// FILE: reallyIrrelevantPart.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val X2: Nothing =
throw AssertionError("X2 should not be initialized")
@@ -1,16 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = OK
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val OK: String by lazy { "OK" }
@@ -1,18 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = ok()
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val OK = run { "OK" }
fun ok() = OK
@@ -1,16 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = OK
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
public val OK = run { "OK" }
@@ -1,30 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = ok()
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val overlapping = run { "oops #1" }
// FILE: part2.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val overlapping = run { "OK" }
fun ok() = overlapping
// FILE: part3.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val overlapping = run { "oops #2" }
@@ -1,30 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = J.ok()
// FILE: part1.kt
@file:[JvmName("MC") JvmMultifileClass]
package a
val O = run { "O" }
const val K = "K"
inline fun ok(): String {
return O + K
}
// FILE: J.java
import a.MC;
public class J {
public static String ok() {
return MC.ok();
}
}
@@ -1,22 +0,0 @@
// IGNORE_BACKEND: JVM_IR
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = ok {}
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
val O = run { "O" }
const val K = "K"
inline fun ok(block: () -> Unit): String {
block()
return O + K
}
@@ -1,19 +0,0 @@
// TARGET_BACKEND: JVM
// IGNORE_LIGHT_ANALYSIS
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: box.kt
import a.*
fun box(): String = OK().ok
// FILE: part1.kt
@file:[JvmName("MultifileClass") JvmMultifileClass]
package a
private val reallyOk = run { "OK" }
class OK() {
val ok = reallyOk
}