package sharpen.xobotos.generator; import static sharpen.core.framework.Environments.my; import org.eclipse.jdt.core.dom.FieldDeclaration; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; import sharpen.core.CSharpBuilder; import sharpen.core.csharp.ast.CSField; import sharpen.core.csharp.ast.CSVisibility; import sharpen.core.framework.BindingUtils; import sharpen.core.framework.CSharpDriver.IBuilderDelegate; import sharpen.xobotos.api.actions.ModifyField; import sharpen.xobotos.api.bindings.BindingManager; import sharpen.xobotos.api.bindings.VariableBinding; import sharpen.xobotos.api.templates.FieldTemplate; import sharpen.xobotos.output.OutputType; public class FieldBuilder extends MemberBuilder<FieldDeclaration, CSField, FieldTemplate> { private final VariableDeclarationFragment _fragment; protected FieldBuilder(FieldTemplate template, OutputType output, FieldDeclaration node, VariableDeclarationFragment fragment) { super(template, CSField.class, output, node); this._fragment = fragment; } @Override public String getNodeName() { VariableDeclarationFragment fragment = (VariableDeclarationFragment) getASTNode().fragments().get(0); return BindingUtils.qualifiedName(fragment.resolveBinding()); } @Override protected boolean buildInternal(CSharpBuilder builder, IBuilderDelegate<?> delegate, CSField member) { VariableBinding binding = my(BindingManager.class).resolveBinding(_fragment.resolveBinding()); if (binding != null) { if (binding.getNativeHandle() != null) member.visibility(CSVisibility.Internal); } return true; } @Override protected boolean applyActions(CSField field) { ModifyField action = getTemplate().getModificationAction(); if (action != null) action.modify(this, getASTNode(), field); return true; } }