From 1353e7f56b3ddd887f5cced34829974454ec806d Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 3 Oct 2014 20:37:28 +0400 Subject: [PATCH] Find Usages: Disable by-convention search of invoke(). Improve scanner accuracy when indexing possible references to component functions --- .../jetbrains/jet/plugin/findUsages/KotlinWordsScanner.kt | 7 ++++++- .../jet/plugin/search/usagesSearch/conventions.kt | 1 - .../findUsages/kotlin/conventions/invoke.results.txt | 1 - .../refactoring/rename/renameInvoke/after/invoke.kt | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinWordsScanner.kt b/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinWordsScanner.kt index 28ab0dd4673..23324459e37 100644 --- a/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinWordsScanner.kt +++ b/idea/src/org/jetbrains/jet/plugin/findUsages/KotlinWordsScanner.kt @@ -41,10 +41,11 @@ class KotlinWordsScanner() : WordsScanner { lexer.start(fileText) val occurrence = WordOccurrence(null, 0, 0, null) + var valOrVarBefore: Boolean = false stream { lexer.getTokenType() }.forEach { elementType -> // todo: replace with when - if (ALL_SEARCHABLE_OPERATIONS.contains(elementType)) { + if (ALL_SEARCHABLE_OPERATIONS.contains(elementType) || (valOrVarBefore && elementType == JetTokens.LPAR)) { occurrence.init(lexer.getBufferSequence(), lexer.getTokenStart(), lexer.getTokenEnd(), WordOccurrence.Kind.CODE) processor.process(occurrence) } @@ -52,6 +53,10 @@ class KotlinWordsScanner() : WordsScanner { else if (JetTokens.STRINGS.contains(elementType)) scanWords(WordOccurrence.Kind.LITERALS, processor) else scanWords(WordOccurrence.Kind.CODE, processor) + if (elementType !in JetTokens.WHITE_SPACE_OR_COMMENT_BIT_SET) { + valOrVarBefore = elementType == JetTokens.VAL_KEYWORD || elementType == JetTokens.VAR_KEYWORD + } + lexer.advance() } } diff --git a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/conventions.kt b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/conventions.kt index 3e9123115e9..54a06e231d6 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/conventions.kt +++ b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/conventions.kt @@ -58,7 +58,6 @@ public fun Name.getOperationSymbolsToSearch(): Set { EQUALS -> return EQUALS_OPERATIONS IDENTITY_EQUALS -> return IDENTITY_EQUALS_OPERATIONS CONTAINS -> return IN_OPERATIONS_TO_SEARCH - INVOKE_OPERATION_NAME -> return ImmutableSet.of(JetTokens.LPAR) ITERATOR_OPERATION_NAME -> return ImmutableSet.of(JetTokens.IN_KEYWORD) in INDEXING_OPERATION_NAMES -> return ImmutableSet.of(JetTokens.LBRACKET) } diff --git a/idea/testData/findUsages/kotlin/conventions/invoke.results.txt b/idea/testData/findUsages/kotlin/conventions/invoke.results.txt index 199554ae546..379e82d870f 100644 --- a/idea/testData/findUsages/kotlin/conventions/invoke.results.txt +++ b/idea/testData/findUsages/kotlin/conventions/invoke.results.txt @@ -1,2 +1 @@ Function call (9: 10) B(1).invoke(2) -Implicit 'invoke' (10: 5) B(1)(2) diff --git a/idea/testData/refactoring/rename/renameInvoke/after/invoke.kt b/idea/testData/refactoring/rename/renameInvoke/after/invoke.kt index d620b43aa28..fb506903b87 100644 --- a/idea/testData/refactoring/rename/renameInvoke/after/invoke.kt +++ b/idea/testData/refactoring/rename/renameInvoke/after/invoke.kt @@ -4,5 +4,5 @@ class A(val n: Int) { fun test() { A(1).foo(2) - A(1).foo(2) + A(1)(2) } \ No newline at end of file