FIR: introduce three diagnostics for const val
This commit is contained in:
committed by
Mikhail Glukhikh
parent
cc106085e2
commit
334d0a8b5a
@@ -0,0 +1,60 @@
|
||||
FILE: const.kt
|
||||
public final const val a: R|kotlin/String| = String(something)
|
||||
public get(): R|kotlin/String|
|
||||
public final const val b: <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
|
||||
public get(): <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
|
||||
public final const val c: R|kotlin/Nothing?| = Null(null)
|
||||
public get(): R|kotlin/Nothing?|
|
||||
public final const val d: R|ForConst.Companion| = Q|ForConst|
|
||||
public get(): R|ForConst.Companion|
|
||||
public final const val e: R|kotlin/String| = Q|ForConst|.R|/ForConst.Companion.one|()
|
||||
public get(): R|kotlin/String|
|
||||
public final const val f: R|kotlin/Int| = Int(1).R|kotlin/Int.plus|(Int(2)).R|kotlin/Int.times|(Int(3)).R|kotlin/Int.div|(Int(4)).R|kotlin/Int.rem|(Int(5)).R|kotlin/Int.minus|(Int(1))
|
||||
public get(): R|kotlin/Int|
|
||||
public final const val g: R|kotlin/String| = <strcat>(String(string ), R|/f|.R|kotlin/Any.toString|())
|
||||
public get(): R|kotlin/String|
|
||||
public final const val h: R|kotlin/String| = String(string).R|kotlin/String.plus|(R|/g|)
|
||||
public get(): R|kotlin/String|
|
||||
public final const val i: R|kotlin/String| = Q|ForConst|.R|/ForConst.Companion.one|().R|kotlin/String.plus|(String(one))
|
||||
public get(): R|kotlin/String|
|
||||
public final const val j: R|kotlin/Int| = Int(4).R|kotlin/Int.times|(Q|ForConst|.R|/ForConst.Companion.two|())
|
||||
public get(): R|kotlin/Int|
|
||||
public final val k: R|kotlin/Int| = Int(3).R|kotlin/Int.minus|(Q|ForConst|.R|/ForConst.Companion.two|())
|
||||
public get(): R|kotlin/Int|
|
||||
public final const val l: R|kotlin/Int| = R|/k|
|
||||
public get(): R|kotlin/Int|
|
||||
public final class ForConst : R|kotlin/Any| {
|
||||
public constructor(): R|ForConst| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final companion object Companion : R|kotlin/Any| {
|
||||
private constructor(): R|ForConst.Companion| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final fun one(): R|kotlin/String| {
|
||||
^one String(1)
|
||||
}
|
||||
|
||||
public final fun two(): R|kotlin/Int| {
|
||||
^two Int(2)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
private final const val MAJOR_BITS: R|kotlin/Int| = Int(3)
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val MINOR_BITS: R|kotlin/Int| = Int(4)
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val PATCH_BITS: R|kotlin/Int| = Int(7)
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val MAJOR_MASK: R|kotlin/Int| = Int(1).R|kotlin/Int.shl|(R|/MAJOR_BITS|).R|kotlin/Int.minus|(Int(1))
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val MINOR_MASK: R|kotlin/Int| = Int(1).R|kotlin/Int.shl|(R|/MINOR_BITS|).R|kotlin/Int.minus|(Int(1))
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val PATCH_MASK: R|kotlin/Int| = Int(1).R|kotlin/Int.shl|(R|/PATCH_BITS|).R|kotlin/Int.minus|(Int(1))
|
||||
private get(): R|kotlin/Int|
|
||||
private final const val stringFromJava: R|kotlin/String| = Q|Constants|.R|/Constants.FIRST|.R|kotlin/String.plus|(String(+)).R|kotlin/String.plus|(Q|Constants|.R|/Constants.SECOND|)
|
||||
private get(): R|kotlin/String|
|
||||
@@ -0,0 +1,36 @@
|
||||
// FILE: Constants.java
|
||||
|
||||
public class Constants {
|
||||
public static final String FIRST = "1st";
|
||||
public static final String SECOND = "2nd";
|
||||
}
|
||||
|
||||
// FILE: const.kt
|
||||
const val a = "something"
|
||||
<!MUST_BE_INITIALIZED!><!CONST_VAL_WITHOUT_INITIALIZER!>const<!> val b<!>
|
||||
<!TYPE_CANT_BE_USED_FOR_CONST_VAL!>const<!> val c = null
|
||||
<!TYPE_CANT_BE_USED_FOR_CONST_VAL!>const<!> val d = ForConst
|
||||
const val e = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>ForConst.one()<!>
|
||||
const val f = ((1 + 2) * 3) / 4 % 5 - 1
|
||||
const val g = "string $f"
|
||||
const val h = "string" + g
|
||||
const val i = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>ForConst.one() + "one"<!>
|
||||
const val j = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>4 * ForConst.two()<!>
|
||||
val k = 3 - ForConst.two()
|
||||
const val l = <!CONST_VAL_WITH_NON_CONST_INITIALIZER!>k<!>
|
||||
|
||||
class ForConst{
|
||||
companion object {
|
||||
fun one(): String = "1"
|
||||
fun two(): Int = 2
|
||||
}
|
||||
}
|
||||
|
||||
private const val MAJOR_BITS = 3
|
||||
private const val MINOR_BITS = 4
|
||||
private const val PATCH_BITS = 7
|
||||
private const val MAJOR_MASK = (1 shl MAJOR_BITS) - 1 // False positive error
|
||||
private const val MINOR_MASK = (1 shl MINOR_BITS) - 1 // False positive error
|
||||
private const val PATCH_MASK = (1 shl PATCH_BITS) - 1 // False positive error
|
||||
|
||||
private const val stringFromJava = Constants.FIRST + "+" + Constants.SECOND
|
||||
Reference in New Issue
Block a user