- final @NonNull ImmutableCollection<RuntimeType> schemaTreeChildren() {
- return bySchemaTree.values();
+ // Makes an assertion of all types being of specified type
+ @SuppressWarnings("unchecked")
+ final <T extends RuntimeType> @NonNull List<T> schemaTree(final Class<T> expectedType) {
+ if (expectedType.isInstance(bySchemaTree)) {
+ return List.of(expectedType.cast(bySchemaTree));
+ }
+
+ final var tmp = (RuntimeType[]) bySchemaTree;
+ for (var item : tmp) {
+ if (!expectedType.isInstance(item)) {
+ throw new VerifyException("Unexpected schema tree child " + item);
+ }
+ }
+ return (List<T>) Collections.unmodifiableList(Arrays.asList(tmp));
+ }
+
+ private static @NonNull QName extractQName(final RuntimeType type) {
+ final var stmt = type.statement();
+ if (stmt instanceof SchemaTreeEffectiveStatement<?> schemaTreeStmt) {
+ return schemaTreeStmt.argument();
+ }
+ throw new VerifyException("Unexpected statement " + stmt + " in " + type);