package sharpen.xobotos.generator; import static sharpen.core.framework.Environments.my; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.MethodDeclaration; import sharpen.core.CSharpBuilder; import sharpen.core.csharp.ast.CSMethod; import sharpen.core.csharp.ast.CSTypeDeclaration; import sharpen.core.framework.CSharpDriver.IBuilderDelegate; import sharpen.xobotos.api.actions.ModifyMethod; import sharpen.xobotos.api.bindings.BindingManager; import sharpen.xobotos.api.interop.NativeBuilder; import sharpen.xobotos.api.interop.NativeMethodBuilder; import sharpen.xobotos.api.templates.MethodTemplate; import sharpen.xobotos.output.OutputType; public class MethodBuilder extends AbstractMethodBuilder<CSMethod, MethodTemplate> { private final ITypeBuilder _parent; private final NativeMethodBuilder _native; public MethodBuilder(ITypeBuilder parent, MethodTemplate template, OutputType output, MethodDeclaration node, NativeBuilder nativeBuilder) { super(template, CSMethod.class, output, node); this._parent = parent; if (nativeBuilder != null) this._native = getNativeBuilder(nativeBuilder); else this._native = null; } private NativeMethodBuilder getNativeBuilder(NativeBuilder builder) { final IMethodBinding binding = getASTNode().resolveBinding(); return my(BindingManager.class).resolveNativeBinding(binding); } @Override protected boolean applyActions(CSMethod method) { ModifyMethod action = getTemplate().getModificationAction(); if (action != null) action.modify(this, getASTNode(), method); return true; } boolean buildNative(CSMethod method) { final CSTypeDeclaration parent = ((TypeBuilder) _parent).getMember(); return _native.createPInvokeWrapper(parent, method); } @Override protected boolean buildInternal(CSharpBuilder builder, IBuilderDelegate<?> dlg, CSMethod method) { if (_native != null) { if (buildNative(method)) return true; } return super.buildInternal(builder, dlg, method); } } ;