From 608b603f588634df3f44648d69b25ec2a4109bdf Mon Sep 17 00:00:00 2001 From: Michael Nedzelsky Date: Wed, 18 Feb 2015 03:53:34 +0300 Subject: [PATCH] serialization of compile time constant: add support for expressions : --- .../evaluate/ConstantExpressionEvaluator.kt | 3 +++ .../allWarnings/suppressWarningsOnClassObject.txt | 2 +- .../allWarnings/suppressWarningsOnProperty.txt | 2 +- .../tests/suppress/oneWarning/onClassObject.txt | 2 +- .../tests/suppress/oneWarning/onProperty.txt | 2 +- .../annotationArguments/primitives.kt | 13 +++++++++++++ .../annotationArguments/primitives.txt | 4 ++++ 7 files changed, 24 insertions(+), 4 deletions(-) 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 2dc05d2e89f..acd24535f49 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 @@ -149,6 +149,9 @@ public class ConstantExpressionEvaluator private (val trace: BindingTrace) : Jet else null } + override fun visitBinaryWithTypeRHSExpression(expression: JetBinaryExpressionWithTypeRHS, expectedType: JetType?): CompileTimeConstant<*>? = + evaluate(expression.getLeft(), expectedType) + override fun visitBinaryExpression(expression: JetBinaryExpression, expectedType: JetType?): CompileTimeConstant<*>? { val leftExpression = expression.getLeft() if (leftExpression == null) return null diff --git a/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnClassObject.txt b/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnClassObject.txt index 0fc4525618d..7d8bdeae162 100644 --- a/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnClassObject.txt +++ b/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnClassObject.txt @@ -8,7 +8,7 @@ internal final class C { kotlin.suppress(names = {"warnings"}: kotlin.Array) internal class object Default { private constructor Default() - internal final val foo: kotlin.String? + internal final val foo: kotlin.String? = null public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnProperty.txt b/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnProperty.txt index 5993eaceed0..daf6b23cdcc 100644 --- a/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnProperty.txt +++ b/compiler/testData/diagnostics/tests/suppress/allWarnings/suppressWarningsOnProperty.txt @@ -2,7 +2,7 @@ package internal final class C { public constructor C() - kotlin.suppress(names = {"warnings"}: kotlin.Array) internal final val foo: kotlin.String? + kotlin.suppress(names = {"warnings"}: kotlin.Array) internal final val foo: kotlin.String? = null public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/suppress/oneWarning/onClassObject.txt b/compiler/testData/diagnostics/tests/suppress/oneWarning/onClassObject.txt index 53da6127fe4..60299997944 100644 --- a/compiler/testData/diagnostics/tests/suppress/oneWarning/onClassObject.txt +++ b/compiler/testData/diagnostics/tests/suppress/oneWarning/onClassObject.txt @@ -8,7 +8,7 @@ internal final class C { kotlin.suppress(names = {"REDUNDANT_NULLABLE"}: kotlin.Array) internal class object Default { private constructor Default() - internal final val foo: kotlin.String? + internal final val foo: kotlin.String? = null public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/diagnostics/tests/suppress/oneWarning/onProperty.txt b/compiler/testData/diagnostics/tests/suppress/oneWarning/onProperty.txt index 340763ed2ef..54fe78ad923 100644 --- a/compiler/testData/diagnostics/tests/suppress/oneWarning/onProperty.txt +++ b/compiler/testData/diagnostics/tests/suppress/oneWarning/onProperty.txt @@ -2,7 +2,7 @@ package internal final class C { public constructor C() - kotlin.suppress(names = {"REDUNDANT_NULLABLE"}: kotlin.Array) internal final val foo: kotlin.String? + kotlin.suppress(names = {"REDUNDANT_NULLABLE"}: kotlin.Array) internal final val foo: kotlin.String? = null public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String diff --git a/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.kt b/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.kt index f2a51dec0d1..bafa335e6ed 100644 --- a/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.kt +++ b/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.kt @@ -22,3 +22,16 @@ Primitives( boolean = true ) class C + +Primitives( + byte = 7: Byte, + char = '%': Char, + short = 239: Short, + int = 239017: Int, + long = 123456789123456789L: Long, + float = 2.72f: Float, + double = -3.14: Double, + boolean = true: Boolean +) +class D + diff --git a/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.txt b/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.txt index 3bfc157328b..6188a3570fe 100644 --- a/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.txt +++ b/compiler/testData/serialization/builtinsSerializer/annotationArguments/primitives.txt @@ -4,6 +4,10 @@ test.Primitives(boolean = true: kotlin.Boolean, byte = 7.toByte(): kotlin.Byte, public constructor C() } +test.Primitives(boolean = true: kotlin.Boolean, byte = 7.toByte(): kotlin.Byte, char = \u0025 ('%'): kotlin.Char, double = -3.14.toDouble(): kotlin.Double, float = 2.72.toFloat(): kotlin.Float, int = 239017: kotlin.Int, long = 123456789123456789.toLong(): kotlin.Long, short = 239.toShort(): kotlin.Short) internal final class D { + public constructor D() +} + internal final annotation class Primitives : kotlin.Annotation { public constructor Primitives(/*0*/ byte: kotlin.Byte, /*1*/ char: kotlin.Char, /*2*/ short: kotlin.Short, /*3*/ int: kotlin.Int, /*4*/ long: kotlin.Long, /*5*/ float: kotlin.Float, /*6*/ double: kotlin.Double, /*7*/ boolean: kotlin.Boolean) internal final val boolean: kotlin.Boolean