aboutsummaryrefslogtreecommitdiff
path: root/plugin/src/sbt-test/sbt-jni/multiclasses/native1/src/library.c
diff options
context:
space:
mode:
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.c19
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;
+}