Esempio n. 1
0
        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++;
        }
Esempio n. 2
0
		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++;
		}
Esempio n. 3
0
        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() : "") + ")");
            }
        }