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%2Fstmt%2Freactor%2FSubstatementContext.java;h=1c78ae16c096664129221ca05b7e18452e9fa0ed;hb=c24d6e2f39acbb11e22b5676bb7481ed52bec461;hp=808518d9d84b4b58c5c858c0c4aaaea36364f86c;hpb=c4dc5b33e7d24670b59cc81b65e15b37a3268608;p=yangtools.git
diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
index 808518d9d8..1c78ae16c0 100644
--- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
+++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/SubstatementContext.java
@@ -7,80 +7,82 @@
*/
package org.opendaylight.yangtools.yang.parser.stmt.reactor;
-import java.util.List;
-
-import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.GroupingUtils;
-import org.opendaylight.yangtools.yang.common.QNameModule;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Verify;
+import com.google.common.collect.ImmutableSet;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Set;
+import javax.annotation.Nonnull;
import org.opendaylight.yangtools.yang.common.QName;
-import com.google.common.base.Preconditions;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping;
+import org.opendaylight.yangtools.yang.model.api.SchemaPath;
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.model.api.stmt.AugmentStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ChoiceStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ConfigStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.KeyStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.RefineStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.api.stmt.UsesStatement;
+import org.opendaylight.yangtools.yang.parser.spi.meta.CopyType;
+import org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.NamespaceStorageNode;
import org.opendaylight.yangtools.yang.parser.spi.meta.NamespaceBehaviour.Registry;
-import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
+import org.opendaylight.yangtools.yang.parser.spi.meta.QNameCacheNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
+import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
+import org.opendaylight.yangtools.yang.parser.spi.source.AugmentToChoiceNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace;
+import org.opendaylight.yangtools.yang.parser.spi.validation.ValidationBundlesNamespace.ValidationBundleType;
+import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-class SubstatementContext, E extends EffectiveStatement>
- extends StatementContextBase {
+final class SubstatementContext, E extends EffectiveStatement> extends
+ StatementContextBase {
+ private static final Logger LOG = LoggerFactory.getLogger(SubstatementContext.class);
- private final StatementContextBase,?,?> parent;
+ private final StatementContextBase, ?, ?> parent;
private final A argument;
+ private volatile SchemaPath schemaPath;
- SubstatementContext(StatementContextBase,?,?> parent,ContextBuilder builder) throws SourceException {
- //super(builder, builder.getDefinition().parseArgumentValue(parent, builder.getRawArgument()));
+ SubstatementContext(final StatementContextBase, ?, ?> parent, final ContextBuilder builder) {
super(builder);
this.parent = Preconditions.checkNotNull(parent, "Parent must not be null");
- this.argument = builder.getDefinition().parseArgumentValue(this, builder.getRawArgument());
+ this.argument = builder.getDefinition().parseArgumentValue(this, builder.getRawArgument());
}
- SubstatementContext(SubstatementContext original, QNameModule newQNameModule, StatementContextBase, ?, ?> newParent) throws SourceException {
+ @SuppressWarnings("unchecked")
+ SubstatementContext(final SubstatementContext original, final QNameModule newQNameModule,
+ final StatementContextBase, ?, ?> newParent, final CopyType typeOfCopy) {
super(original);
this.parent = newParent;
- if(newQNameModule != null && original.argument instanceof QName) {
- QName originalQName = (QName) original.argument;
- this.argument = (A) QName.create(newQNameModule,originalQName.getLocalName());
+ if (newQNameModule != null) {
+ final A originalArg = original.argument;
+ if (originalArg instanceof QName) {
+ final QName originalQName = (QName) originalArg;
+ this.argument = (A) getFromNamespace(QNameCacheNamespace.class,
+ QName.create(newQNameModule, originalQName.getLocalName()));
+ } else if (StmtContextUtils.producesDeclared(original, KeyStatement.class)) {
+ this.argument = (A) StmtContextUtils.replaceModuleQNameForKey(
+ (StmtContext, KeyStatement, ?>) original, newQNameModule);
+ } else {
+ this.argument = original.argument;
+ }
} else {
this.argument = original.argument;
}
-
- copyDeclaredStmts(original, newQNameModule);
-
- copyEffectiveStmts(original, newQNameModule);
- }
-
- private void copyDeclaredStmts(SubstatementContext original,
- QNameModule newQNameModule) throws SourceException {
- Collection extends StatementContextBase, ?, ?>> originalDeclaredSubstatements = original
- .declaredSubstatements();
- for (StatementContextBase, ?, ?> stmtContext : originalDeclaredSubstatements) {
- if (GroupingUtils.needToCopyByUses(stmtContext)) {
- StatementContextBase, ?, ?> copy = stmtContext
- .createCopy(newQNameModule,this);
- this.addEffectiveSubstatement(copy);
- } else if (GroupingUtils.isReusedByUses(stmtContext)) {
- this.addEffectiveSubstatement(stmtContext);
- }
- }
- }
-
- private void copyEffectiveStmts(SubstatementContext original,
- QNameModule newQNameModule) throws SourceException {
- Collection extends StatementContextBase, ?, ?>> originalEffectiveSubstatements = original
- .effectiveSubstatements();
- for (StatementContextBase, ?, ?> stmtContext : originalEffectiveSubstatements) {
- if (GroupingUtils.needToCopyByUses(stmtContext)) {
- StatementContextBase, ?, ?> copy = stmtContext
- .createCopy(newQNameModule,this);
- this.addEffectiveSubstatement(copy);
- } else if (GroupingUtils.isReusedByUses(stmtContext)) {
- this.addEffectiveSubstatement(stmtContext);
- }
- }
}
@Override
- public StatementContextBase,?,?> getParentContext() {
+ public StatementContextBase, ?, ?> getParentContext() {
return parent;
}
@@ -94,28 +96,214 @@ class SubstatementContext, E extends EffectiveS
return parent.getBehaviourRegistry();
}
+ @Nonnull
@Override
public RootStatementContext, ?, ?> getRoot() {
return parent.getRoot();
}
-
@Override
public A getStatementArgument() {
return argument;
}
@Override
- public StatementContextBase createCopy(QNameModule newQNameModule, StatementContextBase, ?, ?> newParent) throws SourceException {
- return new SubstatementContext<>(this,newQNameModule, newParent);
+ public StatementContextBase, ?, ?> createCopy(final StatementContextBase, ?, ?> newParent,
+ final CopyType typeOfCopy) {
+ return createCopy(null, newParent, typeOfCopy);
}
@Override
- public List