public BoundInterfaceMethodDeclaration(Method method, string adapter, CodeGenerationOptions opt) { this.method = method; this.opt = opt; Name = method.AdjustedName; ReturnType = new TypeReferenceWriter(opt.GetTypeReferenceName(method.RetVal)); IsDeclaration = true; if (method.DeclaringType.IsGeneratable) { Comments.Add($"// Metadata.xml XPath method reference: path=\"{method.GetMetadataXPathReference (method.DeclaringType)}\""); } if (method.Deprecated != null) { Attributes.Add(new ObsoleteAttr(method.Deprecated.Replace("\"", "\"\""))); } if (method.IsReturnEnumified) { Attributes.Add(new GeneratedEnumAttr(true)); } if (method.IsInterfaceDefaultMethod) { Attributes.Add(new CustomAttr("[global::Java.Interop.JavaInterfaceDefaultMethod]")); } Attributes.Add(new RegisterAttr(method.JavaName, method.JniSignature, method.ConnectorName + ":" + method.GetAdapterName(opt, adapter), additionalProperties: method.AdditionalAttributeString())); SourceWriterExtensions.AddMethodCustomAttributes(Attributes, method); this.AddMethodParameters(method.Parameters, opt); }
public BoundMethodAbstractDeclaration(GenBase gen, Method method, CodeGenerationOptions opt, GenBase impl) { this.method = method; this.opt = opt; if (method.RetVal.IsGeneric && gen != null) { Name = method.Name; ExplicitInterfaceImplementation = opt.GetOutputName(gen.FullName); SourceWriterExtensions.AddMethodCustomAttributes(Attributes, method); Body.Add("throw new NotImplementedException ();"); return; } Name = method.AdjustedName; IsAbstract = true; IsShadow = impl.RequiresNew(method.Name, method); SetVisibility(method.Visibility); ReturnType = new TypeReferenceWriter(opt.GetTypeReferenceName(method.RetVal)); NewFirst = true; method_callback = new MethodCallback(impl, method, opt, null, method.IsReturnCharSequence); if (method.DeclaringType.IsGeneratable) { Comments.Add($"// Metadata.xml XPath method reference: path=\"{method.GetMetadataXPathReference (method.DeclaringType)}\""); } Attributes.Add(new RegisterAttr(method.JavaName, method.JniSignature, method.ConnectorName, additionalProperties: method.AdditionalAttributeString())); SourceWriterExtensions.AddMethodCustomAttributes(Attributes, method); this.AddMethodParameters(method.Parameters, opt); }
public BoundMethod(GenBase type, Method method, CodeGenerationOptions opt, bool generateCallbacks) { JavaMethod = method; if (generateCallbacks && method.IsVirtual) { callback = new MethodCallback(type, method, opt, null, method.IsReturnCharSequence); } Name = method.AdjustedName; IsStatic = method.IsStatic; IsSealed = method.IsOverride && method.IsFinal; IsUnsafe = true; SetVisibility(type is InterfaceGen && !IsStatic ? string.Empty : method.Visibility); // TODO: Clean up this logic var is_explicit = opt.SupportDefaultInterfaceMethods && type is InterfaceGen && method.OverriddenInterfaceMethod != null; var virt_ov = is_explicit ? string.Empty : method.IsOverride ? (opt.SupportDefaultInterfaceMethods && method.OverriddenInterfaceMethod != null ? " virtual" : " override") : method.IsVirtual ? " virtual" : string.Empty; IsVirtual = virt_ov.Trim() == "virtual"; IsOverride = virt_ov.Trim() == "override"; // When using DIM, don't generate "virtual sealed" methods, remove both modifiers instead if (opt.SupportDefaultInterfaceMethods && method.OverriddenInterfaceMethod != null && IsVirtual && IsSealed) { IsVirtual = false; IsSealed = false; } if (is_explicit) { ExplicitInterfaceImplementation = GetDeclaringTypeOfExplicitInterfaceMethod(method.OverriddenInterfaceMethod); } if ((IsVirtual || !IsOverride) && type.RequiresNew(method.AdjustedName, method)) { IsShadow = true; } // Allow user to override our virtual/override logic if (method.ManagedOverride?.ToLowerInvariant() == "virtual") { IsVirtual = true; IsOverride = false; } else if (method.ManagedOverride?.ToLowerInvariant() == "override") { IsVirtual = false; IsOverride = true; } ReturnType = new TypeReferenceWriter(opt.GetTypeReferenceName(method.RetVal)); method.JavadocInfo?.AddJavadocs(Comments); if (method.DeclaringType.IsGeneratable) { Comments.Add($"// Metadata.xml XPath method reference: path=\"{method.GetMetadataXPathReference (method.DeclaringType)}\""); } if (method.Deprecated.HasValue()) { Attributes.Add(new ObsoleteAttr(method.Deprecated.Replace("\"", "\"\""))); } if (method.IsReturnEnumified) { Attributes.Add(new GeneratedEnumAttr(true)); } SourceWriterExtensions.AddSupportedOSPlatform(Attributes, method, opt); Attributes.Add(new RegisterAttr(method.JavaName, method.JniSignature, method.IsVirtual ? method.GetConnectorNameFull(opt) : string.Empty, additionalProperties: method.AdditionalAttributeString())); SourceWriterExtensions.AddMethodCustomAttributes(Attributes, method); this.AddMethodParameters(method.Parameters, opt); SourceWriterExtensions.AddMethodBody(Body, method, opt); }