X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Futil%2FParserListenerUtils.java;h=3b3423030cef6fe2a9a2f7416285d3220f635f88;hb=502d44ae3d818dcabf4841058bbbf9dc4b9a1cff;hp=ff96d95d8294ed59d96218b65bb922fda2c3bada;hpb=4a3b8e6b92b776ec905502da109e8a5e450cfdbb;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserListenerUtils.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserListenerUtils.java index ff96d95d82..3b3423030c 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserListenerUtils.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/util/ParserListenerUtils.java @@ -7,6 +7,8 @@ */ package org.opendaylight.yangtools.yang.parser.util; +import static com.google.common.base.Preconditions.checkState; + import java.math.BigDecimal; import java.net.URI; import java.util.ArrayList; @@ -15,8 +17,10 @@ import java.util.Date; import java.util.List; import java.util.Stack; +import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.TerminalNode; +import org.omg.CORBA.CTX_RESTRICT_SCOPE; import org.opendaylight.yangtools.antlrv4.code.gen.*; import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Argument_stmtContext; import org.opendaylight.yangtools.antlrv4.code.gen.YangParser.Base_stmtContext; @@ -121,6 +125,8 @@ import org.opendaylight.yangtools.yang.parser.builder.impl.UnionTypeBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.base.Optional; + public final class ParserListenerUtils { private static final Logger LOG = LoggerFactory.getLogger(ParserListenerUtils.class); @@ -140,7 +146,7 @@ public final class ParserListenerUtils { if (treeNode.getChild(i) instanceof StringContext) { final StringContext context = (StringContext) treeNode.getChild(i); if (context != null) { - return stringFromStringContext(context,treeNode); + return stringFromStringContext(context); } } @@ -148,14 +154,14 @@ public final class ParserListenerUtils { return result; } - private static String stringFromStringContext(StringContext context, ParseTree treeNode) { + public static String stringFromStringContext(StringContext context) { StringBuilder str = new StringBuilder(); for (TerminalNode stringNode : context.STRING()) { String result = stringNode.getText(); if(!result.contains("\"")){ str.append(result); } else if (!(result.startsWith("\"")) && result.endsWith("\"")) { - LOG.error("Syntax error in module {} at line {}: missing '\"'.", getParentModule(treeNode), + LOG.error("Syntax error in module {} at line {}: missing '\"'.", getParentModule(context), context.getStart().getLine()); } else { str.append(result.replace("\"", "")); @@ -1671,4 +1677,18 @@ public final class ParserListenerUtils { return refine; } + public static String getArgumentString(org.antlr.v4.runtime.ParserRuleContext ctx) { + List potentialValues = ctx.getRuleContexts(StringContext.class); + checkState(!potentialValues.isEmpty()); + return ParserListenerUtils.stringFromStringContext(potentialValues.get(0)); + } + + public static Optional getFirstContext(ParserRuleContext context,Class contextType) { + List potential = context.getRuleContexts(contextType); + if(potential.isEmpty()) { + return Optional.absent(); + } + return Optional.of(potential.get(0)); + } + }