-
- protected final EffectiveStatement<?, ?> firstEffectiveSubstatementOfType(final Class<?> type) {
- return effectiveSubstatements().stream().filter(type::isInstance).findFirst().orElse(null);
- }
-
- // FIXME: rename to 'getFirstEffectiveStatement()'
- protected final <S extends SchemaNode> S firstSchemaNode(final Class<S> type) {
- return findFirstEffectiveSubstatement(type).orElse(null);
- }
-
- @SuppressWarnings("unchecked")
- private @NonNull ImmutableList<UnknownSchemaNode> loadUnknownSchemaNodes() {
- final List<UnknownSchemaNode> init = new ArrayList<>();
- for (EffectiveStatement<?, ?> stmt : effectiveSubstatements()) {
- if (stmt instanceof UnknownSchemaNode) {
- init.add((UnknownSchemaNode) stmt);
- }
- }
-
- final ImmutableList<UnknownSchemaNode> computed = ImmutableList.copyOf(init);
- final Object witness = UNKNOWN_NODES.compareAndExchangeRelease(this, null, computed);
- return witness == null ? computed : (ImmutableList<UnknownSchemaNode>) witness;
- }