Bug 7051 - Refactoring of UnknownStatements handling 32/63032/2
authorPeter Kajsa <pkajsa@cisco.com>
Tue, 12 Sep 2017 12:39:19 +0000 (14:39 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Sep 2017 14:15:52 +0000 (16:15 +0200)
Refactoring of UknownStatements handling due to undesired
dependecies of StatementSupport on stmt.reactor package.

Change-Id: Ic58dbe4cdda5f7252e4e17a11173a57ad5ad1db6
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/spi/meta/StatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/StatementDefinitionContext.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/ModelDefinedStatementSupport.java
yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/UnknownStatementImpl.java

index 9000904b70317a37a8735b8fde8effa8220092cd..c044e1a6ce3d464dcb5b929bc5c9b0704c17df42 100644 (file)
@@ -16,7 +16,6 @@ import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
 import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext;
 
 /**
  * Support for processing concrete YANG statement.
@@ -205,8 +204,7 @@ public interface StatementSupport<A, D extends DeclaredStatement<A>, E extends E
      * @return Optional of unknown statement form of a regular yang statement or
      *         Optional.empty() if it is not supported by this statement support
      */
-    default Optional<StatementDefinitionContext<?, ?, ?>> getUnknownStatementDefinitionOf(
-            final StatementDefinitionContext<?, ?, ?> yangStmtDef) {
+    default Optional<StatementSupport<?, ?, ?>> getUnknownStatementDefinitionOf(final StatementDefinition yangStmtDef) {
         return Optional.empty();
     }
 
index cae4b491adf2e97be3d34feab7d7a580b608293a..93602ce45d1103d1148887ef4c772ef3fc5c752e 100644 (file)
@@ -141,17 +141,18 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
 
     StatementDefinitionContext<?, ?, ?> getAsUnknownStatementDefinition(
             final StatementDefinitionContext<?, ?, ?> yangStmtDef) {
-        if (unknownStmtDefsOfYangStmts == null) {
+        if (unknownStmtDefsOfYangStmts != null) {
+            final StatementDefinitionContext<?, ?, ?> existing = unknownStmtDefsOfYangStmts.get(yangStmtDef);
+            if (existing != null) {
+                return existing;
+            }
+        } else {
             unknownStmtDefsOfYangStmts = new HashMap<>();
         }
 
-        StatementDefinitionContext<?, ?, ?> ret = unknownStmtDefsOfYangStmts.get(yangStmtDef);
-        if (ret != null) {
-            return ret;
-        }
-
-        ret = support.getUnknownStatementDefinitionOf(yangStmtDef).orElse(null);
-
+        @SuppressWarnings("unchecked")
+        final StatementDefinitionContext<?, ?, ?> ret = support.getUnknownStatementDefinitionOf(
+            yangStmtDef.getPublicView()).map(StatementDefinitionContext::new).orElse(null);
         if (ret != null) {
             unknownStmtDefsOfYangStmts.put(yangStmtDef, ret);
         }
index dde1d6da64bafe548f7e95110e12ce5e959bc3cf..2495d4e48c2e335efb396d50d011b779b44a7bfa 100644 (file)
@@ -9,12 +9,12 @@ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
 
 import java.util.Optional;
 import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext;
 
 /**
  * StatementSupport for statements defined via YANG extensions. This is implemented by piggy-backing
@@ -38,12 +38,13 @@ public final class ModelDefinedStatementSupport extends AbstractStatementSupport
 
     @Override
     public EffectiveStatement<String, UnknownStatement<String>> createEffective(
-            final StmtContext<String, UnknownStatement<String>, EffectiveStatement<String, UnknownStatement<String>>> ctx) {
+            final StmtContext<String, UnknownStatement<String>,
+            EffectiveStatement<String, UnknownStatement<String>>> ctx) {
         return definition.createEffective(ctx);
     }
 
     @Override
-    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) throws SourceException {
+    public String parseArgumentValue(final StmtContext<?, ?, ?> ctx, final String value) {
         return definition.parseArgumentValue(ctx, value);
     }
 
@@ -53,8 +54,7 @@ public final class ModelDefinedStatementSupport extends AbstractStatementSupport
     }
 
     @Override
-    public Optional<StatementDefinitionContext<?, ?, ?>> getUnknownStatementDefinitionOf(
-            final StatementDefinitionContext<?, ?, ?> yangStmtDef) {
+    public Optional<StatementSupport<?, ?, ?>> getUnknownStatementDefinitionOf(final StatementDefinition yangStmtDef) {
         return definition.getUnknownStatementDefinitionOf(yangStmtDef);
     }
 }
index c729be472ca65225c07354e6bc8b1e2efdd8a542..74034345e4a60ffa9501620d884b4ac506c2f919 100644 (file)
@@ -16,9 +16,9 @@ import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
 import org.opendaylight.yangtools.yang.model.api.stmt.UnrecognizedStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractDeclaredStatement;
 import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStatementSupport;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport;
 import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
 import org.opendaylight.yangtools.yang.parser.spi.meta.SubstatementValidator;
-import org.opendaylight.yangtools.yang.parser.stmt.reactor.StatementDefinitionContext;
 import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.UnknownEffectiveStatementImpl;
 
 public class UnknownStatementImpl extends AbstractDeclaredStatement<String> implements UnrecognizedStatement {
@@ -56,15 +56,14 @@ public class UnknownStatementImpl extends AbstractDeclaredStatement<String> impl
         }
 
         @Override
-        public Optional<StatementDefinitionContext<?, ?, ?>> getUnknownStatementDefinitionOf(
-                final StatementDefinitionContext<?, ?, ?> yangStmtDef) {
+        public Optional<StatementSupport<?, ?, ?>> getUnknownStatementDefinitionOf(
+                final StatementDefinition yangStmtDef) {
             final QName baseQName = getStatementName();
-            return Optional.of(new StatementDefinitionContext<>(
-                    new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(
-                            QName.create(baseQName, yangStmtDef.getStatementName().getLocalName()),
-                            yangStmtDef.hasArgument()
-                                    ? QName.create(baseQName, yangStmtDef.getArgumentName().getLocalName()) : null,
-                            yangStmtDef.isArgumentYinElement()))));
+            final QName argumentName = yangStmtDef.getArgumentName();
+            return Optional.of(new ModelDefinedStatementSupport(new ModelDefinedStatementDefinition(
+                    QName.create(baseQName, yangStmtDef.getStatementName().getLocalName()),
+                    argumentName != null ? QName.create(baseQName, argumentName.getLocalName()) : null,
+                    yangStmtDef.isArgumentYinElement())));
         }
     }