From 14e13383c0b7440d82bd478b2f4039153d9335d2 Mon Sep 17 00:00:00 2001 From: volodya-lombrozo Date: Thu, 7 Sep 2023 16:46:26 +0300 Subject: [PATCH] feat(#37): rewrite bytecode after optimization --- src/main/java/org/eolang/jeo/Optimization.java | 2 +- .../java/org/eolang/jeo/OptimizationTest.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/eolang/jeo/Optimization.java b/src/main/java/org/eolang/jeo/Optimization.java index 5503cbe52..20ce47a23 100644 --- a/src/main/java/org/eolang/jeo/Optimization.java +++ b/src/main/java/org/eolang/jeo/Optimization.java @@ -86,7 +86,7 @@ private void recompile(final IR ir) { subpath[subpath.length - 1] = String.format("%s.class", subpath[subpath.length - 1]); final Path path = Paths.get(this.classes.toString(), subpath); Files.createDirectories(path.getParent()); - Files.write(path, bytecode, StandardOpenOption.CREATE_NEW); + Files.write(path, bytecode, StandardOpenOption.CREATE); } catch (final IOException exception) { throw new IllegalStateException(String.format("Can't recompile '%s'", name), exception); } diff --git a/src/test/java/org/eolang/jeo/OptimizationTest.java b/src/test/java/org/eolang/jeo/OptimizationTest.java index 12d8283db..bbd4bc2b4 100644 --- a/src/test/java/org/eolang/jeo/OptimizationTest.java +++ b/src/test/java/org/eolang/jeo/OptimizationTest.java @@ -24,8 +24,10 @@ package org.eolang.jeo; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import org.cactoos.bytes.BytesOf; import org.cactoos.bytes.UncheckedBytes; @@ -33,6 +35,7 @@ import org.hamcrest.MatcherAssert; import org.hamcrest.Matchers; import org.hamcrest.io.FileMatchers; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -53,9 +56,14 @@ class OptimizationTest { @Test void appliesAllBoosts(@TempDir final Path classes) throws IOException { + final Path directory = Paths.get("org") + .resolve("eolang") + .resolve("jeo"); final String name = "MethodByte.class"; + final Path clazz = classes.resolve(directory).resolve(name); + Files.createDirectories(clazz.getParent()); Files.write( - classes.resolve(name), + clazz, new UncheckedBytes(new BytesOf(new ResourceOf(name))).asBytes(), StandardOpenOption.CREATE_NEW ); @@ -68,11 +76,7 @@ void appliesAllBoosts(@TempDir final Path classes) throws IOException { ); MatcherAssert.assertThat( "Optimization should save final bytecode into appropriate directory", - classes.resolve("org") - .resolve("eolang") - .resolve("jeo") - .resolve("MethodByte.class") - .toFile(), + clazz.toFile(), FileMatchers.anExistingFile() ); }