215 lines
5.6 KiB
Smali
215 lines
5.6 KiB
Smali
|
# 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
|