Skip to content

Commit 87c5a59

Browse files
committed
Basic complete interface implementation for Haxe working with a test.
1 parent 56f8881 commit 87c5a59

File tree

7 files changed

+184
-107
lines changed

7 files changed

+184
-107
lines changed

External/Plugins/ASCompletion/Completion/ASGenerator.cs

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3117,27 +3117,59 @@ private static void GenerateImplementation(ClassModel iType, ClassModel inClass,
31173117
IASContext context = ASContext.Context;
31183118
ContextFeatures features = context.Features;
31193119
bool canGenerate = false;
3120+
bool isHaxe = IsHaxe;
3121+
FlagType flags = (FlagType.Function | FlagType.Getter | FlagType.Setter);
3122+
if (isHaxe) flags |= FlagType.Variable;
31203123

31213124
iType.ResolveExtends(); // resolve inheritance chain
31223125
while (!iType.IsVoid() && iType.QualifiedName != "Object")
31233126
{
31243127
foreach (MemberModel method in iType.Members)
31253128
{
3126-
if ((method.Flags & (FlagType.Function | FlagType.Getter | FlagType.Setter)) == 0
3129+
if ((method.Flags & flags) == 0
31273130
|| method.Name == iType.Name)
31283131
continue;
31293132

31303133
// check if method exists
31313134
ASComplete.FindMember(method.Name, inClass, result, method.Flags, 0);
31323135
if (!result.IsNull()) continue;
31333136

3134-
string decl = entry ? NewLine : "";
3137+
string decl;
31353138
if ((method.Flags & FlagType.Getter) > 0)
3136-
decl = TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Getter"));
3139+
{
3140+
if (isHaxe)
3141+
{
3142+
decl = TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Property"));
3143+
3144+
string getter = null, setter = null;
3145+
if (method.Parameters[0].Name == "get")
3146+
{
3147+
getter = NewLine + TemplateUtils.ToDeclarationString(method, TemplateUtils.GetTemplate("Getter"));
3148+
getter = TemplateUtils.ReplaceTemplateVariable(getter, "Modifiers", null);
3149+
getter = TemplateUtils.ReplaceTemplateVariable(getter, "Member", method.Name);
3150+
decl += getter;
3151+
}
3152+
3153+
if (method.Parameters[1].Name == "set")
3154+
{
3155+
setter = NewLine + TemplateUtils.ToDeclarationString(method, TemplateUtils.GetTemplate("Setter"));
3156+
setter = TemplateUtils.ReplaceTemplateVariable(setter, "Modifiers", null);
3157+
setter = TemplateUtils.ReplaceTemplateVariable(setter, "Member", method.Name);
3158+
decl += setter;
3159+
}
3160+
3161+
string metadata = (getter != null && setter != null) ? "@:isVar" : null;
3162+
decl = TemplateUtils.ReplaceTemplateVariable(decl, "MetaData", metadata);
3163+
}
3164+
else
3165+
decl = TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Getter"));
3166+
}
31373167
else if ((method.Flags & FlagType.Setter) > 0)
31383168
decl = TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Setter"));
3139-
else
3169+
else if ((method.Flags & FlagType.Function) > 0)
31403170
decl = TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Function"));
3171+
else
3172+
decl = NewLine + TemplateUtils.ToDeclarationWithModifiersString(method, TemplateUtils.GetTemplate("Variable"));
31413173
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Member", "_" + method.Name);
31423174
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Void", features.voidKey);
31433175
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Body", null);
@@ -3518,13 +3550,7 @@ static private string AddRemoveEvent(string eventName)
35183550

35193551
private static void GenerateGetter(string name, MemberModel member, int position)
35203552
{
3521-
string acc;
3522-
if (IsHaxe)
3523-
{
3524-
acc = GetStaticKeyword(member);
3525-
if (!string.IsNullOrEmpty(acc)) acc += " ";
3526-
}
3527-
else acc = GetPublicAccessor(member);
3553+
string acc = IsHaxe ? GetStaticKeyword(member) : GetPublicAccessor(member);
35283554
string template = TemplateUtils.GetTemplate("Getter");
35293555
string decl = NewLine + TemplateUtils.ReplaceTemplateVariable(template, "Modifiers", acc);
35303556
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Name", name);
@@ -3536,12 +3562,7 @@ private static void GenerateGetter(string name, MemberModel member, int position
35363562

35373563
private static void GenerateSetter(string name, MemberModel member, int position)
35383564
{
3539-
string acc;
3540-
if (IsHaxe)
3541-
{
3542-
acc = GetStaticKeyword(member);
3543-
if (!string.IsNullOrEmpty(acc)) acc += " ";
3544-
} else acc = GetPublicAccessor(member);
3565+
string acc = IsHaxe ? GetStaticKeyword(member) : GetPublicAccessor(member);
35453566
string template = TemplateUtils.GetTemplate("Setter");
35463567
string decl = NewLine + TemplateUtils.ReplaceTemplateVariable(template, "Modifiers", acc);
35473568
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Name", name);
@@ -3562,13 +3583,7 @@ private static void GenerateGetterSetter(string name, MemberModel member, int po
35623583
GenerateGetter(name, member, position);
35633584
return;
35643585
}
3565-
string acc;
3566-
if (IsHaxe)
3567-
{
3568-
acc = GetStaticKeyword(member);
3569-
if (!string.IsNullOrEmpty(acc)) acc += " ";
3570-
}
3571-
else acc = GetPublicAccessor(member);
3586+
string acc = IsHaxe ? GetStaticKeyword(member) : GetPublicAccessor(member);
35723587
string decl = NewLine + TemplateUtils.ReplaceTemplateVariable(template, "Modifiers", acc);
35733588
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Name", name);
35743589
decl = TemplateUtils.ReplaceTemplateVariable(decl, "Type", FormatType(member.Type));
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
$(BlankLine)$(Modifiers)function get_$(Name)():$(Type) $(CSLB){
1+
$(BlankLine)<<$(Modifiers) >>function get_$(Name)():$(Type) $(CSLB){
22
return $(Member)$(EntryPoint);
33
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
$(BlankLine)$(Modifiers)function get_$(Name)():$(Type) $(CSLB){
1+
$(BlankLine)<<$(Modifiers) >>function get_$(Name)():$(Type) $(CSLB){
22
return $(Member)$(EntryPoint);
33
}
44

5-
$(Modifiers)function set_$(Name)(value:$(Type)):$(Type) $(CSLB){
5+
<<$(Modifiers) >>function set_$(Name)(value:$(Type)):$(Type) $(CSLB){
66
return $(Member) = value;
77
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
$(BlankLine)<<$(MetaData) >><<$(Modifiers) >>var $(Name)($(Arguments))<<:$(Type)>>;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
$(BlankLine)$(Modifiers)function set_$(Name)(value:$(Type)):$(Type) $(CSLB){
1+
$(BlankLine)<<$(Modifiers) >>function set_$(Name)(value:$(Type)):$(Type) $(CSLB){
22
return $(Member) = value$(EntryPoint);
33
}

0 commit comments

Comments
 (0)