mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-15 16:28:56 +00:00
[#550] Cache AbstractInternalAntlrParser.createAllRules
Signed-off-by: Christian Dietrich <christian.dietrich@itemis.de>
This commit is contained in:
parent
5292c344c6
commit
26d6870c88
1 changed files with 9 additions and 1 deletions
|
@ -14,6 +14,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.antlr.runtime.BitSet;
|
||||
import org.antlr.runtime.CommonToken;
|
||||
|
@ -201,6 +202,8 @@ public abstract class AbstractInternalAntlrParser extends Parser {
|
|||
|
||||
private static final Logger logger = Logger.getLogger(AbstractInternalAntlrParser.class);
|
||||
|
||||
private static final ConcurrentHashMap<Grammar, Map<String, AbstractRule>> allRulesCache = new ConcurrentHashMap<>();
|
||||
|
||||
private ICompositeNode currentNode;
|
||||
|
||||
private INode lastConsumedNode;
|
||||
|
@ -235,13 +238,18 @@ public abstract class AbstractInternalAntlrParser extends Parser {
|
|||
* @since 2.11
|
||||
*/
|
||||
protected Map<String, AbstractRule> createAllRules(Grammar grammar) {
|
||||
Map<String, AbstractRule> allRules = Maps.newHashMap();
|
||||
Map<String, AbstractRule> allRules = allRulesCache.get(grammar);
|
||||
if (allRules != null) {
|
||||
return allRules;
|
||||
}
|
||||
allRules = Maps.newHashMap();
|
||||
for (AbstractRule rule: GrammarUtil.allRules(grammar)) {
|
||||
if(rule instanceof TerminalRule)
|
||||
allRules.put(rule.getName().toUpperCase(), rule);
|
||||
else
|
||||
allRules.put(rule.getName(), rule);
|
||||
}
|
||||
allRulesCache.putIfAbsent(grammar, allRules);
|
||||
return allRules;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue