blob: 588854cf5283c08b8199f88f5c1eb1958a2037c8 [file] [log] [blame]
Alan Leungd5cbc562018-03-15 14:02:46 -07001# Created with baksmali.
2
3# Java file for reference.
4
5# import java.lang.reflect.InvocationTargetException;
6# import java.lang.reflect.Method;
7#
8# public class Main {
9# public static void main(String[] args) {
10# try {
11# // Make sure that the abstract final class is marked as erroneous.
12# Class.forName("AbstractFinal");
13# System.out.println("UNREACHABLE!");
14# } catch (VerifyError expected) {
15# } catch (Throwable t) {
16# t.printStackTrace(System.out);
17# }
18# try {
19# // Verification of TestClass.test() used to crash when processing
20# // the final abstract (erroneous) class.
21# Class<?> tc = Class.forName("TestClass");
22# Method test = tc.getDeclaredMethod("test");
23# test.invoke(null);
24# System.out.println("UNREACHABLE!");
25# } catch (InvocationTargetException ite) {
26# if (ite.getCause() instanceof InstantiationError) {
27# System.out.println(
28# ite.getCause().getClass().getName() + ": " + ite.getCause().getMessage());
29# } else {
30# ite.printStackTrace(System.out);
31# }
32# } catch (Throwable t) {
33# t.printStackTrace(System.out);
34# }
35# }
36# }
37
38.class public LMain;
39.super Ljava/lang/Object;
40.source "Main.java"
41
42
43# direct methods
44.method public constructor <init>()V
45 .registers 1
46
47 .line 20
48 invoke-direct {p0}, Ljava/lang/Object;-><init>()V
49
50 return-void
51.end method
52
53.method public static main([Ljava/lang/String;)V
54 .registers 4
55
56 .line 24
57 :try_start_0
58 const-string p0, "AbstractFinal"
59
60 invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
61
62 .line 25
63 sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream;
64
65 const-string v0, "UNREACHABLE!"
66
67 invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
68 :try_end_c
69 .catch Ljava/lang/VerifyError; {:try_start_0 .. :try_end_c} :catch_14
70 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_c} :catch_d
71
72 goto :goto_15
73
74 .line 27
75 :catch_d
76 move-exception p0
77
78 .line 28
79 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
80
81 invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
82
83 goto :goto_16
84
85 .line 26
86 :catch_14
87 move-exception p0
88
89 .line 29
90 :goto_15
91 nop
92
93 .line 33
94 :goto_16
95 :try_start_16
96 const-string p0, "TestClass"
97
98 invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
99
100 move-result-object p0
101
102 .line 34
103 const-string v0, "test"
104
105 const/4 v1, 0x0
106
107 new-array v2, v1, [Ljava/lang/Class;
108
109 invoke-virtual {p0, v0, v2}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
110
111 move-result-object p0
112
113 .line 35
114 const/4 v0, 0x0
115
116 new-array v1, v1, [Ljava/lang/Object;
117
118 invoke-virtual {p0, v0, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
119
120 .line 36
121 sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream;
122
123 const-string v0, "UNREACHABLE!"
124
125 invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
126 :try_end_32
127 .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_16 .. :try_end_32} :catch_3a
128 .catch Ljava/lang/Throwable; {:try_start_16 .. :try_end_32} :catch_33
129
130 goto :goto_76
131
132 .line 44
133 :catch_33
134 move-exception p0
135
136 .line 45
137 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
138
139 invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V
140
141 goto :goto_77
142
143 .line 37
144 :catch_3a
145 move-exception p0
146
147 .line 38
148 invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
149
150 move-result-object v0
151
152 instance-of v0, v0, Ljava/lang/InstantiationError;
153
154 if-eqz v0, :cond_71
155
156 .line 39
157 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
158
159 new-instance v1, Ljava/lang/StringBuilder;
160
161 invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
162
163 .line 40
164 invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
165
166 move-result-object v2
167
168 invoke-virtual {v2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
169
170 move-result-object v2
171
172 invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String;
173
174 move-result-object v2
175
176 invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
177
178 const-string v2, ": "
179
180 invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
181
182 invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable;
183
184 move-result-object p0
185
186 invoke-virtual {p0}, Ljava/lang/Throwable;->getMessage()Ljava/lang/String;
187
188 move-result-object p0
189
190 invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
191
192 invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
193
194 move-result-object p0
195
196 .line 39
197 invoke-virtual {v0, p0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
198
199 goto :goto_76
200
201 .line 42
202 :cond_71
203 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
204
205 invoke-virtual {p0, v0}, Ljava/lang/reflect/InvocationTargetException;->printStackTrace(Ljava/io/PrintStream;)V
206
207 .line 46
208 :goto_76
209 nop
210
211 .line 47
212 :goto_77
213 return-void
214.end method