Introduce yang-xpath-antlr 77/86577/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 25 Dec 2019 22:52:59 +0000 (23:52 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 25 Dec 2019 23:36:16 +0000 (00:36 +0100)
This splits out ANTLR-generated parser code into a separate
artifact, so that it does not interfere with our regular
hand-written code.

Also fixup the two issues reported by spotbugs and flip
the switch on enforcement.

JIRA: YANGTOOLS-1055
Change-Id: Ida1c152af8d5e2e235831f1d7b3e272820b085ca
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
artifacts/pom.xml
docs/pom.xml
yang/pom.xml
yang/yang-xpath-antlr/pom.xml [new file with mode: 0644]
yang/yang-xpath-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/xpath/antlr/instanceIdentifier.g4 [moved from yang/yang-xpath-impl/src/main/antlr4/org/opendaylight/yangtools/yang/xpath/impl/instanceIdentifier.g4 with 100% similarity]
yang/yang-xpath-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/xpath/antlr/xpath.g4 [moved from yang/yang-xpath-impl/src/main/antlr4/org/opendaylight/yangtools/yang/xpath/impl/xpath.g4 with 100% similarity]
yang/yang-xpath-impl/pom.xml
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/AntlrXPathParser.java
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/CapturingErrorListener.java
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/FunctionSupport.java
yang/yang-xpath-impl/src/main/java/org/opendaylight/yangtools/yang/xpath/impl/InstanceIdentifierParser.java

index ab00687b5ade6455af233991c83215c25f1fc80a..1eb26fa34cae140b6128353751fdb91d4dd7c349 100644 (file)
                 <artifactId>yang-xpath-api</artifactId>
                 <version>2.0.4-SNAPSHOT</version>
             </dependency>
+            <dependency>
+                <groupId>org.opendaylight.yangtools</groupId>
+                <artifactId>yang-xpath-antlr</artifactId>
+                <version>2.0.4-SNAPSHOT</version>
+            </dependency>
             <dependency>
                 <groupId>org.opendaylight.yangtools</groupId>
                 <artifactId>yang-xpath-impl</artifactId>
index 2746602b25ca9d422c6cbdecff6b7cfb0205f914..1f203f1ba3cda06688e755c6e0b1ab303b5f810a 100644 (file)
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-xpath-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-xpath-antlr</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-xpath-impl</artifactId>
index e749ed72cc43fffd199eb6da9bd3cc79b707edb2..9732c75d2cfebea5a61865667f6fbba7bb5581f8 100644 (file)
@@ -44,6 +44,7 @@
 
         <!-- YANG XPath API and implementation -->
         <module>yang-xpath-api</module>
+        <module>yang-xpath-antlr</module>
         <module>yang-xpath-impl</module>
 
         <!-- End-user utility for validating YANG models -->
diff --git a/yang/yang-xpath-antlr/pom.xml b/yang/yang-xpath-antlr/pom.xml
new file mode 100644 (file)
index 0000000..0c421e0
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: -->
+<!--
+ Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+
+ This program and the accompanying materials are made available under the
+ terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ and is available at http://www.eclipse.org/legal/epl-v10.html
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.opendaylight.yangtools</groupId>
+        <artifactId>bundle-parent</artifactId>
+        <version>4.0.4-SNAPSHOT</version>
+        <relativePath>../../bundle-parent</relativePath>
+    </parent>
+
+    <artifactId>yang-xpath-antlr</artifactId>
+    <version>2.0.4-SNAPSHOT</version>
+    <packaging>bundle</packaging>
+    <name>${project.artifactId}</name>
+    <description>YANG XPath ANTLR grammars</description>
+
+    <properties>
+        <!-- antlr-generated code does not pass SB -->
+        <odlparent.spotbugs.skip>true</odlparent.spotbugs.skip>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.antlr</groupId>
+            <artifactId>antlr4-runtime</artifactId>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.antlr</groupId>
+                <artifactId>antlr4-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>antlr4</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <listener>false</listener>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Automatic-Module-Name>org.opendaylight.yangtools.yang.xpath.antlr</Automatic-Module-Name>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
index b3861df23325e1cdb4d179113f8b53bde3802631..bed2ce699db170b6edd07a6fa6b7fad15d9da60e 100644 (file)
     <name>${project.artifactId}</name>
     <description>YANG XPath parser</description>
 
-    <properties>
-        <!-- FIXME: antlr-generated code does not pass SB -->
-        <odlparent.spotbugs.enforce>false</odlparent.spotbugs.enforce>
-    </properties>
-
     <dependencies>
         <dependency>
             <groupId>com.google.guava</groupId>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>yang-xpath-api</artifactId>
         </dependency>
-
         <dependency>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr4-runtime</artifactId>
+            <groupId>org.opendaylight.yangtools</groupId>
+            <artifactId>yang-xpath-antlr</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.kohsuke.metainf-services</groupId>
             <artifactId>metainf-services</artifactId>
 
     <build>
         <plugins>
-            <plugin>
-                <groupId>org.antlr</groupId>
-                <artifactId>antlr4-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>antlr4</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <listener>false</listener>
-                </configuration>
-            </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
index f89a5aad985f86834fa49c11aa9e8e3d3a462da8..17be3ca2cf515f224b16bfae3d7cfa8764c489bb 100644 (file)
@@ -47,6 +47,34 @@ import org.opendaylight.yangtools.yang.common.UnqualifiedQName;
 import org.opendaylight.yangtools.yang.common.YangConstants;
 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
 import org.opendaylight.yangtools.yang.common.YangVersion;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathLexer;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.AbbreviatedStepContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.AbsoluteLocationPathNorootContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.AdditiveExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.AndExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.AxisSpecifierContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.EqualityExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.ExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.FilterExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.FunctionCallContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.FunctionNameContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.LocationPathContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.MultiplicativeExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.NCNameContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.NameTestContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.NodeTestContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.OrExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.PathExprNoRootContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.PredicateContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.PrimaryExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.QNameContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.RelationalExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.RelativeLocationPathContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.StepContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.UnaryExprNoRootContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.UnionExprNoRootContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathParser.VariableReferenceContext;
 import org.opendaylight.yangtools.yang.xpath.api.YangBinaryOperator;
 import org.opendaylight.yangtools.yang.xpath.api.YangBooleanConstantExpr;
 import org.opendaylight.yangtools.yang.xpath.api.YangExpr;
@@ -71,32 +99,6 @@ import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathMode;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathSupport;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathNodeType;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathParser;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.AbbreviatedStepContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.AbsoluteLocationPathNorootContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.AdditiveExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.AndExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.AxisSpecifierContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.EqualityExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.ExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.FilterExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.FunctionCallContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.FunctionNameContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.LocationPathContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.MultiplicativeExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.NCNameContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.NameTestContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.NodeTestContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.OrExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.PathExprNoRootContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.PredicateContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.PrimaryExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.QNameContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.RelationalExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.RelativeLocationPathContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.StepContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.UnaryExprNoRootContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.UnionExprNoRootContext;
-import org.opendaylight.yangtools.yang.xpath.impl.xpathParser.VariableReferenceContext;
 
 /**
  * ANTLR-based XPath parser. Uses {@code xpath.g4} ANTLR grammar.
index d6a5d312d92132354ccb4ac98d11c90fa4ca065a..9e356884a0c1914f5269d293bf0f9d49a73c08b9 100644 (file)
@@ -7,6 +7,7 @@
  */
 package org.opendaylight.yangtools.yang.xpath.impl;
 
+import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
 import javax.xml.xpath.XPathExpressionException;
 import org.antlr.v4.runtime.BaseErrorListener;
 import org.antlr.v4.runtime.RecognitionException;
@@ -14,6 +15,8 @@ import org.antlr.v4.runtime.Recognizer;
 import org.eclipse.jdt.annotation.Nullable;
 
 final class CapturingErrorListener extends BaseErrorListener {
+    @SuppressFBWarnings(value = "NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR",
+            justification = "SB does not grok CDT")
     private @Nullable XPathExpressionException error;
 
     @Override
index 74f2dce4b9d961851da11cd12dd8e2073a4652a4..f23807631bc9d984856b05778db7a82f766ed836 100644 (file)
@@ -224,10 +224,10 @@ final class FunctionSupport {
         if (args.isEmpty()) {
             return NORMALIZE_SPACE;
         }
-        final YangExpr arg = args.get(0);
-        if (arg instanceof YangLiteralExpr) {
-            // TODO: normalize value
-        }
+        // final YangExpr arg = args.get(0);
+        // if (arg instanceof YangLiteralExpr) {
+        //     // TODO: normalize value
+        // }
 
         return YangFunctionCallExpr.of(YangFunction.NORMALIZE_SPACE.getIdentifier(), args);
     }
index 3c28a1faf4cef3078e3e7d634fdfa4fdd6a9e20f..cadea136ee4a2c3145461267b2b9271dbc3f6f5a 100644 (file)
@@ -22,6 +22,19 @@ import org.antlr.v4.runtime.CommonTokenStream;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.opendaylight.yangtools.yang.common.QualifiedQName;
 import org.opendaylight.yangtools.yang.common.YangNamespaceContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.EqQuotedStringContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.InstanceIdentifierContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.KeyPredicateContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.KeyPredicateExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.LeafListPredicateContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.LeafListPredicateExprContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.NodeIdentifierContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.PathArgumentContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.PosContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.PredicateContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.instanceIdentifierParser.QuotedStringContext;
+import org.opendaylight.yangtools.yang.xpath.antlr.xpathLexer;
 import org.opendaylight.yangtools.yang.xpath.api.YangBinaryOperator;
 import org.opendaylight.yangtools.yang.xpath.api.YangExpr;
 import org.opendaylight.yangtools.yang.xpath.api.YangLiteralExpr;
@@ -33,17 +46,6 @@ import org.opendaylight.yangtools.yang.xpath.api.YangQNameExpr;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathAxis;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathMode;
 import org.opendaylight.yangtools.yang.xpath.api.YangXPathMathSupport;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.EqQuotedStringContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.InstanceIdentifierContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.KeyPredicateContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.KeyPredicateExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.LeafListPredicateContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.LeafListPredicateExprContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.NodeIdentifierContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.PathArgumentContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.PosContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.PredicateContext;
-import org.opendaylight.yangtools.yang.xpath.impl.instanceIdentifierParser.QuotedStringContext;
 
 abstract class InstanceIdentifierParser {
     static final class Base extends InstanceIdentifierParser {