public SignatureInteropTypeOverride(InteropType newType, InteropMethodSignatureFlags?setFlags = null) { NewType = newType ?? throw new ArgumentNullException(nameof(newType)); if (setFlags.HasValue) { SetFlags = setFlags.Value; } }
private (InteropType type, bool isLocal) GetInteropTypeForParameter(CsParameter param) { InteropType interopType; var isLocal = false; var publicName = param.PublicType.QualifiedName; if (publicName == globalNamespace.GetTypeName(WellKnownName.PointerSize)) { interopType = typeof(void *); } else if (param.HasPointer) { interopType = typeof(void *); } else if (param.MarshalType is CsFundamentalType marshalFundamental) { var type = marshalFundamental.Type; if (type == typeof(IntPtr)) { type = typeof(void *); } interopType = type; } else if (param.PublicType is CsFundamentalType publicFundamental) { var type = publicFundamental.Type; if (type == typeof(IntPtr)) { type = typeof(void *); } interopType = type; } else if (param.PublicType is CsStruct csStruct) { // If parameter is a struct, then a LocalInterop is needed if (csStruct.HasMarshalType) { interopType = $"{csStruct.QualifiedName}.__Native"; } else { interopType = csStruct.QualifiedName; } isLocal = true; } else if (param.PublicType is CsEnum csEnum) { interopType = csEnum.UnderlyingType.Type; } else { interopType = null; } return(interopType, isLocal); }
private void WriteEvent(StreamWriter writer, EventInfo eventInfo) { string eventName = JavaHelper.GetCammelCase(eventInfo.Name); writer.WriteLine("//<editor-fold defaultstate=\"collapsed\" desc=\"{0}\">", eventName); Type eventArgs; if (eventInfo.EventHandlerType == typeof(EventHandler)) { eventArgs = typeof(EventArgs); } else { eventArgs = eventInfo.EventHandlerType.GetGenericArguments()[0]; } string eventArgsName = eventArgs.Name.Replace("EventArgs", "EventObject"); string interopCallbackName = eventArgs.Name.Replace("EventArgs", "Callback"); Type interopDelegateType = InteropType.GetNestedType(interopCallbackName); MethodInfo interopDelegate = interopDelegateType.GetMethod("Invoke"); writer.WriteLine("public void add{0}(ACBrEventListener<{1}> listener)", eventInfo.Name, eventArgsName); writer.WriteLine("{"); writer.WriteLine(" if (!hasListeners(\"{0}\"))", eventName); writer.WriteLine(" {"); writer.WriteLine(" {0}.INSTANCE.{1}_Set{2}(getHandle(), new {0}.{3}()", interopClassName, interopPrefix, eventInfo.Name, interopCallbackName); writer.WriteLine(" {"); writer.WriteLine(" @Override"); writer.WriteLine(" public void invoke({0})", JavaHelper.GetMethodDeclarationParamList(interopDelegate)); writer.WriteLine(" {"); writer.WriteLine(" {0}({1});", eventName, JavaHelper.GetInteropMethodParamInvocationList(interopDelegate)); writer.WriteLine(" }"); writer.WriteLine(" });"); writer.WriteLine(" }"); writer.WriteLine(""); writer.WriteLine(" addListener(\"{0}\", listener);", eventName); writer.WriteLine("}"); writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine("public void remove{0}(ACBrEventListener<{1}> listener)", eventInfo.Name, eventArgsName); writer.WriteLine("{"); writer.WriteLine(" removeListener(\"{0}\", listener);", eventName); writer.WriteLine(""); writer.WriteLine(" if (!hasListeners(\"{0}\"))", eventName); writer.WriteLine(" {"); writer.WriteLine(" {0}.INSTANCE.{1}_Set{2}(getHandle(), null);", interopClassName, interopPrefix, eventInfo.Name); writer.WriteLine(" }"); writer.WriteLine("}"); writer.WriteLine(""); writer.WriteLine(""); writer.WriteLine("private void {0}({1})", eventName, JavaHelper.GetMethodDeclarationParamList(interopDelegate)); writer.WriteLine("{"); writer.WriteLine(" {0} e = new {0}(this{1});", eventArgsName, JavaHelper.GetMethodParamInvocationList(interopDelegate)); writer.WriteLine(" notifyListeners(\"{0}\", e);", eventName); writer.WriteLine("}"); writer.WriteLine(); writer.WriteLine(); writer.WriteLine("//</editor-fold>"); }
public InteropMethodSignatureParameter(InteropType interopType, CsMarshalCallableBase item, string?name = null) { InteropType = interopType ?? throw new ArgumentNullException(nameof(interopType)); Item = item ?? throw new ArgumentNullException(nameof(item)); Name = name ?? Wrap(item.Name ?? throw new ArgumentNullException(nameof(item))); InteropTypeSyntax = ParseTypeName(InteropType.TypeName);
private InteropType CoerceToBlittable(InteropType type) => type is {