Overridable val should not be treated as constant
#KT-9443 fixed
This commit is contained in:
+2
@@ -518,6 +518,8 @@ private class ConstantExpressionEvaluatorVisitor(
|
|||||||
if (resolvedCall != null) {
|
if (resolvedCall != null) {
|
||||||
val callableDescriptor = resolvedCall.getResultingDescriptor()
|
val callableDescriptor = resolvedCall.getResultingDescriptor()
|
||||||
if (callableDescriptor is VariableDescriptor) {
|
if (callableDescriptor is VariableDescriptor) {
|
||||||
|
if (callableDescriptor is PropertyDescriptor && callableDescriptor.modality.isOverridable) return null
|
||||||
|
|
||||||
val variableInitializer = callableDescriptor.getCompileTimeInitializer() ?: return null
|
val variableInitializer = callableDescriptor.getCompileTimeInitializer() ?: return null
|
||||||
|
|
||||||
return createConstant(
|
return createConstant(
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
abstract class BaseClass {
|
||||||
|
protected open val menuId: Int = 0
|
||||||
|
|
||||||
|
public fun run(): Pair<String, Boolean> =
|
||||||
|
"$menuId" to (menuId == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
class ImplClass: BaseClass() {
|
||||||
|
override val menuId: Int = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun box(): String {
|
||||||
|
val result = ImplClass().run()
|
||||||
|
|
||||||
|
if (result != ("3" to false)) return "Fail: $result"
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -13,6 +13,12 @@ class A {
|
|||||||
// val prop4: 2
|
// val prop4: 2
|
||||||
val prop4 = A.a + 1
|
val prop4 = A.a + 1
|
||||||
|
|
||||||
|
// val prop7: 0
|
||||||
|
open val prop7 = 0
|
||||||
|
|
||||||
|
// val prop8: null
|
||||||
|
val prop8 = prop7
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val a = 1
|
val a = 1
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -1516,6 +1516,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
|||||||
doTestWithStdlib(fileName);
|
doTestWithStdlib(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("kt9443.kt")
|
||||||
|
public void testKt9443() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/evaluate/kt9443.kt");
|
||||||
|
doTestWithStdlib(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("maxValue.kt")
|
@TestMetadata("maxValue.kt")
|
||||||
public void testMaxValue() throws Exception {
|
public void testMaxValue() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/evaluate/maxValue.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/evaluate/maxValue.kt");
|
||||||
|
|||||||
@@ -56,6 +56,10 @@ public final class MiscTest extends AbstractExpressionTest {
|
|||||||
checkOutput("KT-1052.kt", "true\n");
|
checkOutput("KT-1052.kt", "true\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKt9443() throws Exception {
|
||||||
|
checkFooBoxIsOk("kt9443.kt");
|
||||||
|
}
|
||||||
|
|
||||||
public void testKt740_1() throws Exception {
|
public void testKt740_1() throws Exception {
|
||||||
checkFooBoxIsTrue("KT-740.kt");
|
checkFooBoxIsTrue("KT-740.kt");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package foo
|
||||||
|
|
||||||
|
abstract class BaseClass {
|
||||||
|
protected open val menuId: Int = 0
|
||||||
|
|
||||||
|
public fun run(): Pair<String, Boolean> =
|
||||||
|
"$menuId" to (menuId == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
class ImplClass: BaseClass() {
|
||||||
|
override val menuId: Int = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun box(): String {
|
||||||
|
val result = ImplClass().run()
|
||||||
|
|
||||||
|
if (result != ("3" to false)) return "Fail: $result"
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user