summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatthewsotoudeh <matthewsot@outlook.com>2015-01-24 14:17:35 -0800
committermatthewsotoudeh <matthewsot@outlook.com>2015-01-24 14:17:35 -0800
commit8ada920038b94bc67179087aab71e8b543b40bcb (patch)
treeacfddceaef067a9fd7ae9d233df3b36dbb859742
parent404e9c0949affe4cb601823aff969f0886f16dc3 (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.cs6
-rw-r--r--StubGen/StubGen/Scrapers/Finals/MethodFinal.cs23
-rw-r--r--StubGen/StubGen/Scrapers/Finals/PropertyFinal.cs9
-rw-r--r--StubGen/StubGen/Scrapers/ScrapedMember.cs8
-rw-r--r--StubGen/StubGen/Scrapers/ScrapedProperty.cs5
-rw-r--r--StubGen/StubGen/Scrapers/Types.cs5
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)
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback