Skip to content

Commit edfd6cc

Browse files
mtdowlingMichael Dowling
authored andcommitted
Fix issue where we emitted events twice
ModelAssembler event listeners were receiving events twice in some cases, causing events to appear twice when running the CLI/Gradle/etc.
1 parent ecbb83d commit edfd6cc

File tree

2 files changed

+24
-5
lines changed

2 files changed

+24
-5
lines changed

smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelValidator.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import java.util.Set;
2525
import java.util.function.Consumer;
2626
import java.util.stream.Collectors;
27-
import java.util.stream.Stream;
2827
import software.amazon.smithy.model.Model;
2928
import software.amazon.smithy.model.SourceException;
3029
import software.amazon.smithy.model.SourceLocation;
@@ -194,16 +193,20 @@ public Validator createValidator() {
194193
return coreEvents;
195194
}
196195

197-
Stream<ValidationEvent> eventStream = Stream.concat(
198-
includeEvents.stream(),
199-
modelValidators.parallelStream().flatMap(validator -> validator.validate(model).stream()));
200-
List<ValidationEvent> result = eventStream
196+
List<ValidationEvent> result = modelValidators.parallelStream()
197+
.flatMap(validator -> validator.validate(model).stream())
201198
.filter(ModelValidator::filterPrelude)
202199
.map(event -> suppressEvent(model, event, modelSuppressions))
203200
// Emit events as they occur during validation.
204201
.peek(eventListener)
205202
.collect(Collectors.toList());
206203

204+
for (ValidationEvent event : includeEvents) {
205+
if (ModelValidator.filterPrelude(event)) {
206+
result.add(suppressEvent(model, event, modelSuppressions));
207+
}
208+
}
209+
207210
// Add in events encountered while building up validators and suppressions.
208211
result.addAll(coreEvents);
209212

smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -932,4 +932,20 @@ public void forwardReferencesAreOrdered() {
932932
ShapeId.from("smithy.example#Error5"),
933933
ShapeId.from("smithy.example#Error6")));
934934
}
935+
936+
@Test
937+
public void doesNotEmitWarningsTwice() {
938+
List<ValidationEvent> events = new ArrayList<>();
939+
Model.assembler()
940+
.addUnparsedModel("foo.smithy", "$version: \"1.0\"\n")
941+
.validationEventListener(e -> {
942+
if (e.getId().equals(Validator.MODEL_DEPRECATION)) {
943+
events.add(e);
944+
}
945+
})
946+
.assemble()
947+
.unwrap();
948+
949+
assertThat(events, hasSize(1));
950+
}
935951
}

0 commit comments

Comments
 (0)