예제 #1
0
        public static BaijiType BuildFieldType(ParseTreeNode fieldTypeNode)
        {
            BaijiType type = null;

            var fieldTypeChildNode = fieldTypeNode.ChildNodes[0];

            if (fieldTypeChildNode.Term.Name == IdlGrammar.TNAME_TIDENTIFIER)
            {
                var identifier = fieldTypeChildNode.Token.Text;
                type = new IdentifierType(identifier);
            }
            else if (fieldTypeChildNode.Term.Name == IdlGrammar.NTNAME_TBASE_TYPE)
            {
                var baseTypeKeyword = fieldTypeChildNode.FindTokenAndGetText();
                var bType           = ConvertBaseTypeKeywordToBaseType(baseTypeKeyword);
                type = new BaseType(bType);
            }
            else if (fieldTypeChildNode.Term.Name == IdlGrammar.NTNAME_TCONTAINER_TYPE)
            {
                var containerTypeNode = fieldTypeChildNode.ChildNodes[0];
                if (containerTypeNode.Term.Name == IdlGrammar.NTNAME_TMAP_TYPE)
                {
                    var keyType   = BuildMapKeyType(containerTypeNode.ChildNodes[0]);
                    var valueType = BuildFieldType(containerTypeNode.ChildNodes[1]);
                    type = new MapType(keyType, valueType);
                }
                else if (containerTypeNode.Term.Name == IdlGrammar.NTNAME_TLIST_TYPE)
                {
                    var listValueType = BuildFieldType(containerTypeNode.ChildNodes[0]);
                    type = new ListType(listValueType);
                }
            }

            return(type);
        }
        public string ConvertToString(BaijiType type, bool nullable)
        {
            var    listType   = type as ListType;
            string actualType = typeToJavaConverter.ConvertToString(listType.Type, false);

            return("List<" + actualType + ">");
        }
예제 #3
0
            public string ConvertToString(BaijiType type)
            {
                var    listType   = type as ListType;
                string actualType = typeToCSharpConverter.ConvertToString(listType.Type);

                return("List<" + actualType + ">");
            }
예제 #4
0
        public string ConvertToString(BaijiType type, bool nullable)
        {
            var    listType   = type as ListType;
            string actualType = typeToOCConverter.ConvertToString(listType.Type, false);

            return("NSArray");
        }
예제 #5
0
 public BaijiField(string[] docStringLines, string name, BaijiType type, Required required,
                   IList <Annotation> annotations)
 {
     DocStringLines = docStringLines;
     Name           = Enforce.IsNotNull(name, "name");
     Type           = Enforce.IsNotNull(type, "type");
     Required       = required;
     Annotations    = annotations;
 }
예제 #6
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var csharpTypeName = ConvertToString(type);
                var baseType       = ((BaseType)type).BType;
                var gType          = GTYPE_BASETYPE_MAP[baseType];
                var genType        = new GenType(gType, csharpTypeName);

                return(genType);
            }
예제 #7
0
            public string ConvertToString(BaijiType type)
            {
                var mapType = type as MapType;

                string actualKeyType   = typeToCSharpConverter.ConvertToString(mapType.KeyType);
                string actualValueType = typeToCSharpConverter.ConvertToString(mapType.ValueType);

                return(string.Format("Dictionary<{0}, {1}>", actualKeyType, actualValueType));
            }
        public string ConvertToString(BaijiType type, bool nullable)
        {
            var mapType = type as MapType;

            string actualKeyType   = typeToJavaConverter.ConvertToString(mapType.KeyType, false);
            string actualValueType = typeToJavaConverter.ConvertToString(mapType.ValueType, false);

            return(string.Format("Map<{0}, {1}>", actualKeyType, actualValueType));
        }
예제 #9
0
        public GenType ConvertToGenType(BaijiType type, bool nullable)
        {
            var ocTypeName = ConvertToString(type, nullable);
            var baseType   = ((BaseType)type).BType;
            var gType      = GTYPE_BASETYPE_MAP[baseType];
            var genType    = new GenType(gType, ocTypeName);

            return(genType);
        }
