LifetimeAssert$WrappedReference$1.smali

.class Laegon/chrome/base/LifetimeAssert$WrappedReference$1;
.super Ljava/lang/Thread;


# direct methods
.method constructor <init>(Ljava/lang/String;)V
    .registers 3

    invoke-direct {p0, p1}, Ljava/lang/Thread;-><init>(Ljava/lang/String;)V

    const/4 v0, 0x1

    invoke-virtual {p0, v0}, Laegon/chrome/base/LifetimeAssert$WrappedReference$1;->setDaemon(Z)V

    invoke-virtual {p0}, Laegon/chrome/base/LifetimeAssert$WrappedReference$1;->start()V

    return-void
.end method


# virtual methods
.method public run()V
    .registers 6

    :cond_0
    :goto_0
    :try_start_0
    # getter for: Laegon/chrome/base/LifetimeAssert$WrappedReference;->sReferenceQueue:Ljava/lang/ref/ReferenceQueue;
    invoke-static {}, Laegon/chrome/base/LifetimeAssert$WrappedReference;->access$000()Ljava/lang/ref/ReferenceQueue;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/ref/ReferenceQueue;->remove()Ljava/lang/ref/Reference;

    move-result-object v0

    check-cast v0, Laegon/chrome/base/LifetimeAssert$WrappedReference;

    # getter for: Laegon/chrome/base/LifetimeAssert$WrappedReference;->sActiveWrappers:Ljava/util/Set;
    invoke-static {}, Laegon/chrome/base/LifetimeAssert$WrappedReference;->access$100()Ljava/util/Set;

    move-result-object v1

    invoke-interface {v1, v0}, Ljava/util/Set;->remove(Ljava/lang/Object;)Z

    iget-boolean v1, v0, Laegon/chrome/base/LifetimeAssert$WrappedReference;->mSafeToGc:Z

    if-nez v1, :cond_40

    const-string v1, "Object of type %s was GC\'ed without cleanup. Refer to \"Caused by\" for where object was created."

    const/4 v2, 0x1

    new-array v2, v2, [Ljava/lang/Object;

    const/4 v3, 0x0

    iget-object v4, v0, Laegon/chrome/base/LifetimeAssert$WrappedReference;->mTargetClass:Ljava/lang/Class;

    invoke-virtual {v4}, Ljava/lang/Class;->getName()Ljava/lang/String;

    move-result-object v4

    aput-object v4, v2, v3

    invoke-static {v1, v2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v1

    sget-object v2, Laegon/chrome/base/LifetimeAssert;->sTestHook:Laegon/chrome/base/LifetimeAssert$TestHook;

    if-eqz v2, :cond_38

    sget-object v2, Laegon/chrome/base/LifetimeAssert;->sTestHook:Laegon/chrome/base/LifetimeAssert$TestHook;

    invoke-interface {v2, v0, v1}, Laegon/chrome/base/LifetimeAssert$TestHook;->onCleaned(Laegon/chrome/base/LifetimeAssert$WrappedReference;Ljava/lang/String;)V
    :try_end_30
    .catch Ljava/lang/InterruptedException; {:try_start_0 .. :try_end_30} :catch_31

    goto :goto_0

    :catch_31
    move-exception v0

    new-instance v1, Ljava/lang/RuntimeException;

    invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V

    throw v1

    :cond_38
    :try_start_38
    new-instance v2, Laegon/chrome/base/LifetimeAssert$LifetimeAssertException;

    iget-object v0, v0, Laegon/chrome/base/LifetimeAssert$WrappedReference;->mCreationException:Laegon/chrome/base/LifetimeAssert$CreationException;

    invoke-direct {v2, v1, v0}, Laegon/chrome/base/LifetimeAssert$LifetimeAssertException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v2

    :cond_40
    sget-object v1, Laegon/chrome/base/LifetimeAssert;->sTestHook:Laegon/chrome/base/LifetimeAssert$TestHook;

    if-eqz v1, :cond_0

    sget-object v1, Laegon/chrome/base/LifetimeAssert;->sTestHook:Laegon/chrome/base/LifetimeAssert$TestHook;

    const/4 v2, 0x0

    invoke-interface {v1, v0, v2}, Laegon/chrome/base/LifetimeAssert$TestHook;->onCleaned(Laegon/chrome/base/LifetimeAssert$WrappedReference;Ljava/lang/String;)V
    :try_end_4a
    .catch Ljava/lang/InterruptedException; {:try_start_38 .. :try_end_4a} :catch_31

    goto :goto_0
.end method