From fc7798b440dcabfa07a97ede23185c69cfa2ee31 Mon Sep 17 00:00:00 2001 From: Adrien Bustany Date: Sun, 29 Sep 2019 16:37:10 +0200 Subject: [PATCH] Remove JNI crate We don't use it anywhere, flouze_flutter has its own bindings. --- .circleci/config.yml | 2 +- Cargo.toml | 1 - jni/.gitignore | 5 - jni/Cargo.toml | 13 -- jni/build.gradle | 57 ------ jni/gradle/wrapper/gradle-wrapper.jar | Bin 54712 -> 0 bytes jni/gradle/wrapper/gradle-wrapper.properties | 6 - jni/gradlew | 172 ------------------ jni/gradlew.bat | 84 --------- jni/src/main/java/flouze/Flouze.java | 12 -- jni/src/main/java/flouze/FlouzeException.java | 7 - jni/src/main/java/flouze/Repository.java | 8 - jni/src/main/java/flouze/SledRepository.java | 41 ----- jni/src/main/rust/lib.rs | 116 ------------ jni/src/test/java/flouze/FlouzeTest.java | 37 ---- 15 files changed, 1 insertion(+), 560 deletions(-) delete mode 100644 jni/.gitignore delete mode 100644 jni/Cargo.toml delete mode 100644 jni/build.gradle delete mode 100644 jni/gradle/wrapper/gradle-wrapper.jar delete mode 100644 jni/gradle/wrapper/gradle-wrapper.properties delete mode 100755 jni/gradlew delete mode 100644 jni/gradlew.bat delete mode 100644 jni/src/main/java/flouze/Flouze.java delete mode 100644 jni/src/main/java/flouze/FlouzeException.java delete mode 100644 jni/src/main/java/flouze/Repository.java delete mode 100644 jni/src/main/java/flouze/SledRepository.java delete mode 100644 jni/src/main/rust/lib.rs delete mode 100644 jni/src/test/java/flouze/FlouzeTest.java diff --git a/.circleci/config.yml b/.circleci/config.yml index 4a3f700..2b90e5c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -66,7 +66,7 @@ jobs: # Clean our own artifacts so that they don't clutter the cache - run: name: Clean Rust build directory before caching it - command: cargo clean -p flouze && cargo clean -p flouze-cli && cargo clean -p flouze-jni && cargo clean -p flouze-flutter + command: cargo clean -p flouze && cargo clean -p flouze-cli && cargo clean -p flouze-flutter - save_cache: key: "v1-rust" paths: diff --git a/Cargo.toml b/Cargo.toml index 33d7bda..5109705 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,5 @@ members = [ "lib", "cli", - "jni", "flouze_flutter" ] diff --git a/jni/.gitignore b/jni/.gitignore deleted file mode 100644 index 654ba8e..0000000 --- a/jni/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -/.gradle -/.idea -/build -/gen -/jni.iml diff --git a/jni/Cargo.toml b/jni/Cargo.toml deleted file mode 100644 index a1b2679..0000000 --- a/jni/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "flouze-jni" -version = "0.1.0" -authors = ["Adrien Bustany "] - -[lib] -path = "src/main/rust/lib.rs" -crate_type = ["cdylib"] - -[dependencies] -jni = "^0.12" -prost = "^0.5" -flouze = { path = "../lib" } diff --git a/jni/build.gradle b/jni/build.gradle deleted file mode 100644 index d8a9da0..0000000 --- a/jni/build.gradle +++ /dev/null @@ -1,57 +0,0 @@ -buildscript { - repositories { - mavenCentral() - } - dependencies { - classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.6' - } -} - -apply plugin: 'java' -apply plugin: 'idea' -apply plugin: 'com.google.protobuf' - -repositories { - mavenCentral() -} - -dependencies { - compile 'com.google.protobuf:protobuf-java:3.0.0' - testCompile 'junit:junit:4.12' -} - -sourceSets { - main { - proto { - srcDir '../lib/proto' - } - } -} - -protobuf { - protoc { - artifact = 'com.google.protobuf:protoc:3.0.0' - } - - generatedFilesBaseDir = "$projectDir/gen" -} - -clean { - delete protobuf.generatedFilesBaseDir -} - -idea { - module { - sourceDirs += file("../lib/proto"); - } -} - -task compileRust(type: Exec) { - commandLine 'cargo', 'build', '--target-dir', "${buildDir}/cargo" -} - -classes.dependsOn compileRust - -test { - systemProperty "java.library.path", file("${buildDir}/cargo/debug").absolutePath -} diff --git a/jni/gradle/wrapper/gradle-wrapper.jar b/jni/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d98de257443a0dd8ef2324b353d74bcc451d427a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54712 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

49F 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 diff --git a/jni/gradle/wrapper/gradle-wrapper.properties b/jni/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index de74548..0000000 --- a/jni/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Jul 05 17:37:21 CEST 2018 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-all.zip diff --git a/jni/gradlew b/jni/gradlew deleted file mode 100755 index cccdd3d..0000000 --- a/jni/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/jni/gradlew.bat b/jni/gradlew.bat deleted file mode 100644 index e95643d..0000000 --- a/jni/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/jni/src/main/java/flouze/Flouze.java b/jni/src/main/java/flouze/Flouze.java deleted file mode 100644 index 3a57c9f..0000000 --- a/jni/src/main/java/flouze/Flouze.java +++ /dev/null @@ -1,12 +0,0 @@ -package flouze; - -class Flouze { - private static boolean initialized = false; - - public static synchronized void init() { - if (!initialized) { - System.loadLibrary("flouze_jni"); - initialized = true; - } - } -} diff --git a/jni/src/main/java/flouze/FlouzeException.java b/jni/src/main/java/flouze/FlouzeException.java deleted file mode 100644 index 17837ca..0000000 --- a/jni/src/main/java/flouze/FlouzeException.java +++ /dev/null @@ -1,7 +0,0 @@ -package flouze; - -public class FlouzeException extends Exception { - public FlouzeException(String message) { - super(message); - } -} diff --git a/jni/src/main/java/flouze/Repository.java b/jni/src/main/java/flouze/Repository.java deleted file mode 100644 index 8a1cba1..0000000 --- a/jni/src/main/java/flouze/Repository.java +++ /dev/null @@ -1,8 +0,0 @@ -package flouze; - -import flouze.Model.Account; - -interface Repository { - void addAccount(Account account); - Account getAccount(byte[] accountId); -} diff --git a/jni/src/main/java/flouze/SledRepository.java b/jni/src/main/java/flouze/SledRepository.java deleted file mode 100644 index ce9f344..0000000 --- a/jni/src/main/java/flouze/SledRepository.java +++ /dev/null @@ -1,41 +0,0 @@ -package flouze; - -import com.google.protobuf.InvalidProtocolBufferException; -import flouze.Model.Account; - -class SledRepository implements Repository { - private final long ptr; - - private SledRepository(long ptr) { - this.ptr = ptr; - } - - public static SledRepository temporary() { - long ptr = _newSledTemporary(); - - return new SledRepository(ptr); - } - - public void close() { - _destroy(ptr); - } - - @Override - public void addAccount(Account account) { - _addAccount(ptr, account.toByteArray()); - } - - @Override - public Account getAccount(byte[] accountId) { - try { - return Account.parseFrom(_getAccount(ptr, accountId)); - } catch (InvalidProtocolBufferException e) { - throw new RuntimeException(e); - } - } - - private static native long _newSledTemporary(); - private native void _destroy(long ptr); - private static native void _addAccount(long ptr, byte[] account); - private native byte[] _getAccount(long ptr, byte[] accountId); -} diff --git a/jni/src/main/rust/lib.rs b/jni/src/main/rust/lib.rs deleted file mode 100644 index 9ff8954..0000000 --- a/jni/src/main/rust/lib.rs +++ /dev/null @@ -1,116 +0,0 @@ -extern crate flouze; -extern crate jni; -extern crate prost; - -use jni::objects::*; -use jni::sys::*; -use jni::JNIEnv; - -use flouze::model; -use flouze::repository::Repository; -use flouze::sledrepository::SledRepository; - -use prost::Message; - -const FLOUZE_EXCEPTION_CLASS: &'static str = "flouze/FlouzeException"; - -fn throw_err(env: &JNIEnv, err: ::flouze::errors::Error) { - let _ = env.throw((FLOUZE_EXCEPTION_CLASS, format!("{}", err))); -} - -fn ok_or_throw(env: &JNIEnv, res: ::flouze::errors::Result, default: T) -> T { - match res { - Err(e) => { - throw_err(env, e); - default - } - Ok(v) => v, - } -} - -#[no_mangle] -#[allow(non_snake_case)] -pub extern "system" fn Java_flouze_SledRepository__1newSledTemporary( - env: JNIEnv, - _class: JClass, -) -> jlong { - match SledRepository::temporary() { - Ok(repo) => Box::into_raw(Box::new(repo)) as jlong, - _ => { - let _ = env.throw((FLOUZE_EXCEPTION_CLASS, "Error while creating repository")); - 0 - } - } -} - -#[no_mangle] -#[allow(non_snake_case)] -pub unsafe extern "system" fn Java_flouze_SledRepository__1destroy( - _env: JNIEnv, - _instance: JObject, - ptr: jlong, -) { - if ptr == 0 { - return; - } - - let _repo = Box::from_raw(ptr as *mut SledRepository); -} - -fn add_account(repo: &mut SledRepository, account_data: &Vec) -> ::flouze::errors::Result<()> { - let account = model::Account::decode(account_data)?; - repo.add_account(&account) -} - -#[no_mangle] -#[allow(non_snake_case)] -pub unsafe extern "system" fn Java_flouze_SledRepository__1addAccount( - env: JNIEnv, - _class: JClass, - instance: jlong, - account: jbyteArray, -) { - let mut repo = &mut *(instance as *mut SledRepository); - let account_bytes = match env.convert_byte_array(account) { - Ok(bytes) => bytes, - Err(_) => { - return; - } // An exception has been raised - }; - ok_or_throw(&env, add_account(&mut repo, &account_bytes), ()); -} - -fn get_account(repo: &SledRepository, account_id: &Vec) -> ::flouze::errors::Result> { - let account = repo.get_account(&account_id)?; - - let mut buf = Vec::new(); - buf.reserve(account.encoded_len()); - account.encode(&mut buf).unwrap(); - - Ok(buf) -} - -#[no_mangle] -#[allow(non_snake_case)] -pub unsafe extern "system" fn Java_flouze_SledRepository__1getAccount( - env: JNIEnv, - _class: JClass, - instance: jlong, - jaccount_id: jbyteArray, -) -> jbyteArray { - let repo = &mut *(instance as *mut SledRepository); - let account_id = match env.convert_byte_array(jaccount_id) { - Ok(bytes) => bytes, - Err(_) => { - return env.byte_array_from_slice(&vec![]).unwrap(); - } // An exception has been raised - }; - - match get_account(&repo, &account_id) { - Ok(bytes) => env.byte_array_from_slice(&bytes).unwrap(), - Err(e) => { - throw_err(&env, e); - return env.byte_array_from_slice(&vec![]).unwrap(); - } - } -} diff --git a/jni/src/test/java/flouze/FlouzeTest.java b/jni/src/test/java/flouze/FlouzeTest.java deleted file mode 100644 index 5064f4e..0000000 --- a/jni/src/test/java/flouze/FlouzeTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package flouze; - -import com.google.protobuf.ByteString; -import org.junit.Test; -import static org.junit.Assert.*; - -public class FlouzeTest { - static { - Flouze.init(); - } - - @Test - public void testSledRepository() { - SledRepository repo = SledRepository.temporary(); - - final byte[] person_id = {1, 2, 3}; - final Model.Person member = Model.Person.newBuilder() - .setUuid(ByteString.copyFrom(person_id)) - .setName("John") - .build(); - - final byte[] account_id = {1, 2, 3}; - final Model.Account account = Model.Account.newBuilder() - .setUuid(ByteString.copyFrom(account_id)) - .setLabel("My account") - .addMembers(member) - .build(); - - repo.addAccount(account); - - final Model.Account fetched = repo.getAccount(account_id); - - assertEquals(account, fetched); - - repo.close(); - } -}