public void Generate(GenerationInfo gen_info) { StreamWriter sw = gen_info.Writer; gen_info.CurrentMember = CName; GenerateImport(sw); if (IsStatic) { GenerateStatic(gen_info); } else { sw.WriteLine("\t\t{0} {1}{2} ({3}) {4}", Protection, Safety, name, Signature.ToString(), needs_chaining ? ": base (IntPtr.Zero)" : ""); sw.WriteLine("\t\t{"); if (needs_chaining) { sw.WriteLine("\t\t\tif (GetType () != typeof (" + name + ")) {"); if (Parameters.Count == 0) { sw.WriteLine("\t\t\t\tCreateNativeObject (new string [0], new GLib.Value[0]);"); sw.WriteLine("\t\t\t\treturn;"); } else { var names = new List <string> (); var values = new List <string> (); for (int i = 0; i < Parameters.Count; i++) { Parameter p = Parameters[i]; if (container_type.GetPropertyRecursively(p.StudlyName) != null) { names.Add(p.Name); values.Add(p.Name); } else if (p.PropertyName != String.Empty) { names.Add(p.PropertyName); values.Add(p.Name); } } //if (names.Count == Parameters.Count) { sw.WriteLine("\t\t\t\tvar vals = new List<GLib.Value> ();"); sw.WriteLine("\t\t\t\tvar names = new List<string> ();"); for (int i = 0; i < names.Count; i++) { Parameter p = Parameters [i]; string indent = "\t\t\t\t"; if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) { sw.WriteLine(indent + "if (" + p.Name + " != null) {"); indent += "\t"; } sw.WriteLine(indent + "names.Add (\"" + names [i] + "\");"); sw.WriteLine(indent + "vals.Add (new GLib.Value (" + values[i] + "));"); if (p.Generatable is ClassBase && !(p.Generatable is StructBase)) { sw.WriteLine("\t\t\t\t}"); } } sw.WriteLine("\t\t\t\tCreateNativeObject (names.ToArray (), vals.ToArray ());"); sw.WriteLine("\t\t\t\treturn;"); //} else // sw.WriteLine ("\t\t\t\tthrow new InvalidOperationException (\"Can't override this constructor.\");"); } sw.WriteLine("\t\t\t}"); } Body.Initialize(gen_info, false, false, ""); sw.WriteLine("\t\t\t{0} = {1}({2});", container_type.AssignToName, CName, Body.GetCallString(false)); Body.Finish(sw, ""); Body.HandleException(sw, ""); } sw.WriteLine("\t\t}"); sw.WriteLine(); Statistics.CtorCount++; }
public override void Generate (GenerationInfo gen_info) { gen_info.CurrentType = QualifiedName; sig = new Signature (parms); StreamWriter sw = gen_info.OpenStream (Name, NS); sw.WriteLine ("namespace " + NS + " {"); sw.WriteLine (); sw.WriteLine ("\tusing System;"); sw.WriteLine (); sw.WriteLine ("\t{0} delegate " + retval.CSType + " " + Name + "(" + sig.ToString() + ");", IsInternal ? "internal" : "public"); sw.WriteLine (); sw.WriteLine ("}"); sw.Close (); GenWrapper (gen_info); Statistics.CBCount++; }
private void GenerateDeclCommon(StreamWriter sw, ClassBase implementor, bool is_interface) { if (IsStatic) { sw.Write("static "); } sw.Write(Safety); Method dup = null; if (container_type != null) { dup = container_type.GetMethodRecursively(Name); } if (implementor != null) { dup = implementor.GetMethodRecursively(Name); } if (Name == "ToString" && Parameters.Count == 0 && !is_interface) { sw.Write("override "); } else if (Name == "GetGType" && container_type is ObjectGen) { sw.Write("new "); } else if (Modifiers == "new " || (dup != null && ((dup.Signature != null && Signature != null && dup.Signature.ToString() == Signature.ToString()) || (dup.Signature == null && Signature == null)))) { sw.Write("new "); } if (is_get || is_set) { if (retval.IsVoid) { sw.Write(Parameters.AccessorReturnType); } else { sw.Write(retval.CSType); } sw.Write(" "); if (Name.StartsWith("Get") || Name.StartsWith("Set")) { sw.Write(Name.Substring(3)); } else { int dot = Name.LastIndexOf('.'); if (dot != -1 && (Name.Substring(dot + 1, 3) == "Get" || Name.Substring(dot + 1, 3) == "Set")) { sw.Write(Name.Substring(0, dot + 1) + Name.Substring(dot + 4)); } else { sw.Write(Name); } } sw.WriteLine(" { "); } else if (IsAccessor) { sw.Write(Signature.AccessorType + " " + Name + "(" + Signature.AsAccessor + ")"); } else { sw.Write(retval.CSType + " " + Name + "(" + (Signature != null ? Signature.ToString() : "") + ")"); } }