Example #1
0
            private IList <SyntaxNode> GenerateStatements(
                SyntaxGenerator factory,
                bool isAbstract,
                CancellationToken cancellationToken)
            {
                var throwStatement = CodeGenerationHelpers.GenerateThrowStatement(factory, this.Document, "System.NotImplementedException", cancellationToken);

                return(isAbstract || State.TypeToGenerateIn.TypeKind == TypeKind.Interface || throwStatement == null
                    ? null
                    : new[] { throwStatement });
            }
Example #2
0
            private ImmutableArray <SyntaxNode> GenerateStatements(
                SyntaxGenerator factory,
                bool isAbstract,
                CancellationToken cancellationToken)
            {
                var throwStatement = CodeGenerationHelpers.GenerateThrowStatement(factory, this.Document, "System.NotImplementedException", cancellationToken);

                return(isAbstract || State.TypeToGenerateIn.TypeKind == TypeKind.Interface || throwStatement == null
                    ? default(ImmutableArray <SyntaxNode>)
                    : ImmutableArray.Create(throwStatement));
            }
Example #3
0
            private ImmutableArray <SyntaxNode> GenerateStatements(
                CancellationToken cancellationToken)
            {
                var syntaxFactory = _document.Project.Solution.Workspace.Services.GetLanguageServices(_state.TypeToGenerateIn.Language).GetService <SyntaxGenerator>();

                var throwStatement = CodeGenerationHelpers.GenerateThrowStatement(
                    syntaxFactory, this._document, "System.NotImplementedException", cancellationToken);

                return(_state.TypeToGenerateIn.TypeKind != TypeKind.Interface && _returnsByRef
                    ? ImmutableArray.Create(throwStatement)
                    : default(ImmutableArray <SyntaxNode>));
            }
Example #4
0
 public override string ConvertToCode(string propertyName, CodeNode currentNode, CodeNode parentNode, NodeConverter converter, CodeRenderService rendererService)
 {
     if (currentNode.Node.Parent != null && propertyName == PropertyNames.AddChild)
     {
         var defaultParentName = GetDefaultParentName(currentNode.Node, currentNode.Node.Parent, rendererService);
         if (!string.IsNullOrEmpty(defaultParentName))
         {
             return(CodeGenerationHelpers.GetMethod(defaultParentName, nameof(NSView.AddSubview), currentNode.Name));
         }
     }
     return(base.ConvertToCode(propertyName, currentNode, parentNode, converter, rendererService));
 }
        protected override StringBuilder OnConvertToCode(CodeNode currentNode, CodeNode parentNode, CodeRenderService rendererService)
        {
            var builder = new StringBuilder();

            if (rendererService.NeedsRenderConstructor(currentNode, parentNode))
            {
                builder.WriteConstructor(currentNode.Name, GetControlType(currentNode.Node), rendererService.NodeRendersVar(currentNode, parentNode));
            }

            builder.Configure(currentNode.Node, Resources.Ids.Conversion.NameIdentifier);
            currentNode.Node.TryGetNodeCustomName(out string nodeName);

            var imageNamedMethod = CodeGenerationHelpers.GetMethod(typeof(NSImage).FullName, nameof(NSImage.ImageNamed), nodeName, true);

            builder.WriteEquality(currentNode.Name, nameof(NSImageView.Image), imageNamedMethod);

            return(builder);
        }
        private IMethodSymbol GetMethodSymbol(
            SemanticDocument document,
            string eventHandlerMethodName,
            AssignmentExpressionSyntax eventHookupExpression,
            CancellationToken cancellationToken)
        {
            var semanticModel = document.SemanticModel as SemanticModel;
            var symbolInfo    = semanticModel.GetSymbolInfo(eventHookupExpression.Left, cancellationToken);

            var symbol = symbolInfo.Symbol;

            if (symbol == null || symbol.Kind != SymbolKind.Event)
            {
                return(null);
            }

            var typeInference = document.Project.LanguageServices.GetService <ITypeInferenceService>();
            var delegateType  = typeInference.InferDelegateType(semanticModel, eventHookupExpression.Right, cancellationToken);

            if (delegateType == null || delegateType.DelegateInvokeMethod == null)
            {
                return(null);
            }

            var syntaxFactory = document.Project.LanguageServices.GetService <SyntaxGenerator>();

            return(CodeGenerationSymbolFactory.CreateMethodSymbol(
                       attributes: null,
                       accessibility: Accessibility.Private,
                       modifiers: new DeclarationModifiers(isStatic: eventHookupExpression.IsInStaticContext()),
                       returnType: delegateType.DelegateInvokeMethod.ReturnType,
                       returnsByRef: delegateType.DelegateInvokeMethod.ReturnsByRef,
                       explicitInterfaceSymbol: null,
                       name: eventHandlerMethodName,
                       typeParameters: null,
                       parameters: delegateType.DelegateInvokeMethod.Parameters,
                       statements: new List <SyntaxNode>
            {
                CodeGenerationHelpers.GenerateThrowStatement(syntaxFactory, document, "System.NotImplementedException", cancellationToken)
            }));
        }
