- do not scan words when token is expected to have no words (e.g. whitespace)

- skip filterlexer creation when indexing
This commit is contained in:
Maxim.Mossienko
2012-02-07 19:25:04 +04:00
parent e654e23b5a
commit 9e43a15489
9 changed files with 77 additions and 39 deletions
@@ -22,18 +22,37 @@ import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
import com.intellij.psi.impl.source.tree.ElementType;
import com.intellij.psi.search.UsageSearchContext;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
/**
* @author ven
*/
public class JavaFilterLexer extends BaseFilterLexer {
private static final TokenSet ourSkipWordsScanSet = TokenSet.orSet(
TokenSet.create(
JavaTokenType.WHITE_SPACE,
JavaTokenType.LPARENTH,
JavaTokenType.RPARENTH,
JavaTokenType.LBRACE,
JavaTokenType.RBRACE,
JavaTokenType.LBRACKET,
JavaTokenType.RBRACKET,
JavaTokenType.SEMICOLON,
JavaTokenType.COMMA,
JavaTokenType.DOT,
JavaTokenType.ELLIPSIS,
JavaTokenType.AT
),
JavaTokenType.OPERATION_BIT_SET
);
public JavaFilterLexer(final Lexer originalLexer, final OccurrenceConsumer table) {
super(originalLexer, table);
}
@Override
public void advance() {
final IElementType tokenType = getDelegate().getTokenType();
final IElementType tokenType = myDelegate.getTokenType();
if (tokenType == JavaTokenType.IDENTIFIER
|| tokenType == JavaTokenType.LONG_LITERAL
@@ -48,10 +67,10 @@ public class JavaFilterLexer extends BaseFilterLexer {
scanWordsInToken(UsageSearchContext.IN_COMMENTS, false, false);
advanceTodoItemCountsInToken();
}
else {
else if (!ourSkipWordsScanSet.contains(tokenType)) {
scanWordsInToken(UsageSearchContext.IN_PLAIN_TEXT, false, false);
}
getDelegate().advance();
myDelegate.advance();
}
}
@@ -15,13 +15,11 @@
*/
package com.intellij.psi.impl.cache.impl.idCache;
import com.intellij.lexer.FilterLexer;
import com.intellij.lexer.JavaLexer;
import com.intellij.lexer.Lexer;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
import com.intellij.psi.impl.cache.impl.id.LexerBasedIdIndexer;
import com.intellij.psi.impl.source.tree.StdTokenSets;
public class JavaIdIndexer extends LexerBasedIdIndexer {
@Override
@@ -31,7 +29,6 @@ public class JavaIdIndexer extends LexerBasedIdIndexer {
public static Lexer createIndexingLexer(OccurrenceConsumer consumer) {
final JavaLexer javaLexer = new JavaLexer(LanguageLevel.JDK_1_3);
final JavaFilterLexer filterLexer = new JavaFilterLexer(javaLexer, consumer);
return new FilterLexer(filterLexer, new FilterLexer.SetFilter(StdTokenSets.WHITE_SPACE_OR_COMMENT_BIT_SET));
return new JavaFilterLexer(javaLexer, consumer);
}
}