public SignatureInteropTypeOverride(InteropType newType, InteropMethodSignatureFlags?setFlags = null)
            {
                NewType = newType ?? throw new ArgumentNullException(nameof(newType));

                if (setFlags.HasValue)
                {
                    SetFlags = setFlags.Value;
                }
            }
Exemple #2
0
        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>");
        }
Exemple #4
0
 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);
Exemple #5
0
 private InteropType CoerceToBlittable(InteropType type) =>
 type is
 {