Minor. Clean up the code in OperatorChecker.kt
This commit is contained in:
@@ -42,12 +42,10 @@ import org.jetbrains.kotlin.util.OperatorNameConventions.INC
|
|||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.INVOKE
|
import org.jetbrains.kotlin.util.OperatorNameConventions.INVOKE
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.ITERATOR
|
import org.jetbrains.kotlin.util.OperatorNameConventions.ITERATOR
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.NEXT
|
import org.jetbrains.kotlin.util.OperatorNameConventions.NEXT
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.NOT
|
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.RANGE_TO
|
import org.jetbrains.kotlin.util.OperatorNameConventions.RANGE_TO
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.SET
|
import org.jetbrains.kotlin.util.OperatorNameConventions.SET
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.SET_VALUE
|
import org.jetbrains.kotlin.util.OperatorNameConventions.SET_VALUE
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.UNARY_MINUS
|
import org.jetbrains.kotlin.util.OperatorNameConventions.SIMPLE_UNARY_OPERATION_NAMES
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions.UNARY_PLUS
|
|
||||||
|
|
||||||
object OperatorChecks {
|
object OperatorChecks {
|
||||||
fun canBeOperator(functionDescriptor: FunctionDescriptor): Boolean {
|
fun canBeOperator(functionDescriptor: FunctionDescriptor): Boolean {
|
||||||
@@ -62,38 +60,39 @@ object OperatorChecks {
|
|||||||
val lastIsOk = valueParameters.lastOrNull()?.let { !it.hasDefaultValue() && it.varargElementType == null } ?: false
|
val lastIsOk = valueParameters.lastOrNull()?.let { !it.hasDefaultValue() && it.varargElementType == null } ?: false
|
||||||
valueParameters.size >= 2 && lastIsOk
|
valueParameters.size >= 2 && lastIsOk
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_VALUE == name -> noDefaultsAndVarargs && valueParameters.size >= 2 && valueParameters[1].isKProperty
|
GET_VALUE == name -> noDefaultsAndVarargs && valueParameters.size >= 2 && valueParameters[1].isKProperty
|
||||||
SET_VALUE == name -> noDefaultsAndVarargs && valueParameters.size >= 3 && valueParameters[1].isKProperty
|
SET_VALUE == name -> noDefaultsAndVarargs && valueParameters.size >= 3 && valueParameters[1].isKProperty
|
||||||
|
|
||||||
INVOKE == name -> isMemberOrExtension
|
INVOKE == name -> isMemberOrExtension
|
||||||
CONTAINS == name -> singleValueParameter && noDefaultsAndVarargs && returnsBoolean
|
CONTAINS == name -> singleValueParameter && noDefaultsAndVarargs && returnsBoolean
|
||||||
|
|
||||||
ITERATOR == name -> noValueParameters
|
ITERATOR == name -> noValueParameters
|
||||||
NEXT == name -> noValueParameters
|
NEXT == name -> noValueParameters
|
||||||
HAS_NEXT == name -> noValueParameters && returnsBoolean
|
HAS_NEXT == name -> noValueParameters && returnsBoolean
|
||||||
|
|
||||||
RANGE_TO == name -> singleValueParameter && noDefaultsAndVarargs
|
RANGE_TO == name -> singleValueParameter && noDefaultsAndVarargs
|
||||||
|
|
||||||
EQUALS == name -> {
|
EQUALS == name -> {
|
||||||
fun DeclarationDescriptor.isAny() = (this as? ClassDescriptor)?.let { KotlinBuiltIns.isAny(it) } ?: false
|
fun DeclarationDescriptor.isAny() = (this as? ClassDescriptor)?.let { KotlinBuiltIns.isAny(it) } ?: false
|
||||||
isMember && overriddenDescriptors.any { it.containingDeclaration.isAny() }
|
isMember && overriddenDescriptors.any { it.containingDeclaration.isAny() }
|
||||||
}
|
}
|
||||||
COMPARE_TO == name -> returnsInt && singleValueParameter && noDefaultsAndVarargs
|
COMPARE_TO == name -> returnsInt && singleValueParameter && noDefaultsAndVarargs
|
||||||
|
|
||||||
BINARY_OPERATION_NAMES.any { it == name } ->
|
name in BINARY_OPERATION_NAMES -> singleValueParameter && noDefaultsAndVarargs
|
||||||
singleValueParameter && noDefaultsAndVarargs
|
|
||||||
(UNARY_PLUS == name) || (UNARY_MINUS == name) || (NOT == name) ->
|
name in SIMPLE_UNARY_OPERATION_NAMES -> noValueParameters
|
||||||
noValueParameters
|
|
||||||
(INC == name) || (DEC == name) -> {
|
INC == name || DEC == name -> {
|
||||||
val receiver = dispatchReceiverParameter ?: extensionReceiverParameter
|
val receiver = dispatchReceiverParameter ?: extensionReceiverParameter
|
||||||
isMemberOrExtension && (receiver != null) && (returnType?.let { it.isSubtypeOf(receiver.type) } ?: false)
|
isMemberOrExtension && (receiver != null) && (returnType?.let { it.isSubtypeOf(receiver.type) } ?: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSIGNMENT_OPERATIONS.any { it == name } ->
|
name in ASSIGNMENT_OPERATIONS ->
|
||||||
returnsUnit && singleValueParameter && noDefaultsAndVarargs
|
returnsUnit && singleValueParameter && noDefaultsAndVarargs
|
||||||
|
|
||||||
name.asString().matches(COMPONENT_REGEX) -> noValueParameters
|
name.asString().matches(COMPONENT_REGEX) -> noValueParameters
|
||||||
|
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ object OperatorNameConventions {
|
|||||||
|
|
||||||
val UNARY_OPERATION_NAMES_WITH_DEPRECATED = Collections.unmodifiableSet(setOf(INC, DEC, UNARY_PLUS, PLUS, UNARY_MINUS, MINUS, NOT))
|
val UNARY_OPERATION_NAMES_WITH_DEPRECATED = Collections.unmodifiableSet(setOf(INC, DEC, UNARY_PLUS, PLUS, UNARY_MINUS, MINUS, NOT))
|
||||||
internal val UNARY_OPERATION_NAMES = setOf(INC, DEC, UNARY_PLUS, UNARY_MINUS, NOT)
|
internal val UNARY_OPERATION_NAMES = setOf(INC, DEC, UNARY_PLUS, UNARY_MINUS, NOT)
|
||||||
|
internal val SIMPLE_UNARY_OPERATION_NAMES = setOf(UNARY_PLUS, UNARY_MINUS, NOT)
|
||||||
internal val BINARY_OPERATION_NAMES = setOf(TIMES, PLUS, MINUS, DIV, MOD, RANGE_TO)
|
internal val BINARY_OPERATION_NAMES = setOf(TIMES, PLUS, MINUS, DIV, MOD, RANGE_TO)
|
||||||
internal val ASSIGNMENT_OPERATIONS = setOf(TIMES_ASSIGN, DIV_ASSIGN, MOD_ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN)
|
internal val ASSIGNMENT_OPERATIONS = setOf(TIMES_ASSIGN, DIV_ASSIGN, MOD_ASSIGN, PLUS_ASSIGN, MINUS_ASSIGN)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user