Minor: reformat

This commit is contained in:
Pavel Kirpichenkov
2022-01-27 18:43:21 +03:00
committed by teamcity
parent 0362d4ac9f
commit 4eb2c2f6f1
@@ -69,11 +69,12 @@ interface Check {
sealed class MemberKindCheck(override val description: String) : Check { sealed class MemberKindCheck(override val description: String) : Check {
object MemberOrExtension : MemberKindCheck("must be a member or an extension function") { object MemberOrExtension : MemberKindCheck("must be a member or an extension function") {
override fun check(functionDescriptor: FunctionDescriptor) = override fun check(functionDescriptor: FunctionDescriptor) =
functionDescriptor.dispatchReceiverParameter != null || functionDescriptor.extensionReceiverParameter != null functionDescriptor.dispatchReceiverParameter != null || functionDescriptor.extensionReceiverParameter != null
} }
object Member : MemberKindCheck("must be a member function") { object Member : MemberKindCheck("must be a member function") {
override fun check(functionDescriptor: FunctionDescriptor) = override fun check(functionDescriptor: FunctionDescriptor) =
functionDescriptor.dispatchReceiverParameter != null functionDescriptor.dispatchReceiverParameter != null
} }
} }
@@ -81,12 +82,15 @@ sealed class ValueParameterCountCheck(override val description: String) : Check
object NoValueParameters : ValueParameterCountCheck("must have no value parameters") { object NoValueParameters : ValueParameterCountCheck("must have no value parameters") {
override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.isEmpty() override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.isEmpty()
} }
object SingleValueParameter : ValueParameterCountCheck("must have a single value parameter") { object SingleValueParameter : ValueParameterCountCheck("must have a single value parameter") {
override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size == 1 override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size == 1
} }
class AtLeast(val n: Int) : ValueParameterCountCheck("must have at least $n value parameter" + (if (n > 1) "s" else "")) { class AtLeast(val n: Int) : ValueParameterCountCheck("must have at least $n value parameter" + (if (n > 1) "s" else "")) {
override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size >= n override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size >= n
} }
class Equals(val n: Int) : ValueParameterCountCheck("must have exactly $n value parameters") { class Equals(val n: Int) : ValueParameterCountCheck("must have exactly $n value parameters") {
override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size == n override fun check(functionDescriptor: FunctionDescriptor) = functionDescriptor.valueParameters.size == n
} }
@@ -95,7 +99,7 @@ sealed class ValueParameterCountCheck(override val description: String) : Check
private object NoDefaultAndVarargsCheck : Check { private object NoDefaultAndVarargsCheck : Check {
override val description = "should not have varargs or parameters with default values" override val description = "should not have varargs or parameters with default values"
override fun check(functionDescriptor: FunctionDescriptor) = override fun check(functionDescriptor: FunctionDescriptor) =
functionDescriptor.valueParameters.all { !it.declaresOrInheritsDefaultValue() && it.varargElementType == null } functionDescriptor.valueParameters.all { !it.declaresOrInheritsDefaultValue() && it.varargElementType == null }
} }
private object IsKPropertyCheck : Check { private object IsKPropertyCheck : Check {
@@ -116,11 +120,11 @@ sealed class ReturnsCheck(val name: String, val type: KotlinBuiltIns.() -> Kotli
} }
internal class Checks private constructor( internal class Checks private constructor(
val name: Name?, val name: Name?,
val regex: Regex?, val regex: Regex?,
val nameList: Collection<Name>?, val nameList: Collection<Name>?,
val additionalCheck: (FunctionDescriptor) -> String?, val additionalCheck: (FunctionDescriptor) -> String?,
vararg val checks: Check vararg val checks: Check
) { ) {
fun isApplicable(functionDescriptor: FunctionDescriptor): Boolean { fun isApplicable(functionDescriptor: FunctionDescriptor): Boolean {
if (name != null && functionDescriptor.name != name) return false if (name != null && functionDescriptor.name != name) return false
@@ -147,16 +151,19 @@ internal class Checks private constructor(
constructor(vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null }) constructor(vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null })
: this(null, null, null, additionalChecks, *checks) : this(null, null, null, additionalChecks, *checks)
constructor(name: Name, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null }) constructor(name: Name, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null })
: this(name, null, null, additionalChecks, *checks) : this(name, null, null, additionalChecks, *checks)
constructor(regex: Regex, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null }) constructor(regex: Regex, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null })
: this(null, regex, null, additionalChecks, *checks) : this(null, regex, null, additionalChecks, *checks)
constructor(nameList: Collection<Name>, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null }) constructor(nameList: Collection<Name>, vararg checks: Check, additionalChecks: FunctionDescriptor.() -> String? = { null })
: this(null, null, nameList, additionalChecks, *checks) : this(null, null, nameList, additionalChecks, *checks)
} }
abstract class AbstractModifierChecks { abstract class AbstractModifierChecks {
abstract internal val checks: List<Checks> internal abstract val checks: List<Checks>
inline fun ensure(cond: Boolean, msg: () -> String) = if (!cond) msg() else null inline fun ensure(cond: Boolean, msg: () -> String) = if (!cond) msg() else null
@@ -172,36 +179,38 @@ abstract class AbstractModifierChecks {
object OperatorChecks : AbstractModifierChecks() { object OperatorChecks : AbstractModifierChecks() {
override val checks = listOf( override val checks = listOf(
Checks(GET, MemberOrExtension, ValueParameterCountCheck.AtLeast(1)), Checks(GET, MemberOrExtension, ValueParameterCountCheck.AtLeast(1)),
Checks(SET, MemberOrExtension, ValueParameterCountCheck.AtLeast(2)) { Checks(SET, MemberOrExtension, ValueParameterCountCheck.AtLeast(2)) {
val lastIsOk = val lastIsOk =
valueParameters.lastOrNull()?.let { !it.declaresOrInheritsDefaultValue() && it.varargElementType == null } == true valueParameters.lastOrNull()?.let { !it.declaresOrInheritsDefaultValue() && it.varargElementType == null } == true
ensure(lastIsOk) { "last parameter should not have a default value or be a vararg" } ensure(lastIsOk) { "last parameter should not have a default value or be a vararg" }
}, },
Checks(GET_VALUE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.AtLeast(2), IsKPropertyCheck), Checks(GET_VALUE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.AtLeast(2), IsKPropertyCheck),
Checks(SET_VALUE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.AtLeast(3), IsKPropertyCheck), Checks(SET_VALUE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.AtLeast(3), IsKPropertyCheck),
Checks(PROVIDE_DELEGATE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.Equals(2), IsKPropertyCheck), Checks(PROVIDE_DELEGATE, MemberOrExtension, NoDefaultAndVarargsCheck, ValueParameterCountCheck.Equals(2), IsKPropertyCheck),
Checks(INVOKE, MemberOrExtension), Checks(INVOKE, MemberOrExtension),
Checks(CONTAINS, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck, ReturnsBoolean), Checks(CONTAINS, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck, ReturnsBoolean),
Checks(ITERATOR, MemberOrExtension, NoValueParameters), Checks(ITERATOR, MemberOrExtension, NoValueParameters),
Checks(NEXT, MemberOrExtension, NoValueParameters), Checks(NEXT, MemberOrExtension, NoValueParameters),
Checks(HAS_NEXT, MemberOrExtension, NoValueParameters, ReturnsBoolean), Checks(HAS_NEXT, MemberOrExtension, NoValueParameters, ReturnsBoolean),
Checks(RANGE_TO, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck), Checks(RANGE_TO, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck),
Checks(EQUALS, Member) { Checks(EQUALS, Member) {
fun DeclarationDescriptor.isAny() = this is ClassDescriptor && KotlinBuiltIns.isAny(this) fun DeclarationDescriptor.isAny() = this is ClassDescriptor && KotlinBuiltIns.isAny(this)
ensure(containingDeclaration.isAny() || overriddenDescriptors.any { it.containingDeclaration.isAny() }) { "must override ''equals()'' in Any" } ensure(containingDeclaration.isAny() || overriddenDescriptors.any { it.containingDeclaration.isAny() }) {
}, "must override ''equals()'' in Any"
Checks(COMPARE_TO, MemberOrExtension, ReturnsInt, SingleValueParameter, NoDefaultAndVarargsCheck), }
Checks(BINARY_OPERATION_NAMES, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck), },
Checks(SIMPLE_UNARY_OPERATION_NAMES, MemberOrExtension, NoValueParameters), Checks(COMPARE_TO, MemberOrExtension, ReturnsInt, SingleValueParameter, NoDefaultAndVarargsCheck),
Checks(listOf(INC, DEC), MemberOrExtension) { Checks(BINARY_OPERATION_NAMES, MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck),
val receiver = dispatchReceiverParameter ?: extensionReceiverParameter Checks(SIMPLE_UNARY_OPERATION_NAMES, MemberOrExtension, NoValueParameters),
ensure(receiver != null && ((returnType?.isSubtypeOf(receiver.type) ?: false) || incDecCheckForExpectClass(receiver))) { Checks(listOf(INC, DEC), MemberOrExtension) {
"receiver must be a supertype of the return type" val receiver = dispatchReceiverParameter ?: extensionReceiverParameter
} ensure(receiver != null && ((returnType?.isSubtypeOf(receiver.type) ?: false) || incDecCheckForExpectClass(receiver))) {
}, "receiver must be a supertype of the return type"
Checks(ASSIGNMENT_OPERATIONS, MemberOrExtension, ReturnsUnit, SingleValueParameter, NoDefaultAndVarargsCheck), }
Checks(COMPONENT_REGEX, MemberOrExtension, NoValueParameters) },
Checks(ASSIGNMENT_OPERATIONS, MemberOrExtension, ReturnsUnit, SingleValueParameter, NoDefaultAndVarargsCheck),
Checks(COMPONENT_REGEX, MemberOrExtension, NoValueParameters)
) )
/** /**
@@ -236,7 +245,8 @@ object OperatorChecks : AbstractModifierChecks() {
object InfixChecks : AbstractModifierChecks() { object InfixChecks : AbstractModifierChecks() {
override val checks = listOf( override val checks = listOf(
Checks(MemberKindCheck.MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck)) Checks(MemberKindCheck.MemberOrExtension, SingleValueParameter, NoDefaultAndVarargsCheck)
)
} }
fun FunctionDescriptor.isValidOperator() = isOperator && OperatorChecks.check(this).isSuccess fun FunctionDescriptor.isValidOperator() = isOperator && OperatorChecks.check(this).isSuccess