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.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() {