Warn if lookahead is too big in matchTokenStreamPredicate()
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user