Skip to content

Commit bc8f02b

Browse files
atsushienojonpryor
authored andcommitted
[generator] Invalidate automatically generated events that will have invalid name. (#69)
Addresses https://bugzilla.xamarin.com/show_bug.cgi?id=40172 setOn123Listener(On123Listener) will generate event named 123, but that is not a valid C# name and will result in compilation error. So check that name, warn it, and do not generate event.
1 parent 72a0fea commit bc8f02b

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

tools/generator/InterfaceGen.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,10 @@ public void GenerateEventsOrPropertiesForListener (StreamWriter sw, string inden
468468
Report.Warning (0, Report.WarningInterfaceGen + 1, "empty event name in {0}.{1}.", FullName, method.Name);
469469
continue;
470470
}
471+
if (opt.GetSafeIdentifier (name) != name) {
472+
Report.Warning (0, Report.WarningInterfaceGen + 4, "event name for {0}.{1} is invalid. `eventName' or `argsType` can be used to assign a valid member name.", FullName, method.Name);
473+
continue;
474+
}
471475
var prop = target.Properties.FirstOrDefault (p => p.Setter == method);
472476
if (prop != null) {
473477
string setter = "__Set" + prop.Name;
@@ -523,6 +527,8 @@ public void GenerateEventOrProperty (StreamWriter sw, string indent, ClassGen ta
523527

524528
void GenerateEventOrProperty (Method m, StreamWriter sw, string indent, ClassGen target, CodeGenerationOptions opt, string name, string connector_fmt, string add, string remove)
525529
{
530+
if (m.EventName == string.Empty)
531+
return;
526532
string nameSpec = Methods.Count > 1 ? m.AdjustedName : String.Empty;
527533
int idx = FullName.LastIndexOf (".");
528534
int start = Name.StartsWith ("IOn") ? 3 : 1;
@@ -534,9 +540,16 @@ void GenerateEventOrProperty (Method m, StreamWriter sw, string indent, ClassGen
534540
else
535541
full_delegate_name += "Handler";
536542
if (m.RetVal.IsVoid || m.IsEventHandlerWithHandledProperty) {
537-
if (m.EventName != string.Empty)
543+
if (opt.GetSafeIdentifier (name) != name) {
544+
Report.Warning (0, Report.WarningInterfaceGen + 5, "event name for {0}.{1} is invalid. `eventName' or `argsType` can be used to assign a valid member name.", FullName, name);
545+
return;
546+
} else
538547
GenerateEvent (sw, indent, opt, name, nameSpec, m.AdjustedName, full_delegate_name, !m.Parameters.HasSender, connector_fmt, add, remove);
539548
} else {
549+
if (opt.GetSafeIdentifier (name) != name) {
550+
Report.Warning (0, Report.WarningInterfaceGen + 6, "event property name for {0}.{1} is invalid. `eventName' or `argsType` can be used to assign a valid member name.", FullName, name);
551+
return;
552+
}
540553
sw.WriteLine ("{0}WeakReference weak_implementor_{1};", indent, name);
541554
sw.WriteLine ("{0}{1}Implementor Impl{2} {{", indent, opt.GetOutputName (FullName), name);
542555
sw.WriteLine ("{0}\tget {{", indent);

0 commit comments

Comments
 (0)