private StatementContextBase<?, ?, ?> createImplicitParent(final int offset, final StatementSupport<?, ?, ?> implicitParent, final StatementSourceReference ref, final String argument) { final StatementDefinitionContext<?, ?, ?> def = new StatementDefinitionContext<>(implicitParent); return createSubstatement(offset, def, ImplicitSubstatement.of(ref), argument); }
public void appendImplicitStatement(final StatementSupport<?, ?, ?> statementToAdd) { createSubstatement(substatements.capacity(), new StatementDefinitionContext<>(statementToAdd), ImplicitSubstatement.of(getStatementSourceReference()), null); }
/** * Create a new substatement at the specified offset. * * @param offset Substatement offset * @param def definition context * @param ref source reference * @param argument statement argument * @param <X> new substatement argument type * @param <Y> new substatement declared type * @param <Z> new substatement effective type * @return A new substatement */ @SuppressWarnings("checkstyle:methodTypeParameterName") public final <X, Y extends DeclaredStatement<X>, Z extends EffectiveStatement<X, Y>> StatementContextBase<X, Y, Z> createSubstatement(final int offset, final StatementDefinitionContext<X, Y, Z> def, final StatementSourceReference ref, final String argument) { final ModelProcessingPhase inProgressPhase = getRoot().getSourceContext().getInProgressPhase(); checkState(inProgressPhase != ModelProcessingPhase.EFFECTIVE_MODEL, "Declared statement cannot be added in effective phase at: %s", getStatementSourceReference()); final Optional<StatementSupport<?, ?, ?>> implicitParent = definition.getImplicitParentFor(def.getPublicView()); if (implicitParent.isPresent()) { return createImplicitParent(offset, implicitParent.get(), ref, argument).createSubstatement(offset, def, ref, argument); } final StatementContextBase<X, Y, Z> ret = new SubstatementContext<>(this, def, ref, argument); substatements = substatements.put(offset, ret); def.onStatementAdded(ret); return ret; }
return current.createSubstatement(childId, def, ref, argument);