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 c12e28eaca4d3f9d05c3d19b409f9be12792b11a..807f0a584f2fd4ae3ecdb24f1dce5946c162cc68 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 c140af61ea1ea8df78bb3d3a723afe243ebacb76..c1a28afcb5d75dabc98bc788ad1a37aeddc6a8c3 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) ::= <<