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%2FBuildGlobalContext.java;h=246b71a50e2b33c492df88df7c55cc6bb4d5256f;hb=75402d418085d05b6924a7729f84a78700f8032a;hp=5fc5db2061aeedd89c0a82bba01b468b56630549;hpb=84eb2da9322125847d455ce52f182be55f34316b;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java index 5fc5db2061..246b71a50e 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/reactor/BuildGlobalContext.java @@ -11,6 +11,7 @@ import com.google.common.base.Preconditions; import com.google.common.base.Verify; import com.google.common.collect.HashBasedTable; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Table; @@ -29,7 +30,9 @@ import java.util.Optional; import java.util.Set; import java.util.SortedMap; import javax.annotation.Nonnull; +import org.opendaylight.yangtools.util.RecursiveObjectLeaker; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.QNameModule; import org.opendaylight.yangtools.yang.common.SimpleDateFormatUtil; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.api.ModuleIdentifier; @@ -49,6 +52,9 @@ import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; import org.opendaylight.yangtools.yang.parser.spi.meta.SomeModifiersUnresolvedException; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupport; import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle; +import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils; +import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules; +import org.opendaylight.yangtools.yang.parser.spi.source.ModulesDeviatedByModules.SupportedModules; import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamespace; @@ -56,8 +62,6 @@ import org.opendaylight.yangtools.yang.parser.spi.source.SupportedFeaturesNamesp 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.reactor.SourceSpecificContext.PhaseCompletionProgress; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.RecursiveObjectLeaker; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.Utils; import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.effective.EffectiveSchemaContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,6 +75,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh .add(ModelProcessingPhase.FULL_DECLARATION).add(ModelProcessingPhase.EFFECTIVE_MODEL).build(); private final Table> definitions = HashBasedTable.create(); + private final Map> modelDefinedStmtDefs = new HashMap<>(); private final Map, NamespaceBehaviourWithListeners> supportedNamespaces = new HashMap<>(); private final List mutableStatementsToSeal = new ArrayList<>(); private final Map supports; @@ -84,7 +89,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh BuildGlobalContext(final Map supports, final Map> supportedValidation, - final StatementParserMode statementParserMode, final Set supportedFeatures) { + final StatementParserMode statementParserMode) { this.supports = Preconditions.checkNotNull(supports, "BuildGlobalContext#supports cannot be null"); switch (statementParserMode) { @@ -102,10 +107,6 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh addToNs(ValidationBundlesNamespace.class, validationBundle.getKey(), validationBundle.getValue()); } - if (supportedFeatures != null) { - addToNs(SupportedFeaturesNamespace.class, SupportedFeatures.SUPPORTED_FEATURES, - ImmutableSet.copyOf(supportedFeatures)); - } this.supportedVersions = ImmutableSet.copyOf(supports.get(ModelProcessingPhase.INIT).getSupportedVersions()); } @@ -129,6 +130,16 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh libSources.add(new SourceSpecificContext(this, libSource)); } + void setSupportedFeatures(final Set supportedFeatures) { + addToNs(SupportedFeaturesNamespace.class, SupportedFeatures.SUPPORTED_FEATURES, + ImmutableSet.copyOf(supportedFeatures)); + } + + void setModulesDeviatedByModules(final Map> modulesDeviatedByModules) { + addToNs(ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES, + ImmutableMap.copyOf(modulesDeviatedByModules)); + } + @Override public StorageNodeType getStorageNodeType() { return StorageNodeType.GLOBAL; @@ -193,6 +204,14 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh return potential; } + StatementDefinitionContext getModelDefinedStatementDefinition(final QName name) { + return modelDefinedStmtDefs.get(name); + } + + void putModelDefinedStatementDefinition(final QName name, final StatementDefinitionContext def) { + modelDefinedStmtDefs.put(name, def); + } + private void executePhases() throws ReactorException { for (final ModelProcessingPhase phase : PHASE_EXECUTION_ORDER) { startPhase(phase); @@ -223,7 +242,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh private SomeModifiersUnresolvedException propagateException(final SourceSpecificContext source, final RuntimeException cause) throws SomeModifiersUnresolvedException { - final SourceIdentifier sourceId = Utils.createSourceIdentifier(source.getRoot()); + final SourceIdentifier sourceId = StmtContextUtils.createSourceIdentifier(source.getRoot()); if (!(cause instanceof SourceException)) { /* * This should not be happening as all our processing should provide SourceExceptions. @@ -329,7 +348,7 @@ class BuildGlobalContext extends NamespaceStorageSupport implements NamespaceBeh if (!addedCause) { addedCause = true; - final SourceIdentifier sourceId = Utils.createSourceIdentifier(failedSource.getRoot()); + final SourceIdentifier sourceId = StmtContextUtils.createSourceIdentifier(failedSource.getRoot()); buildFailure = new SomeModifiersUnresolvedException(currentPhase, sourceId, sourceEx); } else { buildFailure.addSuppressed(sourceEx);