diff --git a/eo-maven-plugin/src/main/java/org/eolang/maven/rust_project/Module.java b/eo-maven-plugin/src/main/java/org/eolang/maven/rust_project/Module.java index cec8ef98fb..36b5bea9db 100644 --- a/eo-maven-plugin/src/main/java/org/eolang/maven/rust_project/Module.java +++ b/eo-maven-plugin/src/main/java/org/eolang/maven/rust_project/Module.java @@ -72,8 +72,9 @@ public void save(final Footprint footprint) throws IOException { */ private String transform() { final String signature = String.format( - "#[no_mangle]%spub extern \"system\" fn Java_EOorg_EOeolang_EOrust_%s(_env: JNIEnv, _class: JClass,) -> jint {", + "#[no_mangle]%spub extern \"system\" fn Java_EOrust_EOnatives_%s_%s(_env: JNIEnv, _class: JClass,) -> jint {", System.lineSeparator(), + this.name, this.name ); return String.join( diff --git a/eo-maven-plugin/src/test/java/org/eolang/maven/rust_project/ModuleTest.java b/eo-maven-plugin/src/test/java/org/eolang/maven/rust_project/ModuleTest.java index 132129d56a..4ccbfd5ed5 100644 --- a/eo-maven-plugin/src/test/java/org/eolang/maven/rust_project/ModuleTest.java +++ b/eo-maven-plugin/src/test/java/org/eolang/maven/rust_project/ModuleTest.java @@ -62,7 +62,7 @@ void transformsCorrectly(@TempDir final Path temp) throws Exception { "use jni::sys::{jint};", "use jni::JNIEnv;", "#[no_mangle]", - "pub extern \"system\" fn Java_EOorg_EOeolang_EOrust_simple(_env: JNIEnv, _class: JClass,) -> jint {" + "pub extern \"system\" fn Java_EOrust_EOnatives_simple_simple(_env: JNIEnv, _class: JClass,) -> jint {" ) ); } diff --git a/eo-runtime/pom.xml b/eo-runtime/pom.xml index 45f3df19c6..c267fbe07e 100644 --- a/eo-runtime/pom.xml +++ b/eo-runtime/pom.xml @@ -66,7 +66,7 @@ SOFTWARE. org.cactoos cactoos - test + provided org.llorllale diff --git a/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java b/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java index e9b7990947..5ce5f78b8a 100644 --- a/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java +++ b/eo-runtime/src/main/java/EOorg/EOeolang/EOrust.java @@ -27,9 +27,21 @@ */ package EOorg.EOeolang; +import EOrust.EOnatives.xhomextardis3xeoxeoxruntimextargetxeoxtest0; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.nio.file.Path; import java.nio.file.Paths; +import java.util.Base64; +import java.util.concurrent.ConcurrentHashMap; + import org.apache.commons.lang3.NotImplementedException; import org.apache.commons.lang3.SystemUtils; +import org.cactoos.text.TextOf; import org.eolang.AtComposite; import org.eolang.AtFree; import org.eolang.Data; @@ -50,7 +62,16 @@ */ @XmirObject(oname = "rust") public class EOrust extends PhDefault { + private static ConcurrentHashMap names; static { + try { + names = load("target/eo-test/names"); + } catch (IOException e) { + throw new RuntimeException( + "Cannot read the file target/eo-test/names", + e + ); + } final String lib; if (SystemUtils.IS_OS_WINDOWS) { lib = "common.dll"; @@ -91,8 +112,45 @@ public EOrust(final Phi sigma) { new AtComposite( this, rho -> - new Data.ToPhi(1234L) + { + System.out.println(); + return new Data.ToPhi( + (long) xhomextardis3xeoxeoxruntimextargetxeoxtest0.xhomextardis3xeoxeoxruntimextargetxeoxtest0() + ); + } ) ); } + private static ConcurrentHashMap load(final String src) throws IOException { + System.out.println(Paths.get(src).toAbsolutePath()); + try (ObjectInputStream map = new ObjectInputStream( + new ByteArrayInputStream( + Base64.getDecoder().decode( + new TextOf(Paths.get(src)).asString() + ) + ) + )) { + final Object result = map.readObject(); + if (result.getClass() != ConcurrentHashMap.class) { + throw new ClassCastException( + String.format( + "Object inside %s has wrong class %s", + src, + result.getClass() + ) + ); + } + return (ConcurrentHashMap) result; + } catch (final ClassNotFoundException exc) { + throw new IllegalArgumentException( + String.format( + "File %s contains invalid data", + src + ), + exc + ); + } catch (Exception e) { + throw new RuntimeException(e); + } + } }