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"); } }
private IType resolveType(Annotation annotation, Context context, TypeLiteral value) { return(resolveType(annotation, context, value.getType())); }
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); }