예제 #10
0
        public static List <BaijiField> BuildFields(ParseTreeNode fieldNodes, string structName)
        {
            var fields = new List <BaijiField>();

            foreach (var fieldNode in fieldNodes.ChildNodes)
            {
                string[]           docStringLines = null;
                string             fieldName      = null;
                Required           fieldReq       = Required.NONE;
                BaijiType          fieldType      = null;
                IList <Annotation> annotations    = null;
                foreach (var fieldChildNode in fieldNode.ChildNodes)
                {
                    if (fieldChildNode.Term.Name == IdlGrammar.NTNAME_TDOCSTRINGOREMPTY &&
                        fieldChildNode.ChildNodes.Count > 0)
                    {
                        docStringLines = ParseDocStringLines(fieldChildNode.ChildNodes[0].FindTokenAndGetText());
                    }
                    else if (fieldChildNode.Term.Name == IdlGrammar.NTNAME_FIELD_REQ &&
                             fieldChildNode.ChildNodes.Count > 0)
                    {
                        var fieldReqText = fieldChildNode.ChildNodes[0].FindTokenAndGetText();
                        if (fieldReqText == "required")
                        {
                            fieldReq = Required.REQUIRED;
                        }
                        else if (fieldReqText == "optional")
                        {
                            fieldReq = Required.OPTIONAL;
                        }
                        else
                        {
                            fieldReq = Required.NONE;
                        }
                    }
                    else if (fieldChildNode.Term.Name == IdlGrammar.NTNAME_TFIELD_TYPE)
                    {
                        fieldType = BuildFieldType(fieldChildNode);
                    }
                    else if (fieldChildNode.Term.Name == IdlGrammar.TNAME_TIDENTIFIER)
                    {
                        fieldName = fieldChildNode.Token.Text;
                    }
                    else if (fieldChildNode.Term.Name == IdlGrammar.NTNAME_TANNOTATIONSOREMPTY &&
                             fieldChildNode.ChildNodes.Count > 0)
                    {
                        annotations = BuildAnnotations(fieldChildNode.ChildNodes);
                    }
                }

                var field = new BaijiField(docStringLines, fieldName, fieldType, fieldReq, annotations);
                fields.Add(field);
            }

            return(fields);
        }
예제 #11
0
        public string ConvertToString(BaijiType type, bool nullable)
        {
            var codeType  = FindCodeTypeFromIdentifierType((IdentifierType)type);
            var className = ShortenClassName(codeType.FullName);

            if (codeType.IsEnum && nullable)
            {
                className += "?";
            }
            return(className);
        }
예제 #12
0
        public GenType ConvertToGenType(BaijiType type, bool nullable)
        {
            var javaTypeName = ConvertToString(type, nullable);

            var listType = type as ListType;
            var genType  = new GenType(GenType.Type.List, javaTypeName);

            genType.ElementType     = typeToOCConverter.ConvertToGenType(listType.Type, false);
            genType.ElementTypeName = typeToOCConverter.ConvertToString(listType.Type, false);
            return(genType);
        }
예제 #13
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var csharpTypeName = ConvertToString(type);

                var listType = type as ListType;
                var genType  = new GenType(GType.List, csharpTypeName);

                genType.ElementType           = typeToCSharpConverter.ConvertToGenType(listType.Type);
                genType.ElementCSharpTypeName = typeToCSharpConverter.ConvertToString(listType.Type);
                return(genType);
            }
예제 #14
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var javaTypeName = ConvertToString(type);

                var listType = type as ListType;
                var genType  = new GenType(GType.List, javaTypeName);

                genType.ElementType         = typeToJavaConverter.ConvertToGenType(listType.Type);
                genType.ElementJavaTypeName = typeToJavaConverter.ConvertToString(listType.Type);
                return(genType);
            }
예제 #15
0
 public GenType ConvertToGenType(BaijiType tripType)
 {
     foreach (var converter in converters)
     {
         if (converter.Accept(tripType))
         {
             return(converter.ConvertToGenType(tripType));
         }
     }
     throw new ArgumentException(string.Format("Trip type {0} is unknown!", tripType));
 }
예제 #16
0
            public string ConvertToString(BaijiType type)
            {
                var csharpType = this.FindCSharpTypeFromIdentifierType((IdentifierType)type);
                var clzName    = ShortenClassName(csharpType.TypeFullName);

                if (csharpType.IsTripEnum)
                {
                    clzName += "?";
                }
                return(clzName);
            }
예제 #17
0
 public GenType ConvertToGenType(BaijiType type, bool nullable = true)
 {
     foreach (var converter in _converters)
     {
         if (converter.Accept(type))
         {
             return(converter.ConvertToGenType(type, nullable));
         }
     }
     throw new ArgumentException(string.Format("Baiji type {0} is unknown!", type));
 }
예제 #18
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var csharpTypeName = ConvertToString(type);

                var mapType = type as MapType;
                var genType = new GenType(GType.Map, csharpTypeName);

                genType.KeyType             = typeToCSharpConverter.ConvertToGenType(mapType.KeyType);
                genType.KeyCSharpTypeName   = typeToCSharpConverter.ConvertToString(mapType.KeyType);
                genType.ValueType           = typeToCSharpConverter.ConvertToGenType(mapType.ValueType);
                genType.ValueCSharpTypeName = typeToCSharpConverter.ConvertToString(mapType.ValueType);
                return(genType);
            }
예제 #19
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var javaTypeName = ConvertToString(type);

                var mapType = type as MapType;
                var genType = new GenType(GType.Map, javaTypeName);

                genType.KeyType           = typeToJavaConverter.ConvertToGenType(mapType.KeyType);
                genType.KeyJavaTypeName   = typeToJavaConverter.ConvertToString(mapType.KeyType);
                genType.ValueType         = typeToJavaConverter.ConvertToGenType(mapType.ValueType);
                genType.ValueJavaTypeName = typeToJavaConverter.ConvertToString(mapType.ValueType);
                return(genType);
            }
