From eeea85c86a0d146c1fdf5d20e26f2b2f69b8f4b0 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 2 Sep 2016 15:34:16 +0300 Subject: [PATCH] Fast search of assignment operations --- .../idea/search/usagesSearch/OperatorReferenceSearch.kt | 5 +++++ .../kotlin/idea/search/usagesSearch/conventions.kt | 3 --- .../testData/findUsages/kotlin/conventions/plusAssign.log | 8 ++++++++ 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 idea/testData/findUsages/kotlin/conventions/plusAssign.log diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearch.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearch.kt index 78ec638cba5..36d35c4579d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearch.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/OperatorReferenceSearch.kt @@ -123,6 +123,11 @@ abstract class OperatorReferenceSearcher( return BinaryOperatorReferenceSearcher(declaration, operationTokens, searchScope, consumer, optimizer) } + val assignmentOp = OperatorConventions.ASSIGNMENT_OPERATIONS.inverse()[name] + if (assignmentOp != null) { + return BinaryOperatorReferenceSearcher(declaration, listOf(assignmentOp), searchScope, consumer, optimizer) + } + val unaryOp = OperatorConventions.UNARY_OPERATION_NAMES.inverse()[name] if (unaryOp != null) { return UnaryOperatorReferenceSearcher(declaration, unaryOp, searchScope, consumer, optimizer) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/conventions.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/conventions.kt index 6e0e5462455..7dfdebbc70a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/conventions.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/conventions.kt @@ -59,8 +59,5 @@ fun Name.getOperationSymbolsToSearch(): Pair, Class<*>>? { DelegatedPropertyResolver.PROPERTY_DELEGATED_FUNCTION_NAME -> return setOf(KtTokens.BY_KEYWORD) to KtPropertyDelegationMethodsReference::class.java } - val assignmentOp = ASSIGNMENT_OPERATIONS.inverse()[this] - if (assignmentOp != null) return setOf(assignmentOp) to KtSimpleNameReference::class.java - return null } diff --git a/idea/testData/findUsages/kotlin/conventions/plusAssign.log b/idea/testData/findUsages/kotlin/conventions/plusAssign.log new file mode 100644 index 00000000000..54783b8a46b --- /dev/null +++ b/idea/testData/findUsages/kotlin/conventions/plusAssign.log @@ -0,0 +1,8 @@ +Checked type of a +Resolved a += 1 +Resolved a += A(1) +Searched references to A +Searched references to a in Kotlin files +Searched references to parameter a of A.plusAssign(a: A) in Kotlin files +Used plain search of A.plusAssign(m: Int) in LocalSearchScope: + CLASS:A