Home | History | Annotate | Download | only in smali
      1 # 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
    215