Interceptor.smali
.class public abstract Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;
.super Ljava/lang/Object;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor$ITinkerHotplugProxy;
}
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"<T_TARGET:",
"Ljava/lang/Object;",
">",
"Ljava/lang/Object;"
}
.end annotation
# static fields
.field private static final TAG:Ljava/lang/String; = "Tinker.Interceptor"
# instance fields
.field private volatile mInstalled:Z
.field private mTarget:Ljava/lang/Object;
.annotation system Ldalvik/annotation/Signature;
value = {
"TT_TARGET;"
}
.end annotation
.end field
# direct methods
.method public constructor <init>()V
.registers 2
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
const/4 v0, 0x0
iput-object v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mTarget:Ljava/lang/Object;
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mInstalled:Z
return-void
.end method
# virtual methods
.method protected decorate(Ljava/lang/Object;)Ljava/lang/Object;
.registers 2
.param p1 # Ljava/lang/Object;
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.end param
.annotation build Landroid/support/annotation/NonNull;
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"(TT_TARGET;)TT_TARGET;"
}
.end annotation
return-object p1
.end method
.method protected abstract fetchTarget()Ljava/lang/Object;
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"()TT_TARGET;"
}
.end annotation
.end method
.method protected abstract inject(Ljava/lang/Object;)V
.param p1 # Ljava/lang/Object;
.annotation build Landroid/support/annotation/Nullable;
.end annotation
.end param
.annotation system Ldalvik/annotation/Signature;
value = {
"(TT_TARGET;)V"
}
.end annotation
.end method
.method public declared-synchronized install()V
.registers 5
monitor-enter p0
:try_start_1
invoke-virtual {p0}, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->fetchTarget()Ljava/lang/Object;
move-result-object v0
iput-object v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mTarget:Ljava/lang/Object;
invoke-virtual {p0, v0}, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->decorate(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v1
if-eq v1, v0, :cond_15
invoke-virtual {p0, v1}, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->inject(Ljava/lang/Object;)V
:goto_10
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mInstalled:Z
:try_end_13
.catch Ljava/lang/Throwable; {:try_start_1 .. :try_end_13} :catch_37
.catchall {:try_start_1 .. :try_end_13} :catchall_41
monitor-exit p0
return-void
:cond_15
:try_start_15
const-string/jumbo v1, "Tinker.Interceptor"
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
const-string/jumbo v3, "target: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v0
const-string/jumbo v2, " was already hooked."
invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v0
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-static {v1, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
:try_end_36
.catch Ljava/lang/Throwable; {:try_start_15 .. :try_end_36} :catch_37
.catchall {:try_start_15 .. :try_end_36} :catchall_41
goto :goto_10
:catch_37
move-exception v0
const/4 v1, 0x0
:try_start_39
iput-object v1, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mTarget:Ljava/lang/Object;
new-instance v1, Lcom/tencent/tinker/loader/hotplug/interceptor/InterceptFailedException;
invoke-direct {v1, v0}, Lcom/tencent/tinker/loader/hotplug/interceptor/InterceptFailedException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_41
.catchall {:try_start_39 .. :try_end_41} :catchall_41
:catchall_41
move-exception v0
monitor-exit p0
throw v0
.end method
.method public declared-synchronized uninstall()V
.registers 3
monitor-enter p0
:try_start_1
iget-boolean v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mInstalled:Z
:try_end_3
.catchall {:try_start_1 .. :try_end_3} :catchall_19
if-eqz v0, :cond_10
:try_start_5
iget-object v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mTarget:Ljava/lang/Object;
invoke-virtual {p0, v0}, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->inject(Ljava/lang/Object;)V
const/4 v0, 0x0
iput-object v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mTarget:Ljava/lang/Object;
const/4 v0, 0x0
iput-boolean v0, p0, Lcom/tencent/tinker/loader/hotplug/interceptor/Interceptor;->mInstalled:Z
:try_end_10
.catch Ljava/lang/Throwable; {:try_start_5 .. :try_end_10} :catch_12
.catchall {:try_start_5 .. :try_end_10} :catchall_19
:cond_10
monitor-exit p0
return-void
:catch_12
move-exception v0
:try_start_13
new-instance v1, Lcom/tencent/tinker/loader/hotplug/interceptor/InterceptFailedException;
invoke-direct {v1, v0}, Lcom/tencent/tinker/loader/hotplug/interceptor/InterceptFailedException;-><init>(Ljava/lang/Throwable;)V
throw v1
:try_end_19
.catchall {:try_start_13 .. :try_end_19} :catchall_19
:catchall_19
move-exception v0
monitor-exit p0
throw v0
.end method