package sharpen.xobotos.generator; import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; import org.eclipse.jdt.core.dom.BodyDeclaration; import org.eclipse.jdt.core.dom.MethodDeclaration; import sharpen.core.CSharpBuilder; import sharpen.core.csharp.ast.CSAnonymousClass; import sharpen.core.csharp.ast.CSMember; import sharpen.core.framework.BindingUtils; import sharpen.core.framework.CSharpDriver.IBuilderDelegate; import sharpen.xobotos.api.actions.AbstractAction; import sharpen.xobotos.api.templates.AbstractMethodTemplate; import sharpen.xobotos.api.templates.AnonymousClassTemplate; import sharpen.xobotos.api.templates.TypeTemplate; import sharpen.xobotos.output.OutputType; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class AnonymousClassBuilder extends AbstractTypeBuilder<AnonymousClassDeclaration, CSAnonymousClass, AnonymousClassTemplate> { protected AnonymousClassBuilder(AnonymousClassTemplate template, OutputType output, AnonymousClassDeclaration node) { super(template, CSAnonymousClass.class, output, node); } @Override public TypeTemplate getTypeTemplate() { return getTemplate().getTypeTemplate(); } @Override public AbstractMethodTemplate<?> findMethodTemplate(MethodDeclaration node) { return getTypeTemplate().findMethodTemplate(node); } @Override public String getNodeName() { return BindingUtils.qualifiedName(getASTNode().resolveBinding()); } @Override protected boolean buildInternal(CSharpBuilder builder, IBuilderDelegate<?> delegate, CSAnonymousClass member) { return true; } @Override protected boolean applyActions(CSAnonymousClass member) { for (final AbstractAction action : getTypeTemplate().getActions()) { action.apply(this, getMember().type()); } return true; } @Override public void addMember(CSMember member) { getMember().type().addMember(member); } @Override public <T extends BodyDeclaration> List<T> getBodyDeclarations(Class<T> klass) { List<T> list = new ArrayList<T>(); for (final Object o : getASTNode().bodyDeclarations()) { if (klass.isInstance(o)) list.add(klass.cast(o)); } return Collections.unmodifiableList(list); } }