package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
import com.google.common.base.Throwables;
-import com.google.common.collect.ImmutableList;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
-import org.antlr.v4.runtime.ANTLRInputStream;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.ParserRuleContext;
-import org.antlr.v4.runtime.tree.ErrorNode;
-import org.antlr.v4.runtime.tree.ParseTreeListener;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
-import org.antlr.v4.runtime.tree.TerminalNode;
-import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementLexer;
-import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser;
import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
+import org.opendaylight.yangtools.yang.common.YangVersion;
import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
-import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangErrorListener;
+import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource;
import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.opendaylight.yangtools.yang.parser.util.NamedInputStream;
/**
- * This class represents implementation of StatementStreamSource
- * in order to emit YANG statements using supplied StatementWriter.
+ * This class represents implementation of StatementStreamSource in order to emit YANG statements using supplied
+ * StatementWriter.
+ *
+ * @deprecated Use {@link YangStatementStreamSource} instead.
*/
+@Deprecated
public final class YangStatementSourceImpl implements StatementStreamSource {
-
- private static final Logger LOG = LoggerFactory.getLogger(YangStatementSourceImpl.class);
-
- private static final ParseTreeListener MAKE_IMMUTABLE_LISTENER = new ParseTreeListener() {
- @Override
- public void enterEveryRule(final ParserRuleContext ctx) {
- // No-op
- }
-
- @Override
- public void exitEveryRule(final ParserRuleContext ctx) {
- ctx.children = ctx.children == null ? ImmutableList.of() : ImmutableList.copyOf(ctx.children);
- }
-
- @Override
- public void visitTerminal(final TerminalNode node) {
- // No-op
- }
-
- @Override
- public void visitErrorNode(final ErrorNode node) {
- // No-op
- }
- };
-
- private YangStatementParserListenerImpl yangStatementModelParser;
- private YangStatementParser.StatementContext statementContext;
- private String sourceName;
+ private final YangStatementParserListenerImpl yangStatementModelParser;
+ private final StatementContext statementContext;
+ private final String sourceName;
public YangStatementSourceImpl(final String fileName, final boolean isAbsolute) {
try {
- statementContext = parseYangSource(loadFile(fileName, isAbsolute));
+ final NamedFileInputStream is = loadFile(fileName, isAbsolute);
+ sourceName = is.toString();
+ statementContext = YangStatementStreamSource.parseYangSource(is);
yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
} catch (IOException | URISyntaxException | YangSyntaxErrorException e) {
throw Throwables.propagate(e);
public YangStatementSourceImpl(final InputStream inputStream) {
try {
- statementContext = parseYangSource(inputStream);
+ sourceName = inputStream instanceof NamedInputStream ? inputStream.toString() : null;
+ statementContext = YangStatementStreamSource.parseYangSource(inputStream);
yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
} catch (IOException | YangSyntaxErrorException e) {
throw Throwables.propagate(e);
}
}
- public YangStatementSourceImpl(final SourceIdentifier identifier,
- final YangStatementParser.StatementContext statementContext) {
+ public YangStatementSourceImpl(final SourceIdentifier identifier, final StatementContext statementContext) {
this.statementContext = statementContext;
this.sourceName = identifier.getName();
yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
@Override
public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
final PrefixToModule preLinkagePrefixes) {
- yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes);
+ writeLinkage(writer, stmtDef, preLinkagePrefixes, YangVersion.VERSION_1);
+ }
+
+ @Override
+ public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
+ final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) {
+ yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes, yangVersion);
ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
}
@Override
public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) {
- yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
+ writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes, YangVersion.VERSION_1);
+ }
+
+ @Override
+ public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
+ final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) {
+ yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
}
@Override
public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
final PrefixToModule prefixes) {
- yangStatementModelParser.setAttributes(writer, stmtDef, prefixes);
+ writeFull(writer, stmtDef, prefixes, YangVersion.VERSION_1);
+ }
+
+ @Override
+ public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
+ final PrefixToModule prefixes, final YangVersion yangVersion) {
+ yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
}
: new NamedFileInputStream(new File(getClass().getResource(fileName).toURI()), fileName);
}
- private YangStatementParser.StatementContext parseYangSource(final InputStream stream) throws IOException,
- YangSyntaxErrorException {
- final YangStatementLexer lexer = new YangStatementLexer(new ANTLRInputStream(stream));
- final CommonTokenStream tokens = new CommonTokenStream(lexer);
- final YangStatementParser parser = new YangStatementParser(tokens);
- //disconnect from console error output
- parser.removeErrorListeners();
-
- final YangErrorListener errorListener = new YangErrorListener();
- parser.addErrorListener(errorListener);
-
- if (stream instanceof NamedFileInputStream) {
- sourceName = stream.toString();
- } else {
- sourceName = null;
- }
-
- final StatementContext result = parser.statement();
- errorListener.validate();
-
- // Walk the resulting tree and replace each children with an immutable list, lowering memory requirements
- // and making sure the resulting tree will not get accidentally modified. An alternative would be to use
- // org.antlr.v4.runtime.Parser.TrimToSizeListener, but that does not make the tree immutable.
- ParseTreeWalker.DEFAULT.walk(MAKE_IMMUTABLE_LISTENER, result);
-
- return result;
- }
-
- public YangStatementParser.StatementContext getYangAST() {
+ public StatementContext getYangAST() {
return statementContext;
}