[generate-type-forwarders] Fix stubs generation (#10805)

* Types can be `sealed`
* Types can be `static` (when both `sealed` and `abstract`)
* Events can be `static`
* Do not add `virtual` members to `sealed` types (fix `CS0549` errors)
This commit is contained in:
Sebastien Pouliot 2021-03-08 21:06:56 -05:00 коммит произвёл GitHub
Родитель cd7f7596ba
Коммит cbbc4f4f0b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 12 добавлений и 5 удалений

Просмотреть файл

@ -371,7 +371,7 @@ namespace GenerateTypeForwarders {
} else {
sb.Append ("new ");
}
} else {
} else if (!pd.DeclaringType.IsSealed) {
sb.Append ("virtual ");
}
}
@ -391,9 +391,11 @@ namespace GenerateTypeForwarders {
static void EmitEvent (StringBuilder sb, EventDefinition ed, int indent)
{
sb.AppendLine ("#pragma warning disable CS0067");
var strIndent = new string ('\t', indent);
sb.Append (strIndent);
sb.Append ('\t', indent);
sb.Append ("public ");
var e = ed.AddMethod ?? ed.InvokeMethod;
if (e.IsStatic)
sb.Append ("static ");
sb.Append ("event ");
EmitTypeName (sb, ed.EventType);
sb.Append (' ');
@ -430,8 +432,13 @@ namespace GenerateTypeForwarders {
} else if (type.IsValueType) {
sb.Append ("struct ");
} else {
if (type.IsAbstract)
sb.Append ("abstract ");
if (type.IsAbstract) {
if (type.IsSealed)
sb.Append ("static ");
else
sb.Append ("abstract ");
} else if (type.IsSealed)
sb.Append ("sealed ");
sb.Append ("class ");
}