From 6f89dc67cf3e33472be042389866acadcf56cfbd Mon Sep 17 00:00:00 2001
From: Fabian Vu <fabian.vu@hhu.de>
Date: Wed, 8 Jan 2025 13:47:25 +0100
Subject: [PATCH] Invoke machine with external functions with correct
 parameters

---
 .../codegenerator/generators/DeclarationGenerator.java      | 6 ++++++
 .../resources/de/hhu/stups/codegenerator/JavaTemplate.stg   | 6 +++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java b/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java
index c12e28eac..807f0a584 100644
--- a/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java
+++ b/src/main/java/de/hhu/stups/codegenerator/generators/DeclarationGenerator.java
@@ -8,6 +8,7 @@ import de.prob.parser.ast.nodes.DeclarationNode;
 import de.prob.parser.ast.nodes.EnumeratedSetDeclarationNode;
 import de.prob.parser.ast.nodes.MachineNode;
 import de.prob.parser.ast.nodes.MachineReferenceNode;
+import de.prob.parser.ast.nodes.OperationNode;
 import de.prob.parser.ast.types.CoupleType;
 import de.prob.parser.ast.types.SetType;
 import org.stringtemplate.v4.ST;
@@ -144,6 +145,11 @@ public class DeclarationGenerator {
         ST declaration = currentGroup.getInstanceOf("include_declaration");
         String machine = reference.getMachineName();
         String referenceName = reference.getPrefix() != null ? reference.getPrefix() : reference.getMachineName();
+        boolean hasExternals = reference.getMachineNode().getOperations()
+                .stream()
+                .map(OperationNode::getName)
+                .anyMatch(op -> op.startsWith("EXTERNAL_"));
+        TemplateHandler.add(declaration, "hasExternals", hasExternals);
         TemplateHandler.add(declaration, "type", nameHandler.handle(machine));
         TemplateHandler.add(declaration, "identifier", nameHandler.handleIdentifier(referenceName, NameHandler.IdentifierHandlingEnum.MACHINES));
         return declaration.render();
diff --git a/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg b/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
index c140af61e..c1a28afcb 100644
--- a/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
+++ b/src/main/resources/de/hhu/stups/codegenerator/JavaTemplate.stg
@@ -590,8 +590,12 @@ bool() ::= <<
 BUtils.BOOL
 >>
 
-include_declaration(type, identifier) ::= <<
+include_declaration(hasExternals, type, identifier) ::= <<
+<if(hasExternals)>
+private <declaration(type, identifier)> = new <type>(new <type>_EXTERNALS());
+<else>
 private <declaration(type, identifier)> = new <type>();
+<endif>
 >>
 
 global_declaration(type, identifier) ::= <<
-- 
GitLab