本文整理汇总了C#中MetadataType.IsInterface方法的典型用法代码示例。如果您正苦于以下问题:C# MetadataType.IsInterface方法的具体用法?C# MetadataType.IsInterface怎么用?C# MetadataType.IsInterface使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MetadataType
的用法示例。
在下文中一共展示了MetadataType.IsInterface方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddProperties
public void AddProperties(StringBuilderWrapper sb, MetadataType type, bool includeResponseStatus)
{
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
var wasAdded = false;
var dataMemberIndex = 1;
if (type.Properties != null)
{
foreach (var prop in type.Properties)
{
if (wasAdded) sb.AppendLine();
var propType = Type(prop.Type, prop.GenericArgs);
wasAdded = AppendComments(sb, prop.Description);
wasAdded = AppendDataMember(sb, prop.DataMember, dataMemberIndex++) || wasAdded;
wasAdded = AppendAttributes(sb, prop.Attributes) || wasAdded;
if (!type.IsInterface())
{
sb.AppendLine("member val {1}:{0} = {2} with get,set".Fmt(
propType, prop.Name.SafeToken(), GetDefaultLiteral(prop, type)));
}
else
{
sb.AppendLine("abstract {1}:{0} with get,set".Fmt(
propType, prop.Name.SafeToken()));
}
}
}
if (type.IsInterface())
return;
if (includeResponseStatus)
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
AppendDataMember(sb, null, dataMemberIndex++);
sb.AppendLine("member val ResponseStatus:ResponseStatus = null with get,set");
}
if (makeExtensible
&& (type.Properties == null
|| type.Properties.All(x => x.Name != "ExtensionData")))
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
sb.AppendLine("member val ExtensionData:ExtensionDataObject = null with get,set");
}
}
示例2: AddProperties
public void AddProperties(StringBuilderWrapper sb, MetadataType type, bool includeResponseStatus)
{
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
var @virtual = Config.MakeVirtual && !type.IsInterface() ? "Overridable " : "";
var wasAdded = false;
var dataMemberIndex = 1;
if (type.Properties != null)
{
foreach (var prop in type.Properties)
{
if (wasAdded) sb.AppendLine();
var propType = Type(prop.Type, prop.GenericArgs, includeNested:true);
wasAdded = AppendComments(sb, prop.Description);
wasAdded = AppendDataMember(sb, prop.DataMember, dataMemberIndex++) || wasAdded;
wasAdded = AppendAttributes(sb, prop.Attributes) || wasAdded;
var visibility = type.IsInterface() ? "" : "Public ";
sb.AppendLine("{0}{1}Property {2} As {3}".Fmt(
visibility,
@virtual,
EscapeKeyword(prop.Name).SafeToken(),
propType));
}
}
if (type.IsInterface())
return;
if (includeResponseStatus)
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
wasAdded = AppendDataMember(sb, null, dataMemberIndex++);
sb.AppendLine("Public {0}Property ResponseStatus As ResponseStatus".Fmt(@virtual));
}
if (makeExtensible
&& (type.Properties == null
|| type.Properties.All(x => x.Name != "ExtensionData")))
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
sb.AppendLine("Public {0}Property ExtensionData As ExtensionDataObject Implements IExtensibleDataObject.ExtensionData".Fmt(@virtual));
}
}
示例3: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
var typeName = Type(type.Name, type.GenericArgs);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public static enum {0}".Fmt(typeName));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
var hasIntValue = false;
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
var delim = i == type.EnumNames.Count - 1 ? ";" : ",";
var serializeAs = JsConfig.TreatEnumAsInteger || (type.Attributes.Safe().Any(x => x.Name == "Flags"))
? "@SerializedName(\"{0}\") ".Fmt(value)
: "";
sb.AppendLine(value == null
? "{0}{1}".Fmt(name.ToPascalCase(), delim)
: serializeAs + "{0}({1}){2}".Fmt(name.ToPascalCase(), value, delim));
hasIntValue = hasIntValue || value != null;
}
if (hasIntValue)
{
sb.AppendLine();
sb.AppendLine("private final int value;");
sb.AppendLine("{0}(final int intValue) {{ value = intValue; }}".Fmt(typeName));
sb.AppendLine("public int getValue() { return value; }");
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var defType = type.IsInterface()
? "interface"
: "class";
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
extends.Add(Type(type.Inherits).InheritedType());
string responseTypeExpression = null;
var interfaces = new List<string>();
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
{
interfaces.Add(implStr);
if (implStr.StartsWith("IReturn<"))
{
var types = implStr.RightPart('<');
var returnType = types.Substring(0, types.Length - 1);
//Can't get .class from Generic Type definition
responseTypeExpression = returnType.Contains("<")
? "new TypeToken<{0}>(){{}}.getType()".Fmt(returnType)
: "{0}.class".Fmt(returnType);
}
}
if (!type.Implements.IsEmpty())
{
foreach (var interfaceRef in type.Implements)
{
interfaces.Add(Type(interfaceRef));
}
}
}
var extend = extends.Count > 0
? " extends " + extends[0]
: "";
if (interfaces.Count > 0)
//.........这里部分代码省略.........
示例4: AddProperties
public void AddProperties(StringBuilderWrapper sb, MetadataType type,
bool initCollections, bool includeResponseStatus)
{
var wasAdded = false;
var dataMemberIndex = 1;
foreach (var prop in type.Properties.Safe())
{
if (wasAdded) sb.AppendLine();
var propTypeName = Type(prop.Type, prop.GenericArgs);
var propType = FindType(prop.Type, prop.TypeNamespace, prop.GenericArgs);
var optional = "";
var defaultValue = "";
if (propTypeName.EndsWith("?"))
{
propTypeName = propTypeName.Substring(0, propTypeName.Length - 1);
optional = "?";
}
if (Config.MakePropertiesOptional)
{
optional = "?";
}
if (prop.Attributes.Safe().FirstOrDefault(x => x.Name == "Required") != null)
{
optional = "?"; //always use optional
}
if (prop.IsArray())
{
optional = "";
defaultValue = " = []";
}
else if (initCollections && !prop.GenericArgs.IsEmpty())
{
if (ArrayTypes.Contains(prop.Type))
{
optional = "";
defaultValue = " = []";
}
if (DictionaryTypes.Contains(prop.Type))
{
optional = "";
defaultValue = " = [:]";
}
}
if (propType.IsInterface() || IgnorePropertyNames.Contains(prop.Name))
{
sb.AppendLine("//{0}:{1} ignored. Swift doesn't support interface properties"
.Fmt(prop.Name.SafeToken().PropertyStyle(), propTypeName));
continue;
}
else if (IgnorePropertyTypeNames.Contains(propTypeName))
{
sb.AppendLine("//{0}:{1} ignored. Type could not be extended in Swift"
.Fmt(prop.Name.SafeToken().PropertyStyle(), propTypeName));
continue;
}
wasAdded = AppendDataMember(sb, prop.DataMember, dataMemberIndex++);
wasAdded = AppendAttributes(sb, prop.Attributes) || wasAdded;
if (type.IsInterface())
{
sb.AppendLine("var {0}:{1}{2} {{ get set }}".Fmt(
prop.Name.SafeToken().PropertyStyle(), propTypeName, optional));
}
else
{
sb.AppendLine("public var {0}:{1}{2}{3}".Fmt(
prop.Name.SafeToken().PropertyStyle(), propTypeName, optional, defaultValue));
}
}
if (includeResponseStatus)
{
if (wasAdded) sb.AppendLine();
AppendDataMember(sb, null, dataMemberIndex++);
sb.AppendLine("public var {0}:ResponseStatus?".Fmt(typeof(ResponseStatus).Name.PropertyStyle()));
}
}
示例5: AppendType
private string AppendType(ref StringBuilderWrapper sb, ref StringBuilderWrapper sbExt, MetadataType type, string lastNS,
CreateTypeOptions options)
{
//sb = sb.Indent();
var hasGenericBaseType = type.Inherits != null && !type.Inherits.GenericArgs.IsEmpty();
if (Config.ExcludeGenericBaseTypes && hasGenericBaseType)
{
sb.AppendLine("//Excluded {0} : {1}<{2}>".Fmt(type.Name, type.Inherits.Name.SplitOnFirst('`')[0], string.Join(",", type.Inherits.GenericArgs)));
return lastNS;
}
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0} : Int".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "case {0}".Fmt(name)
: "case {0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
AddEnumExtension(ref sbExt, type);
}
else
{
var defType = "class";
var typeName = Type(type.Name, type.GenericArgs).AddGenericConstraints();
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
{
var baseType = Type(type.Inherits).InheritedType();
//Swift requires re-declaring base type generics definition on super type
var genericDefPos = baseType.IndexOf("<");
if (genericDefPos >= 0)
{
//Need to declare BaseType is JsonSerializable
var subBaseType = baseType.Substring(genericDefPos)
.AddGenericConstraints();
typeName += subBaseType;
}
extends.Add(baseType);
}
else if (Config.BaseClass != null && !type.IsInterface())
{
extends.Add(Config.BaseClass);
}
var typeAliases = new List<string>();
if (options.ImplementsFn != null)
{
//Swift doesn't support Generic Interfaces like IReturn<T>
//Converting them into protocols with typealiases instead
ExtractTypeAliases(options, typeAliases, extends, ref sbExt);
if (!type.Implements.IsEmpty())
type.Implements.Each(x => extends.Add(Type(x)));
}
if (type.IsInterface())
{
defType = "protocol";
//Extract Protocol Arguments into different typealiases
if (!type.GenericArgs.IsEmpty())
{
typeName = Type(type.Name, null);
foreach (var arg in type.GenericArgs)
{
typeAliases.Add("public typealias {0} = {0}".Fmt(arg));
}
}
}
//.........这里部分代码省略.........
示例6: AddProperties
public void AddProperties(StringBuilderWrapper sb, MetadataType type, bool includeResponseStatus)
{
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
var @virtual = Config.MakeVirtual && !type.IsInterface() ? "virtual " : "";
var wasAdded = false;
var dataMemberIndex = 1;
if (type.Properties != null)
{
foreach (var prop in type.Properties)
{
if (wasAdded) sb.AppendLine();
var propType = Type(prop.Type, prop.GenericArgs, includeNested:true);
wasAdded = AppendDataMember(sb, prop.DataMember, dataMemberIndex++);
wasAdded = AppendAttributes(sb, prop.Attributes) || wasAdded;
var visibility = type.IsInterface() ? "" : "public ";
sb.AppendLine("{0}{1}{2} {3} {{ get; set; }}"
.Fmt(visibility, @virtual, propType, prop.Name.SafeToken()));
}
}
if (type.IsInterface())
return;
if (includeResponseStatus)
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
AppendDataMember(sb, null, dataMemberIndex++);
sb.AppendLine("public {0}ResponseStatus ResponseStatus {{ get; set; }}".Fmt(@virtual));
}
if (makeExtensible
&& (type.Properties == null
|| type.Properties.All(x => x.Name != "ExtensionData")))
{
if (wasAdded) sb.AppendLine();
wasAdded = true;
sb.AppendLine("public {0}ExtensionDataObject ExtensionData {{ get; set; }}".Fmt(@virtual));
}
}
示例7: AddConstuctor
private void AddConstuctor(StringBuilderWrapper sb, MetadataType type, CreateTypeOptions options)
{
if (type.IsInterface())
return;
var initCollections = feature.ShouldInitializeCollections(type, Config.InitializeCollections);
if (Config.AddImplicitVersion == null && !initCollections)
return;
var collectionProps = new List<MetadataPropertyType>();
if (type.Properties != null && initCollections)
collectionProps = type.Properties.Where(x => x.IsCollection()).ToList();
var addVersionInfo = Config.AddImplicitVersion != null && options.IsRequest;
if (!addVersionInfo && collectionProps.Count <= 0) return;
if (addVersionInfo)
{
var @virtual = Config.MakeVirtual ? "virtual " : "";
sb.AppendLine("public {0}int Version {{ get; set; }}".Fmt(@virtual));
sb.AppendLine();
}
sb.AppendLine("public {0}()".Fmt(NameOnly(type.Name)));
sb.AppendLine("{");
sb = sb.Indent();
if (addVersionInfo)
sb.AppendLine("Version = {0};".Fmt(Config.AddImplicitVersion));
foreach (var prop in collectionProps)
{
sb.AppendLine("{0} = new {1}{{}};".Fmt(
prop.Name.SafeToken(),
Type(prop.Type, prop.GenericArgs, includeNested: true)));
}
sb = sb.UnIndent();
sb.AppendLine("}");
sb.AppendLine();
}
示例8: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS, List<MetadataType> allTypes, CreateTypeOptions options)
{
if (type.IsNested.GetValueOrDefault() && !options.IsNestedType)
return lastNS;
var ns = Config.GlobalNamespace ?? type.Namespace;
if (ns != lastNS)
{
if (lastNS != null)
sb.AppendLine("}");
lastNS = ns;
sb.AppendLine();
sb.AppendLine("namespace {0}".Fmt(ns.SafeToken()));
sb.AppendLine("{");
}
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (Config.AddGeneratedCodeAttributes)
sb.AppendLine("[GeneratedCode(\"AddServiceStackReference\", \"{0}\")]".Fmt(Env.VersionString));
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0},".Fmt(name)
: "{0} = {1},".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var partial = Config.MakePartial ? "partial " : "";
var defType = type.IsInterface() ? "interface" : "class";
sb.AppendLine("public {0}{1} {2}".Fmt(partial, defType, Type(type.Name, type.GenericArgs)));
//: BaseClass, Interfaces
var inheritsList = new List<string>();
if (type.Inherits != null)
{
inheritsList.Add(Type(type.Inherits, includeNested:true));
}
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
inheritsList.Add(implStr);
if (!type.Implements.IsEmpty())
type.Implements.Each(x => inheritsList.Add(Type(x)));
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
inheritsList.Add("IExtensibleDataObject");
if (inheritsList.Count > 0)
sb.AppendLine(" : {0}".Fmt(string.Join(", ", inheritsList.ToArray())));
sb.AppendLine("{");
sb = sb.Indent();
AddConstuctor(sb, type, options);
AddProperties(sb, type,
includeResponseStatus: Config.AddResponseStatus && options.IsResponse
&& type.Properties.Safe().All(x => x.Name != typeof(ResponseStatus).Name));
foreach (var innerTypeRef in type.InnerTypes.Safe())
{
var innerType = allTypes.FirstOrDefault(x => x.Name == innerTypeRef.Name);
if (innerType == null)
continue;
sb = sb.UnIndent();
AppendType(ref sb, innerType, lastNS, allTypes,
new CreateTypeOptions { IsNestedType = true });
sb = sb.Indent();
}
//.........这里部分代码省略.........
示例9: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
if (type.IgnoreSystemType())
return lastNS;
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("type {0} =".Fmt(Type(type.Name, type.GenericArgs)));
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : i.ToString();
sb.AppendLine("| {0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
}
else
{
//sb.AppendLine("[<CLIMutable>]"); // only for Record Types
var classCtor = type.IsInterface() ? "" : "()";
sb.AppendLine("[<AllowNullLiteral>]");
sb.AppendLine("type {0}{1} = ".Fmt(Type(type.Name, type.GenericArgs), classCtor));
sb = sb.Indent();
var startLen = sb.Length;
//: BaseClass, Interfaces
if (type.Inherits != null)
sb.AppendLine("inherit {0}()".Fmt(Type(type.Inherits)));
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
sb.AppendLine("interface {0}".Fmt(implStr));
}
if (!type.IsInterface())
{
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
{
sb.AppendLine("interface IExtensibleDataObject with");
sb.AppendLine(" member val ExtensionData:ExtensionDataObject = null with get, set");
sb.AppendLine("end");
}
var addVersionInfo = Config.AddImplicitVersion != null && options.IsOperation;
if (addVersionInfo)
{
sb.AppendLine("member val Version:int = {0} with get, set".Fmt(Config.AddImplicitVersion));
}
}
AddProperties(sb, type);
if (sb.Length == startLen)
sb.AppendLine(type.IsInterface() ? "interface end" : "class end");
sb = sb.UnIndent();
}
sb = sb.UnIndent();
return lastNS;
}
示例10: AddConstuctor
private void AddConstuctor(StringBuilderWrapper sb, MetadataType type, CreateTypeOptions options)
{
if (type.IsInterface())
return;
if (Config.AddImplicitVersion == null && !Config.InitializeCollections)
return;
var collectionProps = new List<MetadataPropertyType>();
if (type.Properties != null && Config.InitializeCollections)
collectionProps = type.Properties.Where(x => x.IsCollection()).ToList();
var addVersionInfo = Config.AddImplicitVersion != null && options.IsRequest;
if (!addVersionInfo && collectionProps.Count <= 0) return;
if (addVersionInfo)
{
var @virtual = Config.MakeVirtual ? "Overridable " : "";
sb.AppendLine("Public {0}Property Version As Integer".Fmt(@virtual));
sb.AppendLine();
}
sb.AppendLine("Public Sub New()".Fmt(NameOnly(type.Name)));
//sb.AppendLine("{");
sb = sb.Indent();
if (addVersionInfo)
sb.AppendLine("Version = {0}".Fmt(Config.AddImplicitVersion));
foreach (var prop in collectionProps)
{
var suffix = prop.IsArray() ? "{}" : "";
sb.AppendLine("{0} = New {1}{2}".Fmt(
prop.Name.SafeToken(),
Type(prop.Type, prop.GenericArgs, includeNested:true),
suffix));
}
sb = sb.UnIndent();
sb.AppendLine("End Sub");
sb.AppendLine();
}
示例11: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS,
CreateTypeOptions options)
{
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
var typeName = Type(type.Name, type.GenericArgs);
if (type.IsEnum.GetValueOrDefault())
{
var hasIntValue = type.EnumNames.Count == (type.EnumValues != null ? type.EnumValues.Count : 0);
var enumConstructor = hasIntValue ? "(val value:Int)" : "";
sb.AppendLine("enum class {0}{1}".Fmt(typeName, enumConstructor));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = hasIntValue ? type.EnumValues[i] : null;
var serializeAs = JsConfig.TreatEnumAsInteger || (type.Attributes.Safe().Any(x => x.Name == "Flags"))
? "@SerializedName(\"{0}\") ".Fmt(value)
: "";
sb.AppendLine(value == null
? "{0},".Fmt(name.ToPascalCase())
: serializeAs + "{0}({1}),".Fmt(name.ToPascalCase(), value));
}
//if (hasIntValue)
//{
// sb.AppendLine();
// sb.AppendLine("private final int value;");
// sb.AppendLine("{0}(final int intValue) {{ value = intValue; }}".Fmt(typeName));
// sb.AppendLine("public int getValue() { return value; }");
//}
}
sb = sb.UnIndent();
sb.AppendLine("}");
}
else
{
var defType = type.IsInterface()
? "interface"
: "class";
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
extends.Add(Type(type.Inherits).InheritedType());
string responseTypeExpression = null;
var interfaces = new List<string>();
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
{
interfaces.Add(implStr);
if (implStr.StartsWith("IReturn<"))
{
var parts = implStr.SplitOnFirst('<');
var returnType = parts[1].Substring(0, parts[1].Length - 1);
//Can't get .class from Generic Type definition
responseTypeExpression = returnType.Contains("<")
? "object : TypeToken<{0}>(){{}}.type".Fmt(returnType)
: "{0}::class.java".Fmt(returnType);
}
}
if (!type.Implements.IsEmpty())
{
foreach (var interfaceRef in type.Implements)
{
interfaces.Add(Type(interfaceRef));
}
}
}
var extend = extends.Count > 0
? " : " + extends[0] + "()"
: "";
if (interfaces.Count > 0)
extend += (extend.IsNullOrEmpty() ? " : " : ", ") + string.Join(", ", interfaces.ToArray());
//.........这里部分代码省略.........
示例12: AppendType
private string AppendType(ref StringBuilderWrapper sb, MetadataType type, string lastNS, List<MetadataType> allTypes, CreateTypeOptions options)
{
if (type.IsNested.GetValueOrDefault() && !options.IsNestedType)
return lastNS;
var ns = Config.GlobalNamespace ?? type.Namespace;
if (ns != lastNS)
{
if (lastNS != null)
sb.AppendLine("End Namespace");
lastNS = ns;
sb.AppendLine();
sb.AppendLine("Namespace {0}".Fmt(ns.SafeToken()));
//sb.AppendLine("{");
}
sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("Public Enum {0}".Fmt(Type(type.Name, type.GenericArgs)));
//sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "{0}".Fmt(name)
: "{0} = {1}".Fmt(name, value));
}
}
sb = sb.UnIndent();
sb.AppendLine("End Enum");
}
else
{
var partial = Config.MakePartial && !type.IsInterface() ? "Partial " : "";
var defType = type.IsInterface() ? "Interface" : "Class";
sb.AppendLine("Public {0}{1} {2}".Fmt(partial, defType, Type(type.Name, type.GenericArgs)));
//: BaseClass, Interfaces
if (type.Inherits != null)
{
sb.AppendLine(" Inherits {0}".Fmt(Type(type.Inherits, includeNested: true)));
}
var implements = new List<string>();
if (options.ImplementsFn != null)
{
var implStr = options.ImplementsFn();
if (!string.IsNullOrEmpty(implStr))
implements.Add(implStr);
}
var makeExtensible = Config.MakeDataContractsExtensible && type.Inherits == null;
if (makeExtensible)
implements.Add("IExtensibleDataObject");
if (implements.Count > 0)
{
foreach (var x in implements)
{
sb.AppendLine(" Implements {0}".Fmt(x));
}
}
//sb.AppendLine("{");
sb = sb.Indent();
AddConstuctor(sb, type, options);
AddProperties(sb, type);
foreach (var innerTypeRef in type.InnerTypes.Safe())
{
var innerType = allTypes.FirstOrDefault(x => x.Name == innerTypeRef.Name);
if (innerType == null)
continue;
sb = sb.UnIndent();
AppendType(ref sb, innerType, lastNS, allTypes,
new CreateTypeOptions { IsNestedType = true });
sb = sb.Indent();
}
//.........这里部分代码省略.........
示例13: AddProperties
public void AddProperties(StringBuilderWrapper sb, MetadataType type, bool initCollections)
{
var wasAdded = false;
var dataMemberIndex = 1;
if (type.Properties != null)
{
foreach (var prop in type.Properties)
{
if (wasAdded) sb.AppendLine();
var propType = Type(prop.Type, prop.GenericArgs);
var optional = "";
var defaultValue = "";
if (propType.EndsWith("?"))
{
propType = propType.Substring(0, propType.Length - 1);
optional = "?";
}
if (Config.MakePropertiesOptional)
{
optional = "?";
}
if (prop.Attributes.Safe().FirstOrDefault(x => x.Name == "Required") != null)
{
optional = "?"; //always use optional
}
if (prop.IsArray())
{
optional = "";
defaultValue = " = []";
}
else if (initCollections && !prop.GenericArgs.IsEmpty())
{
if (ArrayTypes.Contains(prop.Type))
{
optional = "";
defaultValue = " = []";
}
if (DictionaryTypes.Contains(prop.Type))
{
optional = "";
defaultValue = " = [:]";
}
}
wasAdded = AppendDataMember(sb, prop.DataMember, dataMemberIndex++);
wasAdded = AppendAttributes(sb, prop.Attributes) || wasAdded;
if (type.IsInterface())
{
sb.AppendLine("var {0}:{1}{2} {{ get set }}".Fmt(
prop.Name.SafeToken().PropertyStyle(), propType, optional));
}
else
{
sb.AppendLine("public var {0}:{1}{2}{3}".Fmt(
prop.Name.SafeToken().PropertyStyle(), propType, optional, defaultValue));
}
}
}
if (Config.AddResponseStatus
&& (type.Properties == null
|| type.Properties.All(x => x.Name != "ResponseStatus")))
{
if (wasAdded) sb.AppendLine();
AppendDataMember(sb, null, dataMemberIndex++);
sb.AppendLine("public var {0}:ResponseStatus".Fmt("ResponseStatus".PropertyStyle()));
}
}
示例14: AppendType
private string AppendType(ref StringBuilderWrapper sb, ref StringBuilderWrapper sbExt, MetadataType type, string lastNS,
CreateTypeOptions options)
{
if (type.IgnoreSystemType())
return lastNS;
//sb = sb.Indent();
sb.AppendLine();
AppendComments(sb, type.Description);
if (type.Routes != null)
{
AppendAttributes(sb, type.Routes.ConvertAll(x => x.ToMetadataAttribute()));
}
AppendAttributes(sb, type.Attributes);
AppendDataContract(sb, type.DataContract);
if (type.IsEnum.GetValueOrDefault())
{
sb.AppendLine("public enum {0} : Int".Fmt(Type(type.Name, type.GenericArgs)));
sb.AppendLine("{");
sb = sb.Indent();
if (type.EnumNames != null)
{
for (var i = 0; i < type.EnumNames.Count; i++)
{
var name = type.EnumNames[i];
var value = type.EnumValues != null ? type.EnumValues[i] : null;
sb.AppendLine(value == null
? "case {0}".Fmt(name.PropertyStyle())
: "case {0} = {1}".Fmt(name.PropertyStyle(), value));
}
}
sb = sb.UnIndent();
sb.AppendLine("}");
AddEnumExtension(ref sbExt, type);
}
else
{
var defType = "class";
var typeName = Type(type.Name, type.GenericArgs);
var extends = new List<string>();
//: BaseClass, Interfaces
if (type.Inherits != null)
{
var baseType = Type(type.Inherits).InheritedType();
//Swift requires re-declaring base type generics definition on super type
var genericDefPos = baseType.IndexOf("<");
if (genericDefPos >= 0)
{
typeName += baseType.Substring(genericDefPos);
}
extends.Add(baseType);
}
var typeAliases = new List<string>();
if (options.ImplementsFn != null)
{
//Swift doesn't support Generic Interfaces like IReturn<T>
//Converting them into protocols with typealiases instead
ExtractTypeAliases(options, typeAliases, extends);
}
if (type.IsInterface())
{
defType = "protocol";
//Extract Protocol Arguments into different typealiases
if (!type.GenericArgs.IsEmpty())
{
typeName = Type(type.Name, null);
foreach (var arg in type.GenericArgs)
{
typeAliases.Add("typealias {0} = {0}".Fmt(arg));
}
}
}
var extend = extends.Count > 0
? " : " + (string.Join(", ", extends.ToArray()))
: "";
sb.AppendLine("public {0} {1}{2}".Fmt(defType, typeName, extend));
sb.AppendLine("{");
sb = sb.Indent();
if (typeAliases.Count > 0)
{
foreach (var typeAlias in typeAliases)
{
sb.AppendLine(typeAlias);
}
//.........这里部分代码省略.........