BUG-4688: Make SourceIdentifier use Revision
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / reactor / StatementDefinitionContext.java
index bbd883938ed2ea4e177cff754872ad9f40184f0c..bab8ef1d23dd0fd74e637fe27e543e142839a470 100644 (file)
@@ -15,6 +15,7 @@ import java.util.Map;
 import java.util.Optional;
 import javax.annotation.Nonnull;
 import org.opendaylight.yangtools.yang.common.QName;
+import org.opendaylight.yangtools.yang.common.QNameModule;
 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.IdentifierNamespace;
@@ -24,11 +25,11 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.StatementFactory;
 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.StmtContext.Mutable;
-import org.opendaylight.yangtools.yang.parser.spi.source.StatementSourceReference;
 
 public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E extends EffectiveStatement<A, D>> {
     private final StatementSupport<A, D, E> support;
     private final Map<String, StatementDefinitionContext<?, ?, ?>> argumentSpecificSubDefinitions;
+    private Map<StatementDefinitionContext<?,?,?>, StatementDefinitionContext<?,?,?>> unknownStmtDefsOfYangStmts;
 
     public StatementDefinitionContext(final StatementSupport<A, D, E> support) {
         this.support = Preconditions.checkNotNull(support);
@@ -40,7 +41,11 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     public A parseArgumentValue(final StmtContext<A, D, E> context, final String value) {
-        return support.parseArgumentValue(context,value);
+        return support.parseArgumentValue(context, value);
+    }
+
+    public A adaptArgumentValue(final StmtContext<A, D, E> context, final QNameModule targetModule) {
+        return support.adaptArgumentValue(context, targetModule);
     }
 
     public void checkNamespaceAllowed(final Class<? extends IdentifierNamespace<?,?>> namespace) {
@@ -51,9 +56,8 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
         return support.getPublicView();
     }
 
-    public Optional<StatementContextBase<?, ?, ?>> beforeSubStatementCreated(final Mutable<?, ?, ?> stmt, final int offset, final StatementDefinitionContext<?, ?, ?> def, final StatementSourceReference ref,
-            final String argument) {
-        return support.beforeSubStatementCreated(stmt, offset, def, ref, argument);
+    public Optional<StatementSupport<?, ?, ?>> getImplicitParentFor(final StatementDefinition stmtDef) {
+        return support.getImplicitParentFor(stmtDef);
     }
 
     public boolean onStatementAdded(final Mutable<A, D, E> stmt) {
@@ -61,23 +65,22 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
         return false;
     }
 
-
     public void onDeclarationFinished(final Mutable<A, D, E> statement, final ModelProcessingPhase phase) {
         switch (phase) {
-        case SOURCE_PRE_LINKAGE:
-            support.onPreLinkageDeclared(statement);
-            break;
-        case SOURCE_LINKAGE:
-            support.onLinkageDeclared(statement);
-            break;
-        case STATEMENT_DEFINITION:
-            support.onStatementDefinitionDeclared(statement);
-            break;
-        case FULL_DECLARATION:
-            support.onFullDefinitionDeclared(statement);
-            break;
-        default:
-            break;
+            case SOURCE_PRE_LINKAGE:
+                support.onPreLinkageDeclared(statement);
+                break;
+            case SOURCE_LINKAGE:
+                support.onLinkageDeclared(statement);
+                break;
+            case STATEMENT_DEFINITION:
+                support.onStatementDefinitionDeclared(statement);
+                break;
+            case FULL_DECLARATION:
+                support.onFullDefinitionDeclared(statement);
+                break;
+            default:
+                break;
         }
     }
 
@@ -89,10 +92,18 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
         return support.getArgumentName() != null;
     }
 
+    public boolean isArgumentYinElement() {
+        return support.isArgumentYinElement();
+    }
+
     public QName getStatementName() {
         return support.getStatementName();
     }
 
+    public QName getArgumentName() {
+        return support.getArgumentName();
+    }
+
     @Override
     public final String toString() {
         return addToStringAttributes(MoreObjects.toStringHelper(this).omitNullValues()).toString();
@@ -103,7 +114,7 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
     }
 
     @Nonnull
-    public StatementDefinitionContext<?, ?, ?> getSubDefinitionSpecificForArgument(final String argument) {
+    StatementDefinitionContext<?, ?, ?> getSubDefinitionSpecificForArgument(final String argument) {
         if (!hasArgumentSpecificSubDefinitions()) {
             return this;
         }
@@ -119,11 +130,39 @@ public class StatementDefinitionContext<A, D extends DeclaredStatement<A>, E ext
         return potential;
     }
 
-    public boolean hasArgumentSpecificSubDefinitions() {
+    boolean hasArgumentSpecificSubDefinitions() {
         return support.hasArgumentSpecificSupports();
     }
 
     String internArgument(final String rawArgument) {
         return support.internArgument(rawArgument);
     }
+
+    StatementDefinitionContext<?, ?, ?> getAsUnknownStatementDefinition(
+            final StatementDefinitionContext<?, ?, ?> yangStmtDef) {
+        if (unknownStmtDefsOfYangStmts != null) {
+            final StatementDefinitionContext<?, ?, ?> existing = unknownStmtDefsOfYangStmts.get(yangStmtDef);
+            if (existing != null) {
+                return existing;
+            }
+        } else {
+            unknownStmtDefsOfYangStmts = new HashMap<>();
+        }
+
+        @SuppressWarnings("unchecked")
+        final StatementDefinitionContext<?, ?, ?> ret = support.getUnknownStatementDefinitionOf(
+            yangStmtDef.getPublicView()).map(StatementDefinitionContext::new).orElse(null);
+        if (ret != null) {
+            unknownStmtDefsOfYangStmts.put(yangStmtDef, ret);
+        }
+        return ret;
+    }
+
+    boolean isIgnoringIfFeatures() {
+        return support.isIgnoringIfFeatures();
+    }
+
+    boolean isIgnoringConfig() {
+        return support.isIgnoringConfig();
+    }
 }