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