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)); }
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); }