BuildAction(final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supportedTerminology, final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation, final StatementParserMode statementParserMode) { this.context = new BuildGlobalContext(supportedTerminology, supportedValidation, statementParserMode); }
void addMutableStmtToSeal(final MutableStatement mutableStatement) { currentContext.addMutableStmtToSeal(mutableStatement); }
void setSupportedFeatures(final Set<QName> supportedFeatures) { addToNs(SupportedFeaturesNamespace.class, SupportedFeatures.SUPPORTED_FEATURES, ImmutableSet.copyOf(supportedFeatures)); }
private void executePhases() throws ReactorException { for (final ModelProcessingPhase phase : PHASE_EXECUTION_ORDER) { startPhase(phase); loadPhaseStatements(); completePhaseActions(); endPhase(phase); } }
throw propagateException(nextSourceCtx, ex); final Set<SourceSpecificContext> requiredLibs = getRequiredSourcesFromLib(); sources.addAll(requiredLibs); libSources = ImmutableSet.of(); final SomeModifiersUnresolvedException buildFailure = addSourceExceptions(sourcesToProgress); if (buildFailure != null) { throw buildFailure;
private void collectRequiredSourcesFromLib( final TreeBasedTable<String, Optional<Revision>, SourceSpecificContext> libSourcesTable, final Set<SourceSpecificContext> requiredLibs, final SourceSpecificContext source) { for (final SourceIdentifier requiredSource : source.getRequiredSources()) { final SourceSpecificContext libSource = getRequiredLibSource(requiredSource, libSourcesTable); if (libSource != null && requiredLibs.add(libSource)) { collectRequiredSourcesFromLib(libSourcesTable, requiredLibs, libSource); } } }
private Set<SourceSpecificContext> getRequiredSourcesFromLib() { checkState(currentPhase == ModelProcessingPhase.SOURCE_PRE_LINKAGE, "Required library sources can be collected only in ModelProcessingPhase.SOURCE_PRE_LINKAGE phase," + " but current phase was %s", currentPhase); final TreeBasedTable<String, Optional<Revision>, SourceSpecificContext> libSourcesTable = TreeBasedTable.create( String::compareTo, Revision::compare); for (final SourceSpecificContext libSource : libSources) { final SourceIdentifier libSourceIdentifier = requireNonNull(libSource.getRootIdentifier()); libSourcesTable.put(libSourceIdentifier.getName(), libSourceIdentifier.getRevision(), libSource); } final Set<SourceSpecificContext> requiredLibs = new HashSet<>(); for (final SourceSpecificContext source : sources) { collectRequiredSourcesFromLib(libSourcesTable, requiredLibs, source); removeConflictingLibSources(source, requiredLibs); } return requiredLibs; }
/** * Add main source. All main sources are present in resulting SchemaContext. * * @param source * which should be added into main sources * @return This build action, for fluent use. */ public @NonNull BuildAction addSource(final StatementStreamSource source) { context.addSource(source); return this; }
/** * Build the effective model context. */ public EffectiveModelContext build() throws ReactorException { return context.build(); }
public EffectiveSchemaContext buildEffective() throws ReactorException { return context.buildEffective(); } }
public @NonNull BuildAction addLibSources(final Collection<StatementStreamSource> libSources) { for (final StatementStreamSource libSource : libSources) { context.addLibSource(libSource); } return this; }
public @NonNull BuildAction addSources(final @NonNull Collection<? extends StatementStreamSource> sources) { for (final StatementStreamSource source : sources) { context.addSource(requireNonNull(source)); } return this; }
void setModulesDeviatedByModules(final SetMultimap<QNameModule, QNameModule> modulesDeviatedByModules) { addToNs(ModulesDeviatedByModules.class, SupportedModules.SUPPORTED_MODULES, ImmutableSetMultimap.copyOf(modulesDeviatedByModules)); }
BuildGlobalContext(final ImmutableMap<ModelProcessingPhase, StatementSupportBundle> supports, final ImmutableMap<ValidationBundleType, Collection<?>> supportedValidation, final StatementParserMode statementParserMode) { this.supports = requireNonNull(supports, "BuildGlobalContext#supports cannot be null"); switch (statementParserMode) { case DEFAULT_MODE: enabledSemanticVersions = false; break; case SEMVER_MODE: enabledSemanticVersions = true; break; default: throw new IllegalArgumentException("Unhandled parser mode " + statementParserMode); } for (final Entry<ValidationBundleType, Collection<?>> validationBundle : supportedValidation.entrySet()) { addToNs(ValidationBundlesNamespace.class, validationBundle.getKey(), validationBundle.getValue()); } this.supportedVersions = ImmutableSet.copyOf(supports.get(ModelProcessingPhase.INIT).getSupportedVersions()); }