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