diff --git a/asmetal2java_codegen/src/org/asmeta/asm2java/main/JavaASMGenerator2.xtend b/asmetal2java_codegen/src/org/asmeta/asm2java/main/JavaASMGenerator2.xtend index 73c51e6..a4a6ec4 100644 --- a/asmetal2java_codegen/src/org/asmeta/asm2java/main/JavaASMGenerator2.xtend +++ b/asmetal2java_codegen/src/org/asmeta/asm2java/main/JavaASMGenerator2.xtend @@ -27,6 +27,12 @@ class JavaASMGenerator2 extends AsmToJavaGenerator { String supp + String [] finalStateConditions; + + def setFinalStateConditions(String [] finalStateConditions){ + this.finalStateConditions = finalStateConditions; + } + override compileAsm(Asm asm) { // collect alla the seq rules if required if (options.optimizeSeqMacroRule) { @@ -109,13 +115,25 @@ class JavaASMGenerator2 extends AsmToJavaGenerator { /* monitored */ coverMonitored(); /* controlled */ - coverControlled(); + coverControlled();'''); - stato++; - } - - // Monitored getters - '''); + sb.append(System.lineSeparator) + if(finalStateConditions !== null || !finalStateConditions.isEmpty){ + sb.append("\t\t\t\t" ).append('''/*final state condition */''') + sb.append(System.lineSeparator) + sb.append("\t\t\t\t" ).append('''if(isFinalState()){ + System.out.println("\n"); + } + else''') + sb.append(System.lineSeparator) + } + sb.append("\t\t\t\t\t\t" ).append('''stato++; + }''') + + setIsFinalState(asm, sb) + sb.append(System.lineSeparator) + + sb.append("\t" ).append('''// Monitored getters'''); monitoredGetter(asm, sb); @@ -464,8 +482,10 @@ class JavaASMGenerator2 extends AsmToJavaGenerator { if (fd.codomain instanceof ConcreteDomain) { sb.append(''' - this.esecuzione.«fd.name»_supporto.value = «fd.name»; - this.esecuzione.«fd.name».set(this.esecuzione.«fd.name»_supporto); + this.esecuzione.«fd.name».set( + «asm.name».«fd.codomain.name».valueOf( + this.esecuzione.«fd.codomain.name»_elems.get( + «fd.name» - this.esecuzione.«fd.codomain.name»_elems.get(0)))); System.out.println("Set «fd.name» = " + «fd.name»);''') sb.append(System.lineSeparator) sb.append(System.lineSeparator) @@ -511,4 +531,36 @@ class JavaASMGenerator2 extends AsmToJavaGenerator { return sb.toString } + def setIsFinalState(Asm asm, StringBuffer sb){ + if(finalStateConditions !== null || !finalStateConditions.isEmpty){ + sb.append(System.lineSeparator) + sb.append("\t").append('''// final state condition''') + sb.append(System.lineSeparator) + sb.append("\t").append('''public boolean isFinalState(){''') + sb.append(System.lineSeparator) + sb.append("\t\t").append('''return''') + for(condition : finalStateConditions){ + + val cond_name = condition.replaceAll("^\\s*(\\w+)\\s*.*$", "$1") + val cond_value = condition.replaceAll("^\\s*\\w+\\s*(.*)$", "$1") + + if(cond_name.toLowerCase.equals("stato")){ + sb.append(System.lineSeparator) + sb.append("\t\t\t").append('''this.stato «cond_value» &&''') + } + else{ + for(fd : asm.headerSection.signature.function) + if(fd instanceof ControlledFunction && fd.name.equals(cond_name)){ + sb.append(System.lineSeparator) + sb.append("\t\t\t").append('''this.get_«fd.name»() «cond_value» &&''') + } + } + } + sb.setLength(sb.length() - 3) + sb.append(''';''') + sb.append(System.lineSeparator) + sb.append("\t").append('''}''') + } + } + } diff --git a/asmetal2java_codegen/src/org/asmeta/asm2java/main/MainClass.java b/asmetal2java_codegen/src/org/asmeta/asm2java/main/MainClass.java index 4f1a02a..ffae758 100644 --- a/asmetal2java_codegen/src/org/asmeta/asm2java/main/MainClass.java +++ b/asmetal2java_codegen/src/org/asmeta/asm2java/main/MainClass.java @@ -7,8 +7,10 @@ import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.NoSuchFileException; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Properties; import java.util.Set; @@ -61,7 +63,8 @@ public class MainClass { public static CompileResult generate( String asmspec, TranslatorOptions userOptions, - String outputFolder) + String outputFolder, + String[] finalStateConditions) throws Exception { // // PARSE THE SPECIFICATION @@ -80,7 +83,6 @@ public static CompileResult generate( String dirEsecuzione = asmFile.getParentFile().getPath() + "/esecuzione"; String dirTraduzione = asmFile.getParentFile().getPath() + "/Traduzione"; - // AC //File javaFile = new File(SRC_GEN + File.separator + name + ".java"); File javaFile = new File(dir.getPath() + File.separator + name + ".java"); @@ -94,7 +96,6 @@ public static CompileResult generate( //File javaFileExeT = new File(dirTraduzione + File.separator + name + "_Exe.java"); File javaFileASMT = new File(dirTraduzione + File.separator + name + "_ASM.java"); - deleteExisting(javaFile); deleteExisting(javaFileCompilazione); //deleteExisting(javaFileExe); @@ -109,19 +110,23 @@ public static CompileResult generate( // write java try { + // Java Class jGenerator.compileAndWrite(model.getMain(), javaFile.getCanonicalPath(), userOptions); jGenerator.compileAndWrite(model.getMain(), javaFileCompilazione.getCanonicalPath(), userOptions); + + // EXE Class //jGeneratorExe.compileAndWrite(model.getMain(), javaFileExe.getCanonicalPath(), userOptions); //jGenerator.compileAndWrite(model.getMain(), javaFileExeN.getCanonicalPath(), userOptions); //jGeneratorExe.compileAndWrite(model.getMain(), javaFileExeT.getCanonicalPath(), userOptions); + // ASM Class + jGeneratorASM.setFinalStateConditions(finalStateConditions); jGeneratorASM.compileAndWrite(model.getMain(), javaFileASM.getCanonicalPath(), userOptions); jGenerator.compileAndWrite(model.getMain(), javaFileASMN.getCanonicalPath(), userOptions); jGeneratorASM.compileAndWrite(model.getMain(), javaFileASMT.getCanonicalPath(), userOptions); - } catch (Exception e) { e.printStackTrace(); return new CompileResult(false, e.getMessage()); @@ -216,6 +221,19 @@ public static Options getCommandLineOptions() { .hasArg(true) .desc("The output folder (optional, defaults to `./output/`)") .build(); + + // final state condition (Only for ASM scenario generator) + Option finalState = Option.builder("finalState") + .argName("finalState") + .type(String.class) + .hasArg(true) + .desc("Final state condition:\n" + + "(for ASM scenario generation only)\n" + + "Allows you to specify the final state condition,\n" + + " in order to help automatic scenario generation.\n" + + "Add the conditions separated by ':'\n" + + "example: state>=5:total>=50") + .build(); // property Option property = Option.builder("D") @@ -235,6 +253,7 @@ public static Options getCommandLineOptions() { options.addOption(help); options.addOption(input); options.addOption(output); + options.addOption(finalState); options.addOption(property); return options; @@ -310,9 +329,18 @@ private void execute (CommandLine line, Options options) { } else { outputFolder = line.getOptionValue("output"); } + + String[] finalStateConditions = null; + if(line.hasOption("finalState")){ + finalStateConditions = line.getOptionValue("finalState").split(":"); + } try { - CompileResult compileResult = generate(asmspec, translatorOptions, outputFolder); + CompileResult compileResult = generate( + asmspec, + translatorOptions, + outputFolder, + finalStateConditions); if(compileResult.getSuccess()){ logger.info("Generation succeed : " + compileResult.toString()); } diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.DomainToJavaSigDef.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.DomainToJavaSigDef.xtendbin index 8eeb1c0..3e082d3 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.DomainToJavaSigDef.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.DomainToJavaSigDef.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin index fe6ea45..05d6ded 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin index 4cc1406..f8e5358 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaSig.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaSig.xtendbin index 4338f1d..befe3f9 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaSig.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaSig.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin index 56ed552..50d7df6 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin index 71df17a..5cef1b7 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin index 71f9a15..9d2a8de 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin index 99cbb7d..8c699d8 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInUpdateRule.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInUpdateRule.xtendbin index 0c584a0..b97ef47 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInUpdateRule.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInUpdateRule.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.java._trace b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.java._trace index b021bd2..bf64046 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.java._trace and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.java._trace differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin index 24110fc..6bdd81d 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.ToString.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.ToString.xtendbin index eada60e..6388911 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.ToString.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.ToString.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin index e18041b..b670866 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.AsmToJavaGenerator.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.AsmToJavaGenerator.xtendbin index 5221473..7a4d6a4 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.AsmToJavaGenerator.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.AsmToJavaGenerator.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.java._trace b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.java._trace index c5fa67a..799cc7d 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.java._trace and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.java._trace differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.xtendbin index cbfc207..acfc784 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaASMGenerator2.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaExeGenerator.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaExeGenerator.xtendbin index 26d471f..d2195e9 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaExeGenerator.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaExeGenerator.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaGenerator.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaGenerator.xtendbin index 23dfb47..a8d4d26 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaGenerator.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaGenerator.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaWindowGenerator.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaWindowGenerator.xtendbin index 1a312bd..2e43e3c 100644 Binary files a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaWindowGenerator.xtendbin and b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/.JavaWindowGenerator.xtendbin differ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/JavaASMGenerator2.java b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/JavaASMGenerator2.java index b68265b..ecb27e3 100644 --- a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/JavaASMGenerator2.java +++ b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/main/JavaASMGenerator2.java @@ -18,6 +18,7 @@ import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.xbase.lib.Conversions; import org.junit.Assert; @SuppressWarnings("all") @@ -31,6 +32,12 @@ public void compileAndWrite(final Asm asm, final String writerPath, final Transl private String supp; + private String[] finalStateConditions; + + public String[] setFinalStateConditions(final String[] finalStateConditions) { + return this.finalStateConditions = finalStateConditions; + } + @Override public String compileAsm(final Asm asm) { boolean _optimizeSeqMacroRule = this.options.getOptimizeSeqMacroRule(); @@ -202,101 +209,122 @@ public String compileAsm(final Asm asm) { _builder_3.newLine(); _builder_3.append("\t\t\t\t"); _builder_3.append("coverControlled();"); - _builder_3.newLine(); - _builder_3.append("\t\t\t\t"); - _builder_3.newLine(); - _builder_3.append("\t\t\t\t"); - _builder_3.append("stato++;"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("}"); - _builder_3.newLine(); - _builder_3.append("\t\t\t"); - _builder_3.newLine(); - _builder_3.append("\t\t"); - _builder_3.append("// Monitored getters"); - _builder_3.newLine(); sb.append(_builder_3); + sb.append(System.lineSeparator()); + if (((this.finalStateConditions != null) || (!((List)Conversions.doWrapArray(this.finalStateConditions)).isEmpty()))) { + StringBuffer _append_1 = sb.append("\t\t\t\t"); + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("/*final state condition */"); + _append_1.append(_builder_4); + sb.append(System.lineSeparator()); + StringBuffer _append_2 = sb.append("\t\t\t\t"); + StringConcatenation _builder_5 = new StringConcatenation(); + _builder_5.append("if(isFinalState()){"); + _builder_5.newLine(); + _builder_5.append("\t\t\t\t\t\t"); + _builder_5.append("System.out.println(\"\\n\");"); + _builder_5.newLine(); + _builder_5.append("\t\t\t\t"); + _builder_5.append("}"); + _builder_5.newLine(); + _builder_5.append("\t\t\t\t"); + _builder_5.append("else"); + _append_2.append(_builder_5); + sb.append(System.lineSeparator()); + } + StringBuffer _append_3 = sb.append("\t\t\t\t\t\t"); + StringConcatenation _builder_6 = new StringConcatenation(); + _builder_6.append("stato++;"); + _builder_6.newLine(); + _builder_6.append("\t\t\t\t"); + _builder_6.append("}"); + _append_3.append(_builder_6); + this.setIsFinalState(asm, sb); + sb.append(System.lineSeparator()); + StringBuffer _append_4 = sb.append("\t"); + StringConcatenation _builder_7 = new StringConcatenation(); + _builder_7.append("// Monitored getters"); + _append_4.append(_builder_7); this.monitoredGetter(asm, sb); sb.append(System.lineSeparator()); - StringBuffer _append_1 = sb.append("\t\t"); - StringConcatenation _builder_4 = new StringConcatenation(); - _builder_4.append("// Controlled getters"); - _append_1.append(_builder_4); + StringBuffer _append_5 = sb.append("\t\t"); + StringConcatenation _builder_8 = new StringConcatenation(); + _builder_8.append("// Controlled getters"); + _append_5.append(_builder_8); sb.append(System.lineSeparator()); this.controllerGetter(asm, sb); sb.append(System.lineSeparator()); - StringBuffer _append_2 = sb.append("\t"); - StringConcatenation _builder_5 = new StringConcatenation(); - _builder_5.append("// Cover functions"); - _append_2.append(_builder_5); + StringBuffer _append_6 = sb.append("\t"); + StringConcatenation _builder_9 = new StringConcatenation(); + _builder_9.append("// Cover functions"); + _append_6.append(_builder_9); sb.append(System.lineSeparator()); sb.append(System.lineSeparator()); - StringBuffer _append_3 = sb.append("\t"); - StringConcatenation _builder_6 = new StringConcatenation(); - _builder_6.append("private void coverMonitored(){"); - _append_3.append(_builder_6); + StringBuffer _append_7 = sb.append("\t"); + StringConcatenation _builder_10 = new StringConcatenation(); + _builder_10.append("private void coverMonitored(){"); + _append_7.append(_builder_10); this.coverFunctions(asm, sb, true); sb.append(System.lineSeparator()); - StringBuffer _append_4 = sb.append("\t"); - StringConcatenation _builder_7 = new StringConcatenation(); - _builder_7.append("}"); - _builder_7.newLine(); - _builder_7.newLine(); - _builder_7.append("\t"); - _builder_7.append("private void coverControlled(){"); - _append_4.append(_builder_7); + StringBuffer _append_8 = sb.append("\t"); + StringConcatenation _builder_11 = new StringConcatenation(); + _builder_11.append("}"); + _builder_11.newLine(); + _builder_11.newLine(); + _builder_11.append("\t"); + _builder_11.append("private void coverControlled(){"); + _append_8.append(_builder_11); this.coverFunctions(asm, sb, false); sb.append(System.lineSeparator()); - StringBuffer _append_5 = sb.append("\t"); - StringConcatenation _builder_8 = new StringConcatenation(); - _builder_8.append("}"); - _append_5.append(_builder_8); + StringBuffer _append_9 = sb.append("\t"); + StringConcatenation _builder_12 = new StringConcatenation(); + _builder_12.append("}"); + _append_9.append(_builder_12); sb.append(System.lineSeparator()); sb.append(System.lineSeparator()); this.coverBranches(asm, sb); - StringConcatenation _builder_9 = new StringConcatenation(); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.append("// ASM Methods"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.append("private void printControlled() {"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.newLine(); - _builder_9.append("\t\t"); + StringConcatenation _builder_13 = new StringConcatenation(); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.append("// ASM Methods"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.append("private void printControlled() {"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.newLine(); + _builder_13.append("\t\t"); String _printControlled = this.printControlled(asm); - _builder_9.append(_printControlled, "\t\t"); - _builder_9.newLineIfNotEmpty(); - _builder_9.append("\t"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.append("}"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.newLine(); - _builder_9.append("\t"); - _builder_9.append("private void setMonitored("); - sb.append(_builder_9); + _builder_13.append(_printControlled, "\t\t"); + _builder_13.newLineIfNotEmpty(); + _builder_13.append("\t"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.append("}"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.newLine(); + _builder_13.append("\t"); + _builder_13.append("private void setMonitored("); + sb.append(_builder_13); this.setMonitoredArgs(asm, sb); - StringConcatenation _builder_10 = new StringConcatenation(); - _builder_10.append(") {"); - _builder_10.newLine(); - _builder_10.append("\t\t\t\t\t"); - _builder_10.newLine(); - _builder_10.append("\t\t\t\t\t"); + StringConcatenation _builder_14 = new StringConcatenation(); + _builder_14.append(") {"); + _builder_14.newLine(); + _builder_14.append("\t\t\t\t\t"); + _builder_14.newLine(); + _builder_14.append("\t\t\t\t\t"); String _setMonitored = this.setMonitored(asm); - _builder_10.append(_setMonitored, "\t\t\t\t\t"); - _builder_10.newLineIfNotEmpty(); - _builder_10.append("\t\t\t\t"); - _builder_10.append("}"); - _builder_10.newLine(); - _builder_10.append("\t\t\t"); - _builder_10.append("}"); - sb.append(_builder_10); + _builder_14.append(_setMonitored, "\t\t\t\t\t"); + _builder_14.newLineIfNotEmpty(); + _builder_14.append("\t\t\t\t"); + _builder_14.append("}"); + _builder_14.newLine(); + _builder_14.append("\t\t\t"); + _builder_14.append("}"); + sb.append(_builder_14); return sb.toString(); } @@ -946,25 +974,36 @@ public String setMonitored(final Asm asm) { _builder_3.append("this.esecuzione."); String _name_12 = ((MonitoredFunction)fd).getName(); _builder_3.append(_name_12); - _builder_3.append("_supporto.value = "); - String _name_13 = ((MonitoredFunction)fd).getName(); - _builder_3.append(_name_13); - _builder_3.append(";"); + _builder_3.append(".set("); + _builder_3.newLineIfNotEmpty(); + _builder_3.append("\t"); + String _name_13 = asm.getName(); + _builder_3.append(_name_13, "\t"); + _builder_3.append("."); + String _name_14 = ((MonitoredFunction)fd).getCodomain().getName(); + _builder_3.append(_name_14, "\t"); + _builder_3.append(".valueOf("); _builder_3.newLineIfNotEmpty(); + _builder_3.append("\t"); _builder_3.append("this.esecuzione."); - String _name_14 = ((MonitoredFunction)fd).getName(); - _builder_3.append(_name_14); - _builder_3.append(".set(this.esecuzione."); - String _name_15 = ((MonitoredFunction)fd).getName(); - _builder_3.append(_name_15); - _builder_3.append("_supporto);"); + String _name_15 = ((MonitoredFunction)fd).getCodomain().getName(); + _builder_3.append(_name_15, "\t"); + _builder_3.append("_elems.get("); _builder_3.newLineIfNotEmpty(); - _builder_3.append("System.out.println(\"Set "); + _builder_3.append("\t"); String _name_16 = ((MonitoredFunction)fd).getName(); - _builder_3.append(_name_16); + _builder_3.append(_name_16, "\t"); + _builder_3.append(" - this.esecuzione."); + String _name_17 = ((MonitoredFunction)fd).getCodomain().getName(); + _builder_3.append(_name_17, "\t"); + _builder_3.append("_elems.get(0))));"); + _builder_3.newLineIfNotEmpty(); + _builder_3.append("System.out.println(\"Set "); + String _name_18 = ((MonitoredFunction)fd).getName(); + _builder_3.append(_name_18); _builder_3.append(" = \" + "); - String _name_17 = ((MonitoredFunction)fd).getName(); - _builder_3.append(_name_17); + String _name_19 = ((MonitoredFunction)fd).getName(); + _builder_3.append(_name_19); _builder_3.append(");"); sb.append(_builder_3); sb.append(System.lineSeparator()); @@ -974,22 +1013,22 @@ public String setMonitored(final Asm asm) { if ((_codomain_2 instanceof AbstractTd)) { StringConcatenation _builder_4 = new StringConcatenation(); _builder_4.append("this.esecuzione."); - String _name_18 = ((MonitoredFunction)fd).getName(); - _builder_4.append(_name_18); - _builder_4.append(".set(this.esecuzione."); - String _name_19 = ((MonitoredFunction)fd).getCodomain().getName(); - _builder_4.append(_name_19); - _builder_4.append("_Class.get("); String _name_20 = ((MonitoredFunction)fd).getName(); _builder_4.append(_name_20); + _builder_4.append(".set(this.esecuzione."); + String _name_21 = ((MonitoredFunction)fd).getCodomain().getName(); + _builder_4.append(_name_21); + _builder_4.append("_Class.get("); + String _name_22 = ((MonitoredFunction)fd).getName(); + _builder_4.append(_name_22); _builder_4.append("));"); _builder_4.newLineIfNotEmpty(); _builder_4.append("System.out.println(\"Set "); - String _name_21 = ((MonitoredFunction)fd).getName(); - _builder_4.append(_name_21); + String _name_23 = ((MonitoredFunction)fd).getName(); + _builder_4.append(_name_23); _builder_4.append(" = \" + "); - String _name_22 = ((MonitoredFunction)fd).getName(); - _builder_4.append(_name_22); + String _name_24 = ((MonitoredFunction)fd).getName(); + _builder_4.append(_name_24); _builder_4.append(");"); sb.append(_builder_4); sb.append(System.lineSeparator()); @@ -1001,4 +1040,73 @@ public String setMonitored(final Asm asm) { } return sb.toString(); } + + public StringBuffer setIsFinalState(final Asm asm, final StringBuffer sb) { + StringBuffer _xifexpression = null; + if (((this.finalStateConditions != null) || (!((List)Conversions.doWrapArray(this.finalStateConditions)).isEmpty()))) { + StringBuffer _xblockexpression = null; + { + sb.append(System.lineSeparator()); + StringBuffer _append = sb.append("\t"); + StringConcatenation _builder = new StringConcatenation(); + _builder.append("// final state condition"); + _append.append(_builder); + sb.append(System.lineSeparator()); + StringBuffer _append_1 = sb.append("\t"); + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("public boolean isFinalState(){"); + _append_1.append(_builder_1); + sb.append(System.lineSeparator()); + StringBuffer _append_2 = sb.append("\t\t"); + StringConcatenation _builder_2 = new StringConcatenation(); + _builder_2.append("return"); + _append_2.append(_builder_2); + for (final String condition : this.finalStateConditions) { + { + final String cond_name = condition.replaceAll("^\\s*(\\w+)\\s*.*$", "$1"); + final String cond_value = condition.replaceAll("^\\s*\\w+\\s*(.*)$", "$1"); + boolean _equals = cond_name.toLowerCase().equals("stato"); + if (_equals) { + sb.append(System.lineSeparator()); + StringBuffer _append_3 = sb.append("\t\t\t"); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append("this.stato "); + _builder_3.append(cond_value); + _builder_3.append(" &&"); + _append_3.append(_builder_3); + } else { + EList _function = asm.getHeaderSection().getSignature().getFunction(); + for (final Function fd : _function) { + if (((fd instanceof ControlledFunction) && fd.getName().equals(cond_name))) { + sb.append(System.lineSeparator()); + StringBuffer _append_4 = sb.append("\t\t\t"); + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("this.get_"); + String _name = fd.getName(); + _builder_4.append(_name); + _builder_4.append("() "); + _builder_4.append(cond_value); + _builder_4.append(" &&"); + _append_4.append(_builder_4); + } + } + } + } + } + int _length = sb.length(); + int _minus = (_length - 3); + sb.setLength(_minus); + StringConcatenation _builder_3 = new StringConcatenation(); + _builder_3.append(";"); + sb.append(_builder_3); + sb.append(System.lineSeparator()); + StringBuffer _append_3 = sb.append("\t"); + StringConcatenation _builder_4 = new StringConcatenation(); + _builder_4.append("}"); + _xblockexpression = _append_3.append(_builder_4); + } + _xifexpression = _xblockexpression; + } + return _xifexpression; + } } diff --git a/asmetal2java_examples/target/classes/META-INF/maven/asmeta/asmetal2java_examples/pom.properties b/asmetal2java_examples/target/classes/META-INF/maven/asmeta/asmetal2java_examples/pom.properties index 4ea71bb..b3ce092 100644 --- a/asmetal2java_examples/target/classes/META-INF/maven/asmeta/asmetal2java_examples/pom.properties +++ b/asmetal2java_examples/target/classes/META-INF/maven/asmeta/asmetal2java_examples/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven Integration for Eclipse -#Fri Aug 30 21:11:47 CEST 2024 +#Sun Sep 01 14:27:07 CEST 2024 m2e.projectLocation=C\:\\Users\\isaac\\Documents\\GitHub\\asmeta2java\\asmetal2java\\asmetal2java_examples m2e.projectName=asmetal2java_examples groupId=asmeta