From 37651ae88640e853100de273b682ac465c4e1f0c Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 30 Jan 2015 16:00:59 +0100 Subject: [PATCH] use temporary binding trace --- .../jetbrains/kotlin/codegen/MemberCodegen.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java index 8808ba297ef..b59c92270ff 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MemberCodegen.java @@ -37,6 +37,8 @@ import org.jetbrains.kotlin.name.SpecialNames; import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContextUtils; +import org.jetbrains.kotlin.resolve.BindingTrace; +import org.jetbrains.kotlin.resolve.TemporaryBindingTrace; import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall; import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant; import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstant; @@ -317,10 +319,14 @@ public abstract class MemberCodegen initializerValue = - property.isVar() && initializer != null - ? ConstantExpressionEvaluator.OBJECT$.evaluate(initializer, state.getBindingTrace(), null) - : propertyDescriptor.getCompileTimeInitializer(); + CompileTimeConstant initializerValue; + if (property.isVar() && initializer != null) { + BindingTrace tempTrace = TemporaryBindingTrace.create(state.getBindingTrace(), "property initializer"); + initializerValue = ConstantExpressionEvaluator.OBJECT$.evaluate(initializer, tempTrace, propertyDescriptor.getType()); + } + else { + initializerValue = propertyDescriptor.getCompileTimeInitializer(); + } // we must write constant values for fields in light classes, // because Java's completion for annotation arguments uses this information if (initializerValue == null) return state.getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES;