diff options
Diffstat (limited to 'plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c')
-rw-r--r-- | plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c | 19 |
1 files changed, 19 insertions, 0 deletions
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; +} |