Warn if lookahead is too big in matchTokenStreamPredicate()

This commit is contained in:
Nikolay Krasko
2014-12-15 14:10:04 +03:00
parent 6c15472bf9
commit 4fa97c917d
@@ -17,6 +17,8 @@
package org.jetbrains.jet.lang.parsing;
import com.intellij.lang.PsiBuilder;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.containers.Stack;
@@ -31,7 +33,11 @@ import java.util.Map;
import static org.jetbrains.jet.lexer.JetTokens.*;
/*package*/ abstract class AbstractJetParsing {
private static final Logger LOGGER = Logger.getInstance(AbstractJetParsing.class);
private static final int LOOK_AHEAD_SIZE_WARN = 1000;
private static final Map<String, JetKeywordToken> SOFT_KEYWORD_TEXTS = new HashMap<String, JetKeywordToken>();
static {
for (IElementType type : JetTokens.SOFT_KEYWORDS.getTypes()) {
JetKeywordToken keywordToken = (JetKeywordToken) type;
@@ -309,6 +315,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
protected int matchTokenStreamPredicate(TokenStreamPattern pattern) {
PsiBuilder.Marker currentPosition = mark();
int beginOffset = myBuilder.getCurrentOffset();
Stack<IElementType> opens = new Stack<IElementType>();
int openAngleBrackets = 0;
int openBraces = 0;
@@ -355,7 +362,19 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
}
advance(); // skip token
}
int endOffset = myBuilder.getCurrentOffset();
currentPosition.rollbackTo();
if (endOffset - beginOffset > LOOK_AHEAD_SIZE_WARN && !ApplicationManager.getApplication().isHeadlessEnvironment()) {
String text = new StringBuilder(myBuilder.getOriginalText())
.insert(endOffset, "<~~!END!~~>")
.insert(beginOffset, "<~~!BEGIN!~~>")
.toString();
LOGGER.warn("Suspicious big range: \n" + text);
}
return pattern.result();
}