Browse Source

Fix ref assembly generator making nested types public (#13513)

pull/13515/head
Julien Lebosquain 3 years ago
committed by GitHub
parent
commit
c40b627403
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 66
      api/Avalonia.nupkg.xml
  2. 28
      nukebuild/RefAssemblyGenerator.cs

66
api/Avalonia.nupkg.xml

@ -1003,6 +1003,72 @@
<Left>baseline/designer/Avalonia.Designer.HostApp.dll</Left> <Left>baseline/designer/Avalonia.Designer.HostApp.dll</Left>
<Right>target/designer/Avalonia.Designer.HostApp.dll</Right> <Right>target/designer/Avalonia.Designer.HostApp.dll</Right>
</Suppression> </Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.AvaloniaLocator.RegistrationHelper`1</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.AvaloniaLocator.ResolverDisposable</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Input.FocusManager.&lt;GetFocusScopeAncestors&gt;d__18</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Layout.LayoutManager.&lt;&gt;c</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Layout.LayoutManager.ArrangeResult</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Layout.LayoutManager.EffectiveViewportChangedListener</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Rendering.DefaultRenderTimer.&lt;&gt;c__DisplayClass13_0</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Rendering.UiThreadRenderTimer.&lt;&gt;c__DisplayClass3_0</Target>
<Left>baseline/netstandard2.0/Avalonia.Base.dll</Left>
<Right>target/netstandard2.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.Primitives.PopupPositioning.ManagedPopupPositioner.&lt;&gt;c__DisplayClass5_0</Target>
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.Primitives.PopupPositioning.ManagedPopupPositionerPopupImplHelper.&lt;&gt;c</Target>
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Controls.Primitives.PopupPositioning.ManagedPopupPositionerPopupImplHelper.MoveResizeDelegate</Target>
<Left>baseline/netstandard2.0/Avalonia.Controls.dll</Left>
<Right>target/netstandard2.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression> <Suppression>
<DiagnosticId>CP0006</DiagnosticId> <DiagnosticId>CP0006</DiagnosticId>
<Target>P:Avalonia.Rendering.Composition.ICompositionGpuImportedObject.ImportCompleted</Target> <Target>P:Avalonia.Rendering.Composition.ICompositionGpuImportedObject.ImportCompleted</Target>

28
nukebuild/RefAssemblyGenerator.cs

@ -70,9 +70,6 @@ public class RefAssemblyGenerator
static void ProcessType(TypeDefinition type, MethodReference obsoleteCtor) static void ProcessType(TypeDefinition type, MethodReference obsoleteCtor)
{ {
foreach (var nested in type.NestedTypes)
ProcessType(nested, obsoleteCtor);
var hideMembers = (type.IsInterface && type.Name.EndsWith("Impl")) var hideMembers = (type.IsInterface && type.Name.EndsWith("Impl"))
|| HasPrivateApi(type.CustomAttributes); || HasPrivateApi(type.CustomAttributes);
@ -97,7 +94,7 @@ public class RefAssemblyGenerator
foreach (var m in type.Methods) foreach (var m in type.Methods)
{ {
if (hideMembers || HasPrivateApi(m.CustomAttributes)) if (!m.IsPrivate && (hideMembers || HasPrivateApi(m.CustomAttributes)))
{ {
HideMethod(m); HideMethod(m);
} }
@ -108,30 +105,27 @@ public class RefAssemblyGenerator
{ {
if (HasPrivateApi(p.CustomAttributes)) if (HasPrivateApi(p.CustomAttributes))
{ {
if (p.SetMethod != null) if (p.SetMethod is { IsPrivate: false } setMethod)
HideMethod(p.SetMethod); HideMethod(setMethod);
if (p.GetMethod != null) if (p.GetMethod is { IsPrivate: false } getMethod)
HideMethod(p.GetMethod); HideMethod(getMethod);
} }
} }
foreach (var f in type.Fields) foreach (var f in type.Fields)
{ {
if (hideMembers || HasPrivateApi(f.CustomAttributes)) if (!f.IsPrivate && (hideMembers || HasPrivateApi(f.CustomAttributes)))
{ {
var dflags = FieldAttributes.Public | FieldAttributes.Family | FieldAttributes.FamORAssem | f.IsAssembly = true;
FieldAttributes.FamANDAssem | FieldAttributes.Assembly;
f.Attributes = ((f.Attributes | dflags) ^ dflags) | FieldAttributes.Assembly;
} }
} }
foreach (var cl in type.NestedTypes) foreach (var cl in type.NestedTypes)
{ {
ProcessType(cl, obsoleteCtor); ProcessType(cl, obsoleteCtor);
if (hideMembers) if (hideMembers && cl.IsNestedPublic)
{ {
var dflags = TypeAttributes.Public; cl.IsNestedAssembly = true;
cl.Attributes = ((cl.Attributes | dflags) ^ dflags) | TypeAttributes.NotPublic;
} }
} }
@ -143,9 +137,7 @@ public class RefAssemblyGenerator
static void HideMethod(MethodDefinition m) static void HideMethod(MethodDefinition m)
{ {
var dflags = MethodAttributes.Public | MethodAttributes.Family | MethodAttributes.FamORAssem | m.IsAssembly = true;
MethodAttributes.FamANDAssem | MethodAttributes.Assembly;
m.Attributes = ((m.Attributes | dflags) ^ dflags) | MethodAttributes.Assembly;
} }
static void MarkAsUnstable(IMemberDefinition def, MethodReference obsoleteCtor, ICustomAttribute? unstableAttribute) static void MarkAsUnstable(IMemberDefinition def, MethodReference obsoleteCtor, ICustomAttribute? unstableAttribute)

Loading…
Cancel
Save