Skip to content

Commit

Permalink
fix: Handle interface in XamlFileGenerator.IsType
Browse files Browse the repository at this point in the history
  • Loading branch information
Youssef1313 committed Feb 13, 2024
1 parent 99a4fb2 commit 4e54abb
Show file tree
Hide file tree
Showing 5 changed files with 240 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,75 @@ public class C { }

await test.RunAsync();
}

[TestMethod]
public async Task When_Attached_DP_Interface_Type()
{
var xamlFile = new XamlFile(
"MainPage.xaml",
"""
<Page x:Class="TestRepro.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:TestRepro"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<Grid>
<local:MyAttached.MyProperty>
<local:TestDisposable />
</local:MyAttached.MyProperty>
</Grid>
</Page>
""");

var test = new Verify.Test(xamlFile)
{
TestState =
{
Sources =
{
"""
using System;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
namespace TestRepro
{
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
}
internal class TestDisposable : ITestInterface { }
internal static class MyAttached
{
public static ITestInterface GetMyProperty(DependencyObject obj)
{
return (ITestInterface)obj.GetValue(MyPropertyProperty);
}
public static void SetMyProperty(DependencyObject obj, ITestInterface value)
{
obj.SetValue(MyPropertyProperty, value);
}
public static readonly DependencyProperty MyPropertyProperty =
DependencyProperty.RegisterAttached("MyProperty", typeof(ITestInterface), typeof(MyAttached), new PropertyMetadata(null));
}
interface ITestInterface { }
}
"""
}
}
}.AddGeneratedSources();

await test.RunAsync();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// <autogenerated />
#if __WASM__
#error invalid internal source generator state. The __WASM__ DefineConstant was not propagated properly.
#endif
namespace MyProject
{
/// <summary>
/// Contains all the static resources defined for the application
/// </summary>
public sealed partial class GlobalStaticResources
{
static bool _initialized;
private static bool _stylesRegistered;
private static bool _dictionariesRegistered;
internal static global::Uno.UI.Xaml.XamlParseContext __ParseContext_ {get; } = new global::Uno.UI.Xaml.XamlParseContext()
{
AssemblyName = "TestProject",
}
;

static GlobalStaticResources()
{
Initialize();
}
public static void Initialize()
{
if (!_initialized)
{
_initialized = true;
global::Uno.UI.GlobalStaticResources.Initialize();
global::Uno.UI.GlobalStaticResources.RegisterDefaultStyles();
global::Uno.UI.GlobalStaticResources.RegisterResourceDictionariesBySource();
}
}
public static void RegisterDefaultStyles()
{
if(!_stylesRegistered)
{
_stylesRegistered = true;
RegisterDefaultStyles_MainPage_d6cd66944958ced0c513e0a04797b51d();
}
}
// Register ResourceDictionaries using ms-appx:/// syntax, this is called for external resources
public static void RegisterResourceDictionariesBySource()
{
if(!_dictionariesRegistered)
{
_dictionariesRegistered = true;
}
}
// Register ResourceDictionaries using ms-resource:/// syntax, this is called for local resources
internal static void RegisterResourceDictionariesBySourceLocal()
{
}
static partial void RegisterDefaultStyles_MainPage_d6cd66944958ced0c513e0a04797b51d();

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// <auto-generated />
[assembly: global::System.Reflection.AssemblyMetadata("UnoHasLocalizationResources", "False")]
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
// <autogenerated />
#pragma warning disable CS0114
#pragma warning disable CS0108
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Uno.UI;
using Uno.UI.Xaml;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Documents;
using Microsoft.UI.Xaml.Media;
using Microsoft.UI.Xaml.Media.Animation;
using Microsoft.UI.Xaml.Shapes;
using Windows.UI.Text;
using Uno.Extensions;
using Uno;
using Uno.UI.Helpers;
using Uno.UI.Helpers.Xaml;
using MyProject;

#if __ANDROID__
using _View = Android.Views.View;
#elif __IOS__
using _View = UIKit.UIView;
#elif __MACOS__
using _View = AppKit.NSView;
#else
using _View = Microsoft.UI.Xaml.UIElement;
#endif

namespace TestRepro
{
partial class MainPage : global::Microsoft.UI.Xaml.Controls.Page
{
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
private const string __baseUri_prefix_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/";
[global::System.ComponentModel.EditorBrowsable(global::System.ComponentModel.EditorBrowsableState.Never)]
private const string __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d = "ms-appx:///TestProject/";
private global::Microsoft.UI.Xaml.NameScope __nameScope = new global::Microsoft.UI.Xaml.NameScope();
private void InitializeComponent()
{
NameScope.SetNameScope(this, __nameScope);
var __that = this;
base.IsParsing = true;
// Source 0\MainPage.xaml (Line 1:2)
base.Content =
new global::Microsoft.UI.Xaml.Controls.Grid
{
IsParsing = true,
// Source 0\MainPage.xaml (Line 7:3)
}
.MainPage_d6cd66944958ced0c513e0a04797b51d_XamlApply((MainPage_d6cd66944958ced0c513e0a04797b51dXamlApplyExtensions.XamlApplyHandler0)(c0 =>
{
global::TestRepro.MyAttached.SetMyProperty(c0,
new global::TestRepro.TestDisposable
{
// Source 0\MainPage.xaml (Line 9:5)
}
);
global::Uno.UI.FrameworkElementHelper.SetBaseUri(c0, __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d);
c0.CreationComplete();
}
))
;

this
.GenericApply(((c1) =>
{
// Source 0\MainPage.xaml (Line 1:2)

// WARNING Property c1.base does not exist on {http://schemas.microsoft.com/winfx/2006/xaml/presentation}Page, the namespace is http://www.w3.org/XML/1998/namespace. This error was considered irrelevant by the XamlFileGenerator
}
))
.GenericApply(((c2) =>
{
// Class TestRepro.MainPage
global::Uno.UI.FrameworkElementHelper.SetBaseUri(c2, __baseUri_MainPage_d6cd66944958ced0c513e0a04797b51d);
c2.CreationComplete();
}
))
;
OnInitializeCompleted();

}
partial void OnInitializeCompleted();
}
}
namespace MyProject
{
static class MainPage_d6cd66944958ced0c513e0a04797b51dXamlApplyExtensions
{
public delegate void XamlApplyHandler0(global::Microsoft.UI.Xaml.Controls.Grid instance);
[System.Runtime.CompilerServices.MethodImpl(System.Runtime.CompilerServices.MethodImplOptions.AggressiveInlining)]
public static global::Microsoft.UI.Xaml.Controls.Grid MainPage_d6cd66944958ced0c513e0a04797b51d_XamlApply(this global::Microsoft.UI.Xaml.Controls.Grid instance, XamlApplyHandler0 handler)
{
handler(instance);
return instance;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,11 @@ private static bool IsType([NotNullWhen(true)] INamedTypeSymbol? namedTypeSymbol
return true;
}

if (typeSymbol is INamedTypeSymbol { TypeKind: TypeKind.Interface })
{
return namedTypeSymbol.AllInterfaces.Contains(typeSymbol);
}

do
{
if (SymbolEqualityComparer.Default.Equals(namedTypeSymbol, typeSymbol))
Expand Down

0 comments on commit 4e54abb

Please sign in to comment.