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 524d6ed6cfacb4464d2404afe9b8d837d34daf1c..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,7 +25,6 @@ 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;
@@ -41,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) {
@@ -52,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) {
@@ -62,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;
         }
     }
 
@@ -138,17 +140,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);
         }