LuaInvocationHandler.smali
.class public Lcom/luajava/LuaInvocationHandler;
.super Ljava/lang/Object;
# interfaces
.implements Ljava/lang/reflect/InvocationHandler;
# instance fields
.field private L:Lcom/luajava/LuaState;
.field private obj:Lcom/luajava/LuaObject;
.field private print:Lcom/luajava/LuaObject;
# direct methods
.method public constructor <init>(Lcom/luajava/LuaObject;)V
.registers 4
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
iput-object p1, p0, Lcom/luajava/LuaInvocationHandler;->obj:Lcom/luajava/LuaObject;
iget-object v0, p1, Lcom/luajava/LuaObject;->L:Lcom/luajava/LuaState;
iput-object v0, p0, Lcom/luajava/LuaInvocationHandler;->L:Lcom/luajava/LuaState;
iget-object v0, p0, Lcom/luajava/LuaInvocationHandler;->L:Lcom/luajava/LuaState;
const-string/jumbo v1, "print"
invoke-virtual {v0, v1}, Lcom/luajava/LuaState;->getLuaObject(Ljava/lang/String;)Lcom/luajava/LuaObject;
move-result-object v0
iput-object v0, p0, Lcom/luajava/LuaInvocationHandler;->print:Lcom/luajava/LuaObject;
return-void
.end method
# virtual methods
.method public invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
.registers 14
const/4 v2, 0x0
iget-object v1, p0, Lcom/luajava/LuaInvocationHandler;->obj:Lcom/luajava/LuaObject;
iget-object v3, v1, Lcom/luajava/LuaObject;->L:Lcom/luajava/LuaState;
monitor-enter v3
:try_start_6
invoke-virtual {p2}, Ljava/lang/reflect/Method;->getName()Ljava/lang/String;
move-result-object v4
iget-object v1, p0, Lcom/luajava/LuaInvocationHandler;->obj:Lcom/luajava/LuaObject;
invoke-virtual {v1, v4}, Lcom/luajava/LuaObject;->getField(Ljava/lang/String;)Lcom/luajava/LuaObject;
move-result-object v1
invoke-virtual {v1}, Lcom/luajava/LuaObject;->isNil()Z
move-result v5
if-eqz v5, :cond_18
monitor-exit v3
:goto_17
return-object v2
:cond_18
invoke-virtual {p2}, Ljava/lang/reflect/Method;->getReturnType()Ljava/lang/Class;
:try_end_1b
.catchall {:try_start_6 .. :try_end_1b} :catchall_48
move-result-object v5
:try_start_1c
const-class v6, Ljava/lang/Void;
invoke-virtual {v5, v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v6
if-nez v6, :cond_2c
sget-object v6, Ljava/lang/Void;->TYPE:Ljava/lang/Class;
invoke-virtual {v5, v6}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v6
if-eqz v6, :cond_4b
:cond_2c
invoke-virtual {v1, p3}, Lcom/luajava/LuaObject;->call([Ljava/lang/Object;)Ljava/lang/Object;
:try_end_2f
.catch Lcom/luajava/LuaException; {:try_start_1c .. :try_end_2f} :catch_5e
.catchall {:try_start_1c .. :try_end_2f} :catchall_48
:cond_2f
:goto_2f
if-nez v2, :cond_87
:try_start_31
sget-object v1, Ljava/lang/Boolean;->TYPE:Ljava/lang/Class;
invoke-virtual {v5, v1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_41
const-class v1, Ljava/lang/Boolean;
invoke-virtual {v5, v1}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z
move-result v1
if-eqz v1, :cond_87
:cond_41
const/4 v1, 0x0
invoke-static {v1}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v2
monitor-exit v3
goto :goto_17
:catchall_48
move-exception v1
monitor-exit v3
:try_end_4a
.catchall {:try_start_31 .. :try_end_4a} :catchall_48
throw v1
:cond_4b
:try_start_4b
invoke-virtual {v1, p3}, Lcom/luajava/LuaObject;->call([Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v2
if-eqz v2, :cond_2f
instance-of v1, v2, Ljava/lang/Double;
if-eqz v1, :cond_2f
move-object v0, v2
check-cast v0, Ljava/lang/Double;
move-object v1, v0
invoke-static {v1, v5}, Lcom/luajava/LuaState;->convertLuaNumber(Ljava/lang/Double;Ljava/lang/Class;)Ljava/lang/Number;
:try_end_5c
.catch Lcom/luajava/LuaException; {:try_start_4b .. :try_end_5c} :catch_5e
.catchall {:try_start_4b .. :try_end_5c} :catchall_48
move-result-object v2
goto :goto_2f
:catch_5e
move-exception v1
:try_start_5f
iget-object v6, p0, Lcom/luajava/LuaInvocationHandler;->print:Lcom/luajava/LuaObject;
const/4 v7, 0x1
new-array v7, v7, [Ljava/lang/Object;
const/4 v8, 0x0
new-instance v9, Ljava/lang/StringBuilder;
invoke-direct {v9}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v9, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
const-string/jumbo v9, " "
invoke-virtual {v4, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v4
invoke-virtual {v1}, Lcom/luajava/LuaException;->getMessage()Ljava/lang/String;
move-result-object v1
invoke-virtual {v4, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
aput-object v1, v7, v8
invoke-virtual {v6, v7}, Lcom/luajava/LuaObject;->call([Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_2f
:cond_87
monitor-exit v3
:try_end_88
.catchall {:try_start_5f .. :try_end_88} :catchall_48
goto :goto_17
.end method