예제 #20
0
        public GenType ConvertToGenType(BaijiType type, bool nullable)
        {
            var javaTypeName = ConvertToString(type, nullable);

            var mapType = type as MapType;
            var genType = new GenType(GenType.Type.Map, javaTypeName);

            genType.KeyType       = typeToOCConverter.ConvertToGenType(mapType.KeyType, false);
            genType.KeyTypeName   = typeToOCConverter.ConvertToString(mapType.KeyType, false);
            genType.ValueType     = typeToOCConverter.ConvertToGenType(mapType.ValueType, false);
            genType.ValueTypeName = typeToOCConverter.ConvertToString(mapType.ValueType, false);
            return(genType);
        }
예제 #21
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var javaTypeName = ConvertToString(type);
                var javaType     = this.FindJavaTypeFromIdentifierType((IdentifierType)type);

                if (javaType.IsLeanEnum)
                {
                    return(new GenType(GType.Enum, javaTypeName));
                }
                else
                {
                    return(new GenType(GType.Struct, javaTypeName));
                }
            }
예제 #22
0
            public GenType ConvertToGenType(BaijiType type)
            {
                var csharpTypeName = ConvertToString(type);
                var csharpType     = this.FindCSharpTypeFromIdentifierType((IdentifierType)type);

                if (csharpType.IsTripEnum)
                {
                    return(new GenType(GType.Enum, csharpTypeName));
                }
                else
                {
                    return(new GenType(GType.Struct, csharpTypeName));
                }
            }
예제 #23
0
        public GenType ConvertToGenType(BaijiType type, bool nullable)
        {
            var javaTypeName = ConvertToString(type, nullable);
            var javaType     = FindCodeTypeFromIdentifierType((IdentifierType)type);

            if (javaType.IsEnum)
            {
                return(new GenType(GenType.Type.Enum, javaTypeName));
            }
            else
            {
                return(new GenType(GenType.Type.Struct, javaTypeName));
            }
        }
예제 #24
0
 private void VisitType(BaijiType type)
 {
     if (type is IdentifierType)
     {
         Visit((IdentifierType)type);
     }
     else if (type is BaseType)
     {
         Visit((BaseType)type);
     }
     else if (type is ListType)
     {
         Visit((ListType)type);
     }
     else if (type is MapType)
     {
         Visit((MapType)type);
     }
 }
예제 #25
0
 private void FindDefNameByType(BaijiType type, out string structName)
 {
     structName = null;
     if (type.GetType() == typeof(BaseType))
     {
         return;
     }
     if (type.GetType() == typeof(ListType))
     {
         FindDefNameByType(((ListType)type).Type, out structName);
         return;
     }
     if (type.GetType() == typeof(MapType))
     {
         FindDefNameByType(((MapType)type).ValueType, out structName);
         return;
     }
     if (type.GetType() == typeof(IdentifierType))
     {
         structName = ((IdentifierType)type).Name;
         return;
     }
 }
예제 #26
0
        private Schema.Schema BuildSchema(string @namespace, BaijiType type, IDictionary <SchemaName, Schema.Schema> parsedSchema)
        {
            if (type is BaseType)
            {
                var baseType = (BaseType)type;
                return(new PrimitiveSchema(_bTypeMapping[baseType.BType], null));
            }

            if (type is ListType)
            {
                var listType   = (ListType)type;
                var itemSchema = BuildSchema(@namespace, listType.Type, parsedSchema);
                return(new ArraySchema(itemSchema, null));
            }

            if (type is MapType)
            {
                var mapType     = (MapType)type;
                var valueSchema = BuildSchema(@namespace, mapType.ValueType, parsedSchema);
                return(new MapSchema(valueSchema, null));
            }

            if (type is IdentifierType)
            {
                var    idType = (IdentifierType)type;
                string name   = idType.Name;
                if (@namespace != _typeConverter.IdlNamespace && !name.Contains("."))
                {
                    name = @namespace + "." + name;
                }
                var codeType = _typeConverter.FindCodeTypeFromName(name);
                return(BuildSchema(codeType, parsedSchema));
            }

            throw new NotSupportedException("Unknown BaijiType: " + type);
        }
예제 #27
0
 public MapType(BaijiType keyType, BaijiType valueType)
 {
     KeyType   = Enforce.IsNotNull(keyType, "keyType");
     ValueType = Enforce.IsNotNull(valueType, "valueType");
 }
예제 #28
0
            public string ConvertToString(BaijiType type)
            {
                var baseType = ((BaseType)type).BType;

                return(CSHARP_PRIMITIVES_MAP[baseType]);
            }
예제 #29
0
 public bool Accept(BaijiType type)
 {
     return(type.GetType() == typeof(BaseType));
 }
예제 #30
0
 public bool Accept(BaijiType type)
 {
     return(type.GetType() == typeof(IdentifierType));
 }