# Created with baksmali. # Java file for reference. # import java.lang.reflect.InvocationTargetException; # import java.lang.reflect.Method; # # public class Main { # public static void main(String[] args) { # try { # // Make sure that the abstract final class is marked as erroneous. # Class.forName("AbstractFinal"); # System.out.println("UNREACHABLE!"); # } catch (VerifyError expected) { # } catch (Throwable t) { # t.printStackTrace(System.out); # } # try { # // Verification of TestClass.test() used to crash when processing # // the final abstract (erroneous) class. # Class tc = Class.forName("TestClass"); # Method test = tc.getDeclaredMethod("test"); # test.invoke(null); # System.out.println("UNREACHABLE!"); # } catch (InvocationTargetException ite) { # if (ite.getCause() instanceof InstantiationError) { # System.out.println( # ite.getCause().getClass().getName() + ": " + ite.getCause().getMessage()); # } else { # ite.printStackTrace(System.out); # } # } catch (Throwable t) { # t.printStackTrace(System.out); # } # } # } .class public LMain; .super Ljava/lang/Object; .source "Main.java" # direct methods .method public constructor ()V .registers 1 .line 20 invoke-direct {p0}, Ljava/lang/Object;->()V return-void .end method .method public static main([Ljava/lang/String;)V .registers 4 .line 24 :try_start_0 const-string p0, "AbstractFinal" invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; .line 25 sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream; const-string v0, "UNREACHABLE!" invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V :try_end_c .catch Ljava/lang/VerifyError; {:try_start_0 .. :try_end_c} :catch_14 .catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_c} :catch_d goto :goto_15 .line 27 :catch_d move-exception p0 .line 28 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V goto :goto_16 .line 26 :catch_14 move-exception p0 .line 29 :goto_15 nop .line 33 :goto_16 :try_start_16 const-string p0, "TestClass" invoke-static {p0}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class; move-result-object p0 .line 34 const-string v0, "test" const/4 v1, 0x0 new-array v2, v1, [Ljava/lang/Class; invoke-virtual {p0, v0, v2}, Ljava/lang/Class;->getDeclaredMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; move-result-object p0 .line 35 const/4 v0, 0x0 new-array v1, v1, [Ljava/lang/Object; invoke-virtual {p0, v0, v1}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; .line 36 sget-object p0, Ljava/lang/System;->out:Ljava/io/PrintStream; const-string v0, "UNREACHABLE!" invoke-virtual {p0, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V :try_end_32 .catch Ljava/lang/reflect/InvocationTargetException; {:try_start_16 .. :try_end_32} :catch_3a .catch Ljava/lang/Throwable; {:try_start_16 .. :try_end_32} :catch_33 goto :goto_76 .line 44 :catch_33 move-exception p0 .line 45 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; invoke-virtual {p0, v0}, Ljava/lang/Throwable;->printStackTrace(Ljava/io/PrintStream;)V goto :goto_77 .line 37 :catch_3a move-exception p0 .line 38 invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable; move-result-object v0 instance-of v0, v0, Ljava/lang/InstantiationError; if-eqz v0, :cond_71 .line 39 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; new-instance v1, Ljava/lang/StringBuilder; invoke-direct {v1}, Ljava/lang/StringBuilder;->()V .line 40 invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable; move-result-object v2 invoke-virtual {v2}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v2 invoke-virtual {v2}, Ljava/lang/Class;->getName()Ljava/lang/String; move-result-object v2 invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v2, ": " invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p0}, Ljava/lang/reflect/InvocationTargetException;->getCause()Ljava/lang/Throwable; move-result-object p0 invoke-virtual {p0}, Ljava/lang/Throwable;->getMessage()Ljava/lang/String; move-result-object p0 invoke-virtual {v1, p0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object p0 .line 39 invoke-virtual {v0, p0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V goto :goto_76 .line 42 :cond_71 sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; invoke-virtual {p0, v0}, Ljava/lang/reflect/InvocationTargetException;->printStackTrace(Ljava/io/PrintStream;)V .line 46 :goto_76 nop .line 47 :goto_77 return-void .end method