Ejemplo n.º 1
0
        private static ArgumentListSyntax FindBestArgumentsMatch(IMethodSymbol methodSymbol, CancellationToken cancellationToken, MappingSourceFinder mappingSourceFinder, SemanticModel semanticModel)
        {
            var overloadParameterSets = methodSymbol.DeclaringSyntaxReferences.Select(ds =>
            {
                var overloadDeclaration = (MethodDeclarationSyntax)ds.GetSyntax(cancellationToken);
                var overloadMethod      = semanticModel.GetDeclaredSymbol(overloadDeclaration);
                return(overloadMethod.Parameters);
            });

            return(MethodHelper.FindBestArgumentsMatch(mappingSourceFinder, overloadParameterSets));
        }
Ejemplo n.º 2
0
 private static ArgumentListSyntax FindMappingConstructorParameters(ITypeSymbol targetType, ITypeSymbol sourceType, MappingSourceFinder mappingSourceFinder, ExpressionSyntax globalSourceAccessor)
 {
     if (targetType is INamedTypeSymbol namedType)
     {
         var directlyMappingConstructor = namedType.Constructors.FirstOrDefault(c => c.Parameters.Length == 1 && c.Parameters[0].Type == sourceType);
         if (directlyMappingConstructor != null)
         {
             return(SyntaxFactory.ArgumentList().AddArguments(SyntaxFactory.Argument(globalSourceAccessor)));
         }
         var constructorOverloadParameterSets = namedType.Constructors.Select(x => x.Parameters);
         return(MethodHelper.FindBestArgumentsMatch(mappingSourceFinder, constructorOverloadParameterSets));
     }
     return(null);
 }