Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/instrument/IsModifiableClassAgent.java
41152 views
1
/*
2
* Copyright (c) 2005, 2015, 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
24
/**
25
* @test
26
* @bug 6331574
27
* @summary test isModifiableClass
28
* @author Robert Field, Sun Microsystems
29
*
30
* @run build IsModifiableClassApp IsModifiableClassAgent
31
* @run shell MakeJAR3.sh IsModifiableClassAgent 'Can-Retransform-Classes: true'
32
* @run main/othervm -javaagent:IsModifiableClassAgent.jar IsModifiableClassApp
33
*/
34
import java.lang.instrument.*;
35
36
public class IsModifiableClassAgent
37
{
38
public static boolean fail = false;
39
public static boolean completed = false;
40
41
public static void
42
premain( String agentArgs,
43
Instrumentation instrumentation)
44
{
45
System.out.println("IsModifiableClassAgent started");
46
47
Class[] allClasses = instrumentation.getAllLoadedClasses();
48
int modCount = 0;
49
int unmodCount = 0;
50
51
for (int i = 0; i < allClasses.length; i++)
52
{
53
Class klass = allClasses[i];
54
boolean isMod = instrumentation.isModifiableClass(klass);
55
if (isMod && klass.isArray()) {
56
System.err.println("Error: array class returned as modifiable: " + klass);
57
fail = true;
58
}
59
if (isMod && klass.isPrimitive()) {
60
System.err.println("Error: primitive class returned as modifiable: " + klass);
61
fail = true;
62
}
63
try {
64
instrumentation.retransformClasses(klass);
65
if (!isMod) {
66
System.err.println("Error: unmodifiable class retransformable: " + klass);
67
fail = true;
68
}
69
} catch (UnmodifiableClassException e) {
70
if (isMod) {
71
System.err.println("Error: modifiable class not retransformable: " + klass);
72
System.err.println(" exception: " + e);
73
fail = true;
74
}
75
} catch (Throwable e) {
76
System.err.println("Error: bad return from retransform: " + klass);
77
System.err.println(" ERROR: " + e);
78
fail = true;
79
}
80
if (isMod) {
81
++modCount;
82
} else {
83
++unmodCount;
84
}
85
}
86
System.out.println("modifiable: " + modCount + ". unmodifiable: " + unmodCount);
87
completed = true;
88
}
89
}
90
91