001package de.monochromata.anaphors.ast.chain;
002
003import java.util.List;
004
005import de.monochromata.anaphors.ast.ASTBasedAnaphora;
006import de.monochromata.anaphors.ast.AnaphorPart;
007import de.monochromata.anaphors.ast.RelatedExpressionPart;
008import de.monochromata.anaphors.ast.relatedexp.RelatedExpression;
009
010/**
011 * @param <N>  The node type in the AST
012 * @param <E>  The expression type
013 * @param <T>  The type type
014 * @param <B>  The binding type
015 * @param <TB> The type binding type
016 * @param <S>  The scope type (optional)
017 * @param <I>  The type used to represent identifiers
018 * @param <QI> The type used to represent qualified identifiers
019 * @param <AT> The type used for attachments to chain elements that have an
020 *             anaphor part. The attachment may be used to stored e.g. an old
021 *             anaphora relation.
022 * @param <R>  The sub-type of related expression to use
023 * @param <A>  The sub-type of AST-based anaphora to use
024 * @param <C>  The sub-type of chain element to use
025 */
026public interface ChainElementFactory<N, E, T, B, TB extends B, S, I, QI, AT, R extends RelatedExpression<N, T, B, TB, S, QI, R>, A extends ASTBasedAnaphora<N, E, T, B, TB, S, I, QI, R, A>, C extends ChainElement<N, E, T, B, TB, S, I, QI, AT, R, A, C>> {
027
028        C create(C previous, List<C> next, RelatedExpressionPart<N, E, T, B, TB, S, I, QI, R> relatedExpression,
029                        AnaphorPart<N, E, T, B, TB, S, I, QI, R, A> anaphor, AT anaphorAttachment);
030
031}