diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt index 3e9366c17ef..943bf2bc759 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/constants/evaluate/ConstantExpressionEvaluator.kt @@ -518,6 +518,8 @@ private class ConstantExpressionEvaluatorVisitor( if (resolvedCall != null) { val callableDescriptor = resolvedCall.getResultingDescriptor() if (callableDescriptor is VariableDescriptor) { + if (callableDescriptor is PropertyDescriptor && callableDescriptor.modality.isOverridable) return null + val variableInitializer = callableDescriptor.getCompileTimeInitializer() ?: return null return createConstant( diff --git a/compiler/testData/codegen/boxWithStdlib/evaluate/kt9443.kt b/compiler/testData/codegen/boxWithStdlib/evaluate/kt9443.kt new file mode 100644 index 00000000000..89deaf48d00 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/evaluate/kt9443.kt @@ -0,0 +1,18 @@ +abstract class BaseClass { + protected open val menuId: Int = 0 + + public fun run(): Pair = + "$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" +} \ No newline at end of file diff --git a/compiler/testData/evaluate/constant/classObjectProperty.kt b/compiler/testData/evaluate/constant/classObjectProperty.kt index f541f11805f..113a1f243d5 100644 --- a/compiler/testData/evaluate/constant/classObjectProperty.kt +++ b/compiler/testData/evaluate/constant/classObjectProperty.kt @@ -13,6 +13,12 @@ class A { // val prop4: 2 val prop4 = A.a + 1 + // val prop7: 0 + open val prop7 = 0 + + // val prop8: null + val prop8 = prop7 + companion object { val a = 1 } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index f2681771b99..bba79eb3ac7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -1516,6 +1516,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode 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") public void testMaxValue() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/evaluate/maxValue.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MiscTest.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MiscTest.java index 751e027f320..7b0252593fb 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MiscTest.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/MiscTest.java @@ -56,6 +56,10 @@ public final class MiscTest extends AbstractExpressionTest { checkOutput("KT-1052.kt", "true\n"); } + public void testKt9443() throws Exception { + checkFooBoxIsOk("kt9443.kt"); + } + public void testKt740_1() throws Exception { checkFooBoxIsTrue("KT-740.kt"); } diff --git a/js/js.translator/testData/expression/misc/cases/kt9443.kt b/js/js.translator/testData/expression/misc/cases/kt9443.kt new file mode 100644 index 00000000000..6489f452e75 --- /dev/null +++ b/js/js.translator/testData/expression/misc/cases/kt9443.kt @@ -0,0 +1,20 @@ +package foo + +abstract class BaseClass { + protected open val menuId: Int = 0 + + public fun run(): Pair = + "$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" +} \ No newline at end of file