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