2007-11-29 Mike Kestner <mkestner@novell.com>

* generator/MethodBase.cs: move Name stuff from subclasses.
	Check for (G|S)et<UpperCaseLetter> in new Has props.
	* generator/Method.cs:
	* generator/VirtualMethod.cs: refactor out Name stuff. Use
	new Has(G|S)etterName props.
	* pango/Pango.metadata: workaround Has/Hash collision with
	the old broken getter check. [Fixes #344954]

svn path=/trunk/gtk-sharp/; revision=90458
This commit is contained in:
Mike Kestner 2007-11-29 20:01:28 +00:00
parent 3839abb463
commit 75d2981d82
5 changed files with 62 additions and 34 deletions

View File

@ -1,3 +1,13 @@
2007-11-29 Mike Kestner <mkestner@novell.com>
* generator/MethodBase.cs: move Name stuff from subclasses.
Check for (G|S)et<UpperCaseLetter> in new Has props.
* generator/Method.cs:
* generator/VirtualMethod.cs: refactor out Name stuff. Use
new Has(G|S)etterName props.
* pango/Pango.metadata: workaround Has/Hash collision with
the old broken getter check. [Fixes #344954]
2007-11-29 Mike Kestner <mkestner@novell.com> 2007-11-29 Mike Kestner <mkestner@novell.com>
* glib/Signal.cs: ignore GCHandles with null targets since * glib/Signal.cs: ignore GCHandles with null targets since

View File

@ -32,7 +32,6 @@ namespace GtkSharp.Generation {
private ReturnValue retval; private ReturnValue retval;
private string call; private string call;
private string name;
private string protection = "public"; private string protection = "public";
private bool is_get, is_set; private bool is_get, is_set;
private bool deprecated = false; private bool deprecated = false;
@ -42,9 +41,8 @@ namespace GtkSharp.Generation {
this.retval = new ReturnValue (elem["return-type"]); this.retval = new ReturnValue (elem["return-type"]);
if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated")) if (!container_type.IsDeprecated && elem.HasAttribute ("deprecated"))
deprecated = elem.GetAttribute ("deprecated") == "1"; deprecated = elem.GetAttribute ("deprecated") == "1";
this.name = elem.GetAttribute("name"); if (Name == "GetType")
if (name == "GetType") Name = "GetGType";
name = "GetGType";
} }
public bool IsDeprecated { public bool IsDeprecated {
@ -65,15 +63,6 @@ namespace GtkSharp.Generation {
} }
} }
public string Name {
get {
return name;
}
set {
name = value;
}
}
public string Protection { public string Protection {
get { get {
return protection; return protection;
@ -89,16 +78,6 @@ namespace GtkSharp.Generation {
} }
} }
string BaseName {
get {
string name = Name;
int idx = Name.LastIndexOf (".");
if (idx > 0)
name = Name.Substring (idx + 1);
return name;
}
}
public override bool Validate () public override bool Validate ()
{ {
if (!retval.Validate () || !base.Validate ()) { if (!retval.Validate () || !base.Validate ()) {
@ -106,10 +85,9 @@ namespace GtkSharp.Generation {
return false; return false;
} }
string name = BaseName;
Parameters parms = Parameters; Parameters parms = Parameters;
is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && name.Length > 3 && (name.StartsWith ("Get") || name.StartsWith ("Is") || name.StartsWith ("Has"))); is_get = ((((parms.IsAccessor && retval.IsVoid) || (parms.Count == 0 && !retval.IsVoid)) || (parms.Count == 0 && !retval.IsVoid)) && HasGetterName);
is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && (name.Length > 3 && name.Substring(0, 3) == "Set")); is_set = ((parms.IsAccessor || (parms.VisibleCount == 1 && retval.IsVoid)) && HasSetterName);
call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")"; call = "(" + (IsStatic ? "" : container_type.CallByName () + (parms.Count > 0 ? ", " : "")) + Body.GetCallString (is_set) + ")";

View File

@ -32,17 +32,29 @@ namespace GtkSharp.Generation {
Parameters parms; Parameters parms;
bool is_static = false; bool is_static = false;
string mods = String.Empty; string mods = String.Empty;
string name;
protected MethodBase (XmlElement elem, ClassBase container_type) protected MethodBase (XmlElement elem, ClassBase container_type)
{ {
this.elem = elem; this.elem = elem;
this.container_type = container_type; this.container_type = container_type;
this.name = elem.GetAttribute ("name");
parms = new Parameters (elem ["parameters"]); parms = new Parameters (elem ["parameters"]);
IsStatic = elem.GetAttribute ("shared") == "true"; IsStatic = elem.GetAttribute ("shared") == "true";
if (elem.HasAttribute ("new_flag")) if (elem.HasAttribute ("new_flag"))
mods = "new "; mods = "new ";
} }
protected string BaseName {
get {
string name = Name;
int idx = Name.LastIndexOf (".");
if (idx > 0)
name = Name.Substring (idx + 1);
return name;
}
}
MethodBody body; MethodBody body;
public MethodBody Body { public MethodBody Body {
get { get {
@ -58,6 +70,30 @@ namespace GtkSharp.Generation {
} }
} }
protected bool HasGetterName {
get {
string name = BaseName;
if (name.Length <= 3)
return false;
if (name.StartsWith ("Get") || name.StartsWith ("Has"))
return Char.IsUpper (name [3]);
else if (name.StartsWith ("Is"))
return Char.IsUpper (name [2]);
else
return false;
}
}
protected bool HasSetterName {
get {
string name = BaseName;
if (name.Length <= 3)
return false;
return name.StartsWith ("Set") && Char.IsUpper (name [3]);
}
}
public bool IsStatic { public bool IsStatic {
get { get {
return is_static; return is_static;
@ -85,6 +121,15 @@ namespace GtkSharp.Generation {
} }
} }
public string Name {
get {
return name;
}
set {
name = value;
}
}
public Parameters Parameters { public Parameters Parameters {
get { get {
return parms; return parms;

View File

@ -42,13 +42,13 @@ namespace GtkSharp.Generation {
public bool IsGetter { public bool IsGetter {
get { get {
return (Name.StartsWith ("Get") || Name.StartsWith ("Has")) && ((!retval.IsVoid && parms.Count == 1) || (retval.IsVoid && parms.Count == 2 && parms [1].PassAs == "out")); return HasGetterName && ((!retval.IsVoid && parms.Count == 1) || (retval.IsVoid && parms.Count == 2 && parms [1].PassAs == "out"));
} }
} }
public bool IsSetter { public bool IsSetter {
get { get {
if (!Name.StartsWith ("Set") || !retval.IsVoid) if (!HasSetterName || !retval.IsVoid)
return false; return false;
if (parms.Count == 2 || (parms.Count == 4 && parms [1].Scope == "notified")) if (parms.Count == 2 || (parms.Count == 4 && parms [1].Scope == "notified"))
@ -64,12 +64,6 @@ namespace GtkSharp.Generation {
} }
} }
public string Name {
get {
return elem.GetAttribute("name");
}
}
public void GenerateCallback (StreamWriter sw) public void GenerateCallback (StreamWriter sw)
{ {
if (!Validate ()) if (!Validate ())

View File

@ -8,6 +8,7 @@
<attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='CopyStatic']/return-type" name="owned">true</attr> <attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='CopyStatic']/return-type" name="owned">true</attr>
<attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='Free']" name="deprecated">1</attr> <attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='Free']" name="deprecated">1</attr>
<attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='FromString']/return-type" name="owned">true</attr> <attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='FromString']/return-type" name="owned">true</attr>
<attr path="/api/namespace/boxed[@cname='PangoFontDescription']/method[@name='Hash']" name="name">GetHash</attr>
<attr path="/api/namespace/boxed[@cname='PangoFontMetrics']/method[@name='Ref']" name="deprecated">1</attr> <attr path="/api/namespace/boxed[@cname='PangoFontMetrics']/method[@name='Ref']" name="deprecated">1</attr>
<attr path="/api/namespace/boxed[@cname='PangoFontMetrics']/method[@name='Unref']" name="deprecated">1</attr> <attr path="/api/namespace/boxed[@cname='PangoFontMetrics']/method[@name='Unref']" name="deprecated">1</attr>
<attr path="/api/namespace/boxed[@cname='PangoGlyphString']/field[@name='Glyphs']" name="hidden">1</attr> <attr path="/api/namespace/boxed[@cname='PangoGlyphString']/field[@name='Glyphs']" name="hidden">1</attr>