Minor optimization

This commit is contained in:
Valentin Kipyatkov
2015-07-29 22:38:10 +03:00
parent 84543c4ed4
commit 1d1d834901
@@ -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.lexer.JetLexer
import org.jetbrains.kotlin.lexer.JetTokens
import java.util.*
import java.util.ArrayDeque
class KotlinFilterLexer(table: OccurrenceConsumer): BaseFilterLexer(JetLexer(), table) {
private val codeTokens = TokenSet.orSet(
@@ -45,38 +45,43 @@ class KotlinFilterLexer(table: OccurrenceConsumer): BaseFilterLexer(JetLexer(),
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() {
fun isMultiDeclarationPosition(): Boolean {
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()
val tokenType = myDelegate.tokenType
when (tokenType) {
in codeTokens -> 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 commentTokens -> {
scanWordsInToken(UsageSearchContext.IN_COMMENTS.toInt(), false, false)
advanceTodoItemCountsInToken()
}
!in skipTokens -> scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT.toInt(), false, false)
}
if (tokenType != TokenType.WHITE_SPACE) {
previousTokens.addFirst(tokenType)
if (previousTokens.size() > 2) {
if (previousTokens.size() == MAX_PREV_TOKENS) {
previousTokens.removeLast()
}
previousTokens.addFirst(tokenType)
}
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() {