package accrue.jl5.ext;

import polyglot.ast.Ext;
import polyglot.ast.ExtFactory;
import polyglot.ext.jl5.ast.JL5ExtFactory;
import accrue.analysis.ext.AnalysisExtFactory_c;

public class JL5AnalysisExtFactory_c extends AnalysisExtFactory_c implements
        JL5ExtFactory {
    public JL5AnalysisExtFactory_c(ExtFactory nextExtFactory) {
        super(nextExtFactory);
    }

    public JL5AnalysisExtFactory_c() {
        super();
    }

    @Override
    public final Ext extAmbTypeInstantiation() {
        Ext e = extAmbTypeInstantiationImpl();
        return postExtAmbTypeInstantiation(e);
    }

    @Override
    public final Ext extAmbWildCard() {
        Ext e = extAmbWildCardImpl();
        return postExtAmbWildCard(e);
    }

    @Override
    public final Ext extEnumDecl() {
        Ext e = extEnumDeclImpl();
        return postExtEnumDecl(e);
    }

    @Override
    public final Ext extExtendedFor() {
        Ext e = extExtendedForImpl();
        return postExtExtendedFor(e);
    }

    @Override
    public final Ext extEnumConstantDecl() {
        Ext e = extEnumConstantDeclImpl();
        return postExtEnumConstantDecl(e);
    }

    @Override
    public final Ext extEnumConstant() {
        Ext e = extEnumConstantImpl();
        return postExtEnumConstant(e);
    }

    @Override
    public final Ext extParamTypeNode() {
        Ext e = extParamTypeNodeImpl();
        return postExtParamTypeNode(e);
    }

    @Override
    public final Ext extAnnotationElemDecl() {
        Ext e = extAnnotationElemDeclImpl();
        return postExtAnnotationElemDecl(e);
    }

    @Override
    public final Ext extNormalAnnotationElem() {
        Ext e = extNormalAnnotationElemImpl();
        return postExtNormalAnnotationElem(e);
    }

    @Override
    public final Ext extMarkerAnnotationElem() {
        Ext e = extMarkerAnnotationElemImpl();
        return postExtMarkerAnnotationElem(e);
    }

    @Override
    public final Ext extSingleElementAnnotationElem() {
        Ext e = extSingleElementAnnotationElemImpl();
        return postExtSingleElementAnnotationElem(e);
    }

    @Override
    public final Ext extElementValuePair() {
        Ext e = extElementValuePairImpl();
        return postExtElementValuePair(e);
    }

    @Override
    public final Ext extElementValueArrayInit() {
        Ext e = extElementValueArrayInitImpl();
        return postExtElementValueArrayInit(e);
    }

    protected Ext extAmbTypeInstantiationImpl() {
        return this.extTypeNodeImpl();
    }

    protected Ext extAmbWildCardImpl() {
        return this.extTypeNodeImpl();
    }

    protected Ext extEnumDeclImpl() {
        return this.extClassDeclImpl();
    }

    protected Ext extExtendedForImpl() {
        return this.extLoopImpl();
    }

    protected Ext extEnumConstantDeclImpl() {
        return new ExtEnumConstantDecl();
    }

    protected Ext extEnumConstantImpl() {
        return this.extFieldImpl();
    }

    protected Ext extParamTypeNodeImpl() {
        return this.extTypeNodeImpl();
    }

    public Ext postExtAmbTypeInstantiation(Ext ext) {
        return this.postExtTypeNode(ext);
    }

    public Ext postExtAmbWildCard(Ext ext) {
        return this.postExtTypeNode(ext);
    }

    public Ext postExtEnumDecl(Ext ext) {
        return this.postExtClassDecl(ext);
    }

    public Ext postExtExtendedFor(Ext ext) {
        return this.postExtLoop(ext);
    }

    public Ext postExtEnumConstantDecl(Ext ext) {
        return this.postExtClassMember(ext);
    }

    public Ext postExtEnumConstant(Ext ext) {
        return this.postExtField(ext);
    }

    public Ext postExtParamTypeNode(Ext ext) {
        return this.postExtTypeNode(ext);
    }

    protected Ext extAnnotationElemDeclImpl() {
        return this.extClassMemberImpl();
    }

    protected Ext extNormalAnnotationElemImpl() {
        return this.extTermImpl();
    }

    protected Ext extMarkerAnnotationElemImpl() {
        return this.extNormalAnnotationElemImpl();
    }

    protected Ext extSingleElementAnnotationElemImpl() {
        return this.extNormalAnnotationElemImpl();
    }

    protected Ext extElementValuePairImpl() {
        return this.extTermImpl();
    }

    protected Ext extElementValueArrayInitImpl() {
        return this.extTermImpl();
    }

    protected Ext postExtAnnotationElemDecl(Ext ext) {
        return ext;
    }

    protected Ext postExtNormalAnnotationElem(Ext ext) {
        return ext;
    }

    protected Ext postExtMarkerAnnotationElem(Ext ext) {
        return ext;
    }

    protected Ext postExtSingleElementAnnotationElem(Ext ext) {
        return ext;
    }

    protected Ext postExtElementValuePair(Ext ext) {
        return ext;
    }

    protected Ext postExtElementValueArrayInit(Ext ext) {
        return ext;
    }

}
