public static IEnumerable <SyntaxNode> BuildSetVariable(this RoslynTranslator translator, SetVariableNodeModel statement, IPortModel portModel) { var decl = translator.BuildPort(statement.InstancePort).SingleOrDefault(); var value = translator.BuildPort(statement.ValuePort).SingleOrDefault(); yield return(decl == null || value == null ? null : RoslynBuilder.Assignment(decl, value)); }
public static IEnumerable <SyntaxNode> BuildSetPropertyNode(this RoslynTranslator translator, SetPropertyGroupNodeModel model, IPortModel portModel) { SyntaxNode leftHand; IPortModel instancePort = model.InstancePort; if (!instancePort.IsConnected) { leftHand = SyntaxFactory.ThisExpression(); } else { leftHand = translator.BuildPort(instancePort).SingleOrDefault(); } foreach (var member in model.Members) { string memberId = member.GetId(); IPortModel inputPort = model.InputsById[memberId]; SyntaxNode rightHandExpression = translator.BuildPort(inputPort).SingleOrDefault(); if (rightHandExpression == null) { continue; } var access = RoslynBuilder.MemberReference(leftHand, member.Path.ToArray()); yield return(SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, access, rightHandExpression as ExpressionSyntax)); } }
public static SyntaxNode SetProperty(RoslynTranslator translator, AssignmentKind kind, IPortModel instancePortModel, IPortModel valuePortModel, params string[] members) { ExpressionSyntax instance = instancePortModel.IsConnected ? translator.BuildPort(instancePortModel).FirstOrDefault() as ExpressionSyntax : SyntaxFactory.ThisExpression(); ExpressionSyntax value = translator.BuildPort(valuePortModel).FirstOrDefault() as ExpressionSyntax; return(SetProperty(kind, instance, value, members)); }
public static SyntaxNode GetProperty(RoslynTranslator translator, IPortModel instancePortModel, params string[] members) { ExpressionSyntax instance = instancePortModel.IsConnected ? translator.BuildPort(instancePortModel).FirstOrDefault() as ExpressionSyntax : SyntaxFactory.ThisExpression(); return(GetProperty(instance, members)); }
public static IEnumerable <SyntaxNode> BuildUnaryOperator(this RoslynTranslator translator, UnaryOperatorNodeModel model, IPortModel portModel) { var semantic = model.Kind == UnaryOperatorKind.PostDecrement || model.Kind == UnaryOperatorKind.PostIncrement ? RoslynTranslator.PortSemantic.Write : RoslynTranslator.PortSemantic.Read; yield return(RoslynBuilder.UnaryOperator(model.Kind, translator.BuildPort(model.InputPort, semantic).SingleOrDefault())); }
public static IEnumerable <SyntaxNode> BuildBinaryOperator(this RoslynTranslator translator, BinaryOperatorNodeModel model, IPortModel portModel) { yield return(RoslynBuilder.BinaryOperator(model.Kind, translator.BuildPort(model.InputPortA).SingleOrDefault(), translator.BuildPort(model.InputPortB).SingleOrDefault())); }
public static IEnumerable <SyntaxNode> BuildGetPropertyNode(this RoslynTranslator translator, GetPropertyGroupNodeModel model, IPortModel portModel) { var instancePort = model.InstancePort; var input = !instancePort.IsConnected ? SyntaxFactory.ThisExpression() : translator.BuildPort(instancePort).SingleOrDefault(); if (input == null) { yield break; } var member = model.Members.FirstOrDefault(m => m.GetId() == portModel.UniqueId); if (member.Path == null || member.Path.Count == 0) { yield break; } var access = RoslynBuilder.MemberReference(input, member.Path.ToArray()); yield return(access); }