Path: blob/master/Compiled_apk/smali/androidx/lifecycle/ClassesInfoCache.smali
2458 views
.class Landroidx/lifecycle/ClassesInfoCache; .super Ljava/lang/Object; .source "ClassesInfoCache.java" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Landroidx/lifecycle/ClassesInfoCache$MethodReference;, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; } .end annotation # static fields .field private static final CALL_TYPE_NO_ARG:I = 0x0 .field private static final CALL_TYPE_PROVIDER:I = 0x1 .field private static final CALL_TYPE_PROVIDER_WITH_EVENT:I = 0x2 .field static sInstance:Landroidx/lifecycle/ClassesInfoCache; # instance fields .field private final mCallbackMap:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Ljava/lang/Class;", "Landroidx/lifecycle/ClassesInfoCache$CallbackInfo;", ">;" } .end annotation .end field .field private final mHasLifecycleMethods:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { "Ljava/util/Map<", "Ljava/lang/Class;", "Ljava/lang/Boolean;", ">;" } .end annotation .end field # direct methods .method static constructor <clinit>()V .locals 1 .line 35 new-instance v0, Landroidx/lifecycle/ClassesInfoCache; invoke-direct {v0}, Landroidx/lifecycle/ClassesInfoCache;-><init>()V sput-object v0, Landroidx/lifecycle/ClassesInfoCache;->sInstance:Landroidx/lifecycle/ClassesInfoCache; return-void .end method .method constructor <init>()V .locals 1 .line 33 invoke-direct {p0}, Ljava/lang/Object;-><init>()V .line 41 new-instance v0, Ljava/util/HashMap; invoke-direct {v0}, Ljava/util/HashMap;-><init>()V iput-object v0, p0, Landroidx/lifecycle/ClassesInfoCache;->mCallbackMap:Ljava/util/Map; .line 42 new-instance v0, Ljava/util/HashMap; invoke-direct {v0}, Ljava/util/HashMap;-><init>()V iput-object v0, p0, Landroidx/lifecycle/ClassesInfoCache;->mHasLifecycleMethods:Ljava/util/Map; .line 199 return-void .end method .method private createInfo(Ljava/lang/Class;[Ljava/lang/reflect/Method;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; .locals 16 .param p1, "klass" # Ljava/lang/Class; .param p2, "declaredMethods" # [Ljava/lang/reflect/Method; .line 104 move-object/from16 v0, p0 move-object/from16 v1, p1 invoke-virtual/range {p1 .. p1}, Ljava/lang/Class;->getSuperclass()Ljava/lang/Class; move-result-object v2 .line 105 .local v2, "superclass":Ljava/lang/Class; new-instance v3, Ljava/util/HashMap; invoke-direct {v3}, Ljava/util/HashMap;-><init>()V .line 106 .local v3, "handlerToEvent":Ljava/util/Map;, "Ljava/util/Map<Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;>;" if-eqz v2, :cond_0 .line 107 invoke-virtual {v0, v2}, Landroidx/lifecycle/ClassesInfoCache;->getInfo(Ljava/lang/Class;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; move-result-object v4 .line 108 .local v4, "superInfo":Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; if-eqz v4, :cond_0 .line 109 iget-object v5, v4, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo;->mHandlerToEvent:Ljava/util/Map; invoke-interface {v3, v5}, Ljava/util/Map;->putAll(Ljava/util/Map;)V .line 113 .end local v4 # "superInfo":Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; :cond_0 invoke-virtual/range {p1 .. p1}, Ljava/lang/Class;->getInterfaces()[Ljava/lang/Class; move-result-object v4 .line 114 .local v4, "interfaces":[Ljava/lang/Class; array-length v5, v4 const/4 v6, 0x0 const/4 v7, 0x0 :goto_0 if-ge v7, v5, :cond_2 aget-object v8, v4, v7 .line 115 .local v8, "intrfc":Ljava/lang/Class; invoke-virtual {v0, v8}, Landroidx/lifecycle/ClassesInfoCache;->getInfo(Ljava/lang/Class;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; move-result-object v9 iget-object v9, v9, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo;->mHandlerToEvent:Ljava/util/Map; .line 116 invoke-interface {v9}, Ljava/util/Map;->entrySet()Ljava/util/Set; move-result-object v9 .line 115 invoke-interface {v9}, Ljava/util/Set;->iterator()Ljava/util/Iterator; move-result-object v9 :goto_1 invoke-interface {v9}, Ljava/util/Iterator;->hasNext()Z move-result v10 if-eqz v10, :cond_1 invoke-interface {v9}, Ljava/util/Iterator;->next()Ljava/lang/Object; move-result-object v10 check-cast v10, Ljava/util/Map$Entry; .line 117 .local v10, "entry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;>;" invoke-interface {v10}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; move-result-object v11 check-cast v11, Landroidx/lifecycle/ClassesInfoCache$MethodReference; invoke-interface {v10}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; move-result-object v12 check-cast v12, Landroidx/lifecycle/Lifecycle$Event; invoke-direct {v0, v3, v11, v12, v1}, Landroidx/lifecycle/ClassesInfoCache;->verifyAndPutHandler(Ljava/util/Map;Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;Ljava/lang/Class;)V .line 118 .end local v10 # "entry":Ljava/util/Map$Entry;, "Ljava/util/Map$Entry<Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;>;" goto :goto_1 .line 114 .end local v8 # "intrfc":Ljava/lang/Class; :cond_1 add-int/lit8 v7, v7, 0x1 goto :goto_0 .line 121 :cond_2 if-eqz p2, :cond_3 move-object/from16 v5, p2 goto :goto_2 :cond_3 invoke-direct/range {p0 .. p1}, Landroidx/lifecycle/ClassesInfoCache;->getDeclaredMethods(Ljava/lang/Class;)[Ljava/lang/reflect/Method; move-result-object v5 .line 122 .local v5, "methods":[Ljava/lang/reflect/Method; :goto_2 const/4 v7, 0x0 .line 123 .local v7, "hasLifecycleMethods":Z array-length v8, v5 move v9, v7 const/4 v7, 0x0 .end local v7 # "hasLifecycleMethods":Z .local v9, "hasLifecycleMethods":Z :goto_3 if-ge v7, v8, :cond_b aget-object v10, v5, v7 .line 124 .local v10, "method":Ljava/lang/reflect/Method; const-class v11, Landroidx/lifecycle/OnLifecycleEvent; invoke-virtual {v10, v11}, Ljava/lang/reflect/Method;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; move-result-object v11 check-cast v11, Landroidx/lifecycle/OnLifecycleEvent; .line 125 .local v11, "annotation":Landroidx/lifecycle/OnLifecycleEvent; if-nez v11, :cond_4 .line 126 goto :goto_6 .line 128 :cond_4 const/4 v9, 0x1 .line 129 invoke-virtual {v10}, Ljava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class; move-result-object v12 .line 130 .local v12, "params":[Ljava/lang/Class;, "[Ljava/lang/Class<*>;" const/4 v13, 0x0 .line 131 .local v13, "callType":I array-length v14, v12 if-lez v14, :cond_6 .line 132 const/4 v13, 0x1 .line 133 aget-object v14, v12, v6 const-class v15, Landroidx/lifecycle/LifecycleOwner; invoke-virtual {v14, v15}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z move-result v14 if-eqz v14, :cond_5 goto :goto_4 .line 134 :cond_5 new-instance v6, Ljava/lang/IllegalArgumentException; const-string v7, "invalid parameter type. Must be one and instanceof LifecycleOwner" invoke-direct {v6, v7}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V throw v6 .line 138 :cond_6 :goto_4 invoke-interface {v11}, Landroidx/lifecycle/OnLifecycleEvent;->value()Landroidx/lifecycle/Lifecycle$Event; move-result-object v14 .line 140 .local v14, "event":Landroidx/lifecycle/Lifecycle$Event; array-length v15, v12 const/4 v6, 0x1 if-le v15, v6, :cond_9 .line 141 const/4 v13, 0x2 .line 142 aget-object v6, v12, v6 const-class v15, Landroidx/lifecycle/Lifecycle$Event; invoke-virtual {v6, v15}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z move-result v6 if-eqz v6, :cond_8 .line 146 sget-object v6, Landroidx/lifecycle/Lifecycle$Event;->ON_ANY:Landroidx/lifecycle/Lifecycle$Event; if-ne v14, v6, :cond_7 goto :goto_5 .line 147 :cond_7 new-instance v6, Ljava/lang/IllegalArgumentException; const-string v7, "Second arg is supported only for ON_ANY value" invoke-direct {v6, v7}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V throw v6 .line 143 :cond_8 new-instance v6, Ljava/lang/IllegalArgumentException; const-string v7, "invalid parameter type. second arg must be an event" invoke-direct {v6, v7}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V throw v6 .line 151 :cond_9 :goto_5 array-length v6, v12 const/4 v15, 0x2 if-gt v6, v15, :cond_a .line 154 new-instance v6, Landroidx/lifecycle/ClassesInfoCache$MethodReference; invoke-direct {v6, v13, v10}, Landroidx/lifecycle/ClassesInfoCache$MethodReference;-><init>(ILjava/lang/reflect/Method;)V .line 155 .local v6, "methodReference":Landroidx/lifecycle/ClassesInfoCache$MethodReference; invoke-direct {v0, v3, v6, v14, v1}, Landroidx/lifecycle/ClassesInfoCache;->verifyAndPutHandler(Ljava/util/Map;Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;Ljava/lang/Class;)V .line 123 .end local v6 # "methodReference":Landroidx/lifecycle/ClassesInfoCache$MethodReference; .end local v10 # "method":Ljava/lang/reflect/Method; .end local v11 # "annotation":Landroidx/lifecycle/OnLifecycleEvent; .end local v12 # "params":[Ljava/lang/Class;, "[Ljava/lang/Class<*>;" .end local v13 # "callType":I .end local v14 # "event":Landroidx/lifecycle/Lifecycle$Event; :goto_6 add-int/lit8 v7, v7, 0x1 const/4 v6, 0x0 goto :goto_3 .line 152 .restart local v10 # "method":Ljava/lang/reflect/Method; .restart local v11 # "annotation":Landroidx/lifecycle/OnLifecycleEvent; .restart local v12 # "params":[Ljava/lang/Class;, "[Ljava/lang/Class<*>;" .restart local v13 # "callType":I .restart local v14 # "event":Landroidx/lifecycle/Lifecycle$Event; :cond_a new-instance v6, Ljava/lang/IllegalArgumentException; const-string v7, "cannot have more than 2 params" invoke-direct {v6, v7}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V throw v6 .line 157 .end local v10 # "method":Ljava/lang/reflect/Method; .end local v11 # "annotation":Landroidx/lifecycle/OnLifecycleEvent; .end local v12 # "params":[Ljava/lang/Class;, "[Ljava/lang/Class<*>;" .end local v13 # "callType":I .end local v14 # "event":Landroidx/lifecycle/Lifecycle$Event; :cond_b new-instance v6, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; invoke-direct {v6, v3}, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo;-><init>(Ljava/util/Map;)V .line 158 .local v6, "info":Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; iget-object v7, v0, Landroidx/lifecycle/ClassesInfoCache;->mCallbackMap:Ljava/util/Map; invoke-interface {v7, v1, v6}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; .line 159 iget-object v7, v0, Landroidx/lifecycle/ClassesInfoCache;->mHasLifecycleMethods:Ljava/util/Map; invoke-static {v9}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object v8 invoke-interface {v7, v1, v8}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; .line 160 return-object v6 .end method .method private getDeclaredMethods(Ljava/lang/Class;)[Ljava/lang/reflect/Method; .locals 3 .param p1, "klass" # Ljava/lang/Class; .line 69 :try_start_0 invoke-virtual {p1}, Ljava/lang/Class;->getDeclaredMethods()[Ljava/lang/reflect/Method; move-result-object v0 :try_end_0 .catch Ljava/lang/NoClassDefFoundError; {:try_start_0 .. :try_end_0} :catch_0 return-object v0 .line 70 :catch_0 move-exception v0 .line 71 .local v0, "e":Ljava/lang/NoClassDefFoundError; new-instance v1, Ljava/lang/IllegalArgumentException; const-string v2, "The observer class has some methods that use newer APIs which are not available in the current OS version. Lifecycles cannot access even other methods so you should make sure that your observer classes only access framework classes that are available in your min API level OR use lifecycle:compiler annotation processor." invoke-direct {v1, v2, v0}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V throw v1 .end method .method private verifyAndPutHandler(Ljava/util/Map;Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;Ljava/lang/Class;)V .locals 5 .param p2, "newHandler" # Landroidx/lifecycle/ClassesInfoCache$MethodReference; .param p3, "newEvent" # Landroidx/lifecycle/Lifecycle$Event; .param p4, "klass" # Ljava/lang/Class; .annotation system Ldalvik/annotation/Signature; value = { "(", "Ljava/util/Map<", "Landroidx/lifecycle/ClassesInfoCache$MethodReference;", "Landroidx/lifecycle/Lifecycle$Event;", ">;", "Landroidx/lifecycle/ClassesInfoCache$MethodReference;", "Landroidx/lifecycle/Lifecycle$Event;", "Ljava/lang/Class;", ")V" } .end annotation .line 90 .local p1, "handlers":Ljava/util/Map;, "Ljava/util/Map<Landroidx/lifecycle/ClassesInfoCache$MethodReference;Landroidx/lifecycle/Lifecycle$Event;>;" invoke-interface {p1, p2}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroidx/lifecycle/Lifecycle$Event; .line 91 .local v0, "event":Landroidx/lifecycle/Lifecycle$Event; if-eqz v0, :cond_1 if-ne p3, v0, :cond_0 goto :goto_0 .line 92 :cond_0 iget-object v1, p2, Landroidx/lifecycle/ClassesInfoCache$MethodReference;->mMethod:Ljava/lang/reflect/Method; .line 93 .local v1, "method":Ljava/lang/reflect/Method; new-instance v2, Ljava/lang/IllegalArgumentException; new-instance v3, Ljava/lang/StringBuilder; invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V const-string v4, "Method " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; .line 94 invoke-virtual {v1}, Ljava/lang/reflect/Method;->getName()Ljava/lang/String; move-result-object v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v4, " in " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {p4}, Ljava/lang/Class;->getName()Ljava/lang/String; move-result-object v4 invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v4, " already declared with different @OnLifecycleEvent value: previous" invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; const-string v4, " value " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; const-string v4, ", new value " invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; invoke-virtual {v3, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; move-result-object v3 invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;-><init>(Ljava/lang/String;)V throw v2 .line 98 .end local v1 # "method":Ljava/lang/reflect/Method; :cond_1 :goto_0 if-nez v0, :cond_2 .line 99 invoke-interface {p1, p2, p3}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; .line 101 :cond_2 return-void .end method # virtual methods .method getInfo(Ljava/lang/Class;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; .locals 2 .param p1, "klass" # Ljava/lang/Class; .line 80 iget-object v0, p0, Landroidx/lifecycle/ClassesInfoCache;->mCallbackMap:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; .line 81 .local v0, "existing":Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; if-eqz v0, :cond_0 .line 82 return-object v0 .line 84 :cond_0 const/4 v1, 0x0 invoke-direct {p0, p1, v1}, Landroidx/lifecycle/ClassesInfoCache;->createInfo(Ljava/lang/Class;[Ljava/lang/reflect/Method;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; move-result-object v0 .line 85 return-object v0 .end method .method hasLifecycleMethods(Ljava/lang/Class;)Z .locals 6 .param p1, "klass" # Ljava/lang/Class; .line 45 iget-object v0, p0, Landroidx/lifecycle/ClassesInfoCache;->mHasLifecycleMethods:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_0 .line 46 iget-object v0, p0, Landroidx/lifecycle/ClassesInfoCache;->mHasLifecycleMethods:Ljava/util/Map; invoke-interface {v0, p1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object; move-result-object v0 check-cast v0, Ljava/lang/Boolean; invoke-virtual {v0}, Ljava/lang/Boolean;->booleanValue()Z move-result v0 return v0 .line 49 :cond_0 invoke-direct {p0, p1}, Landroidx/lifecycle/ClassesInfoCache;->getDeclaredMethods(Ljava/lang/Class;)[Ljava/lang/reflect/Method; move-result-object v0 .line 50 .local v0, "methods":[Ljava/lang/reflect/Method; array-length v1, v0 const/4 v2, 0x0 const/4 v3, 0x0 :goto_0 if-ge v3, v1, :cond_2 aget-object v4, v0, v3 .line 51 .local v4, "method":Ljava/lang/reflect/Method; const-class v5, Landroidx/lifecycle/OnLifecycleEvent; invoke-virtual {v4, v5}, Ljava/lang/reflect/Method;->getAnnotation(Ljava/lang/Class;)Ljava/lang/annotation/Annotation; move-result-object v5 check-cast v5, Landroidx/lifecycle/OnLifecycleEvent; .line 52 .local v5, "annotation":Landroidx/lifecycle/OnLifecycleEvent; if-eqz v5, :cond_1 .line 59 invoke-direct {p0, p1, v0}, Landroidx/lifecycle/ClassesInfoCache;->createInfo(Ljava/lang/Class;[Ljava/lang/reflect/Method;)Landroidx/lifecycle/ClassesInfoCache$CallbackInfo; .line 60 const/4 v1, 0x1 return v1 .line 50 .end local v4 # "method":Ljava/lang/reflect/Method; .end local v5 # "annotation":Landroidx/lifecycle/OnLifecycleEvent; :cond_1 add-int/lit8 v3, v3, 0x1 goto :goto_0 .line 63 :cond_2 iget-object v1, p0, Landroidx/lifecycle/ClassesInfoCache;->mHasLifecycleMethods:Ljava/util/Map; invoke-static {v2}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object v3 invoke-interface {v1, p1, v3}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; .line 64 return v2 .end method