package sharpen.xobotos.generator; import org.eclipse.jdt.core.dom.MethodDeclaration; import sharpen.core.CSharpBuilder; import sharpen.core.csharp.ast.CSAttribute; import sharpen.core.csharp.ast.CSBlock; import sharpen.core.csharp.ast.CSMethodModifier; import sharpen.core.csharp.ast.CSProperty; import sharpen.core.framework.BindingUtils; import sharpen.core.framework.CSharpDriver.IBuilderDelegate; import sharpen.core.framework.CSharpDriver.IPropertyBuilderDelegate; import sharpen.xobotos.api.actions.ModifyProperty; import sharpen.xobotos.api.templates.PropertyTemplate; import sharpen.xobotos.output.OutputMode; import sharpen.xobotos.output.OutputType; public class PropertyBuilder extends MemberBuilder<MethodDeclaration, CSProperty, PropertyTemplate> { protected PropertyBuilder(PropertyTemplate template, OutputType output, MethodDeclaration node) { super(template, CSProperty.class, output, node); } @Override public String getNodeName() { return BindingUtils.qualifiedSignature(getASTNode().resolveBinding()); } @Override protected boolean buildInternal(CSharpBuilder builder, IBuilderDelegate<?> dlg, CSProperty property) { IPropertyBuilderDelegate delegate = (IPropertyBuilderDelegate) dlg; if (getOutputMode() == OutputMode.ABSTRACT_STUB) { property.modifier(CSMethodModifier.Abstract); property.addAttribute(new CSAttribute("Sharpen.Stub")); return true; } if (getOutputMode() == OutputMode.SHARPEN) { delegate.mapBody(property); return true; } CSBlock block = new CSBlock(); if (delegate.isGetter()) property.getter(block); else property.setter(block); stubBlock(block); property.addAttribute(new CSAttribute("Sharpen.Stub")); return true; } @Override protected boolean applyActions(CSProperty property) { ModifyProperty action = getTemplate().getModificationAction(); if (action != null) action.modify(this, getASTNode(), property); return true; } }