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(
|
if (Flags.HAS_CONSTANT.get(flags)) {
|
||||||
storageManager.createNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
property.setCompileTimeInitializer(
|
||||||
@Nullable
|
storageManager.createNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
||||||
@Override
|
@Nullable
|
||||||
public CompileTimeConstant<?> invoke() {
|
@Override
|
||||||
return getPropertyConstant(
|
public CompileTimeConstant<?> invoke() {
|
||||||
containingDeclaration, proto, flags, AnnotatedCallableKind.PROPERTY,
|
assert containingDeclaration instanceof ClassOrPackageFragmentDescriptor
|
||||||
deserializers.getConstantDeserializer(), nameResolver);
|
: "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);
|
property.initialize(getter, setter);
|
||||||
|
|
||||||
@@ -280,23 +285,6 @@ public class DescriptorDeserializer {
|
|||||||
: Annotations.EMPTY;
|
: 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) {
|
public static CallableMemberDescriptor.Kind memberKind(Callable.MemberKind memberKind) {
|
||||||
switch (memberKind) {
|
switch (memberKind) {
|
||||||
case DECLARATION:
|
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(
|
builder.setFlags(Flags.getCallableFlags(
|
||||||
|
|||||||
@@ -959,7 +959,7 @@ public class DescriptorResolver {
|
|||||||
@Override
|
@Override
|
||||||
public JetType invoke() {
|
public JetType invoke() {
|
||||||
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
||||||
setConstantForVariable(variableDescriptor, initializer, initializerType, trace);
|
setConstantForVariableIfNeeded(variableDescriptor, initializer, initializerType, trace);
|
||||||
return transformAnonymousTypeIfNeeded(variableDescriptor, variable, initializerType, trace);
|
return transformAnonymousTypeIfNeeded(variableDescriptor, variable, initializerType, trace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -967,7 +967,7 @@ public class DescriptorResolver {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
JetType initializerType = resolveInitializerType(scope, initializer, dataFlowInfo, trace);
|
||||||
setConstantForVariable(variableDescriptor, initializer, initializerType, trace);
|
setConstantForVariableIfNeeded(variableDescriptor, initializer, initializerType, trace);
|
||||||
return initializerType;
|
return initializerType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -976,18 +976,20 @@ public class DescriptorResolver {
|
|||||||
JetType type = typeResolver.resolveType(scope, propertyTypeRef, trace, true);
|
JetType type = typeResolver.resolveType(scope, propertyTypeRef, trace, true);
|
||||||
JetExpression initializer = variable.getInitializer();
|
JetExpression initializer = variable.getInitializer();
|
||||||
if (initializer != null) {
|
if (initializer != null) {
|
||||||
setConstantForVariable(variableDescriptor, initializer, type, trace);
|
setConstantForVariableIfNeeded(variableDescriptor, initializer, type, trace);
|
||||||
}
|
}
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setConstantForVariable(
|
private void setConstantForVariableIfNeeded(
|
||||||
@NotNull VariableDescriptorImpl variableDescriptor,
|
@NotNull VariableDescriptorImpl variableDescriptor,
|
||||||
@NotNull final JetExpression initializer,
|
@NotNull final JetExpression initializer,
|
||||||
@NotNull final JetType initializerType,
|
@NotNull final JetType initializerType,
|
||||||
@NotNull final BindingTrace trace
|
@NotNull final BindingTrace trace
|
||||||
) {
|
) {
|
||||||
|
if (variableDescriptor.isVar()) return;
|
||||||
|
|
||||||
variableDescriptor.setCompileTimeInitializer(storageManager.createRecursionTolerantNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
variableDescriptor.setCompileTimeInitializer(storageManager.createRecursionTolerantNullableLazyValue(new Function0<CompileTimeConstant<?>>() {
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
+2
-3
@@ -73,9 +73,8 @@ public abstract class VariableDescriptorImpl extends DeclarationDescriptorNonRoo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setCompileTimeInitializer(@NotNull NullableLazyValue<CompileTimeConstant<?>> compileTimeInitializer) {
|
public void setCompileTimeInitializer(@NotNull NullableLazyValue<CompileTimeConstant<?>> compileTimeInitializer) {
|
||||||
if (!isVar()) {
|
assert !isVar() : "Compile-time value for property initializer should be recorded only for final variables " + getName();
|
||||||
this.compileTimeInitializer = compileTimeInitializer;
|
this.compileTimeInitializer = compileTimeInitializer;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user