Skip to content

Commit

Permalink
generate interfaces for externs (for macros)
Browse files Browse the repository at this point in the history
  • Loading branch information
ianharrigan committed Nov 13, 2023
1 parent 8f28173 commit 376c0e9
Showing 1 changed file with 58 additions and 30 deletions.
88 changes: 58 additions & 30 deletions haxe/ui/macros/ExternGenerator.hx
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ class ExternGenerator {
copyBackendOriginal("haxe.ui.backend.BackendImpl");
copyOriginal("haxe.ui.layouts.LayoutFactory");
copyOriginal("haxe.ui.data.DataSourceFactory");
copyOriginals("haxe.ui.constants");

var moduleSourcePath = Path.normalize(rootDir() + "/haxe/ui/module.xml");
var moduleDestPath = Path.normalize(outputPath + "/haxe/ui/module.xml");
Expand Down Expand Up @@ -160,7 +161,11 @@ class ExternGenerator {
sb.add('@:autoBuild(haxe.ui.macros.Macros.build())\n');
}

sb.add('extern class ');
if (classType.isInterface) {
sb.add('interface ');
} else {
sb.add('extern class ');
}
sb.add(classType.name);
if (classType.params != null && classType.params.length > 0) {
sb.add('<');
Expand Down Expand Up @@ -192,6 +197,18 @@ class ExternGenerator {
}
}

if (classType.interfaces != null && classType.interfaces.length > 0) {
for (i in classType.interfaces) {
sb.add(' implements ');
sb.add(i.t.toString());
if (i.t.toString() == "haxe.ui.core.IClonable") {
sb.add('<');
sb.add(fullName);
sb.add('>');
}
}
}

sb.add(' {\n');

if (classType.constructor != null) {
Expand Down Expand Up @@ -219,21 +236,24 @@ class ExternGenerator {
sb.add(TypeTools.toString(f.type));
sb.add(';\n');

sb.add(' ');
sb.add('private function get_');
sb.add(f.name);
sb.add('():');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
if (!classType.isInterface) {
sb.add(' ');
sb.add('private function get_');
sb.add(f.name);
sb.add('():');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');

sb.add(' ');
sb.add('private function set_');
sb.add(f.name);
sb.add('(value:');
sb.add(TypeTools.toString(f.type));
sb.add('):');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
}

sb.add(' ');
sb.add('private function set_');
sb.add(f.name);
sb.add('(value:');
sb.add(TypeTools.toString(f.type));
sb.add('):');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');

sb.add("\n");

Expand All @@ -253,14 +273,16 @@ class ExternGenerator {
sb.add(TypeTools.toString(f.type));
sb.add(';\n');

sb.add(' ');
sb.add('private function set_');
sb.add(f.name);
sb.add('(value:');
sb.add(TypeTools.toString(f.type));
sb.add('):');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
if (!classType.isInterface) {
sb.add(' ');
sb.add('private function set_');
sb.add(f.name);
sb.add('(value:');
sb.add(TypeTools.toString(f.type));
sb.add('):');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
}

sb.add("\n");

Expand All @@ -272,19 +294,25 @@ class ExternGenerator {
sb.add(TypeTools.toString(f.type));
sb.add(';\n');

sb.add(' ');
sb.add('private function get_');
sb.add(f.name);
sb.add('():');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
if (!classType.isInterface) {
sb.add(' ');
sb.add('private function get_');
sb.add(f.name);
sb.add('():');
sb.add(TypeTools.toString(f.type));
sb.add(';\n');
}

sb.add("\n");

case FMethod(k):
//trace(" method", f.name);
sb.add(' ');
sb.add('public ');
if (classType.isInterface && (f.name.startsWith("get_") || f.name.startsWith("set_"))) {
sb.add('private ');
} else {
sb.add('public ');
}
sb.add('function ');
sb.add(f.name);
if (f.params != null && f.params.length > 0) {
Expand Down

0 comments on commit 376c0e9

Please sign in to comment.