package sharpen.xobotos.api.interop.marshal; import org.eclipse.jdt.core.dom.ITypeBinding; import sharpen.core.csharp.ast.CSByRefTypeReference; import sharpen.core.csharp.ast.CSExpression; import sharpen.core.csharp.ast.CSTypeReferenceExpression; import sharpen.xobotos.api.interop.*; import sharpen.xobotos.api.interop.Signature.Flags; import sharpen.xobotos.api.interop.Signature.Mode; import sharpen.xobotos.api.interop.glue.AbstractTypeReference; import java.util.List; public class MarshalAsNativeType extends MarshalInfo { public MarshalAsNativeType(ITypeBinding type, AbstractNativeTypeBuilder builder) { super(type); this._builder = builder; } private final AbstractNativeTypeBuilder _builder; @Override public boolean isPrimitiveType() { return true; } @Override public List<String> getIncludes() { return _builder.getIncludes(); } @Override public final CSTypeReferenceExpression getPInvokeType(Mode mode, Flags flags) { CSTypeReferenceExpression type = _builder.getPInvokeType(); if (mode == Mode.OUT) return new CSByRefTypeReference(type, true); else return type; } @Override public final CSTypeReferenceExpression getPInvokeReturnType() { return _builder.getPInvokeType(); } @Override public AbstractTypeReference getNativeType(Mode mode, Flags flags) { return _builder.getNativeType(); } @Override public CSTypeReferenceExpression getManagedType(Mode mode, Flags flags) { return _builder.getManagedType(); } @Override public CSExpression marshalIn(CSExpression expr, Mode mode, Flags flags) { return expr; } @Override public void marshal(IManagedMarshalContext context, CSExpression expr, Mode mode, Flags flags) { _builder.marshalManaged(context, expr, mode, flags); } @Override public CSExpression marshalRetval(IManagedReturnContext context, CSExpression expr) { return _builder.marshalRetval(context, expr); } @Override public void marshalNative(INativeMarshalContext context, Mode mode, Flags flags) { _builder.marshalNative(context, mode, flags); } public AbstractNativeTypeBuilder getTypeBuilder() { return _builder; } }