Hack$HackedField.smali
.class public Lorg/acdd/hack/Hack$HackedField;
.super Ljava/lang/Object;
.source "Hack.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
value = Lorg/acdd/hack/Hack;
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x9
name = "HackedField"
.end annotation
.annotation system Ldalvik/annotation/Signature;
value = {
"<C:",
"Ljava/lang/Object;",
"T:",
"Ljava/lang/Object;",
">",
"Ljava/lang/Object;"
}
.end annotation
# instance fields
.field private final mField:Ljava/lang/reflect/Field;
# direct methods
.method constructor <init>(Ljava/lang/Class;Ljava/lang/String;I)V
.registers 8
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/Class",
"<TC;>;",
"Ljava/lang/String;",
"I)V"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
}
.end annotation
.prologue
const/4 v1, 0x0
.line 225
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 227
if-nez p1, :cond_9
.line 228
iput-object v1, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
.line 246
:goto_8
return-void
.line 232
:cond_9
:try_start_9
invoke-virtual {p1, p2}, Ljava/lang/Class;->getDeclaredField(Ljava/lang/String;)Ljava/lang/reflect/Field;
move-result-object v1
.line 233
if-lez p3, :cond_35
invoke-virtual {v1}, Ljava/lang/reflect/Field;->getModifiers()I
move-result v0
and-int/2addr v0, p3
if-eq v0, p3, :cond_35
.line 234
new-instance v0, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " does not match modifiers: "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, p3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v0, v2}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;-><init>(Ljava/lang/String;)V
# invokes: Lorg/acdd/hack/Hack;->fail(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
invoke-static {v0}, Lorg/acdd/hack/Hack;->access$000(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
.line 237
:cond_35
const/4 v0, 0x1
invoke-virtual {v1, v0}, Ljava/lang/reflect/Field;->setAccessible(Z)V
:try_end_39
.catch Ljava/lang/Exception; {:try_start_9 .. :try_end_39} :catch_3c
.catchall {:try_start_9 .. :try_end_39} :catchall_4e
.line 244
iput-object v1, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
goto :goto_8
.line 238
:catch_3c
move-exception v0
.line 239
:try_start_3d
new-instance v2, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
invoke-direct {v2, v0}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;-><init>(Ljava/lang/Exception;)V
.line 240
invoke-virtual {v2, p1}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;->setHackedClass(Ljava/lang/Class;)V
.line 241
invoke-virtual {v2, p2}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;->setHackedFieldName(Ljava/lang/String;)V
.line 242
# invokes: Lorg/acdd/hack/Hack;->fail(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
invoke-static {v2}, Lorg/acdd/hack/Hack;->access$000(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
:try_end_4b
.catchall {:try_start_3d .. :try_end_4b} :catchall_4e
.line 244
iput-object v1, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
goto :goto_8
:catchall_4e
move-exception v0
iput-object v1, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
throw v0
.end method
# virtual methods
.method public get(Ljava/lang/Object;)Ljava/lang/Object;
.registers 3
.annotation system Ldalvik/annotation/Signature;
value = {
"(TC;)TT;"
}
.end annotation
.prologue
.line 197
:try_start_0
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
invoke-virtual {v0, p1}, Ljava/lang/reflect/Field;->get(Ljava/lang/Object;)Ljava/lang/Object;
:try_end_5
.catch Ljava/lang/IllegalAccessException; {:try_start_0 .. :try_end_5} :catch_7
move-result-object v0
.line 200
:goto_6
return-object v0
.line 198
:catch_7
move-exception v0
.line 199
invoke-virtual {v0}, Ljava/lang/IllegalAccessException;->printStackTrace()V
.line 200
const/4 v0, 0x0
goto :goto_6
.end method
.method public getField()Ljava/lang/reflect/Field;
.registers 2
.prologue
.line 249
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
return-object v0
.end method
.method public hijack(Ljava/lang/Object;Lorg/acdd/hack/Interception$InterceptionHandler;)V
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(TC;",
"Lorg/acdd/hack/Interception$InterceptionHandler",
"<*>;)V"
}
.end annotation
.prologue
.line 216
invoke-virtual {p0, p1}, Lorg/acdd/hack/Hack$HackedField;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v0
.line 217
if-nez v0, :cond_e
.line 218
new-instance v0, Ljava/lang/IllegalStateException;
const-string v1, "Cannot hijack null"
invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;-><init>(Ljava/lang/String;)V
throw v0
.line 221
:cond_e
invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;
move-result-object v1
.line 222
invoke-virtual {v1}, Ljava/lang/Class;->getInterfaces()[Ljava/lang/Class;
move-result-object v1
.line 220
invoke-static {v0, p2, v1}, Lorg/acdd/hack/Interception;->proxy(Ljava/lang/Object;Lorg/acdd/hack/Interception$InterceptionHandler;[Ljava/lang/Class;)Ljava/lang/Object;
move-result-object v0
invoke-virtual {p0, p1, v0}, Lorg/acdd/hack/Hack$HackedField;->set(Ljava/lang/Object;Ljava/lang/Object;)V
.line 223
return-void
.end method
.method public ofGenericType(Ljava/lang/Class;)Lorg/acdd/hack/Hack$HackedField;
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"<T2:",
"Ljava/lang/Object;",
">(",
"Ljava/lang/Class",
"<*>;)",
"Lorg/acdd/hack/Hack$HackedField",
"<TC;TT2;>;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
}
.end annotation
.prologue
.line 167
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
if-eqz v0, :cond_36
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
invoke-virtual {v0}, Ljava/lang/reflect/Field;->getType()Ljava/lang/Class;
move-result-object v0
invoke-virtual {p1, v0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-nez v0, :cond_36
.line 168
new-instance v0, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
new-instance v1, Ljava/lang/ClassCastException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
iget-object v3, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " is not of type "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Ljava/lang/ClassCastException;-><init>(Ljava/lang/String;)V
invoke-direct {v0, v1}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;-><init>(Ljava/lang/Exception;)V
# invokes: Lorg/acdd/hack/Hack;->fail(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
invoke-static {v0}, Lorg/acdd/hack/Hack;->access$000(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
.line 171
:cond_36
return-object p0
.end method
.method public ofType(Ljava/lang/Class;)Lorg/acdd/hack/Hack$HackedField;
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"<T2:",
"Ljava/lang/Object;",
">(",
"Ljava/lang/Class",
"<TT2;>;)",
"Lorg/acdd/hack/Hack$HackedField",
"<TC;TT2;>;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
}
.end annotation
.prologue
.line 176
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
if-eqz v0, :cond_36
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
.line 177
invoke-virtual {v0}, Ljava/lang/reflect/Field;->getType()Ljava/lang/Class;
move-result-object v0
.line 176
invoke-virtual {p1, v0}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z
move-result v0
if-nez v0, :cond_36
.line 178
new-instance v0, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
new-instance v1, Ljava/lang/ClassCastException;
new-instance v2, Ljava/lang/StringBuilder;
invoke-direct {v2}, Ljava/lang/StringBuilder;-><init>()V
iget-object v3, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
const-string v3, " is not of type "
invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
move-result-object v2
invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v2
invoke-direct {v1, v2}, Ljava/lang/ClassCastException;-><init>(Ljava/lang/String;)V
invoke-direct {v0, v1}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;-><init>(Ljava/lang/Exception;)V
# invokes: Lorg/acdd/hack/Hack;->fail(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
invoke-static {v0}, Lorg/acdd/hack/Hack;->access$000(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
.line 181
:cond_36
return-object p0
.end method
.method public ofType(Ljava/lang/String;)Lorg/acdd/hack/Hack$HackedField;
.registers 5
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/String;",
")",
"Lorg/acdd/hack/Hack$HackedField",
"<TC;TT;>;"
}
.end annotation
.annotation system Ldalvik/annotation/Throws;
value = {
Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
}
.end annotation
.prologue
.line 186
const/4 v0, 0x0
.line 188
:try_start_1
invoke-static {p1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
move-result-object v1
invoke-virtual {p0, v1}, Lorg/acdd/hack/Hack$HackedField;->ofType(Ljava/lang/Class;)Lorg/acdd/hack/Hack$HackedField;
:try_end_8
.catch Ljava/lang/Exception; {:try_start_1 .. :try_end_8} :catch_a
move-result-object v0
.line 192
:goto_9
return-object v0
.line 189
:catch_a
move-exception v1
.line 190
new-instance v2, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;
invoke-direct {v2, v1}, Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;-><init>(Ljava/lang/Exception;)V
# invokes: Lorg/acdd/hack/Hack;->fail(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
invoke-static {v2}, Lorg/acdd/hack/Hack;->access$000(Lorg/acdd/hack/Hack$HackDeclaration$HackAssertionException;)V
goto :goto_9
.end method
.method public set(Ljava/lang/Object;Ljava/lang/Object;)V
.registers 6
.annotation system Ldalvik/annotation/Signature;
value = {
"(TC;",
"Ljava/lang/Object;",
")V"
}
.end annotation
.prologue
.line 206
:try_start_0
iget-object v0, p0, Lorg/acdd/hack/Hack$HackedField;->mField:Ljava/lang/reflect/Field;
invoke-virtual {v0, p1, p2}, Ljava/lang/reflect/Field;->set(Ljava/lang/Object;Ljava/lang/Object;)V
:try_end_5
.catch Ljava/lang/Throwable; {:try_start_0 .. :try_end_5} :catch_6
.line 213
:cond_5
return-void
.line 207
:catch_6
move-exception v0
.line 208
invoke-virtual {v0}, Ljava/lang/Throwable;->printStackTrace()V
.line 209
instance-of v1, p2, Lorg/acdd/runtime/DelegateClassLoader;
if-eqz v1, :cond_5
.line 210
new-instance v1, Ljava/lang/RuntimeException;
const-string/jumbo v2, "set DelegateClassLoader fail"
invoke-direct {v1, v2, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V
throw v1
.end method