Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.base/share/native/libjava/ObjectStreamClass.c
41149 views
1
/*
2
* Copyright (c) 2001, 2003, 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 "jni.h"
27
#include "jvm.h"
28
29
#include "java_io_ObjectStreamClass.h"
30
31
static jclass noSuchMethodErrCl;
32
33
/*
34
* Class: java_io_ObjectStreamClass
35
* Method: initNative
36
* Signature: ()V
37
*
38
* Native code initialization hook.
39
*/
40
JNIEXPORT void JNICALL
41
Java_java_io_ObjectStreamClass_initNative(JNIEnv *env, jclass this)
42
{
43
jclass cl = (*env)->FindClass(env, "java/lang/NoSuchMethodError");
44
if (cl == NULL) { /* exception thrown */
45
return;
46
}
47
noSuchMethodErrCl = (*env)->NewGlobalRef(env, cl);
48
}
49
50
/*
51
* Class: java_io_ObjectStreamClass
52
* Method: hasStaticInitializer
53
* Signature: (Ljava/lang/Class;)Z
54
*
55
* Returns true if the given class defines a <clinit>()V method; returns false
56
* otherwise.
57
*/
58
JNIEXPORT jboolean JNICALL
59
Java_java_io_ObjectStreamClass_hasStaticInitializer(JNIEnv *env, jclass this,
60
jclass clazz)
61
{
62
jclass superCl = NULL;
63
jmethodID superClinitId = NULL;
64
jmethodID clinitId =
65
(*env)->GetStaticMethodID(env, clazz, "<clinit>", "()V");
66
if (clinitId == NULL) { /* error thrown */
67
jthrowable th = (*env)->ExceptionOccurred(env);
68
(*env)->ExceptionClear(env); /* normal return */
69
if (!(*env)->IsInstanceOf(env, th, noSuchMethodErrCl)) {
70
(*env)->Throw(env, th);
71
}
72
return JNI_FALSE;
73
}
74
75
/*
76
* Check superclass for static initializer as well--if the same method ID
77
* is returned, then the static initializer is from a superclass.
78
* Empirically, this step appears to be unnecessary in 1.4; however, the
79
* JNI spec makes no guarantee that GetStaticMethodID will not return the
80
* ID for a superclass initializer.
81
*/
82
83
if ((superCl = (*env)->GetSuperclass(env, clazz)) == NULL) {
84
return JNI_TRUE;
85
}
86
superClinitId =
87
(*env)->GetStaticMethodID(env, superCl, "<clinit>", "()V");
88
if (superClinitId == NULL) { /* error thrown */
89
jthrowable th = (*env)->ExceptionOccurred(env);
90
(*env)->ExceptionClear(env); /* normal return */
91
if (!(*env)->IsInstanceOf(env, th, noSuchMethodErrCl)) {
92
(*env)->Throw(env, th);
93
}
94
return JNI_TRUE;
95
}
96
97
return (clinitId != superClinitId);
98
}
99
100