Move isVar check for compile time initializer out of the setter
This commit is contained in:
+16
-28
@@ -194,17 +194,22 @@ public class DescriptorDeserializer {
|
||||
}
|
||||
}
|
||||
|
||||
property.setCompileTimeInitializer(
|
||||
storageManager.createNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public CompileTimeConstant<?> invoke() {
|
||||
return getPropertyConstant(
|
||||
containingDeclaration, proto, flags, AnnotatedCallableKind.PROPERTY,
|
||||
deserializers.getConstantDeserializer(), nameResolver);
|
||||
}
|
||||
})
|
||||
);
|
||||
if (Flags.HAS_CONSTANT.get(flags)) {
|
||||
property.setCompileTimeInitializer(
|
||||
storageManager.createNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
||||
@Nullable
|
||||
@Override
|
||||
public CompileTimeConstant<?> invoke() {
|
||||
assert containingDeclaration instanceof ClassOrPackageFragmentDescriptor
|
||||
: "Only members in classes or package fragments should be serialized: " + containingDeclaration;
|
||||
return deserializers.getConstantDeserializer().loadPropertyConstant(
|
||||
(ClassOrPackageFragmentDescriptor) containingDeclaration,
|
||||
proto, nameResolver,
|
||||
AnnotatedCallableKind.PROPERTY);
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
property.initialize(getter, setter);
|
||||
|
||||
@@ -280,23 +285,6 @@ public class DescriptorDeserializer {
|
||||
: Annotations.EMPTY;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static CompileTimeConstant<?> getPropertyConstant(
|
||||
@NotNull DeclarationDescriptor containingDeclaration,
|
||||
@NotNull Callable proto,
|
||||
int flags,
|
||||
@NotNull AnnotatedCallableKind kind,
|
||||
@NotNull ConstantDeserializer constantDeserializer,
|
||||
@NotNull NameResolver nameResolver
|
||||
) {
|
||||
assert containingDeclaration instanceof ClassOrPackageFragmentDescriptor
|
||||
: "Only members in classes or package fragments should be serialized: " + containingDeclaration;
|
||||
return Flags.HAS_CONSTANT.get(flags)
|
||||
? constantDeserializer
|
||||
.loadPropertyConstant((ClassOrPackageFragmentDescriptor) containingDeclaration, proto, nameResolver, kind)
|
||||
: null;
|
||||
}
|
||||
|
||||
public static CallableMemberDescriptor.Kind memberKind(Callable.MemberKind memberKind) {
|
||||
switch (memberKind) {
|
||||
case DECLARATION:
|
||||
|
||||
+1
-1
@@ -196,7 +196,7 @@ public class DescriptorSerializer {
|
||||
}
|
||||
}
|
||||
|
||||
hasConstant = propertyDescriptor.getCompileTimeInitializer() != null;
|
||||
hasConstant = !propertyDescriptor.isVar() && propertyDescriptor.getCompileTimeInitializer() != null;
|
||||
}
|
||||
|
||||
builder.setFlags(Flags.getCallableFlags(
|
||||
|
||||
@@ -959,7 +959,7 @@ public class DescriptorResolver {
|
||||
@Override
|
||||
public JetType invoke() {
|
||||
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
||||
setConstantForVariable(variableDescriptor, initializer, initializerType, trace);
|
||||
setConstantForVariableIfNeeded(variableDescriptor, initializer, initializerType, trace);
|
||||
return transformAnonymousTypeIfNeeded(variableDescriptor, variable, initializerType, trace);
|
||||
}
|
||||
}
|
||||
@@ -967,7 +967,7 @@ public class DescriptorResolver {
|
||||
}
|
||||
else {
|
||||
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
||||
setConstantForVariable(variableDescriptor, initializer, initializerType, trace);
|
||||
setConstantForVariableIfNeeded(variableDescriptor, initializer, initializerType, trace);
|
||||
return initializerType;
|
||||
}
|
||||
}
|
||||
@@ -976,18 +976,20 @@ public class DescriptorResolver {
|
||||
JetType type = typeResolver.resolveType(scope, propertyTypeRef, trace, true);
|
||||
JetExpression initializer = variable.getInitializer();
|
||||
if (initializer != null) {
|
||||
setConstantForVariable(variableDescriptor, initializer, type, trace);
|
||||
setConstantForVariableIfNeeded(variableDescriptor, initializer, type, trace);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
private void setConstantForVariable(
|
||||
private void setConstantForVariableIfNeeded(
|
||||
@NotNull VariableDescriptorImpl variableDescriptor,
|
||||
@NotNull final JetExpression initializer,
|
||||
@NotNull final JetType initializerType,
|
||||
@NotNull final BindingTrace trace
|
||||
) {
|
||||
if (variableDescriptor.isVar()) return;
|
||||
|
||||
variableDescriptor.setCompileTimeInitializer(storageManager.createRecursionTolerantNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
||||
@Nullable
|
||||
@Override
|
||||
|
||||
+2
-3
@@ -73,9 +73,8 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo
|
||||
}
|
||||
|
||||
public void setCompileTimeInitializer(@NotNull NullableLazyValue<CompileTimeConstant<?>> compileTimeInitializer) {
|
||||
if (!isVar()) {
|
||||
this.compileTimeInitializer = compileTimeInitializer;
|
||||
}
|
||||
assert !isVar() : "Compile-time value for property initializer should be recorded only for final variables " + getName();
|
||||
this.compileTimeInitializer = compileTimeInitializer;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user