Minor optimization
This commit is contained in:
@@ -30,7 +30,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.ALL_SEARCHABLE_OPERATIONS
|
|||||||
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
|
import org.jetbrains.kotlin.kdoc.lexer.KDocTokens
|
||||||
import org.jetbrains.kotlin.lexer.JetLexer
|
import org.jetbrains.kotlin.lexer.JetLexer
|
||||||
import org.jetbrains.kotlin.lexer.JetTokens
|
import org.jetbrains.kotlin.lexer.JetTokens
|
||||||
import java.util.*
|
import java.util.ArrayDeque
|
||||||
|
|
||||||
class KotlinFilterLexer(table: OccurrenceConsumer): BaseFilterLexer(JetLexer(), table) {
|
class KotlinFilterLexer(table: OccurrenceConsumer): BaseFilterLexer(JetLexer(), table) {
|
||||||
private val codeTokens = TokenSet.orSet(
|
private val codeTokens = TokenSet.orSet(
|
||||||
@@ -45,38 +45,43 @@ class KotlinFilterLexer(table: OccurrenceConsumer): BaseFilterLexer(JetLexer(),
|
|||||||
JetTokens.RBRACKET, JetTokens.SEMICOLON, JetTokens.COMMA, JetTokens.DOT
|
JetTokens.RBRACKET, JetTokens.SEMICOLON, JetTokens.COMMA, JetTokens.DOT
|
||||||
)
|
)
|
||||||
|
|
||||||
private val previousTokens = LinkedList<IElementType>()
|
private val MAX_PREV_TOKENS = 2
|
||||||
|
private val previousTokens = ArrayDeque<IElementType>(MAX_PREV_TOKENS)
|
||||||
|
|
||||||
override fun advance() {
|
override fun advance() {
|
||||||
fun isMultiDeclarationPosition(): Boolean {
|
val tokenType = myDelegate.tokenType
|
||||||
return previousTokens.firstOrNull() == JetTokens.VAL_KEYWORD
|
|
||||||
|| previousTokens.firstOrNull() == JetTokens.VAR_KEYWORD
|
|
||||||
|| previousTokens.size() == 2 && previousTokens[0] == JetTokens.LPAR && previousTokens[1] == JetTokens.FOR_KEYWORD
|
|
||||||
}
|
|
||||||
|
|
||||||
val tokenType = myDelegate.getTokenType()
|
|
||||||
|
|
||||||
when (tokenType) {
|
when (tokenType) {
|
||||||
in codeTokens -> addOccurrenceInToken(UsageSearchContext.IN_CODE.toInt())
|
in codeTokens -> addOccurrenceInToken(UsageSearchContext.IN_CODE.toInt())
|
||||||
|
|
||||||
JetTokens.LPAR -> if (isMultiDeclarationPosition()) addOccurrenceInToken(UsageSearchContext.IN_CODE.toInt())
|
JetTokens.LPAR -> if (isMultiDeclarationPosition()) addOccurrenceInToken(UsageSearchContext.IN_CODE.toInt())
|
||||||
|
|
||||||
in JetTokens.STRINGS -> scanWordsInToken(UsageSearchContext.IN_STRINGS + UsageSearchContext.IN_FOREIGN_LANGUAGES, false, true)
|
in JetTokens.STRINGS -> scanWordsInToken(UsageSearchContext.IN_STRINGS + UsageSearchContext.IN_FOREIGN_LANGUAGES, false, true)
|
||||||
|
|
||||||
in commentTokens -> {
|
in commentTokens -> {
|
||||||
scanWordsInToken(UsageSearchContext.IN_COMMENTS.toInt(), false, false)
|
scanWordsInToken(UsageSearchContext.IN_COMMENTS.toInt(), false, false)
|
||||||
advanceTodoItemCountsInToken()
|
advanceTodoItemCountsInToken()
|
||||||
}
|
}
|
||||||
|
|
||||||
!in skipTokens -> scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT.toInt(), false, false)
|
!in skipTokens -> scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT.toInt(), false, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tokenType != TokenType.WHITE_SPACE) {
|
if (tokenType != TokenType.WHITE_SPACE) {
|
||||||
previousTokens.addFirst(tokenType)
|
if (previousTokens.size() == MAX_PREV_TOKENS) {
|
||||||
|
|
||||||
if (previousTokens.size() > 2) {
|
|
||||||
previousTokens.removeLast()
|
previousTokens.removeLast()
|
||||||
}
|
}
|
||||||
|
previousTokens.addFirst(tokenType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
myDelegate.advance()
|
myDelegate.advance()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isMultiDeclarationPosition(): Boolean {
|
||||||
|
val first = previousTokens.peekFirst()
|
||||||
|
if (first == JetTokens.VAL_KEYWORD || first == JetTokens.VAR_KEYWORD) return true
|
||||||
|
return first == JetTokens.LPAR && previousTokens.elementAtOrNull(1) == JetTokens.FOR_KEYWORD
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class KotlinIdIndexer: LexerBasedIdIndexer() {
|
class KotlinIdIndexer: LexerBasedIdIndexer() {
|
||||||
|
|||||||
Reference in New Issue
Block a user