public @NonNull YangParser createParser(final YangParserConfiguration configuration) {
final ImportResolutionMode importMode = configuration.importResolutionMode();
checkArgument(SUPPORTED_MODES.contains(importMode), "Unsupported import resolution mode %s", importMode);
-
- final CrossSourceStatementReactor reactor = reactors.computeIfAbsent(configuration, reactorFactory);
- return new DefaultYangParser(reactor.newBuild(importMode));
+ return new DefaultYangParser(reactors.computeIfAbsent(configuration, reactorFactory).newBuild());
}
}
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
-import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
import org.opendaylight.yangtools.yang.parser.spi.meta.DerivedNamespaceBehaviour;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.MutableStatement;
private final Set<SourceSpecificContext> sources = new HashSet<>();
private final ImmutableSet<YangVersion> supportedVersions;
- // FIXME: 7.0.0: this flag should really be passed to {Import,Module}StatementSupport's bootstrap to wire the
- // appropriate behaviour. That requires a change in StatementSupport lifecycle, as statement supports
- // would no longer be stateless singletons.
- private final boolean enabledSemanticVersions;
-
private Set<SourceSpecificContext> libSources = new HashSet<>();
private ModelProcessingPhase currentPhase = ModelProcessingPhase.INIT;
private ModelProcessingPhase finishedPhase = ModelProcessingPhase.INIT;
BuildGlobalContext(final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supports,
- final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation,
- final ImportResolutionMode statementParserMode) {
+ final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation) {
this.supports = requireNonNull(supports, "BuildGlobalContext#supports cannot be null");
- switch (statementParserMode) {
- case DEFAULT:
- enabledSemanticVersions = false;
- break;
- case OPENCONFIG_SEMVER:
- enabledSemanticVersions = true;
- break;
- default:
- throw new IllegalArgumentException("Unhandled parser mode " + statementParserMode);
- }
-
addToNamespace(ValidationBundlesNamespace.class, supportedValidation);
this.supportedVersions = ImmutableSet.copyOf(supports.get(ModelProcessingPhase.INIT).getSupportedVersions());
}
- boolean isEnabledSemanticVersioning() {
- return enabledSemanticVersions;
- }
-
StatementSupportBundle getSupportsForPhase(final ModelProcessingPhase phase) {
return supports.get(phase);
}
}
void addLibSource(final @NonNull StatementStreamSource libSource) {
- checkState(!isEnabledSemanticVersioning(),
- "Library sources are not supported in semantic version mode currently.");
checkState(currentPhase == ModelProcessingPhase.INIT,
"Add library source is allowed in ModelProcessingPhase.INIT only");
libSources.add(new SourceSpecificContext(this, libSource));
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.QNameModule;
-import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
import org.opendaylight.yangtools.yang.parser.spi.meta.ModelProcessingPhase;
import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
import org.opendaylight.yangtools.yang.parser.spi.meta.StatementSupportBundle;
* @return A new {@link BuildAction}.
*/
public @NonNull BuildAction newBuild() {
- return newBuild(ImportResolutionMode.DEFAULT);
- }
-
- /**
- * Start a new reactor build using the specified statement parser mode and enabling all features and deviations.
- *
- * @param statementParserMode Parser mode to use
- * @return A new {@link BuildAction}.
- * @throws NullPointerException if statementParserMode is null
- */
- public @NonNull BuildAction newBuild(final ImportResolutionMode statementParserMode) {
- return new BuildAction(supportedTerminology, supportedValidation, requireNonNull(statementParserMode));
+ return new BuildAction(supportedTerminology, supportedValidation);
}
public static class Builder implements org.opendaylight.yangtools.concepts.Builder<CrossSourceStatementReactor> {
private boolean modulesDeviatedByModulesSet = false;
BuildAction(final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supportedTerminology,
- final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation,
- final ImportResolutionMode statementParserMode) {
- this.context = new BuildGlobalContext(supportedTerminology, supportedValidation, statementParserMode);
+ final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation) {
+ this.context = new BuildGlobalContext(supportedTerminology, supportedValidation);
}
/**
getRoot().setRootIdentifierImpl(identifier);
}
- @Override
- public final boolean isEnabledSemanticVersioning() {
- return getRoot().isEnabledSemanticVersioningImpl();
- }
-
@Override
public final ModelActionBuilder newInferenceAction(final ModelProcessingPhase phase) {
return getRoot().getSourceContext().newInferenceAction(phase);
return sourceContext;
}
- boolean isEnabledSemanticVersioningImpl() {
- return sourceContext.globalContext().isEnabledSemanticVersioning();
- }
-
@NonNull YangVersion getRootVersionImpl() {
return rootVersion == null ? DEFAULT_VERSION : rootVersion;
}
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.ri.stmt.EffectiveStatements;
+import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.spi.PreLinkageModuleNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.AbstractStringStatementSupport;
.build();
private final SubstatementValidator validator;
+ private final boolean semanticVersioning;
private ImportStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
super(YangStmtMapping.IMPORT, StatementPolicy.reject(), config);
this.validator = requireNonNull(validator);
+ semanticVersioning = config.importResolutionMode() == ImportResolutionMode.OPENCONFIG_SEMVER;
}
public static @NonNull ImportStatementSupport rfc6020Instance(final YangParserConfiguration config) {
@Override
public void onLinkageDeclared(final Mutable<String, ImportStatement, ImportEffectiveStatement> stmt) {
- if (stmt.isEnabledSemanticVersioning()) {
+ if (semanticVersioning) {
SemanticVersionImport.onLinkageDeclared(stmt);
} else {
RevisionImport.onLinkageDeclared(stmt);
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatementDecorators;
import org.opendaylight.yangtools.yang.model.ri.stmt.DeclaredStatements;
import org.opendaylight.yangtools.yang.model.spi.meta.SubstatementIndexingException;
+import org.opendaylight.yangtools.yang.parser.api.ImportResolutionMode;
import org.opendaylight.yangtools.yang.parser.api.YangParserConfiguration;
import org.opendaylight.yangtools.yang.parser.spi.ModuleNamespace;
import org.opendaylight.yangtools.yang.parser.spi.NamespaceToModule;
.build();
private final SubstatementValidator validator;
+ private final boolean semanticVersioning;
private ModuleStatementSupport(final YangParserConfiguration config, final SubstatementValidator validator) {
super(YangStmtMapping.MODULE, StatementPolicy.reject(), config);
this.validator = requireNonNull(validator);
+ semanticVersioning = config.importResolutionMode() == ImportResolutionMode.OPENCONFIG_SEMVER;
}
public static @NonNull ModuleStatementSupport rfc6020Instance(final YangParserConfiguration config) {
stmt.addToNs(ModuleQNameToModuleName.class, qNameModule, moduleName);
stmt.addToNs(ImportPrefixToModuleCtx.class, modulePrefix, stmt);
- if (stmt.isEnabledSemanticVersioning()) {
+ if (semanticVersioning) {
addToSemVerModuleNamespace(stmt, moduleIdentifier);
}
}
import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YinTextToDomTransformer;
import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
+import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor;
import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor.BuildAction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public static EffectiveModelContext parseYangSources(final YangParserConfiguration config,
final Set<QName> supportedFeatures, final Collection<? extends StatementStreamSource> sources)
throws ReactorException {
- final BuildAction reactor = RFC7950Reactors.defaultReactor().newBuild(config.importResolutionMode())
- .addSources(sources);
+ final BuildAction build = getReactor(config).newBuild().addSources(sources);
if (supportedFeatures != null) {
- reactor.setSupportedFeatures(supportedFeatures);
+ build.setSupportedFeatures(supportedFeatures);
}
-
- return reactor.buildEffective();
+ return build.buildEffective();
}
public static EffectiveModelContext parseYangSources(final File... files) throws ReactorException, IOException,
public static EffectiveModelContext parseYinSources(final YangParserConfiguration config,
final StatementStreamSource... sources) throws ReactorException {
- return RFC7950Reactors.defaultReactor()
- .newBuild(config.importResolutionMode())
+ return getReactor(config)
+ .newBuild()
.addSources(sources)
.buildEffective();
}
}
assertEquals(expected, actual);
}
+
+ private static CrossSourceStatementReactor getReactor(final YangParserConfiguration config) {
+ return YangParserConfiguration.DEFAULT.equals(config) ? RFC7950Reactors.defaultReactor()
+ : RFC7950Reactors.defaultReactorBuilder(config).build();
+ }
}
return verifyNotNull(getParentContext(), "Root context %s does not have a parent", this);
}
- boolean isEnabledSemanticVersioning();
-
/**
* Returns the model root for this statement.
*