diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-05-13 11:31:56 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-05-13 11:37:09 -0700 |
commit | fbce71f91449b52d7caf055d2edc66d81138bb71 (patch) | |
tree | 4cd420dcb7e51d182a9a513635b7f41c6aeb91e4 /plugin/src/sbt-test/sbt-jni/multiclasses | |
parent | 4ace77ae308e7dd2ac17878fbf903769bc8811bf (diff) | |
download | sbt-jni-fbce71f91449b52d7caf055d2edc66d81138bb71.tar.gz sbt-jni-fbce71f91449b52d7caf055d2edc66d81138bb71.tar.bz2 sbt-jni-fbce71f91449b52d7caf055d2edc66d81138bb71.zip |
Add scala classpath to javah
Diffstat (limited to 'plugin/src/sbt-test/sbt-jni/multiclasses')
3 files changed, 27 insertions, 2 deletions
diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala index 91d5683..69ac203 100644 --- a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Adder.scala @@ -2,13 +2,17 @@ package multiclasses import ch.jodersky.jni.nativeLoader +case class Value(x: Int) + @nativeLoader("demo0") class Adder(base0: Int) { final private val base = base0 - + @native def plus(term: Int): Int + @native def plusValue(value: Value): Int + } object Adder { diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala index 6734ae9..e8ea14e 100644 --- a/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/core/src/main/scala/multiclasses/Main.scala @@ -7,7 +7,9 @@ object Main { val one = new Adder(1) assert((zero plus 1) == 1) assert((one plus 1) == 2) - assert(Adder.sum(0,1) == 1) + assert(Adder.sum(0, 1) == 1) + + assert((one plusValue Value(1)) == 2) } def multiplication(): Unit = { diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c index 8b45660..719d135 100644 --- a/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c @@ -26,3 +26,22 @@ JNIEXPORT jint JNICALL Java_multiclasses_Adder_00024_sum { return term1 + term2; } + +/* Class: multiclasses_Adder + * Method: plusValue + * Signature: (Lmulticlasses/Value;)I + */ +JNIEXPORT jint JNICALL Java_multiclasses_Adder_plusValue + (JNIEnv* env, jobject instance, jobject value) +{ + jclass adderClass = (*env)->GetObjectClass(env, instance); + jfieldID baseField = (*env)->GetFieldID(env, adderClass, "base", "I"); + jint base = (*env)->GetIntField(env, instance, baseField); + + // Value.x + jclass valueClass = (*env)->GetObjectClass(env, value); + jmethodID xGetter = (*env)->GetMethodID(env, valueClass, "x", "()I"); + jint x = (*env)->CallIntMethod(env, value, xGetter); + + return base + x; +} |