diff --git a/WeaverGenerator/src/org/lara/interpreter/weaver/generator/generator/java/utils/GeneratorUtils.java b/WeaverGenerator/src/org/lara/interpreter/weaver/generator/generator/java/utils/GeneratorUtils.java
index f59bd0b1c..934ccef63 100644
--- a/WeaverGenerator/src/org/lara/interpreter/weaver/generator/generator/java/utils/GeneratorUtils.java
+++ b/WeaverGenerator/src/org/lara/interpreter/weaver/generator/generator/java/utils/GeneratorUtils.java
@@ -648,6 +648,31 @@ private static JavaType getJavaType(String type, String paramName, Action action
return jType;
}
+ /**
+ * Processes the arguments. Processing includes:
+ *
+ *
+ * - Arrays are converted to arrays of Objects, for compatibility with the JavaScript layer.
+ *
+ *
+ * @param arguments
+ * @return
+ */
+ public static List convertParamArrayToObjArray(List arguments) {
+ var newArgs = new ArrayList(arguments.size());
+
+ for (var arg : arguments) {
+ if (arg.getClassType().isArray()) {
+ arg = arg.clone();
+ arg.getClassType().setName("Object");
+ }
+
+ newArgs.add(arg);
+ }
+
+ return newArgs;
+ }
+
/**
* Convert an action method to actionImpl,which will be the one the user should implement, and generate the action
* implementation that invokes this new actionImpl
@@ -726,6 +751,8 @@ public static Method generateActionImplMethod(Method original, Action action,
argStr = "NamedEnum.fromString(" + arg.getClassType().getName() + ".class, " + arg.getName()
+ ", \"parameter " + arg.getName() + "\")";
arg.setClassType(stringType);
+ } else if (arg.getClassType().isArray()) {
+ argStr = "pt.up.fe.specs.util.SpecsCollections.cast(" + arg.getName() + ", " + arg.getClassType().getName() + ".class)";
} else {
argStr = arg.getName();
}
@@ -765,6 +792,12 @@ public static Method generateActionImplMethod(Method original, Action action,
cloned.appendCodeln("(" + GenConstants.getClassName() + "(), \"" + actionName + "\", e);");
cloned.appendCodeln("}");
targetClass.addImport(ActionException.class);
+
+ // Adapts parameters after processing and code generation is done, to improve compatibility with
+ // calls from JavaScript
+ cloned.setArguments(convertParamArrayToObjArray(cloned.getParams()));
+
+
return cloned;
}