import static com.google.common.base.Verify.verify;
+import com.google.common.annotations.Beta;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.CharMatcher;
import com.google.common.base.VerifyException;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.ArgumentContext;
+import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.FileContext;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.KeywordContext;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.StatementContext;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.UnquotedStringContext;
import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRKeyword.Qualified;
import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRKeyword.Unqualified;
-final class StatementFactory {
+@Beta
+public final class AntlrSupport {
private static final CharMatcher WHITESPACE_MATCHER = CharMatcher.whitespace();
private final Map<String, DoubleQuoted> dquotArguments = new HashMap<>();
private final Map<Entry<String, String>, Qualified> qualKeywords = new HashMap<>();
private final Map<String, String> strings = new HashMap<>();
- @NonNull IRStatement createStatement(final StatementContext stmt) {
+ private AntlrSupport() {
+ // Hidden on purpose
+ }
+
+ /**
+ * Create an {@link IRStatement} from a parsed {@link StatementContext}.
+ *
+ * @param file ANTLR file context
+ * @return A new IRStatement
+ * @throws NullPointerException if {@code file} is null or it does not contain a root statement
+ */
+ public static @NonNull IRStatement createStatement(final FileContext file) {
+ return new AntlrSupport().createStatement(file.statement());
+ }
+
+ private @NonNull IRStatement createStatement(final StatementContext stmt) {
final ParseTree firstChild = stmt.getChild(0);
verify(firstChild instanceof KeywordContext, "Unexpected shape of %s", stmt);
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
-import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.StatementContext;
/**
* A single YANG statement in its raw string form. A statement is composed of:
this.argument = argument;
}
- /**
- * Create an {@link IRStatement} from a parsed {@link StatementContext}.
- *
- * @param context ANTLR statement context
- * @return A new IRStatement
- * @throws NullPointerException if {@code context} is null
- */
- public static @NonNull IRStatement forContext(final StatementContext context) {
- return new StatementFactory().createStatement(context);
- }
-
/**
* Return this statement's keyword.
*
* is not required for the purposes of statement inference.
*
* <p>
- * The main entrypoint into this package is {@link org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRStatement}, which
- * represents a single YANG statement. Every YANG file is required to contain exactly one top-level statement,
+ * The main entry point into this package is {@link org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRStatement},
+ * which represents a single YANG statement. Every YANG file is required to contain exactly one top-level statement,
* {@code module} or {@code submodule}, hence an IRStatement also represents the significant contents of a YANG file.
+ * One way of creating an IRStatement is through
+ * {@link org.opendaylight.yangtools.yang.parser.rfc7950.ir.AntlrSupport#createStatement(
+ * org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.FileContext)}.
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.ir;
\ No newline at end of file
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser;
import org.opendaylight.yangtools.yang.parser.antlr.YangStatementParser.FileContext;
import org.opendaylight.yangtools.yang.parser.rfc7950.antlr.CompactYangStatementLexer;
+import org.opendaylight.yangtools.yang.parser.rfc7950.ir.AntlrSupport;
import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRKeyword;
import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRStatement;
import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
final FileContext result = parser.file();
errorListener.validate();
- return IRStatement.forContext(result.statement());
+ return AntlrSupport.createStatement(result);
}
}
package org.opendaylight.yangtools.yang.parser.rfc7950.ir;
import static org.junit.Assert.assertEquals;
-import static org.opendaylight.yangtools.yang.parser.rfc7950.ir.StatementFactory.trimWhitespace;
+import static org.opendaylight.yangtools.yang.parser.rfc7950.ir.AntlrSupport.trimWhitespace;
import org.junit.Test;
-public class StatementFactoryTest {
+public class AntlrSupportTest {
@Test
public void testTrimWhitespace() {
assertEquals("\n", trimWhitespace("\n", 0));