From 24ffe3dbb93c6bb5ab24ade1cc29d7f872801833 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 9 Apr 2014 16:36:25 +0400 Subject: [PATCH] Do not call getInitializer() for variables before it is needed when computing compile time constants --- .../org/jetbrains/jet/lang/resolve/DescriptorResolver.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 871a1319c43..cb53e69a142 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -1041,21 +1041,21 @@ public class DescriptorResolver { private void setConstantForVariableIfNeeded( @NotNull VariableDescriptorImpl variableDescriptor, @NotNull final JetScope scope, - @NotNull JetVariableDeclaration variable, + @NotNull final JetVariableDeclaration variable, @NotNull final DataFlowInfo dataFlowInfo, @NotNull final JetType variableType, @NotNull final BindingTrace trace ) { if (!shouldRecordInitializerForProperty(variableDescriptor, variableType)) return; - final JetExpression initializer = variable.getInitializer(); - if (initializer == null) return; + if (!variable.hasInitializer()) return; variableDescriptor.setCompileTimeInitializer( storageManager.createRecursionTolerantNullableLazyValue(new Function0>() { @Nullable @Override public CompileTimeConstant invoke() { + JetExpression initializer = variable.getInitializer(); JetType initializerType = expressionTypingServices.safeGetType(scope, initializer, variableType, dataFlowInfo, trace); CompileTimeConstant constant = ConstantExpressionEvaluator.object$.evaluate(initializer, trace, initializerType); if (constant instanceof IntegerValueTypeConstant) {