diff --git a/src/Riok.Mapperly/Descriptors/MappingBuilders/ExplicitCastMappingBuilder.cs b/src/Riok.Mapperly/Descriptors/MappingBuilders/ExplicitCastMappingBuilder.cs index 587414bddd..756479c60d 100644 --- a/src/Riok.Mapperly/Descriptors/MappingBuilders/ExplicitCastMappingBuilder.cs +++ b/src/Riok.Mapperly/Descriptors/MappingBuilders/ExplicitCastMappingBuilder.cs @@ -1,3 +1,4 @@ +using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Riok.Mapperly.Abstractions; using Riok.Mapperly.Descriptors.Mappings; @@ -15,6 +16,9 @@ public static class ExplicitCastMappingBuilder if (ctx.MapperConfiguration.UseDeepCloning && !ctx.Source.IsImmutable() && !ctx.Target.IsImmutable()) return null; + if (SymbolEqualityComparer.Default.Equals(ctx.Source, ctx.Compilation.ObjectType)) + return null; + var conversion = ctx.Compilation.ClassifyConversion(ctx.Source, ctx.Target); // only allow user defined explicit reference conversions diff --git a/test/Riok.Mapperly.Tests/Mapping/CastTest.cs b/test/Riok.Mapperly.Tests/Mapping/CastTest.cs index 4121a26134..56365f8c44 100644 --- a/test/Riok.Mapperly.Tests/Mapping/CastTest.cs +++ b/test/Riok.Mapperly.Tests/Mapping/CastTest.cs @@ -363,4 +363,14 @@ public void ExplicitCastMappingDisabledShouldDiagnostic() .Should() .HaveDiagnostic(new(DiagnosticDescriptors.CouldNotCreateMapping)); } + + [Fact] + public void FromObjectExplicitCastShouldBeIgnoredAndDiagnostic() + { + var source = TestSourceBuilder.Mapping("object", "byte"); + TestHelper + .GenerateMapper(source, TestHelperOptions.AllowDiagnostics) + .Should() + .HaveDiagnostic(new(DiagnosticDescriptors.CouldNotCreateMapping)); + } }