45
45
import software .amazon .smithy .model .validation .ValidationEvent ;
46
46
import software .amazon .smithy .model .validation .Validator ;
47
47
import software .amazon .smithy .model .validation .ValidatorFactory ;
48
- import software .amazon .smithy .utils .ListUtils ;
49
48
50
49
/**
51
50
* Assembles and validates a {@link Model} from documents, files, shapes, and
@@ -448,31 +447,27 @@ public ModelAssembler removeProperty(String setting) {
448
447
* and validation events.
449
448
*/
450
449
public ValidatedResult <Model > assemble () {
450
+ LoaderVisitor visitor = createLoaderVisitor ();
451
+
451
452
try {
452
- return doAssemble ();
453
+ return doAssemble (visitor );
453
454
} catch (SourceException e ) {
454
- return ValidatedResult .fromErrors (ListUtils .of (ValidationEvent .fromSourceException (e )));
455
+ visitor .onError (ValidationEvent .fromSourceException (e ));
456
+ return visitor .onEnd ();
455
457
}
456
458
}
457
459
458
- private ValidatedResult < Model > doAssemble () {
460
+ private LoaderVisitor createLoaderVisitor () {
459
461
if (traitFactory == null ) {
460
462
traitFactory = LazyTraitFactoryHolder .INSTANCE ;
461
463
}
462
464
463
- LoaderVisitor visitor = new LoaderVisitor (traitFactory , properties );
464
-
465
- // Load models first to ensure a version is set.
466
- for (Map .Entry <String , Supplier <InputStream >> modelEntry : inputStreamModels .entrySet ()) {
467
- if (!ModelLoader .load (modelEntry .getKey (), modelEntry .getValue (), visitor )) {
468
- LOGGER .warning (() -> "No ModelLoader was able to load " + modelEntry .getKey ());
469
- }
470
- }
465
+ return new LoaderVisitor (traitFactory , properties );
466
+ }
471
467
472
- if (!documentNodes .isEmpty ()) {
473
- for (Node node : documentNodes ) {
474
- ModelLoader .loadParsedNode (node , visitor );
475
- }
468
+ private ValidatedResult <Model > doAssemble (LoaderVisitor visitor ) {
469
+ if (!disablePrelude ) {
470
+ mergeModelIntoVisitor (Prelude .getPreludeModel (), visitor );
476
471
}
477
472
478
473
shapes .forEach (visitor ::onShape );
@@ -482,8 +477,14 @@ private ValidatedResult<Model> doAssemble() {
482
477
mergeModelIntoVisitor (model , visitor );
483
478
}
484
479
485
- if (!disablePrelude ) {
486
- mergeModelIntoVisitor (Prelude .getPreludeModel (), visitor );
480
+ for (Node node : documentNodes ) {
481
+ ModelLoader .loadParsedNode (node , visitor );
482
+ }
483
+
484
+ for (Map .Entry <String , Supplier <InputStream >> modelEntry : inputStreamModels .entrySet ()) {
485
+ if (!ModelLoader .load (modelEntry .getKey (), modelEntry .getValue (), visitor )) {
486
+ LOGGER .warning (() -> "No ModelLoader was able to load " + modelEntry .getKey ());
487
+ }
487
488
}
488
489
489
490
ValidatedResult <Model > modelResult = visitor .onEnd ();
0 commit comments