diff options
author | matthewsotoudeh <matthewsot@outlook.com> | 2015-01-24 14:17:35 -0800 |
---|---|---|
committer | matthewsotoudeh <matthewsot@outlook.com> | 2015-01-24 14:17:35 -0800 |
commit | 8ada920038b94bc67179087aab71e8b543b40bcb (patch) | |
tree | acfddceaef067a9fd7ae9d233df3b36dbb859742 | |
parent | 404e9c0949affe4cb601823aff969f0886f16dc3 (diff) |
started on somewhat better handling of wrapped/unwrapped values
should use [ValueOptional] for optional return/types, [ValueUnwrapped]
for non-optiona return/types, [ParameterOptional(name)] and
[ParameterUnwrapped(name)] for parameters
-rw-r--r-- | StubGen/StubGen/Scrapers/Extensions.cs | 6 | ||||
-rw-r--r-- | StubGen/StubGen/Scrapers/Finals/MethodFinal.cs | 23 | ||||
-rw-r--r-- | StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs | 9 | ||||
-rw-r--r-- | StubGen/StubGen/Scrapers/ScrapedMember.cs | 8 | ||||
-rw-r--r-- | StubGen/StubGen/Scrapers/ScrapedProperty.cs | 5 | ||||
-rw-r--r-- | StubGen/StubGen/Scrapers/Types.cs | 5 |
6 files changed, 45 insertions, 11 deletions
diff --git a/StubGen/StubGen/Scrapers/Extensions.cs b/StubGen/StubGen/Scrapers/Extensions.cs index ee1f4fc6..6a245e23 100644 --- a/StubGen/StubGen/Scrapers/Extensions.cs +++ b/StubGen/StubGen/Scrapers/Extensions.cs @@ -12,9 +12,7 @@ namespace StubGen { public static string ParseType(string type) { - type = type.Trim().Trim('_', '!').Trim(); - var optional = type.EndsWith("?"); - type = type.Trim('?').Trim(); + type = type.Trim().Trim('?', '_', '!').Trim(); var finalType = type; switch (type.ToLower()) @@ -48,7 +46,7 @@ namespace StubGen break; } - return optional ? "Optional<" + finalType + ">" : finalType; + return finalType; } } diff --git a/StubGen/StubGen/Scrapers/Finals/MethodFinal.cs b/StubGen/StubGen/Scrapers/Finals/MethodFinal.cs index 2d59fe89..c3f76ee2 100644 --- a/StubGen/StubGen/Scrapers/Finals/MethodFinal.cs +++ b/StubGen/StubGen/Scrapers/Finals/MethodFinal.cs @@ -42,6 +42,29 @@ namespace StubGen.Scrapers.Finals toOutput += "[Optional]" + NewLine; } + //Deal with optional/unwrapped return values using attributes + if (method.ReturnType.Optional) + { + toOutput += "[ValueOptional]" + NewLine; + } + if (method.ReturnType.Unwrapped) + { + toOutput += "[ValueUnwrapped]" + NewLine; + } + + //Deal with optional/unwrapped parameters using attributes + foreach (var param in method.Parameters) + { + if (param.Type.Optional) + { + toOutput += "[ParameterOptional(\"" + param.Name + "\")]" + NewLine; + } + if (param.Type.Unwrapped) + { + toOutput += "[ParameterUnwrapped(\"" + param.Name + "\")]" + NewLine; + } + } + if (differentiator != "") { toOutput += "[IgnoreParameter(\"NAME_YOUR_PARAMS\")]" + NewLine; diff --git a/StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs b/StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs index c2162bce..e6b0314a 100644 --- a/StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs +++ b/StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs @@ -15,6 +15,15 @@ namespace StubGen.Scrapers.Finals output += property.GetTrivia(); + if (property.Type.Optional) + { + output += "[ValueOptional]" + NewLine; + } + if (property.Type.Unwrapped) + { + output += "[ValueUnwrapped]" + NewLine; + } + if (!isInterface) //todo: comment out private/static properties in interfaces { output += property.Public ? "public " : "private "; diff --git a/StubGen/StubGen/Scrapers/ScrapedMember.cs b/StubGen/StubGen/Scrapers/ScrapedMember.cs index 5e052b81..2466b675 100644 --- a/StubGen/StubGen/Scrapers/ScrapedMember.cs +++ b/StubGen/StubGen/Scrapers/ScrapedMember.cs @@ -43,9 +43,9 @@ namespace StubGen Finals.ParseAsDescription(Description) + NewLine + "/// </summary>" + NewLine; - if (iOSVersion.HasValue) //todo iosversion in scrapedmember + if (iOSVersion.HasValue) { - output += "[iOSVersion(" + iOSVersion.ToString() + ")]" + NewLine; + output += "[iOSVersion(" + iOSVersion + ")]" + NewLine; } if (Deprecated) { @@ -86,7 +86,9 @@ namespace StubGen baseMember.Declaration = declarationNode.RealInnerText().Trim(); - if ((baseMember.Declaration.StartsWith("struct ") && baseMember.Declaration.Contains("Option")) || (baseMember.Declaration.StartsWith("enum") && baseMember.Declaration.Contains("case"))) + //Enums + if ((baseMember.Declaration.StartsWith("struct ") && baseMember.Declaration.Contains("Option")) + || (baseMember.Declaration.StartsWith("enum") && baseMember.Declaration.Contains("case"))) { return new ScrapedEnum(baseMember, realNode); } diff --git a/StubGen/StubGen/Scrapers/ScrapedProperty.cs b/StubGen/StubGen/Scrapers/ScrapedProperty.cs index 01b45fcb..902e45ef 100644 --- a/StubGen/StubGen/Scrapers/ScrapedProperty.cs +++ b/StubGen/StubGen/Scrapers/ScrapedProperty.cs @@ -25,11 +25,8 @@ namespace StubGen var type = Declaration.SplitAtFirstOccurrence(':')[1].Trim().Split('{')[0].Split(';')[0].Trim(); Type = ScrapedType.ScrapeType(type); - var objCDeclaration = - node.SelectSingleNode("./div[@class='declaration']/div[@class='Objective-C']/p[@class='para']").RealInnerText().Trim(); - PublicGetter = true; - PublicSetter = !(objCDeclaration.Contains("@property") && objCDeclaration.Contains("readonly")); + PublicSetter = !(Declaration.Contains("{ get }")); Public = true; Static = Declaration.Contains("class var "); diff --git a/StubGen/StubGen/Scrapers/Types.cs b/StubGen/StubGen/Scrapers/Types.cs index 0ea6b06a..f4d74a40 100644 --- a/StubGen/StubGen/Scrapers/Types.cs +++ b/StubGen/StubGen/Scrapers/Types.cs @@ -111,6 +111,8 @@ namespace StubGen { public string CSharpType { get; set; } public string RawSwift { get; set; } + public bool Unwrapped { get; set; } + public bool Optional { get; set; } public ScrapedType() { } @@ -119,6 +121,9 @@ namespace StubGen RawSwift = type; CSharpType = Helpers.ParseType(type); + + Unwrapped = type.EndsWith("!"); + Optional = type.EndsWith("?"); } public static ScrapedType ScrapeType(string type) |