1 /*
2  * Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 #include "jni.h"
24 #include <stdlib.h>
25 
26 extern "C" {
27 
28 
logMessage(JNIEnv * env,jobject thisObject,jstring message)29 static void logMessage(JNIEnv *env, jobject thisObject, jstring message)
30 {
31         jclass klass;
32         klass = env->GetObjectClass(thisObject);
33         env->CallVoidMethod(thisObject,
34                             env->GetMethodID(klass, "log", "(Ljava/lang/String;)V"),
35                             message);
36 }
37 
38 JNIEXPORT void JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_VoidMethod(JNIEnv * env,jobject thisObject,jstring message)39 Java_nsk_share_jpda_NativeMethodsTestThread_VoidMethod(JNIEnv *env,
40         jobject thisObject, jstring message)
41 {
42         logMessage(env, thisObject, message);
43 }
44 
45 JNIEXPORT jboolean JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_BooleanMethod(JNIEnv * env,jobject thisObject,jstring message)46 Java_nsk_share_jpda_NativeMethodsTestThread_BooleanMethod(JNIEnv *env,
47         jobject thisObject, jstring message)
48 {
49         jclass klass;
50         jfieldID valueField;
51 
52         logMessage(env, thisObject, message);
53 
54         klass = env->GetObjectClass(thisObject);
55 
56         valueField = env->GetStaticFieldID(klass, "expectedBooleanValue", "Z");
57 
58         return env->GetStaticBooleanField(klass, valueField);
59 }
60 
61 JNIEXPORT jbyte JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ByteMethod(JNIEnv * env,jobject thisObject,jstring message)62 Java_nsk_share_jpda_NativeMethodsTestThread_ByteMethod(JNIEnv *env,
63         jobject thisObject, jstring message)
64 {
65         jclass klass;
66         jfieldID valueField;
67 
68         logMessage(env, thisObject, message);
69 
70         klass = env->GetObjectClass(thisObject);
71 
72         valueField = env->GetStaticFieldID(klass, "expectedByteValue", "B");
73 
74         return env->GetStaticByteField(klass, valueField);
75 }
76 
77 JNIEXPORT jshort JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ShortMethod(JNIEnv * env,jobject thisObject,jstring message)78 Java_nsk_share_jpda_NativeMethodsTestThread_ShortMethod(JNIEnv *env,
79         jobject thisObject, jstring message)
80 {
81         jclass klass;
82         jfieldID valueField;
83 
84         logMessage(env, thisObject, message);
85 
86         klass = env->GetObjectClass(thisObject);
87 
88         valueField = env->GetStaticFieldID(klass, "expectedShortValue", "S");
89 
90         return env->GetStaticShortField(klass, valueField);
91 }
92 
93 JNIEXPORT jchar JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_CharMethod(JNIEnv * env,jobject thisObject,jstring message)94 Java_nsk_share_jpda_NativeMethodsTestThread_CharMethod(JNIEnv *env,
95         jobject thisObject, jstring message)
96 {
97         jclass klass;
98         jfieldID valueField;
99 
100         logMessage(env, thisObject, message);
101 
102         klass = env->GetObjectClass(thisObject);
103 
104         valueField = env->GetStaticFieldID(klass, "expectedCharValue", "C");
105 
106         return env->GetStaticCharField(klass, valueField);
107 }
108 
109 JNIEXPORT jint JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_IntMethod(JNIEnv * env,jobject thisObject,jstring message)110 Java_nsk_share_jpda_NativeMethodsTestThread_IntMethod(JNIEnv *env,
111         jobject thisObject, jstring message)
112 {
113         jclass klass;
114         jfieldID valueField;
115 
116         logMessage(env, thisObject, message);
117 
118         klass = env->GetObjectClass(thisObject);
119 
120         valueField = env->GetStaticFieldID(klass, "expectedIntValue", "I");
121 
122         return env->GetStaticIntField(klass, valueField);
123 }
124 
125 JNIEXPORT jlong JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_LongMethod(JNIEnv * env,jobject thisObject,jstring message)126 Java_nsk_share_jpda_NativeMethodsTestThread_LongMethod(JNIEnv *env,
127         jobject thisObject, jstring message)
128 {
129         jclass klass;
130         jfieldID valueField;
131 
132         logMessage(env, thisObject, message);
133 
134         klass = env->GetObjectClass(thisObject);
135 
136         valueField = env->GetStaticFieldID(klass, "expectedLongValue", "J");
137 
138         return env->GetStaticLongField(klass, valueField);
139 }
140 
141 JNIEXPORT jfloat JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_FloatMethod(JNIEnv * env,jobject thisObject,jstring message)142 Java_nsk_share_jpda_NativeMethodsTestThread_FloatMethod(JNIEnv *env,
143         jobject thisObject, jstring message)
144 {
145         jclass klass;
146         jfieldID valueField;
147 
148         logMessage(env, thisObject, message);
149 
150         klass = env->GetObjectClass(thisObject);
151 
152         valueField = env->GetStaticFieldID(klass, "expectedFloatValue", "F");
153 
154         return env->GetStaticFloatField(klass, valueField);
155 }
156 
157 JNIEXPORT jdouble JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_DoubleMethod(JNIEnv * env,jobject thisObject,jstring message)158 Java_nsk_share_jpda_NativeMethodsTestThread_DoubleMethod(JNIEnv *env,
159         jobject thisObject, jstring message)
160 {
161         jclass klass;
162         jfieldID valueField;
163 
164         logMessage(env, thisObject, message);
165 
166         klass = env->GetObjectClass(thisObject);
167 
168         valueField = env->GetStaticFieldID(klass, "expectedDoubleValue", "D");
169 
170         return env->GetStaticDoubleField(klass, valueField);
171 }
172 
173 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ObjectArrayMethod(JNIEnv * env,jobject thisObject,jstring message)174 Java_nsk_share_jpda_NativeMethodsTestThread_ObjectArrayMethod(JNIEnv *env,
175         jobject thisObject, jstring message)
176 {
177         jclass klass;
178         jfieldID valueField;
179 
180         logMessage(env, thisObject, message);
181 
182         klass = env->GetObjectClass(thisObject);
183 
184         valueField = env->GetStaticFieldID(klass, "expectedObjectArrayValue",
185                                            "[Ljava/lang/Object;");
186 
187         return env->GetStaticObjectField(klass, valueField);
188 }
189 
190 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_StringMethod(JNIEnv * env,jobject thisObject,jstring message)191 Java_nsk_share_jpda_NativeMethodsTestThread_StringMethod(JNIEnv *env,
192         jobject thisObject, jstring message)
193 {
194         jclass klass;
195         jfieldID valueField;
196 
197         logMessage(env, thisObject, message);
198 
199         klass = env->GetObjectClass(thisObject);
200 
201         valueField = env->GetStaticFieldID(klass, "expectedStringValue",
202                                            "Ljava/lang/String;");
203 
204         return env->GetStaticObjectField(klass, valueField);
205 }
206 
207 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ThreadMethod(JNIEnv * env,jobject thisObject,jstring message)208 Java_nsk_share_jpda_NativeMethodsTestThread_ThreadMethod(JNIEnv *env,
209         jobject thisObject, jstring message)
210 {
211         jclass klass;
212         jfieldID valueField;
213 
214         logMessage(env, thisObject, message);
215 
216         klass = env->GetObjectClass(thisObject);
217 
218         valueField = env->GetStaticFieldID(klass, "expectedThreadValue",
219                                            "Ljava/lang/Thread;");
220 
221         return env->GetStaticObjectField(klass, valueField);
222 }
223 
224 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ThreadGroupMethod(JNIEnv * env,jobject thisObject,jstring message)225 Java_nsk_share_jpda_NativeMethodsTestThread_ThreadGroupMethod(JNIEnv *env,
226         jobject thisObject, jstring message)
227 {
228         jclass klass;
229         jfieldID valueField;
230 
231         logMessage(env, thisObject, message);
232 
233         klass = env->GetObjectClass(thisObject);
234 
235         valueField = env->GetStaticFieldID(klass, "expectedThreadGroupValue",
236                                            "Ljava/lang/ThreadGroup;");
237 
238         return env->GetStaticObjectField(klass, valueField);
239 }
240 
241 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ClassObjectMethod(JNIEnv * env,jobject thisObject,jstring message)242 Java_nsk_share_jpda_NativeMethodsTestThread_ClassObjectMethod(JNIEnv *env,
243         jobject thisObject, jstring message)
244 {
245         jclass klass;
246         jfieldID valueField;
247 
248         logMessage(env, thisObject, message);
249 
250         klass = env->GetObjectClass(thisObject);
251 
252         valueField = env->GetStaticFieldID(klass, "expectedClassObjectValue",
253                                            "Ljava/lang/Class;");
254 
255         return env->GetStaticObjectField(klass, valueField);
256 }
257 
258 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ClassLoaderMethod(JNIEnv * env,jobject thisObject,jstring message)259 Java_nsk_share_jpda_NativeMethodsTestThread_ClassLoaderMethod(JNIEnv *env,
260         jobject thisObject, jstring message)
261 {
262         jclass klass;
263         jfieldID valueField;
264 
265         logMessage(env, thisObject, message);
266 
267         klass = env->GetObjectClass(thisObject);
268 
269         valueField = env->GetStaticFieldID(klass, "expectedClassLoaderValue",
270                                            "Ljava/lang/ClassLoader;");
271 
272         return env->GetStaticObjectField(klass, valueField);
273 }
274 
275 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ObjectMethod(JNIEnv * env,jobject thisObject,jstring message)276 Java_nsk_share_jpda_NativeMethodsTestThread_ObjectMethod(JNIEnv *env,
277         jobject thisObject, jstring message)
278 {
279         jclass klass;
280         jfieldID valueField;
281 
282         logMessage(env, thisObject, message);
283 
284         klass = env->GetObjectClass(thisObject);
285 
286         valueField = env->GetStaticFieldID(klass, "expectedObjectValue",
287                                            "Ljava/lang/Object;");
288 
289         return env->GetStaticObjectField(klass, valueField);
290 }
291 
292 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_BooleanWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)293 Java_nsk_share_jpda_NativeMethodsTestThread_BooleanWrapperMethod(JNIEnv *env,
294         jobject thisObject, jstring message)
295 {
296         jclass klass;
297         jfieldID valueField;
298 
299         logMessage(env, thisObject, message);
300 
301         klass = env->GetObjectClass(thisObject);
302 
303         valueField = env->GetStaticFieldID(klass, "expectedBooleanWrapperValue",
304                                            "Ljava/lang/Boolean;");
305 
306         return env->GetStaticObjectField(klass, valueField);
307 }
308 
309 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ByteWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)310 Java_nsk_share_jpda_NativeMethodsTestThread_ByteWrapperMethod(JNIEnv *env,
311         jobject thisObject, jstring message)
312 {
313         jclass klass;
314         jfieldID valueField;
315 
316         logMessage(env, thisObject, message);
317 
318         klass = env->GetObjectClass(thisObject);
319 
320         valueField = env->GetStaticFieldID(klass, "expectedByteWrapperValue",
321                                            "Ljava/lang/Byte;");
322 
323         return env->GetStaticObjectField(klass, valueField);
324 }
325 
326 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_ShortWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)327 Java_nsk_share_jpda_NativeMethodsTestThread_ShortWrapperMethod(JNIEnv *env,
328         jobject thisObject, jstring message)
329 {
330         jclass klass;
331         jfieldID valueField;
332 
333         logMessage(env, thisObject, message);
334 
335         klass = env->GetObjectClass(thisObject);
336 
337         valueField = env->GetStaticFieldID(klass, "expectedShortWrapperValue",
338                                            "Ljava/lang/Short;");
339 
340         return env->GetStaticObjectField(klass, valueField);
341 }
342 
343 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_CharWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)344 Java_nsk_share_jpda_NativeMethodsTestThread_CharWrapperMethod(JNIEnv *env,
345         jobject thisObject, jstring message)
346 {
347         jclass klass;
348         jfieldID valueField;
349 
350         logMessage(env, thisObject, message);
351 
352         klass = env->GetObjectClass(thisObject);
353 
354         valueField = env->GetStaticFieldID(klass, "expectedCharWrapperValue",
355                                            "Ljava/lang/Character;");
356 
357         return env->GetStaticObjectField(klass, valueField);
358 }
359 
360 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_IntWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)361 Java_nsk_share_jpda_NativeMethodsTestThread_IntWrapperMethod(JNIEnv *env,
362         jobject thisObject, jstring message)
363 {
364         jclass klass;
365         jfieldID valueField;
366 
367         logMessage(env, thisObject, message);
368 
369         klass = env->GetObjectClass(thisObject);
370 
371         valueField = env->GetStaticFieldID(klass, "expectedIntWrapperValue",
372                                            "Ljava/lang/Integer;");
373 
374         return env->GetStaticObjectField(klass, valueField);
375 }
376 
377 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_LongWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)378 Java_nsk_share_jpda_NativeMethodsTestThread_LongWrapperMethod(JNIEnv *env,
379         jobject thisObject, jstring message)
380 {
381         jclass klass;
382         jfieldID valueField;
383 
384         logMessage(env, thisObject, message);
385 
386         klass = env->GetObjectClass(thisObject);
387 
388         valueField = env->GetStaticFieldID(klass, "expectedLongWrapperValue",
389                                            "Ljava/lang/Long;");
390 
391         return env->GetStaticObjectField(klass, valueField);
392 }
393 
394 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_FloatWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)395 Java_nsk_share_jpda_NativeMethodsTestThread_FloatWrapperMethod(JNIEnv *env,
396         jobject thisObject, jstring message)
397 {
398         jclass klass;
399         jfieldID valueField;
400 
401         logMessage(env, thisObject, message);
402 
403         klass = env->GetObjectClass(thisObject);
404 
405         valueField = env->GetStaticFieldID(klass, "expectedFloatWrapperValue",
406                                            "Ljava/lang/Float;");
407 
408         return env->GetStaticObjectField(klass, valueField);
409 }
410 
411 JNIEXPORT jobject JNICALL
Java_nsk_share_jpda_NativeMethodsTestThread_DoubleWrapperMethod(JNIEnv * env,jobject thisObject,jstring message)412 Java_nsk_share_jpda_NativeMethodsTestThread_DoubleWrapperMethod(JNIEnv *env,
413         jobject thisObject, jstring message)
414 {
415         jclass klass;
416         jfieldID valueField;
417 
418         logMessage(env, thisObject, message);
419 
420         klass = env->GetObjectClass(thisObject);
421 
422         valueField = env->GetStaticFieldID(klass, "expectedDoubleWrapperValue",
423                                            "Ljava/lang/Double;");
424 
425         return env->GetStaticObjectField(klass, valueField);
426 }
427 
428 }
429