/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.works.editor.grammar.codemodel.impl;
import java.util.Collection;
import java.util.Collections;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.antlr.works.editor.grammar.codemodel.LexerRuleModel;
import org.antlr.works.editor.grammar.codemodel.ModeModel;
import org.antlr.works.editor.grammar.codemodel.RuleKind;
import org.antlr.works.editor.grammar.codemodel.RuleModel;
import org.antlr.works.editor.grammar.codemodel.TokenData;
/**
*
* @author Sam Harwell
*/
public class LexerRuleModelImpl extends RuleModelImpl implements LexerRuleModel {
private final ModeModelImpl mode;
private final boolean isFragment;
private final boolean generateTokenType;
private final String literal;
public LexerRuleModelImpl(String name, ModeModelImpl mode, boolean isFragment, boolean generateTokenType, String literal, FileModelImpl file, TerminalNode seek, ParserRuleContext span) {
super(name, file, seek, span);
this.mode = mode;
this.isFragment = isFragment;
this.generateTokenType = generateTokenType;
this.literal = literal;
}
@Override
public RuleKind getRuleKind() {
return RuleKind.LEXER;
}
@Override
public ModeModel getMode() {
return mode;
}
@Override
public boolean isFragment() {
return isFragment;
}
@Override
public TokenData getTokenData() {
if (!generateTokenType) {
return null;
}
return new TokenData() {
@Override
public String getName() {
return LexerRuleModelImpl.this.getName();
}
@Override
public String getLiteral() {
return literal;
}
@Override
public Collection<? extends RuleModel> resolve() {
return Collections.singletonList(LexerRuleModelImpl.this);
}
};
}
}