use temporary binding trace

This commit is contained in:
Dmitry Jemerov
2015-01-30 16:00:59 +01:00
parent 6442b61db8
commit 37651ae886
@@ -37,6 +37,8 @@ import org.jetbrains.kotlin.name.SpecialNames;
import org.jetbrains.kotlin.psi.*; import org.jetbrains.kotlin.psi.*;
import org.jetbrains.kotlin.resolve.BindingContext; import org.jetbrains.kotlin.resolve.BindingContext;
import org.jetbrains.kotlin.resolve.BindingContextUtils; 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.calls.model.ResolvedCall;
import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant; import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant;
import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstant; import org.jetbrains.kotlin.resolve.constants.IntegerValueTypeConstant;
@@ -317,10 +319,14 @@ public abstract class MemberCodegen<T extends JetElement/* TODO: & JetDeclaratio
JetExpression initializer = property.getInitializer(); JetExpression initializer = property.getInitializer();
CompileTimeConstant<?> initializerValue = CompileTimeConstant<?> initializerValue;
property.isVar() && initializer != null if (property.isVar() && initializer != null) {
? ConstantExpressionEvaluator.OBJECT$.evaluate(initializer, state.getBindingTrace(), null) BindingTrace tempTrace = TemporaryBindingTrace.create(state.getBindingTrace(), "property initializer");
: propertyDescriptor.getCompileTimeInitializer(); initializerValue = ConstantExpressionEvaluator.OBJECT$.evaluate(initializer, tempTrace, propertyDescriptor.getType());
}
else {
initializerValue = propertyDescriptor.getCompileTimeInitializer();
}
// we must write constant values for fields in light classes, // we must write constant values for fields in light classes,
// because Java's completion for annotation arguments uses this information // because Java's completion for annotation arguments uses this information
if (initializerValue == null) return state.getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES; if (initializerValue == null) return state.getClassBuilderMode() != ClassBuilderMode.LIGHT_CLASSES;