예제 #1
0
        private Property LoadProperty(Annotation annotation, Context context, DocEntry entry)
        {
            Property prop = new Property();

            prop.SetName(entry.GetKey().ToString());
            Object value = entry.GetValue();

            if (value is MethodExpression)
            {
                value = ((MethodExpression)value).AsTypeLiteral(context);
            }
            if (value is TypeExpression)
            {
                IType type = ((TypeExpression)value).getType();
                value = new TypeLiteral(type);
            }
            if (value is TypeLiteral)
            {
                return(LoadProperty(annotation, context, entry, prop, (TypeLiteral)value));
            }
            else if (value is SetLiteral)
            {
                return(LoadProperty(annotation, context, entry, prop, (SetLiteral)value));
            }
            else if (value is DocumentLiteral)
            {
                return(LoadProperty(annotation, context, entry, prop, (DocumentLiteral)value));
            }
            else
            {
                throw new SyntaxError("WidgetProperties expects a Document of types as unique parameter");
            }
        }
        public CSharpSyntaxNode Convert(TypeLiteral node)
        {
            List <Node> members = node.Members;

            if (members.Count == 0)
            {
                //TODO: NOT SUPPORT
                return(SyntaxFactory.ParseExpression(this.CommentText(node.Text)));
            }
            else if (members.Count == 1)
            {
                Node member = members[0];
                switch (member.Kind)
                {
                case NodeKind.PropertySignature:
                    var csType = (member as PropertySignature).Type.ToCsNode <TypeSyntax>();
                    if (this.Context.Config.PreferTypeScriptType)
                    {
                        return(SyntaxFactory.GenericName("Hashtable").AddTypeArgumentListArguments(
                                   SyntaxFactory.IdentifierName("String"),
                                   csType));
                    }
                    else
                    {
                        return(SyntaxFactory.GenericName("Dictionary").AddTypeArgumentListArguments(
                                   SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword)),
                                   csType));
                    }

                case NodeKind.IndexSignature:
                    return(member.ToCsNode <TypeSyntax>());

                default:
                    //TODO: NOT SUPPORT
                    return(SyntaxFactory.ParseExpression(this.CommentText(node.Text)));
                }
            }
            else
            {
                List <TupleElementSyntax> csTupleElements = new List <TupleElementSyntax>();
                foreach (PropertySignature member in members)
                {
                    csTupleElements.Add(SyntaxFactory.TupleElement(member.Type.ToCsNode <TypeSyntax>(), SyntaxFactory.Identifier(member.Name.Text)));
                }

                return(SyntaxFactory.TupleType().WithElements(SyntaxFactory.SeparatedList(csTupleElements)));

                //return SyntaxFactory.IdentifierName("dynamic");
            }
        }
예제 #3
0
 private IType resolveType(Annotation annotation, Context context, TypeLiteral value)
 {
     return(resolveType(annotation, context, value.getType()));
 }
예제 #4
0
        private Property LoadProperty(Annotation annotation, Context context, DocEntry entry, Property prop, TypeLiteral value)
        {
            IType type = resolveType(annotation, context, value);

            if (type == null)
            {
                return(null);
            }
            prop.SetValidator(new TypeValidator(type));
            return(prop);
        }