-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[xamlc] convert {OnIdiom}
to OnIdiomExtension<T>
#28700
base: main
Are you sure you want to change the base?
Conversation
/cc @simonrozsival |
This comment was marked as outdated.
This comment was marked as outdated.
@@ -94,6 +95,39 @@ public void Visit(ElementNode node, INode parentNode) | |||
return; | |||
} | |||
|
|||
// Convert OnIdiomExtension to OnIdiomExtension<T> | |||
if (typeref.FullName == "Microsoft.Maui.Controls.Xaml.OnIdiomExtension") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
can't we handle this as a compiled markup extension (the lines just after these ones) ?
typeof(IValueConverterProvider), | ||
typeof(IXmlLineInfoProvider), | ||
typeof(IConverterOptions)])] | ||
internal class OnIdiomExtension<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)] T> : IMarkupExtension |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if it's used by generated code, it has to be public (the tests passes cause there's an internalsvisibleto for the unit tests project)
you can decorate it with a [EditorBrowseable] attribute, or even [Obsolete] it to prevent usage... or move it to a namespace with 'Internals' in the name...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So, this might be the cause of the current CI failures. I'll try a public
type in the *.Internals
namespace.
it's really annoying that, unlike OnPlatform, we can't know at build time which idiom will be used... |
{OnIdiom}
to OnIdiomExtension<T>
Fixes: #22142 The `dotnet new maui -sc` template has trimmer warnings such as: obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_Styles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type608CCEEBECE9213C.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_Styles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type608CCEEBECE9213C.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_AppStyles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type675A47C870224F5D.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_AppStyles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type675A47C870224F5D.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_AppStyles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type675A47C870224F5D.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Resources_Styles_AppStyles.xaml.sg.cs(33): Trim analysis warning IL2026: __XamlGeneratedCode__.__Type675A47C870224F5D.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_Controls_TaskView.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.Controls.TaskView.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_Controls_TaskView.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.Controls.TaskView.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_Controls_CategoryChart.xaml.sg.cs(27): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.Controls.CategoryChart.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_ManageMetaPage.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ManageMetaPage.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_ManageMetaPage.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ManageMetaPage.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_ManageMetaPage.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ManageMetaPage.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_TaskDetailPage.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.TaskDetailPage.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. obj/Release/net10.0-ios/ios-arm64/Microsoft.Maui.Controls.SourceGen/Microsoft.Maui.Controls.SourceGen.CodeBehindGenerator/Pages_ProjectDetailPage.xaml.sg.cs(25): Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ProjectDetailPage.InitializeComponent(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. ILC : Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ProjectDetailPage.<InitializeComponent>_anonXamlCDataTemplate_5.LoadDataTemplate(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. ILC : Trim analysis warning IL2026: dotnet_new_maui_samplecontent.Pages.ProjectDetailPage.<InitializeComponent>_anonXamlCDataTemplate_6.LoadDataTemplate(): Using member 'Microsoft.Maui.Controls.Xaml.OnIdiomExtension.OnIdiomExtension()' which has 'RequiresUnreferencedCodeAttribute' can break functionality when trimming application code. The OnIdiomExtension is not trim safe. Use OnIdiom<T> instead. Most these are due to simple `{OnIdiom}` usage in XAML files like: ```xml <Label Text="{OnIdiom Default=default, Desktop=desktop, Phone=phone}" /> ```` One way we could fix this: * Make an internal `OnIdiomExtension<T>` class with no trimmer warnings * XamlC looks up the target type for `{OnIdiom}` and uses `OnIdiomExtension<T>` instead of `OnIdiomExtension` when generating the code. This currently duplicates the `OnIdiomExtension` class, which I'll investigate if that can be done a different way.
1f72ae8
to
86c547f
Compare
Fixes: #22142
The
dotnet new maui -sc
template has trimmer warnings such as:Most these are due to simple
{OnIdiom}
usage in XAML files like:One way we could fix this:
Make an internal
OnIdiomExtension<T>
class with no trimmer warningsXamlC looks up the target type for
{OnIdiom}
and usesOnIdiomExtension<T>
instead ofOnIdiomExtension
when generating the code.This currently duplicates the
OnIdiomExtension
class, which I'll investigate if that can be done a different way.