From e90ca8b7cdfaaaaf902bcaf02b0a524a65f0fe64 Mon Sep 17 00:00:00 2001 From: maxonfjvipon Date: Fri, 17 May 2024 17:00:25 +0300 Subject: [PATCH] fix(#3188): improved PhiMojo --- .../main/java/org/eolang/maven/PhiMojo.java | 14 +- .../org/eolang/maven/phi/incorrect-inners.xsl | 62 +++++++++ .../resources/org/eolang/maven/phi/to-phi.xsl | 1 - .../java/org/eolang/maven/PhiMojoTest.java | 22 ++- .../org/eolang/maven/phi/xmir/B.xmir | 129 ++++++++++++++++++ .../maven/phi/xmir/OriginalException.xmir | 38 +----- .../eolang/maven/phi/xmir/SomeException.xmir | 30 ---- .../maven/phi/xmir/Top$TopInnerInstance.xmir | 40 ------ .../maven/phi/xmir/Top$TopInnerStatic.xmir | 25 ---- 9 files changed, 223 insertions(+), 138 deletions(-) create mode 100644 eo-maven-plugin/src/main/resources/org/eolang/maven/phi/incorrect-inners.xsl create mode 100644 eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/B.xmir diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/PhiMojo.java b/eo-maven-plugin/src/main/java/org/eolang/maven/PhiMojo.java index 639ba36302..13e34989c0 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/PhiMojo.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/PhiMojo.java @@ -27,8 +27,9 @@ import com.jcabi.xml.XML; import com.jcabi.xml.XMLDocument; import com.yegor256.xsline.Shift; -import com.yegor256.xsline.StClasspath; +import com.yegor256.xsline.TrClasspath; import com.yegor256.xsline.TrDefault; +import com.yegor256.xsline.TrJoined; import com.yegor256.xsline.Train; import com.yegor256.xsline.Xsline; import java.io.File; @@ -92,6 +93,7 @@ public final class PhiMojo extends SafeMojo { * in {@link OptimizeMojo} and here. * @checkstyle MemberNameCheck (5 lines) */ + @Parameter(property = "eo.phiOptimize", required = true, defaultValue = "true") @SuppressWarnings("PMD.ImmutableField") private boolean phiOptimize = true; @@ -175,7 +177,15 @@ count, new Rel(this.phiInputDir), new Rel(this.phiOutputDir) private static String translated(final Train train, final XML xmir) throws ImpossibleToPhiTranslationException { final XML translated = new Xsline( - train.with(new StClasspath("/org/eolang/maven/phi/to-phi.xsl")) + new TrJoined<>( + train, + new TrClasspath<>( + "/org/eolang/parser/critical-errors/duplicate-names.xsl", + "/org/eolang/maven/phi/incorrect-inners.xsl", + "/org/eolang/parser/fail-on-critical.xsl", + "/org/eolang/maven/phi/to-phi.xsl" + ).back() + ) ).pass(xmir); Logger.debug(PhiMojo.class, "XML after translation to phi:\n%s", translated); final List phi = translated.xpath("phi/text()"); diff --git a/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/incorrect-inners.xsl b/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/incorrect-inners.xsl new file mode 100644 index 0000000000..487479a63c --- /dev/null +++ b/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/incorrect-inners.xsl @@ -0,0 +1,62 @@ + + + + + + + + + + + incorrect-inners + + + + + + + + No line + + + + + critical + + Element can't have child elements if it does not have 'base' or 'abstract' attribute + + . Name of the object - + + + + + + + + + + + + diff --git a/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/to-phi.xsl b/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/to-phi.xsl index e2080ebc70..d7e21b3f6b 100644 --- a/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/to-phi.xsl +++ b/eo-maven-plugin/src/main/resources/org/eolang/maven/phi/to-phi.xsl @@ -24,7 +24,6 @@ SOFTWARE. --> - diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/PhiMojoTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/PhiMojoTest.java index 821aea909c..6a54cc04b7 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/PhiMojoTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/PhiMojoTest.java @@ -68,9 +68,25 @@ void createsFiles(@TempDir final Path temp) throws Exception { @ParameterizedTest @ClasspathSource(value = "org/eolang/maven/phi/xmir", glob = "**.xmir") - void convertsXmirsToPhiWithoutErrors(final String xmir, @TempDir final Path temp) - throws IOException { - final FakeMaven maven = new FakeMaven(temp); + void convertsXmirsToPhiWithoutErrorsWithoutOptimizations( + final String xmir, + @TempDir final Path temp + ) throws IOException { + final FakeMaven maven = new FakeMaven(temp).with("phiOptimize", false); + new HmBase(temp).save(xmir, Paths.get("target/2-optimize/test.xmir")); + Assertions.assertDoesNotThrow( + () -> maven.execute(PhiMojo.class), + BinarizeParseTest.TO_ADD_MESSAGE + ); + } + + @ParameterizedTest + @ClasspathSource(value = "org/eolang/maven/phi/xmir", glob = "**.xmir") + void convertsXmirsToPhiWithoutErrorsWithOptimizations( + final String xmir, + @TempDir final Path temp + ) throws IOException { + final FakeMaven maven = new FakeMaven(temp).with("phiOptimize", true); new HmBase(temp).save(xmir, Paths.get("target/2-optimize/test.xmir")); Assertions.assertDoesNotThrow( () -> maven.execute(PhiMojo.class), diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/B.xmir b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/B.xmir new file mode 100644 index 0000000000..f097e06dfa --- /dev/null +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/B.xmir @@ -0,0 +1,129 @@ + + + + yv66vgAAADcAHAoAAgADBwAEDAAFAAYBABBqYXZhL2xhbmcvT2JqZWN0AQAGPGluaXQ+AQADKClWCQAIAAkHAAoMAAsADAEAFm9yZy9lb2xhbmcvYmVuY2htYXJrL0IBAAFmAQAYTG9yZy9lb2xhbmcvYmVuY2htYXJrL0Y7CwAOAA8HABAMABEAEgEAFm9yZy9lb2xhbmcvYmVuY2htYXJrL0YBAANmb28BAAMoKUkBABsoTG9yZy9lb2xhbmcvYmVuY2htYXJrL0Y7KVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAGExvcmcvZW9sYW5nL2JlbmNobWFyay9COwEAA2JhcgEAClNvdXJjZUZpbGUBAAZCLmphdmEAIAAIAAIAAAABABIACwAMAAAAAgAAAAUAEwABABQAAABGAAIAAgAAAAoqtwABKiu1AAexAAAAAgAVAAAADgADAAAAHAAEAB0ACQAeABYAAAAWAAIAAAAKABcAGAAAAAAACgALAAwAAQAAABkAEgABABQAAAA2AAIAAQAAAAwqtAAHuQANAQAFYKwAAAACABUAAAAGAAEAAAAgABYAAAAMAAEAAAAMABcAGAAAAAEAGgAAAAIAGw== + + + + + + package + org.eolang.benchmark + org.eolang.benchmark + + + alias + org.eolang.jeo.opcode + org.eolang.jeo.opcode + + + alias + org.eolang.jeo.label + org.eolang.jeo.label + + + + + 00 00 00 00 00 00 00 37 + 00 00 00 00 00 00 00 20 + 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 + + + 00 00 00 00 00 00 00 12 + 4C 6F 72 67 2F 65 6F 6C 61 6E 67 2F 62 65 6E 63 68 6D 61 72 6B 2F 46 3B + + + + + 00 00 00 00 00 00 00 00 + 28 4C 6F 72 67 2F 65 6F 6C 61 6E 67 2F 62 65 6E 63 68 6D 61 72 6B 2F 46 3B 29 56 + + + + 00 00 00 00 00 00 00 02 + 00 00 00 00 00 00 00 02 + + + + + 32 39 36 64 34 31 30 33 2D 31 64 35 37 2D 34 38 33 36 2D 62 63 38 37 2D 37 63 35 63 32 62 61 30 37 30 31 63 + + + + 66 64 63 64 31 64 63 62 2D 37 37 35 62 2D 34 64 32 30 2D 62 31 39 61 2D 37 66 32 32 34 37 32 32 31 36 31 64 + + + + + + + 33 36 64 66 62 33 62 66 2D 32 31 33 39 2D 34 39 63 36 2D 62 61 63 36 2D 62 66 61 32 33 30 61 38 65 38 62 39 + + 00 00 00 00 00 00 00 B1 + + 32 61 31 35 30 64 31 64 2D 32 39 65 65 2D 34 66 61 62 2D 62 38 35 61 2D 66 37 62 32 64 33 32 36 64 36 39 61 + + + + + 00 00 00 00 00 00 00 00 + 28 29 49 + + + + 00 00 00 00 00 00 00 02 + 00 00 00 00 00 00 00 01 + + + + 32 39 65 63 38 31 37 34 2D 32 64 39 64 2D 34 35 35 37 2D 39 61 32 64 2D 62 33 62 33 34 30 63 33 66 38 31 62 + + + + + + + + + 00 00 00 00 00 00 00 02 + + + 00 00 00 00 00 00 00 AC + + 36 66 38 37 34 65 38 32 2D 63 39 65 37 2D 34 62 30 33 2D 62 65 64 32 2D 62 66 32 34 30 33 64 64 33 65 32 38 + + + + + + diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/OriginalException.xmir b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/OriginalException.xmir index e97cb7638f..304f78b99a 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/OriginalException.xmir +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/OriginalException.xmir @@ -22,12 +22,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. --> - + yv66vgAAADQAFwoAAgADBwAEDAAFAAYBABpqYXZhL2xhbmcvUnVudGltZUV4Y2VwdGlvbgEABjxpbml0PgEAFShMamF2YS9sYW5nL1N0cmluZzspVgoAAgAIDAAFAAkBACooTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9UaHJvd2FibGU7KVYHAAsBAChvcmcvZW9sYW5nL2luaGVyaXRhbmNlL09yaWdpbmFsRXhjZXB0aW9uAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACpMb3JnL2VvbGFuZy9pbmhlcml0YW5jZS9PcmlnaW5hbEV4Y2VwdGlvbjsBAAdtZXNzYWdlAQASTGphdmEvbGFuZy9TdHJpbmc7AQAFY2F1c2UBABVMamF2YS9sYW5nL1Rocm93YWJsZTsBAApTb3VyY2VGaWxlAQAWT3JpZ2luYWxFeGNlcHRpb24uamF2YQAgAAoAAgAAAAAAAgABAAUABgABAAwAAAA+AAIAAgAAAAYqK7cAAbEAAAACAA0AAAAKAAIAAAAdAAUAHgAOAAAAFgACAAAABgAPABAAAAAAAAYAEQASAAEAAQAFAAkAAQAMAAAASQADAAMAAAAHKisstwAHsQAAAAIADQAAAAoAAgAAACEABgAiAA4AAAAgAAMAAAAHAA8AEAAAAAAABwARABIAAQAAAAcAEwAUAAIAAQAVAAAAAgAW @@ -54,37 +49,6 @@ SOFTWARE. 00 00 00 00 00 00 00 20 6A 61 76 61 2F 6C 61 6E 67 2F 52 75 6E 74 69 6D 65 45 78 63 65 70 74 69 6F 6E - - 00 00 00 00 00 00 00 01 - 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 - - - - - - 35 32 62 66 66 37 36 30 2D 34 62 63 38 2D 34 37 61 64 2D 62 63 35 65 2D 34 38 38 32 33 32 65 64 66 30 35 37 - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 00 - - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 01 - - - 00 00 00 00 00 00 00 B7 - 6A 61 76 61 2F 6C 61 6E 67 2F 52 75 6E 74 69 6D 65 45 78 63 65 70 74 69 6F 6E - 3C 69 6E 69 74 3E - 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 - - 65 62 61 62 36 62 36 36 2D 61 31 30 66 2D 34 65 35 32 2D 38 66 64 64 2D 34 64 66 35 33 62 62 37 38 61 31 62 - - 00 00 00 00 00 00 00 B1 - - 34 64 66 65 61 32 63 39 2D 37 37 65 30 2D 34 64 36 65 2D 38 31 63 38 2D 65 66 65 34 65 38 62 31 61 37 61 64 - - - 00 00 00 00 00 00 00 01 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 54 68 72 6F 77 61 62 6C 65 3B 29 56 diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/SomeException.xmir b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/SomeException.xmir index eec82e6cf9..af825f2ca3 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/SomeException.xmir +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/SomeException.xmir @@ -60,36 +60,6 @@ SOFTWARE. FF FF FF FF FF FF CF E9 - - 00 00 00 00 00 00 00 01 - 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 - - - - - - 65 31 35 31 61 36 34 65 2D 30 64 39 37 2D 34 66 64 34 2D 62 37 61 34 2D 63 64 35 35 30 35 61 63 39 65 37 31 - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 00 - - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 01 - - - 00 00 00 00 00 00 00 B7 - 6F 72 67 2F 65 6F 6C 61 6E 67 2F 69 6E 68 65 72 69 74 61 6E 63 65 2F 4F 72 69 67 69 6E 61 6C 45 78 63 65 70 74 69 6F 6E - 3C 69 6E 69 74 3E - 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 - - - 00 00 00 00 00 00 00 B1 - - 66 33 30 35 34 34 63 65 2D 39 38 61 30 2D 34 32 30 62 2D 62 38 36 61 2D 30 61 38 66 38 34 35 31 32 63 37 34 - - - 00 00 00 00 00 00 00 01 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 54 68 72 6F 77 61 62 6C 65 3B 29 56 diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerInstance.xmir b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerInstance.xmir index 39e7456d05..4d6666ee7a 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerInstance.xmir +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerInstance.xmir @@ -60,46 +60,6 @@ SOFTWARE. - - 00 00 00 00 00 00 00 02 - 28 4C 6F 72 67 2F 65 6F 6C 61 6E 67 2F 69 6E 6E 65 72 63 6C 61 73 73 65 73 2F 54 6F 70 3B 29 56 - - - - - - 35 31 37 37 30 31 32 31 2D 66 36 31 32 2D 34 32 35 37 2D 61 36 37 38 2D 35 35 38 61 39 33 33 62 37 33 38 61 - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 00 - - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 01 - - - 00 00 00 00 00 00 00 B5 - 6F 72 67 2F 65 6F 6C 61 6E 67 2F 69 6E 6E 65 72 63 6C 61 73 73 65 73 2F 54 6F 70 24 54 6F 70 49 6E 6E 65 72 49 6E 73 74 61 6E 63 65 - 74 68 69 73 24 30 - 4C 6F 72 67 2F 65 6F 6C 61 6E 67 2F 69 6E 6E 65 72 63 6C 61 73 73 65 73 2F 54 6F 70 3B - - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 00 - - - 00 00 00 00 00 00 00 B7 - 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 - 3C 69 6E 69 74 3E - 28 29 56 - - - 00 00 00 00 00 00 00 B1 - - 66 63 63 64 64 61 35 31 2D 39 34 65 32 2D 34 33 30 37 2D 39 39 35 34 2D 35 33 65 62 61 38 61 61 63 37 62 66 - - - 00 00 00 00 00 00 00 01 28 29 56 diff --git a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerStatic.xmir b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerStatic.xmir index dedd594828..2e73b6d319 100644 --- a/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerStatic.xmir +++ b/eo-maven-plugin/src/test/resources/org/eolang/maven/phi/xmir/Top$TopInnerStatic.xmir @@ -54,31 +54,6 @@ SOFTWARE. 00 00 00 00 00 00 00 20 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 - - 00 00 00 00 00 00 00 02 - 28 29 56 - - - - - 34 38 38 31 37 37 61 64 2D 66 32 30 61 2D 34 62 36 65 2D 61 38 61 34 2D 35 63 35 64 61 63 34 62 31 39 37 61 - - 00 00 00 00 00 00 00 19 - 00 00 00 00 00 00 00 00 - - - 00 00 00 00 00 00 00 B7 - 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 - 3C 69 6E 69 74 3E - 28 29 56 - - - 00 00 00 00 00 00 00 B1 - - 32 38 37 61 66 38 63 34 2D 66 30 34 32 2D 34 31 36 38 2D 38 36 30 66 2D 37 39 66 36 61 34 64 35 62 33 36 32 - - - 00 00 00 00 00 00 00 01 28 29 56