From 6932b6319d2a53db251d5450c8eb0e2183f45cda Mon Sep 17 00:00:00 2001 From: isaacmaffeis Date: Mon, 2 Sep 2024 12:07:02 +0200 Subject: [PATCH] updated ASM generator added final state condition and fixed bugs --- .../asm2java/main/JavaASMGenerator2.xtend | 68 +++- .../org/asmeta/asm2java/main/MainClass.java | 38 ++- .../asm2java/.DomainToJavaSigDef.xtendbin | Bin 7923 -> 7923 bytes .../.FindMonitoredInControlledFunct.xtendbin | Bin 5154 -> 5154 bytes .../asm2java/.FunctionToJavaDef.xtendbin | Bin 14184 -> 14184 bytes .../asm2java/.FunctionToJavaSig.xtendbin | Bin 9868 -> 9868 bytes .../org/asmeta/asm2java/.RuleToJava.xtendbin | Bin 13629 -> 13629 bytes .../asm2java/.SeqRuleCollector.xtendbin | Bin 6223 -> 6223 bytes .../org/asmeta/asm2java/.TermToJava.xtendbin | Bin 18916 -> 18916 bytes .../.TermToJavaInAssignments.xtendbin | Bin 7236 -> 7236 bytes .../asm2java/.TermToJavaInUpdateRule.xtendbin | Bin 5198 -> 5198 bytes .../.TermToJavaStandardLibrary.java._trace | Bin 18925 -> 18983 bytes .../.TermToJavaStandardLibrary.xtendbin | Bin 6502 -> 6502 bytes .../org/asmeta/asm2java/.ToString.xtendbin | Bin 6237 -> 6237 bytes .../org/asmeta/asm2java/.Util.xtendbin | Bin 6405 -> 6405 bytes .../main/.AsmToJavaGenerator.xtendbin | Bin 4246 -> 4246 bytes .../main/.JavaASMGenerator2.java._trace | Bin 53996 -> 63004 bytes .../asm2java/main/.JavaASMGenerator2.xtendbin | Bin 11648 -> 13009 bytes .../asm2java/main/.JavaExeGenerator.xtendbin | Bin 8211 -> 8211 bytes .../asm2java/main/.JavaGenerator.xtendbin | Bin 11800 -> 11800 bytes .../main/.JavaWindowGenerator.xtendbin | Bin 13749 -> 13749 bytes .../asm2java/main/JavaASMGenerator2.java | 310 ++++++++++++------ .../asmetal2java_examples/pom.properties | 2 +- 23 files changed, 303 insertions(+), 115 deletions(-) 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 8eeb1c034f843b3efca1f71c12f076f76a50d9a8..3e082d38dbaac5945e844a05a85714d490a59494 100644 GIT binary patch delta 64 zcmext``MN^z?+#xgn@&DgCVq7aU<_OQDz{$`JAX23z+d-(g)0#Y$j(85|~^dXAh<~ H$vFZ5LWB}0 delta 64 zcmext``MN^z?+#xgn@&DgCTXL+(zDgqRc>g^Epv57BJ(vqz{-e*-XwHBrv%^&K^u} Hl5+$AZ5b1} diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FindMonitoredInControlledFunct.xtendbin index fe6ea45d4e1661022a7fe41c1d5aa6caa4a8e310..05d6ded45e4892e320b5bc2c42b030a4fff8e9a5 100644 GIT binary patch delta 64 zcmZ3au}FhAz?+#xgn@&DgCVR~aU-uCH#3ml?8lwK3})=)Tgd`qOimRx2h;O~?ZNaz GVMhS?mJu!h delta 64 zcmZ3au}FhAz?+#xgn@&DgCS+5+(uqIZe}38*^fJe8O+$pw~__Kn4BtX4yNY|+k@$c G!j1qT>=Lv9 diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.FunctionToJavaDef.xtendbin index 4cc1406b7784072269c55e4d855712c001c45f34..f8e53581e81c602bad076c665b31451db9b981a4 100644 GIT binary patch delta 64 zcmaEn_acusz?+#xgn@&DgCVq7aU<_NJ!T-i`JG-D3z$)Dtji2yOkQnf4yK=)*@J0y Gb4LJq9}|xN delta 64 zcmaEn_acusz?+#xgn@&DgCTXL+(zDeddxt2^E=1_l delta 63 zcmeD2?eXOe@MdNaVc_84U`Sahw~;qamKjKI&XbL10WlVzQ3TVI&#Rh)_>(!+?7_6R Gnj-)oe-aG< diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.RuleToJava.xtendbin index 56ed55240965959b42cd100c9dcf448094600f2b..50d7df6bb7386b96f07b564f0bebed6947aaf437 100644 GIT binary patch delta 64 zcmdm+wKt15z?+#xgn@&DgCVq7aU<_k4Q3#{d8tMbE0`grm&^uYOl~kS2h+Pu?7{RO G6Gs3&#}dZ? delta 64 zcmdm+wKt15z?+#xgn@&DgCTXL+(zE18q7d?^HPl>Rxm?KFPRO*nA~7u4yJdR*n{am GCXN7TTohRV diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.SeqRuleCollector.xtendbin index 71df17a30f9662132ef81304e7f323f8a90dae80..5cef1b74a14d4451cf8486dea81e1731039e6a47 100644 GIT binary patch delta 64 zcmX?aaNdA7z?+#xgn@&DgCVR~aU<_;US=S@`800_3z!imWXTF*Or9ie4yMnD+k{?HxmN@ diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJava.xtendbin index 71f9a15af08c330624072aa973ef420d16254b4f..9d2a8de9d778606d8e3ecc367844b981d84e08d6 100644 GIT binary patch delta 66 zcmaDdneoYFM&1B#W)=|!4h{~6uwuoHydN!@f%IlZt0Syn#tHivP7q_Vx~DmqPV}?~ I(~CVF0e*TDivR!s delta 66 zcmaDdneoYFM&1B#W)=|!4h{~6l$CNDc|Te*1L@6-R!3ODj1%@ToFK+zbx(6Jo#<%~ JrWboU0syDM6%hac diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaInAssignments.xtendbin index 99cbb7d6eff6dfd779566e822bb5020f93d42d2e..8c699d8555369fe35c65d8197d0318eb1216117b 100644 GIT binary patch delta 64 zcmX?Nam0c*z?+#xgn@&DgCVq7aU*Y!5Hpb8JV&U91OS7oW>Ky0%jZ*IL!oNOr9ug4yI2F+kJRbu9FZczL diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.TermToJavaStandardLibrary.xtendbin index 24110fc9dd449be75b72c7b00ef747735d4bf9eb..6bdd81dac4c671ef9d0672f34ccedb186def4e55 100644 GIT binary patch delta 58 zcmaE6^vsASz?+#xgn@&DgCVqdBTus+Q)uz#iGsQ;Ao_slGbSKCd4+@phaMyr0z?+#xgn@&DgCVR~aU<_>9%dlD`8tm|3z#7&*uw^5OkN;v4yJF3+k=Bj# delta 64 zcmca>aMyr0z?+#xgn@&DgCTXL+(zExJj_6P^K~9`7BE9lu!jxAn7lyT98BL5w+GWQ G5{>{^+7luG diff --git a/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin b/asmetal2java_codegen/xtend-gen/org/asmeta/asm2java/.Util.xtendbin index e18041b19e9979ba5d030fcb50bc0bc8fe0a2c71..b6708667037a22ec5f2418c9d0e813be01ec51be 100644 GIT binary patch delta 64 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 SqgV}AgW>U8zQGn);Qs^T{3dAt literal 53996 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 R6CdnfYyCGuu>5EC{{TXSv7Z0{ literal 11648 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 Njn;p2Gu?ma{{d105nccQ 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 26d471ffe5463592d89d53d6d4bc449d60749945..d2195e9b0a9a336843ff874f5305fb0ae6dee582 100644 GIT binary patch delta 64 zcmbR2Fxi1Oz?+#xgn@&DgCVR~aU<_8ab_UB`IPt_7BFL_%qk`jV{(|hIhdXxZx5y~ H$vXl7HtZ6) delta 64 zcmbR2Fxi1Oz?+#xgn@&DgJH#LxsANL#F>Hg=2PN#Sip>xGOL(CjLBj0=3sh)ygit{ HB<~0SjnNh3 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 23dfb4786f9e7b97e5678a0180c7b4911cdf30c5..a8d4d26e186166973b25e446cb274c9ff3eb36fe 100644 GIT binary patch delta 64 zcmbOcGb4sKz?+#xgn@&DgCVR~aU<^qMP?wq`GH~;E0__h{u|7g9Ia~(5|}(y*B(q? H*L4H{M`05t delta 64 zcmbOcGb4sKz?+#xgn@&DgCS+5+(zCDip)TI^8>{yRxl%0{Wq8~Ia=2oBrtiZu05E( HuImT@aHtfl 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 1a312bd8e628a790bf383c79cf6364919288185a..2e43e3c23d2063e82cf1d7088f2997cddd7d82a0 100644 GIT binary patch delta 64 zcmdm*y)~ORz?+#xgn@&DgCVq7aU*Y^4l|J6JWq$070g&?=*|pcO#WeF4yKJv?ZI@3 GsUrY7YZ5R3 delta 64 zcmdm*y)~ORz?+#xgn@&DgCTXL+(zC$9cCcCd7ch0E10p)(485?nEb=U984RT+Jos5 GQ%3-0029Ih 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