| # 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 <init>()V |
| .registers 1 |
| |
| .line 20 |
| invoke-direct {p0}, Ljava/lang/Object;-><init>()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;-><init>()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 |