1/*
2 * Copyright (c) 2016, 2017, 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26#include "util.h"
27#include "inStream.h"
28#include "outStream.h"
29#include "ModuleReferenceImpl.h"
30
31
32static jclass jlM(JNIEnv *env) {
33 return findClass(env, "Ljava/lang/Module;");
34}
35
36static jboolean
37getName(PacketInputStream *in, PacketOutputStream *out)
38{
39 static jmethodID method = NULL;
40 JNIEnv *env = getEnv();
41 char *name = NULL;
42 jstring namestr;
43 jobject module;
44
45 if (method == NULL) {
46 method = getMethod(env, jlM(env), "getName", "()Ljava/lang/String;");
47 }
48 module = inStream_readModuleRef(getEnv(), in);
49 if (inStream_error(in)) {
50 return JNI_TRUE;
51 }
52 namestr = (jstring)JNI_FUNC_PTR(env, CallObjectMethod) (env, module, method);
53 if (namestr != NULL) {
54 name = (char*)JNI_FUNC_PTR(env, GetStringUTFChars)(env, namestr, NULL);
55 } else {
56 // The JDWP converts null into an empty string
57 }
58 (void)outStream_writeString(out, name);
59 if (name != NULL) {
60 JNI_FUNC_PTR(env, ReleaseStringUTFChars)(env, namestr, name);
61 }
62 return JNI_TRUE;
63}
64
65static jboolean
66getClassLoader(PacketInputStream *in, PacketOutputStream *out)
67{
68 static jmethodID method = NULL;
69 JNIEnv *env = getEnv();
70 jobject loader;
71 jobject module;
72
73 if (method == NULL) {
74 method = getMethod(env, jlM(env), "getClassLoader", "()Ljava/lang/ClassLoader;");
75 }
76 module = inStream_readModuleRef(env, in);
77 if (inStream_error(in)) {
78 return JNI_TRUE;
79 }
80 loader = JNI_FUNC_PTR(env, CallObjectMethod) (env, module, method);
81
82 (void)outStream_writeObjectRef(env, out, loader);
83 return JNI_TRUE;
84}
85
86
87void *ModuleReference_Cmds[] = { (void *)3
88 ,(void *)getName
89 ,(void *)getClassLoader
90};
91