SubscriberMethodFinder.smali
.class Lio/rong/eventbus/SubscriberMethodFinder;
.super Ljava/lang/Object;
.source "SubscriberMethodFinder.java"
# static fields
.field private static final BRIDGE:I = 0x40
.field private static final MODIFIERS_IGNORE:I = 0x1448
.field private static final ON_EVENT_METHOD_NAME:Ljava/lang/String; = "onEvent"
.field private static final SYNTHETIC:I = 0x1000
.field private static final methodCache:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/String;",
"Ljava/util/List<",
"Lio/rong/eventbus/SubscriberMethod;",
">;>;"
}
.end annotation
.end field
# instance fields
.field private final skipMethodVerificationForClasses:Ljava/util/Map;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/Map<",
"Ljava/lang/Class<",
"*>;",
"Ljava/lang/Class<",
"*>;>;"
}
.end annotation
.end field
# direct methods
.method static constructor <clinit>()V
.registers 1
.line 1
new-instance v0, Ljava/util/HashMap;
invoke-direct {v0}, Ljava/util/HashMap;-><init>()V
sput-object v0, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
return-void
.end method
.method constructor <init>(Ljava/util/List;)V
.registers 4
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/util/List<",
"Ljava/lang/Class<",
"*>;>;)V"
}
.end annotation
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Ljava/util/concurrent/ConcurrentHashMap;
invoke-direct {v0}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V
iput-object v0, p0, Lio/rong/eventbus/SubscriberMethodFinder;->skipMethodVerificationForClasses:Ljava/util/Map;
if-eqz p1, :cond_22
.line 3
invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;
move-result-object p1
:goto_10
invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z
move-result v0
if-eqz v0, :cond_22
invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;
move-result-object v0
check-cast v0, Ljava/lang/Class;
.line 4
iget-object v1, p0, Lio/rong/eventbus/SubscriberMethodFinder;->skipMethodVerificationForClasses:Ljava/util/Map;
invoke-interface {v1, v0, v0}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
goto :goto_10
:cond_22
return-void
.end method
.method static clearCaches()V
.registers 2
.line 1
sget-object v0, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
monitor-enter v0
.line 2
:try_start_3
sget-object v1, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
invoke-interface {v1}, Ljava/util/Map;->clear()V
.line 3
monitor-exit v0
return-void
:catchall_a
move-exception v1
monitor-exit v0
:try_end_c
.catchall {:try_start_3 .. :try_end_c} :catchall_a
throw v1
.end method
# virtual methods
.method findSubscriberMethods(Ljava/lang/Class;)Ljava/util/List;
.registers 16
.annotation system Ldalvik/annotation/Signature;
value = {
"(",
"Ljava/lang/Class<",
"*>;)",
"Ljava/util/List<",
"Lio/rong/eventbus/SubscriberMethod;",
">;"
}
.end annotation
.line 1
invoke-virtual {p1}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v0
.line 2
sget-object v1, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
monitor-enter v1
.line 3
:try_start_7
sget-object v2, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
invoke-interface {v2, v0}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;
move-result-object v2
check-cast v2, Ljava/util/List;
.line 4
monitor-exit v1
:try_end_10
.catchall {:try_start_7 .. :try_end_10} :catchall_147
if-eqz v2, :cond_13
return-object v2
.line 5
:cond_13
new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
.line 6
new-instance v2, Ljava/util/HashSet;
invoke-direct {v2}, Ljava/util/HashSet;-><init>()V
.line 7
new-instance v3, Ljava/lang/StringBuilder;
invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V
move-object v4, p1
:goto_23
if-eqz v4, :cond_113
.line 8
invoke-virtual {v4}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v5
const-string v6, "java."
.line 9
invoke-virtual {v5, v6}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v6
if-nez v6, :cond_113
const-string v6, "javax."
invoke-virtual {v5, v6}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v6
if-nez v6, :cond_113
const-string v6, "android."
invoke-virtual {v5, v6}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v5
if-eqz v5, :cond_43
goto/16 :goto_113
.line 10
:cond_43
invoke-virtual {v4}, Ljava/lang/Class;->getDeclaredMethods()[Ljava/lang/reflect/Method;
move-result-object v5
.line 11
array-length v6, v5
const/4 v7, 0x0
const/4 v8, 0x0
:goto_4a
if-ge v8, v6, :cond_10d
aget-object v9, v5, v8
.line 12
invoke-virtual {v9}, Ljava/lang/reflect/Method;->getName()Ljava/lang/String;
move-result-object v10
const-string v11, "onEvent"
.line 13
invoke-virtual {v10, v11}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v11
if-eqz v11, :cond_109
.line 14
invoke-virtual {v9}, Ljava/lang/reflect/Method;->getModifiers()I
move-result v11
and-int/lit8 v12, v11, 0x1
if-eqz v12, :cond_e3
and-int/lit16 v11, v11, 0x1448
if-nez v11, :cond_e3
.line 15
invoke-virtual {v9}, Ljava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class;
move-result-object v11
.line 16
array-length v12, v11
const/4 v13, 0x1
if-ne v12, v13, :cond_109
const/4 v12, 0x7
.line 17
invoke-virtual {v10, v12}, Ljava/lang/String;->substring(I)Ljava/lang/String;
move-result-object v12
.line 18
invoke-virtual {v12}, Ljava/lang/String;->length()I
move-result v13
if-nez v13, :cond_7c
.line 19
sget-object v12, Lio/rong/eventbus/ThreadMode;->PostThread:Lio/rong/eventbus/ThreadMode;
goto :goto_9c
:cond_7c
const-string v13, "MainThread"
.line 20
invoke-virtual {v12, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v13
if-eqz v13, :cond_87
.line 21
sget-object v12, Lio/rong/eventbus/ThreadMode;->MainThread:Lio/rong/eventbus/ThreadMode;
goto :goto_9c
:cond_87
const-string v13, "BackgroundThread"
.line 22
invoke-virtual {v12, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v13
if-eqz v13, :cond_92
.line 23
sget-object v12, Lio/rong/eventbus/ThreadMode;->BackgroundThread:Lio/rong/eventbus/ThreadMode;
goto :goto_9c
:cond_92
const-string v13, "Async"
.line 24
invoke-virtual {v12, v13}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v12
if-eqz v12, :cond_c3
.line 25
sget-object v12, Lio/rong/eventbus/ThreadMode;->Async:Lio/rong/eventbus/ThreadMode;
.line 26
:goto_9c
aget-object v11, v11, v7
.line 27
invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;->setLength(I)V
.line 28
invoke-virtual {v3, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const/16 v10, 0x3e
.line 29
invoke-virtual {v3, v10}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder;
invoke-virtual {v11}, Ljava/lang/Class;->getName()Ljava/lang/String;
move-result-object v10
invoke-virtual {v3, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
.line 30
invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v10
.line 31
invoke-virtual {v2, v10}, Ljava/util/HashSet;->add(Ljava/lang/Object;)Z
move-result v10
if-eqz v10, :cond_109
.line 32
new-instance v10, Lio/rong/eventbus/SubscriberMethod;
invoke-direct {v10, v9, v12, v11}, Lio/rong/eventbus/SubscriberMethod;-><init>(Ljava/lang/reflect/Method;Lio/rong/eventbus/ThreadMode;Ljava/lang/Class;)V
invoke-interface {v1, v10}, Ljava/util/List;->add(Ljava/lang/Object;)Z
goto :goto_109
.line 33
:cond_c3
iget-object v10, p0, Lio/rong/eventbus/SubscriberMethodFinder;->skipMethodVerificationForClasses:Ljava/util/Map;
invoke-interface {v10, v4}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z
move-result v10
if-eqz v10, :cond_cc
goto :goto_109
.line 34
:cond_cc
new-instance p1, Lio/rong/eventbus/EventBusException;
new-instance v0, Ljava/lang/StringBuilder;
invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
const-string v1, "Illegal onEvent method, check for typos: "
invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v0, v9}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v0
invoke-direct {p1, v0}, Lio/rong/eventbus/EventBusException;-><init>(Ljava/lang/String;)V
throw p1
.line 35
:cond_e3
iget-object v9, p0, Lio/rong/eventbus/SubscriberMethodFinder;->skipMethodVerificationForClasses:Ljava/util/Map;
invoke-interface {v9, v4}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z
move-result v9
if-nez v9, :cond_109
.line 36
sget-object v9, Lio/rong/eventbus/EventBus;->TAG:Ljava/lang/String;
new-instance v11, Ljava/lang/StringBuilder;
invoke-direct {v11}, Ljava/lang/StringBuilder;-><init>()V
const-string v12, "Skipping method (not public, static or abstract): "
invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v11, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string v12, "."
invoke-virtual {v11, v12}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v11, v10}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v11}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v10
invoke-static {v9, v10}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
:cond_109
:goto_109
add-int/lit8 v8, v8, 0x1
goto/16 :goto_4a
.line 37
:cond_10d
invoke-virtual {v4}, Ljava/lang/Class;->getSuperclass()Ljava/lang/Class;
move-result-object v4
goto/16 :goto_23
.line 38
:cond_113
:goto_113
invoke-interface {v1}, Ljava/util/List;->isEmpty()Z
move-result v2
if-nez v2, :cond_126
.line 39
sget-object v2, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
monitor-enter v2
.line 40
:try_start_11c
sget-object p1, Lio/rong/eventbus/SubscriberMethodFinder;->methodCache:Ljava/util/Map;
invoke-interface {p1, v0, v1}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
.line 41
monitor-exit v2
return-object v1
:catchall_123
move-exception p1
monitor-exit v2
:try_end_125
.catchall {:try_start_11c .. :try_end_125} :catchall_123
throw p1
.line 42
:cond_126
new-instance v0, Lio/rong/eventbus/EventBusException;
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v2, "Subscriber "
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;
const-string p1, " has no public methods called "
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
const-string p1, "onEvent"
invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object p1
invoke-direct {v0, p1}, Lio/rong/eventbus/EventBusException;-><init>(Ljava/lang/String;)V
throw v0
:catchall_147
move-exception p1
.line 43
:try_start_148
monitor-exit v1
:try_end_149
.catchall {:try_start_148 .. :try_end_149} :catchall_147
goto :goto_14b
:goto_14a
throw p1
:goto_14b
goto :goto_14a
.end method