示例#1
0
        public void GetMissingFunctionName()
        {
            // Arrange
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.SubtractMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionName(model, method, out string functionName);

            // Assert
            Assert.False(result);
            Assert.Null(functionName);
        }
示例#2
0
        public void GetExistingFunctionName()
        {
            // Arrange
            var expectedFunctionName = "Add";
            var model  = this.Calculator.Semantic;
            var method = this.Calculator.AddMethod;

            // Act
            var result = SyntaxNodeUtility.TryGetFunctionName(model, method, out string functionName);

            // Assert
            Assert.True(result);
            Assert.Equal(expectedFunctionName, functionName);
        }
        public static bool TryParse(SemanticModel model, MethodDeclarationSyntax method, out DurableFunction function)
        {
            function = null;

            if (!SyntaxNodeUtility.TryGetFunctionName(model, method, out string name))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetFunctionKind(method, out DurableFunctionKind kind))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetReturnType(method, out TypeSyntax returnType))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetParameters(model, method, out List <TypedParameter> parameters))
            {
                return(false);
            }

            if (!SyntaxNodeUtility.TryGetQualifiedTypeName(model, method, out string fullTypeName))
            {
                return(false);
            }

            var usedTypes = new List <TypeSyntax>();

            usedTypes.Add(returnType);
            usedTypes.AddRange(parameters.Select(p => p.Type));

            if (!SyntaxNodeUtility.TryGetRequiredNamespaces(model, usedTypes, out HashSet <string> requiredNamespaces))
            {
                return(false);
            }

            requiredNamespaces.UnionWith(GetRequiredGlobalNamespaces());

            function = new DurableFunction(fullTypeName, name, kind, parameters, returnType, requiredNamespaces);
            return(true);
        }