Reformat ContractSerializer.kt according to code style
This commit is contained in:
+33
-25
@@ -26,9 +26,9 @@ import org.jetbrains.kotlin.metadata.deserialization.Flags
|
|||||||
|
|
||||||
class ContractSerializer {
|
class ContractSerializer {
|
||||||
fun serializeContractOfFunctionIfAny(
|
fun serializeContractOfFunctionIfAny(
|
||||||
functionDescriptor: FunctionDescriptor,
|
functionDescriptor: FunctionDescriptor,
|
||||||
proto: ProtoBuf.Function.Builder,
|
proto: ProtoBuf.Function.Builder,
|
||||||
parentSerializer: DescriptorSerializer
|
parentSerializer: DescriptorSerializer
|
||||||
) {
|
) {
|
||||||
val contractDescription = functionDescriptor.getUserData(ContractProviderKey)?.getContractDescription()
|
val contractDescription = functionDescriptor.getUserData(ContractProviderKey)?.getContractDescription()
|
||||||
if (contractDescription != null) {
|
if (contractDescription != null) {
|
||||||
@@ -50,7 +50,11 @@ class ContractSerializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun fillEffectProto(builder: ProtoBuf.Effect.Builder, effectDeclaration: EffectDeclaration, contractDescription: ContractDescription) {
|
private fun fillEffectProto(
|
||||||
|
builder: ProtoBuf.Effect.Builder,
|
||||||
|
effectDeclaration: EffectDeclaration,
|
||||||
|
contractDescription: ContractDescription
|
||||||
|
) {
|
||||||
when (effectDeclaration) {
|
when (effectDeclaration) {
|
||||||
is ConditionalEffectDeclaration -> {
|
is ConditionalEffectDeclaration -> {
|
||||||
builder.setConclusionOfConditionalEffect(contractExpressionProto(effectDeclaration.condition, contractDescription))
|
builder.setConclusionOfConditionalEffect(contractExpressionProto(effectDeclaration.condition, contractDescription))
|
||||||
@@ -59,8 +63,10 @@ class ContractSerializer {
|
|||||||
|
|
||||||
is ReturnsEffectDeclaration -> {
|
is ReturnsEffectDeclaration -> {
|
||||||
when {
|
when {
|
||||||
effectDeclaration.value == ConstantReference.NOT_NULL -> builder.effectType = ProtoBuf.Effect.EffectType.RETURNS_NOT_NULL
|
effectDeclaration.value == ConstantReference.NOT_NULL -> builder.effectType =
|
||||||
effectDeclaration.value == ConstantReference.WILDCARD -> builder.effectType = ProtoBuf.Effect.EffectType.RETURNS_CONSTANT
|
ProtoBuf.Effect.EffectType.RETURNS_NOT_NULL
|
||||||
|
effectDeclaration.value == ConstantReference.WILDCARD -> builder.effectType =
|
||||||
|
ProtoBuf.Effect.EffectType.RETURNS_CONSTANT
|
||||||
else -> {
|
else -> {
|
||||||
builder.effectType = ProtoBuf.Effect.EffectType.RETURNS_CONSTANT
|
builder.effectType = ProtoBuf.Effect.EffectType.RETURNS_CONSTANT
|
||||||
builder.addEffectConstructorArgument(contractExpressionProto(effectDeclaration.value, contractDescription))
|
builder.addEffectConstructorArgument(contractExpressionProto(effectDeclaration.value, contractDescription))
|
||||||
@@ -77,11 +83,14 @@ class ContractSerializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Add else and do something like reporting issue?
|
// TODO: Add else and do something like reporting issue?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun contractExpressionProto(contractDescriptionElement: ContractDescriptionElement, contractDescription: ContractDescription): ProtoBuf.Expression.Builder {
|
private fun contractExpressionProto(
|
||||||
|
contractDescriptionElement: ContractDescriptionElement,
|
||||||
|
contractDescription: ContractDescription
|
||||||
|
): ProtoBuf.Expression.Builder {
|
||||||
return contractDescriptionElement.accept(object : ContractDescriptionVisitor<ProtoBuf.Expression.Builder, Unit> {
|
return contractDescriptionElement.accept(object : ContractDescriptionVisitor<ProtoBuf.Expression.Builder, Unit> {
|
||||||
override fun visitLogicalOr(logicalOr: LogicalOr, data: Unit): ProtoBuf.Expression.Builder {
|
override fun visitLogicalOr(logicalOr: LogicalOr, data: Unit): ProtoBuf.Expression.Builder {
|
||||||
val leftBuilder = logicalOr.left.accept(this, data)
|
val leftBuilder = logicalOr.left.accept(this, data)
|
||||||
@@ -92,8 +101,7 @@ class ContractSerializer {
|
|||||||
addOrArgument(leftBuilder)
|
addOrArgument(leftBuilder)
|
||||||
addOrArgument(contractExpressionProto(logicalOr.right, contractDescription))
|
addOrArgument(contractExpressionProto(logicalOr.right, contractDescription))
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// we can save some space by re-using left builder instead of nesting new one
|
// we can save some space by re-using left builder instead of nesting new one
|
||||||
leftBuilder.apply { addOrArgument(contractExpressionProto(logicalOr.right, contractDescription)) }
|
leftBuilder.apply { addOrArgument(contractExpressionProto(logicalOr.right, contractDescription)) }
|
||||||
}
|
}
|
||||||
@@ -108,17 +116,16 @@ class ContractSerializer {
|
|||||||
addAndArgument(leftBuilder)
|
addAndArgument(leftBuilder)
|
||||||
addAndArgument(contractExpressionProto(logicalAnd.right, contractDescription))
|
addAndArgument(contractExpressionProto(logicalAnd.right, contractDescription))
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// we can save some space by re-using left builder instead of nesting new one
|
// we can save some space by re-using left builder instead of nesting new one
|
||||||
leftBuilder.apply { addAndArgument(contractExpressionProto(logicalAnd.right, contractDescription)) }
|
leftBuilder.apply { addAndArgument(contractExpressionProto(logicalAnd.right, contractDescription)) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitLogicalNot(logicalNot: LogicalNot, data: Unit): ProtoBuf.Expression.Builder =
|
override fun visitLogicalNot(logicalNot: LogicalNot, data: Unit): ProtoBuf.Expression.Builder =
|
||||||
logicalNot.arg.accept(this, data).apply {
|
logicalNot.arg.accept(this, data).apply {
|
||||||
writeFlags(Flags.IS_NEGATED.invert(flags))
|
writeFlags(Flags.IS_NEGATED.invert(flags))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitIsInstancePredicate(isInstancePredicate: IsInstancePredicate, data: Unit): ProtoBuf.Expression.Builder {
|
override fun visitIsInstancePredicate(isInstancePredicate: IsInstancePredicate, data: Unit): ProtoBuf.Expression.Builder {
|
||||||
// write variable
|
// write variable
|
||||||
@@ -188,16 +195,17 @@ class ContractSerializer {
|
|||||||
InvocationKind.UNKNOWN -> null
|
InvocationKind.UNKNOWN -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun constantValueProtobufEnum(constantReference: ConstantReference): ProtoBuf.Expression.ConstantValue? = when (constantReference) {
|
private fun constantValueProtobufEnum(constantReference: ConstantReference): ProtoBuf.Expression.ConstantValue? =
|
||||||
BooleanConstantReference.TRUE -> ProtoBuf.Expression.ConstantValue.TRUE
|
when (constantReference) {
|
||||||
BooleanConstantReference.FALSE -> ProtoBuf.Expression.ConstantValue.FALSE
|
BooleanConstantReference.TRUE -> ProtoBuf.Expression.ConstantValue.TRUE
|
||||||
ConstantReference.NULL -> ProtoBuf.Expression.ConstantValue.NULL
|
BooleanConstantReference.FALSE -> ProtoBuf.Expression.ConstantValue.FALSE
|
||||||
ConstantReference.NOT_NULL -> throw IllegalStateException(
|
ConstantReference.NULL -> ProtoBuf.Expression.ConstantValue.NULL
|
||||||
|
ConstantReference.NOT_NULL -> throw IllegalStateException(
|
||||||
"Internal error during serialization of function contract: NOT_NULL constant isn't denotable in protobuf format. " +
|
"Internal error during serialization of function contract: NOT_NULL constant isn't denotable in protobuf format. " +
|
||||||
"Its serialization should be handled at higher level"
|
"Its serialization should be handled at higher level"
|
||||||
)
|
)
|
||||||
ConstantReference.WILDCARD -> null
|
ConstantReference.WILDCARD -> null
|
||||||
else -> throw IllegalArgumentException("Unknown constant: $constantReference")
|
else -> throw IllegalArgumentException("Unknown constant: $constantReference")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user