Example #7
0
 public CocoaStringObject AddMethod(string methodName, string parameters, bool inQuotes = false, bool includesSemicolon = true)
 {
     builder.Append(CodeGenerationHelpers.GetMethod(this.Name, methodName, parameters, inQuotes, includesSemicolon));
     return(this);
 }
        public override string ConvertToCode(string propertyName, FigmaCodeNode currentNode, FigmaCodeNode parentNode, FigmaCodeRendererService rendererService)
        {
            if (propertyName == CodeProperties.Frame)
            {
                System.Text.StringBuilder builder = new System.Text.StringBuilder();

                if (currentNode.Node is IAbsoluteBoundingBox absoluteBounding)
                {
                    var constrainedNode = currentNode.Node as IConstraints;

                    var name = currentNode.Name;

                    //width
                    var widthConstraintName = $"{name}WidthConstraint";

                    var widthMaxStringValue        = Math.Max(absoluteBounding.absoluteBoundingBox.Width, 1).ToDesignerString();
                    var widthConstraintStringValue = CodeGenerationHelpers.GetWidthConstraintEqualToConstant(name, widthMaxStringValue);
                    builder.AppendLine($"var {widthConstraintName} = {widthConstraintStringValue};");


                    if (constrainedNode != null && constrainedNode.constraints.IsFlexibleHorizontal)
                    {
                        builder.WriteEquality(widthConstraintName, nameof(AppKit.NSLayoutConstraint.Priority), $"({typeof(int).FullName}){typeof(NSLayoutPriority)}.{nameof(NSLayoutPriority.DefaultLow)}");
                    }

                    builder.WriteEquality(widthConstraintName, nameof(AppKit.NSLayoutConstraint.Active), true);

                    //height
                    var heightConstraintName = $"{name}HeightConstraint";

                    var heightStringValue           = Math.Max(absoluteBounding.absoluteBoundingBox.Height, 1).ToDesignerString();
                    var heightConstraintStringValue = CodeGenerationHelpers.GetHeightConstraintEqualToConstant(name, heightStringValue);

                    builder.AppendLine($"var {heightConstraintName} = {heightConstraintStringValue};");

                    if (constrainedNode != null && constrainedNode.constraints.IsFlexibleVertical)
                    {
                        builder.WriteEquality(heightConstraintName, nameof(AppKit.NSLayoutConstraint.Priority), $"({typeof (int).FullName}){typeof(NSLayoutPriority)}.{nameof(NSLayoutPriority.DefaultLow)}");
                    }

                    builder.WriteEquality(heightConstraintName, nameof(AppKit.NSLayoutConstraint.Active), true);

                    return(builder.ToString());
                }
                return(string.Empty);
            }
            if (propertyName == CodeProperties.AddChild)
            {
                return(parentNode?.GetMethod(nameof(NSView.AddSubview), currentNode.Name));
            }
            if (propertyName == CodeProperties.Size)
            {
                if (currentNode.Node is IAbsoluteBoundingBox container)
                {
                    if (currentNode.Node is FigmaLine line)
                    {
                        var width  = container.absoluteBoundingBox.Width == 0 ? 1 : container.absoluteBoundingBox.Width;
                        var height = container.absoluteBoundingBox.Height == 0 ? 1 : container.absoluteBoundingBox.Height;
                        var size   = typeof(CoreGraphics.CGSize).GetConstructor(new string[] { width.ToDesignerString(), height.ToDesignerString() });
                        return(currentNode.GetMethod(nameof(NSView.SetFrameSize), size));
                    }

                    var sizeConstructor = typeof(CoreGraphics.CGSize).GetConstructor(
                        container.absoluteBoundingBox.Width.ToDesignerString(),
                        container.absoluteBoundingBox.Height.ToDesignerString());
                    return(currentNode.GetMethod(nameof(NSView.SetFrameSize), sizeConstructor));
                }
                return(string.Empty);
            }
            if (propertyName == CodeProperties.Position)
            {
                //first level has an special behaviour on positioning
                if (currentNode.Node.Parent is FigmaCanvas)
                {
                    return(string.Empty);
                }

                if (currentNode.Node is IAbsoluteBoundingBox absoluteBounding && currentNode.Node.Parent is IAbsoluteBoundingBox parentAbsoluteBoundingBox)
                {
                    var x = absoluteBounding.absoluteBoundingBox.X - parentAbsoluteBoundingBox.absoluteBoundingBox.X;

                    var parentY = parentAbsoluteBoundingBox.absoluteBoundingBox.Y + parentAbsoluteBoundingBox.absoluteBoundingBox.Height;
                    var actualY = absoluteBounding.absoluteBoundingBox.Y + absoluteBounding.absoluteBoundingBox.Height;
                    var y       = parentY - actualY;

                    if (x != default || y != default)
                    {
                        var pointConstructor = CodeGenerationExtensions.GetConstructor(
                            typeof(CoreGraphics.CGPoint),
                            x.ToDesignerString(),
                            y.ToDesignerString()
                            );
                        return(currentNode.GetMethod(nameof(AppKit.NSView.SetFrameOrigin), pointConstructor));
                    }
                }
                return(string.Empty);
            }

            if (propertyName == CodeProperties.Constraints)
            {
                if (currentNode.Node is IConstraints constrainedNode && currentNode.Node.Parent != null)
                {
                    var parentNodeName = parentNode == null?
                                         GetDefaultParentName(currentNode, parentNode, rendererService) :
                                             parentNode.Name;

                    var builder = new System.Text.StringBuilder();

                    var constraints         = constrainedNode.constraints;
                    var absoluteBoundingBox = ((IAbsoluteBoundingBox)currentNode.Node)
                                              .absoluteBoundingBox;
                    var absoluteBoundBoxParent = ((IAbsoluteBoundingBox)(parentNode == null ? currentNode.Node.Parent : parentNode.Node))
                                                 .absoluteBoundingBox;

                    if (constraints.horizontal.Contains("RIGHT") || constraints.horizontal == "SCALE")
                    {
                        var endPosition1 = absoluteBoundingBox.X + absoluteBoundingBox.Width;
                        var endPosition2 = absoluteBoundBoxParent.X + absoluteBoundBoxParent.Width;
                        var value        = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                        var rightConstraintStringValue = CodeGenerationHelpers.GetRightConstraintEqualToAnchor(
                            currentNode.Name, -value, parentNodeName);
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    if (constraints.horizontal.Contains("LEFT"))
                    {
                        var value2 = absoluteBoundingBox.X - absoluteBoundBoxParent.X;
                        var rightConstraintStringValue = CodeGenerationHelpers.GetLeftConstraintEqualToAnchor(
                            currentNode.Name, value2, parentNodeName);
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    if (constraints.vertical.Contains("BOTTOM") || constraints.horizontal == "SCALE")
                    {
                        var endPosition1 = absoluteBoundingBox.Y + absoluteBoundingBox.Height;
                        var endPosition2 = absoluteBoundBoxParent.Y + absoluteBoundBoxParent.Height;
                        var value2       = Math.Max(endPosition1, endPosition2) - Math.Min(endPosition1, endPosition2);

                        var rightConstraintStringValue = CodeGenerationHelpers.GetBottomConstraintEqualToAnchor(
                            currentNode.Name, -value2, parentNodeName);
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    if (constraints.vertical.Contains("TOP"))
                    {
                        var value = absoluteBoundingBox.Y - absoluteBoundBoxParent.Y;

                        var rightConstraintStringValue = CodeGenerationHelpers.GetTopConstraintEqualToAnchor(
                            currentNode.Name, value, parentNodeName);
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    if (constraints.horizontal == "CENTER" || constraints.horizontal == "SCALE")
                    {
                        var delta = absoluteBoundingBox.X - absoluteBoundBoxParent.X - absoluteBoundBoxParent.Center.X;

                        var rightConstraintStringValue = CodeGenerationHelpers.GetConstraintEqualToAnchor(
                            currentNode.Name, nameof(NSView.LeftAnchor), delta, parentNodeName, nameof(NSView.CenterXAnchor));
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    if (constraints.vertical == "CENTER" || constraints.vertical == "SCALE")
                    {
                        var delta = absoluteBoundingBox.Y - absoluteBoundBoxParent.Y - absoluteBoundBoxParent.Center.Y;

                        var rightConstraintStringValue = CodeGenerationHelpers.GetConstraintEqualToAnchor(
                            currentNode.Name, nameof(NSView.TopAnchor), delta, parentNodeName, nameof(NSView.CenterYAnchor));
                        builder.WriteEquality(rightConstraintStringValue, nameof(NSLayoutConstraint.Active), true);
                    }

                    return(builder.ToString());
                }
                return(string.Empty);
            }


            throw new System.NotImplementedException(propertyName);
        }
Example #9
0
 public static string BoldSystemFontOfSize(string font)
 {
     return CodeGenerationHelpers.GetMethod(typeof(AppKit.NSFont).FullName, nameof(AppKit.NSFont.BoldSystemFontOfSize), font);
 }