diff --git a/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/FieldSyntaxExtensions.cs b/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/FieldSyntaxExtensions.cs
index 611ba44..a7d4e6f 100644
--- a/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/FieldSyntaxExtensions.cs
+++ b/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/FieldSyntaxExtensions.cs
@@ -17,7 +17,7 @@ internal static class FieldSyntaxExtensions
internal static bool IsTargetTypeValid(this IFieldSymbol fieldSymbol)
{
var isObservableObject = fieldSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.ReactiveObject");
- var isIObservableObject = fieldSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
+ var isIObservableObject = fieldSymbol.ContainingType.ImplementsFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
var hasObservableObjectAttribute = fieldSymbol.ContainingType.HasOrInheritsAttributeWithFullyQualifiedMetadataName("ReactiveUI.SourceGenerators.ReactiveObjectAttribute");
return isIObservableObject || isObservableObject || hasObservableObjectAttribute;
@@ -31,7 +31,7 @@ internal static bool IsTargetTypeValid(this IFieldSymbol fieldSymbol)
internal static bool IsTargetTypeValid(this IPropertySymbol propertySymbol)
{
var isObservableObject = propertySymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.ReactiveObject");
- var isIObservableObject = propertySymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
+ var isIObservableObject = propertySymbol.ContainingType.ImplementsFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
var hasObservableObjectAttribute = propertySymbol.ContainingType.HasOrInheritsAttributeWithFullyQualifiedMetadataName("ReactiveUI.SourceGenerators.ReactiveObjectAttribute");
return isIObservableObject || isObservableObject || hasObservableObjectAttribute;
diff --git a/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/ITypeSymbolExtensions.cs b/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/ITypeSymbolExtensions.cs
index a333b0a..d946b5e 100644
--- a/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/ITypeSymbolExtensions.cs
+++ b/src/ReactiveUI.SourceGenerators.Analyzers.CodeFixes/Core/Extensions/ITypeSymbolExtensions.cs
@@ -37,6 +37,25 @@ public static bool InheritsFromFullyQualifiedMetadataName(this ITypeSymbol typeS
return false;
}
+ ///
+ /// Checks whether or not a given implements a specified interface.
+ ///
+ /// The target instance to check.
+ /// The full name of the interface to check for inheritance.
+ /// Whether or not implements .
+ public static bool ImplementsFullyQualifiedMetadataName(this ITypeSymbol typeSymbol, string name)
+ {
+ foreach (var implementedInterface in typeSymbol.AllInterfaces)
+ {
+ if (implementedInterface.HasFullyQualifiedMetadataName(name))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
///
/// Checks whether or not a given has or inherits a specified attribute.
///
diff --git a/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/FieldSyntaxExtensions.cs b/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/FieldSyntaxExtensions.cs
index a270b11..fb62a63 100644
--- a/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/FieldSyntaxExtensions.cs
+++ b/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/FieldSyntaxExtensions.cs
@@ -123,7 +123,7 @@ internal static void GetNullabilityInfo(
internal static bool IsTargetTypeValid(this IFieldSymbol fieldSymbol)
{
var isObservableObject = fieldSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.ReactiveObject");
- var isIObservableObject = fieldSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
+ var isIObservableObject = fieldSymbol.ContainingType.ImplementsFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
var hasObservableObjectAttribute = fieldSymbol.ContainingType.HasOrInheritsAttributeWithFullyQualifiedMetadataName("ReactiveUI.SourceGenerators.ReactiveObjectAttribute");
return isIObservableObject || isObservableObject || hasObservableObjectAttribute;
@@ -137,7 +137,7 @@ internal static bool IsTargetTypeValid(this IFieldSymbol fieldSymbol)
internal static bool IsTargetTypeValid(this IPropertySymbol propertySymbol)
{
var isObservableObject = propertySymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.ReactiveObject");
- var isIObservableObject = propertySymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
+ var isIObservableObject = propertySymbol.ContainingType.ImplementsFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
var hasObservableObjectAttribute = propertySymbol.ContainingType.HasOrInheritsAttributeWithFullyQualifiedMetadataName("ReactiveUI.SourceGenerators.ReactiveObjectAttribute");
return isIObservableObject || isObservableObject || hasObservableObjectAttribute;
@@ -151,7 +151,7 @@ internal static bool IsTargetTypeValid(this IPropertySymbol propertySymbol)
internal static bool IsTargetTypeValid(this IMethodSymbol methodSymbol)
{
var isObservableObject = methodSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.ReactiveObject");
- var isIObservableObject = methodSymbol.ContainingType.InheritsFromFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
+ var isIObservableObject = methodSymbol.ContainingType.ImplementsFullyQualifiedMetadataName("ReactiveUI.IReactiveObject");
var hasObservableObjectAttribute = methodSymbol.ContainingType.HasOrInheritsAttributeWithFullyQualifiedMetadataName("ReactiveUI.SourceGenerators.ReactiveObjectAttribute");
return isIObservableObject || isObservableObject || hasObservableObjectAttribute;
diff --git a/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/ITypeSymbolExtensions.cs b/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/ITypeSymbolExtensions.cs
index f3f10a6..2c7b853 100644
--- a/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/ITypeSymbolExtensions.cs
+++ b/src/ReactiveUI.SourceGenerators.Roslyn/Core/Extensions/ITypeSymbolExtensions.cs
@@ -56,6 +56,25 @@ public static bool InheritsFromFullyQualifiedMetadataName(this ITypeSymbol typeS
return false;
}
+ ///
+ /// Checks whether or not a given implements a specified interface.
+ ///
+ /// The target instance to check.
+ /// The full name of the interface to check for inheritance.
+ /// Whether or not implements .
+ public static bool ImplementsFullyQualifiedMetadataName(this ITypeSymbol typeSymbol, string name)
+ {
+ foreach (var implementedInterface in typeSymbol.AllInterfaces)
+ {
+ if (implementedInterface.HasFullyQualifiedMetadataName(name))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
///
/// Checks whether or not a given has or inherits from a specified type.
///