Uberspect.smali

.class public Lorg/apache/commons/jexl3/internal/introspection/Uberspect;
.super Ljava/lang/Object;
.source "SourceFile"

# interfaces
.implements Lorg/apache/commons/jexl3/introspection/JexlUberspect;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lorg/apache/commons/jexl3/internal/introspection/Uberspect$ArithmeticUberspect;
    }
.end annotation


# static fields
.field public static final TRY_FAILED:Ljava/lang/Object;


# instance fields
.field private volatile loader:Ljava/lang/ref/Reference;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/lang/ref/Reference<",
            "Ljava/lang/ClassLoader;",
            ">;"
        }
    .end annotation
.end field

.field private final operatorMap:Ljava/util/Map;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Map<",
            "Ljava/lang/Class<",
            "+",
            "Lorg/apache/commons/jexl3/JexlArithmetic;",
            ">;",
            "Ljava/util/Set<",
            "Lorg/apache/commons/jexl3/JexlOperator;",
            ">;>;"
        }
    .end annotation
.end field

.field private volatile ref:Ljava/lang/ref/Reference;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/lang/ref/Reference<",
            "Lorg/apache/commons/jexl3/internal/introspection/Introspector;",
            ">;"
        }
    .end annotation
.end field

.field public final rlog:Lorg/apache/commons/logging/Log;

.field private final strategy:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

.field private final version:Ljava/util/concurrent/atomic/AtomicInteger;


# direct methods
.method public static constructor <clinit>()V
    .registers 1

    sget-object v0, Lorg/apache/commons/jexl3/JexlEngine;->TRY_FAILED:Ljava/lang/Object;

    sput-object v0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->TRY_FAILED:Ljava/lang/Object;

    return-void
.end method

.method public constructor <init>(Lorg/apache/commons/logging/Log;Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;)V
    .registers 3

    .line 1
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 2
    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->rlog:Lorg/apache/commons/logging/Log;

    if-nez p2, :cond_9

    .line 3
    sget-object p2, Lorg/apache/commons/jexl3/introspection/JexlUberspect;->JEXL_STRATEGY:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

    :cond_9
    iput-object p2, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->strategy:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

    .line 4
    new-instance p1, Ljava/lang/ref/SoftReference;

    const/4 p2, 0x0

    invoke-direct {p1, p2}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

    .line 5
    new-instance p1, Ljava/lang/ref/SoftReference;

    invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object p2

    invoke-virtual {p2}, Ljava/lang/Class;->getClassLoader()Ljava/lang/ClassLoader;

    move-result-object p2

    invoke-direct {p1, p2}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->loader:Ljava/lang/ref/Reference;

    .line 6
    new-instance p1, Ljava/util/concurrent/ConcurrentHashMap;

    invoke-direct {p1}, Ljava/util/concurrent/ConcurrentHashMap;-><init>()V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->operatorMap:Ljava/util/Map;

    .line 7
    new-instance p1, Ljava/util/concurrent/atomic/AtomicInteger;

    const/4 p2, 0x0

    invoke-direct {p1, p2}, Ljava/util/concurrent/atomic/AtomicInteger;-><init>(I)V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->version:Ljava/util/concurrent/atomic/AtomicInteger;

    return-void
.end method


# virtual methods
.method public final base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;
    .registers 4

    .line 1
    iget-object v0, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

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

    move-result-object v0

    check-cast v0, Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    if-nez v0, :cond_40

    .line 2
    monitor-enter p0

    .line 3
    :try_start_b
    iget-object v0, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

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

    move-result-object v0

    check-cast v0, Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    if-nez v0, :cond_3b

    .line 4
    new-instance v0, Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    iget-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->rlog:Lorg/apache/commons/logging/Log;

    iget-object v2, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->loader:Ljava/lang/ref/Reference;

    invoke-virtual {v2}, Ljava/lang/ref/Reference;->get()Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Ljava/lang/ClassLoader;

    invoke-direct {v0, v1, v2}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;-><init>(Lorg/apache/commons/logging/Log;Ljava/lang/ClassLoader;)V

    .line 5
    new-instance v1, Ljava/lang/ref/SoftReference;

    invoke-direct {v1, v0}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

    .line 6
    new-instance v1, Ljava/lang/ref/SoftReference;

    invoke-virtual {v0}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getLoader()Ljava/lang/ClassLoader;

    move-result-object v2

    invoke-direct {v1, v2}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->loader:Ljava/lang/ref/Reference;

    .line 7
    iget-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->version:Ljava/util/concurrent/atomic/AtomicInteger;

    invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I

    .line 8
    :cond_3b
    monitor-exit p0

    goto :goto_40

    :catchall_3d
    move-exception v0

    monitor-exit p0
    :try_end_3f
    .catchall {:try_start_b .. :try_end_3f} :catchall_3d

    throw v0

    :cond_40
    :goto_40
    return-object v0
.end method

.method public getArithmetic(Lorg/apache/commons/jexl3/JexlArithmetic;)Lorg/apache/commons/jexl3/JexlArithmetic$Uberspect;
    .registers 18

    move-object/from16 v0, p0

    move-object/from16 v1, p1

    if-eqz v1, :cond_70

    .line 1
    invoke-virtual/range {p1 .. p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v3

    .line 2
    iget-object v4, v0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->operatorMap:Ljava/util/Map;

    invoke-interface {v4, v3}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v4

    check-cast v4, Ljava/util/Set;

    if-nez v4, :cond_69

    .line 3
    const-class v4, Lorg/apache/commons/jexl3/JexlOperator;

    invoke-static {v4}, Ljava/util/EnumSet;->noneOf(Ljava/lang/Class;)Ljava/util/EnumSet;

    move-result-object v4

    .line 4
    invoke-static {}, Lorg/apache/commons/jexl3/JexlOperator;->values()[Lorg/apache/commons/jexl3/JexlOperator;

    move-result-object v5

    array-length v6, v5

    const/4 v8, 0x0

    :goto_20
    if-ge v8, v6, :cond_64

    aget-object v9, v5, v8

    .line 5
    invoke-virtual/range {p1 .. p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v10

    invoke-virtual {v9}, Lorg/apache/commons/jexl3/JexlOperator;->getMethodName()Ljava/lang/String;

    move-result-object v11

    invoke-virtual {v0, v10, v11}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->getMethods(Ljava/lang/Class;Ljava/lang/String;)[Ljava/lang/reflect/Method;

    move-result-object v10

    if-eqz v10, :cond_61

    .line 6
    array-length v11, v10

    const/4 v12, 0x0

    :goto_34
    if-ge v12, v11, :cond_61

    aget-object v13, v10, v12

    .line 7
    invoke-virtual {v13}, Ljava/lang/reflect/Method;->getParameterTypes()[Ljava/lang/Class;

    move-result-object v13

    .line 8
    array-length v14, v13

    invoke-virtual {v9}, Lorg/apache/commons/jexl3/JexlOperator;->getArity()I

    move-result v15

    if-eq v14, v15, :cond_44

    goto :goto_5e

    :cond_44
    const/4 v14, 0x1

    const/4 v15, 0x0

    :goto_46
    if-eqz v14, :cond_59

    .line 9
    array-length v7, v13

    if-ge v15, v7, :cond_59

    .line 10
    const-class v7, Ljava/lang/Object;

    aget-object v2, v13, v15

    invoke-virtual {v7, v2}, Ljava/lang/Object;->equals(Ljava/lang/Object;)Z

    move-result v2

    if-nez v2, :cond_56

    const/4 v14, 0x0

    :cond_56
    add-int/lit8 v15, v15, 0x1

    goto :goto_46

    :cond_59
    if-nez v14, :cond_5e

    .line 11
    invoke-interface {v4, v9}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    :cond_5e
    :goto_5e
    add-int/lit8 v12, v12, 0x1

    goto :goto_34

    :cond_61
    add-int/lit8 v8, v8, 0x1

    goto :goto_20

    .line 12
    :cond_64
    iget-object v2, v0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->operatorMap:Ljava/util/Map;

    invoke-interface {v2, v3, v4}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 13
    :cond_69
    new-instance v2, Lorg/apache/commons/jexl3/internal/introspection/Uberspect$ArithmeticUberspect;

    const/4 v3, 0x0

    invoke-direct {v2, v0, v1, v4, v3}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect$ArithmeticUberspect;-><init>(Lorg/apache/commons/jexl3/internal/introspection/Uberspect;Lorg/apache/commons/jexl3/JexlArithmetic;Ljava/util/Set;Lorg/apache/commons/jexl3/internal/introspection/Uberspect$1;)V

    goto :goto_72

    :cond_70
    const/4 v3, 0x0

    move-object v2, v3

    :goto_72
    return-object v2
.end method

.method public final getClassByName(Ljava/lang/String;)Ljava/lang/Class;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/String;",
            ")",
            "Ljava/lang/Class<",
            "*>;"
        }
    .end annotation

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getClassByName(Ljava/lang/String;)Ljava/lang/Class;

    move-result-object p1

    return-object p1
.end method

.method public varargs getConstructor(Ljava/lang/Object;[Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlMethod;
    .registers 4

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-static {v0, p1, p2}, Lorg/apache/commons/jexl3/internal/introspection/ConstructorMethod;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Object;[Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/ConstructorMethod;

    move-result-object p1

    return-object p1
.end method

.method public final getField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field;
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;",
            "Ljava/lang/String;",
            ")",
            "Ljava/lang/reflect/Field;"
        }
    .end annotation

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1, p2}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field;

    move-result-object p1

    return-object p1
.end method

.method public final getFieldNames(Ljava/lang/Class;)[Ljava/lang/String;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;)[",
            "Ljava/lang/String;"
        }
    .end annotation

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getFieldNames(Ljava/lang/Class;)[Ljava/lang/String;

    move-result-object p1

    return-object p1
.end method

.method public getIterator(Ljava/lang/Object;)Ljava/util/Iterator;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Object;",
            ")",
            "Ljava/util/Iterator<",
            "*>;"
        }
    .end annotation

    .line 1
    instance-of v0, p1, Ljava/util/Iterator;

    if-eqz v0, :cond_7

    .line 2
    check-cast p1, Ljava/util/Iterator;

    return-object p1

    .line 3
    :cond_7
    invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/Class;->isArray()Z

    move-result v0

    if-eqz v0, :cond_17

    .line 4
    new-instance v0, Lorg/apache/commons/jexl3/internal/introspection/ArrayIterator;

    invoke-direct {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/ArrayIterator;-><init>(Ljava/lang/Object;)V

    return-object v0

    .line 5
    :cond_17
    instance-of v0, p1, Ljava/util/Map;

    if-eqz v0, :cond_26

    .line 6
    check-cast p1, Ljava/util/Map;

    invoke-interface {p1}, Ljava/util/Map;->values()Ljava/util/Collection;

    move-result-object p1

    invoke-interface {p1}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;

    move-result-object p1

    return-object p1

    .line 7
    :cond_26
    instance-of v0, p1, Ljava/util/Enumeration;

    if-eqz v0, :cond_32

    .line 8
    new-instance v0, Lorg/apache/commons/jexl3/internal/introspection/EnumerationIterator;

    check-cast p1, Ljava/util/Enumeration;

    invoke-direct {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/EnumerationIterator;-><init>(Ljava/util/Enumeration;)V

    return-object v0

    .line 9
    :cond_32
    instance-of v0, p1, Ljava/lang/Iterable;

    if-eqz v0, :cond_3d

    .line 10
    check-cast p1, Ljava/lang/Iterable;

    invoke-interface {p1}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;

    move-result-object p1

    return-object p1

    :cond_3d
    const/4 v0, 0x0

    :try_start_3e
    const-string v1, "iterator"

    .line 11
    invoke-virtual {p0, p1, v1, v0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->getMethod(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlMethod;

    move-result-object v1

    if-eqz v1, :cond_6b

    .line 12
    const-class v2, Ljava/util/Iterator;

    invoke-interface {v1}, Lorg/apache/commons/jexl3/introspection/JexlMethod;->getReturnType()Ljava/lang/Class;

    move-result-object v3

    invoke-virtual {v2, v3}, Ljava/lang/Class;->isAssignableFrom(Ljava/lang/Class;)Z

    move-result v2

    if-eqz v2, :cond_6b

    .line 13
    invoke-interface {v1, p1, v0}, Lorg/apache/commons/jexl3/introspection/JexlMethod;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object p1

    check-cast p1, Ljava/util/Iterator;
    :try_end_58
    .catch Ljava/lang/Exception; {:try_start_3e .. :try_end_58} :catch_59

    return-object p1

    :catch_59
    move-exception p1

    .line 14
    iget-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->rlog:Lorg/apache/commons/logging/Log;

    if-eqz v1, :cond_6b

    invoke-interface {v1}, Lorg/apache/commons/logging/Log;->isDebugEnabled()Z

    move-result v1

    if-eqz v1, :cond_6b

    .line 15
    iget-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->rlog:Lorg/apache/commons/logging/Log;

    const-string v2, "unable to solve iterator()"

    invoke-interface {v1, v2, p1}, Lorg/apache/commons/logging/Log;->info(Ljava/lang/Object;Ljava/lang/Throwable;)V

    :cond_6b
    return-object v0
.end method

.method public final getMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/reflect/Method;
    .registers 6
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;",
            "Ljava/lang/String;",
            "[",
            "Ljava/lang/Object;",
            ")",
            "Ljava/lang/reflect/Method;"
        }
    .end annotation

    .line 1
    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    new-instance v1, Lorg/apache/commons/jexl3/internal/introspection/MethodKey;

    invoke-direct {v1, p2, p3}, Lorg/apache/commons/jexl3/internal/introspection/MethodKey;-><init>(Ljava/lang/String;[Ljava/lang/Object;)V

    invoke-virtual {v0, p1, v1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getMethod(Ljava/lang/Class;Lorg/apache/commons/jexl3/internal/introspection/MethodKey;)Ljava/lang/reflect/Method;

    move-result-object p1

    return-object p1
.end method

.method public final getMethod(Ljava/lang/Class;Lorg/apache/commons/jexl3/internal/introspection/MethodKey;)Ljava/lang/reflect/Method;
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;",
            "Lorg/apache/commons/jexl3/internal/introspection/MethodKey;",
            ")",
            "Ljava/lang/reflect/Method;"
        }
    .end annotation

    .line 2
    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1, p2}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getMethod(Ljava/lang/Class;Lorg/apache/commons/jexl3/internal/introspection/MethodKey;)Ljava/lang/reflect/Method;

    move-result-object p1

    return-object p1
.end method

.method public varargs getMethod(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlMethod;
    .registers 5

    .line 3
    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-static {v0, p1, p2, p3}, Lorg/apache/commons/jexl3/internal/introspection/MethodExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/MethodExecutor;

    move-result-object p1

    return-object p1
.end method

.method public final getMethodNames(Ljava/lang/Class;)[Ljava/lang/String;
    .registers 3
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;)[",
            "Ljava/lang/String;"
        }
    .end annotation

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getMethodNames(Ljava/lang/Class;)[Ljava/lang/String;

    move-result-object p1

    return-object p1
.end method

.method public final getMethods(Ljava/lang/Class;Ljava/lang/String;)[Ljava/lang/reflect/Method;
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/lang/Class<",
            "*>;",
            "Ljava/lang/String;",
            ")[",
            "Ljava/lang/reflect/Method;"
        }
    .end annotation

    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v0

    invoke-virtual {v0, p1, p2}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getMethods(Ljava/lang/Class;Ljava/lang/String;)[Ljava/lang/reflect/Method;

    move-result-object p1

    return-object p1
.end method

.method public getPropertyGet(Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;
    .registers 4

    const/4 v0, 0x0

    .line 1
    invoke-virtual {p0, v0, p1, p2}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->getPropertyGet(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;

    move-result-object p1

    return-object p1
.end method

.method public getPropertyGet(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;
    .registers 11
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List<",
            "Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;",
            ">;",
            "Ljava/lang/Object;",
            "Ljava/lang/Object;",
            ")",
            "Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;"
        }
    .end annotation

    .line 2
    invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v0

    .line 3
    invoke-static {p3}, Lorg/apache/commons/jexl3/internal/introspection/AbstractExecutor;->castString(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v1

    .line 4
    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v2

    const/4 v3, 0x0

    if-nez p1, :cond_15

    .line 5
    iget-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->strategy:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

    invoke-interface {p1, v3, p2}, Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;->apply(Lorg/apache/commons/jexl3/JexlOperator;Ljava/lang/Object;)Ljava/util/List;

    move-result-object p1

    .line 6
    :cond_15
    invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object p1

    move-object v4, v3

    :cond_1a
    :goto_1a
    invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z

    move-result v5

    if-eqz v5, :cond_7e

    invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v5

    check-cast v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;

    .line 7
    instance-of v6, v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$JexlResolver;

    if-eqz v6, :cond_77

    .line 8
    sget-object v6, Lorg/apache/commons/jexl3/internal/introspection/Uberspect$1;->$SwitchMap$org$apache$commons$jexl3$introspection$JexlUberspect$JexlResolver:[I

    check-cast v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$JexlResolver;

    invoke-virtual {v5}, Ljava/lang/Enum;->ordinal()I

    move-result v5

    aget v5, v6, v5

    packed-switch v5, :pswitch_data_80

    goto :goto_1a

    .line 9
    :pswitch_38
    invoke-static {v2, p2, v1}, Lorg/apache/commons/jexl3/internal/introspection/IndexedType;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Object;Ljava/lang/String;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;

    move-result-object v4

    goto :goto_7b

    .line 10
    :pswitch_3d
    invoke-static {v2, v0, v1}, Lorg/apache/commons/jexl3/internal/introspection/FieldGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;

    move-result-object v4

    .line 11
    instance-of v5, p2, Ljava/lang/Class;

    if-eqz v5, :cond_7b

    .line 12
    move-object v4, p2

    check-cast v4, Ljava/lang/Class;

    invoke-static {v2, v4, v1}, Lorg/apache/commons/jexl3/internal/introspection/FieldGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;

    move-result-object v4

    goto :goto_7b

    .line 13
    :pswitch_4d
    invoke-static {v2, v0, p3}, Lorg/apache/commons/jexl3/internal/introspection/DuckGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/DuckGetExecutor;

    move-result-object v4

    if-nez v4, :cond_7b

    if-eqz v1, :cond_7b

    if-eq v1, p3, :cond_7b

    .line 14
    invoke-static {v2, v0, v1}, Lorg/apache/commons/jexl3/internal/introspection/DuckGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/DuckGetExecutor;

    move-result-object v4

    goto :goto_7b

    .line 15
    :pswitch_5c
    invoke-static {p3}, Lorg/apache/commons/jexl3/internal/introspection/AbstractExecutor;->castInteger(Ljava/lang/Object;)Ljava/lang/Integer;

    move-result-object v5

    if-eqz v5, :cond_7b

    .line 16
    invoke-static {v2, v0, v5}, Lorg/apache/commons/jexl3/internal/introspection/ListGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Integer;)Lorg/apache/commons/jexl3/internal/introspection/ListGetExecutor;

    move-result-object v4

    goto :goto_7b

    .line 17
    :pswitch_67
    invoke-static {v2, v0, p3}, Lorg/apache/commons/jexl3/internal/introspection/MapGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/MapGetExecutor;

    move-result-object v4

    goto :goto_7b

    .line 18
    :pswitch_6c
    invoke-static {v2, v0, v1}, Lorg/apache/commons/jexl3/internal/introspection/PropertyGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;)Lorg/apache/commons/jexl3/internal/introspection/PropertyGetExecutor;

    move-result-object v4

    if-nez v4, :cond_7b

    .line 19
    invoke-static {v2, v0, v1}, Lorg/apache/commons/jexl3/internal/introspection/BooleanGetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;)Lorg/apache/commons/jexl3/internal/introspection/BooleanGetExecutor;

    move-result-object v4

    goto :goto_7b

    .line 20
    :cond_77
    invoke-interface {v5, p0, p2, p3}, Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;->getPropertyGet(Lorg/apache/commons/jexl3/introspection/JexlUberspect;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertyGet;

    move-result-object v4

    :cond_7b
    :goto_7b
    if-eqz v4, :cond_1a

    return-object v4

    :cond_7e
    return-object v3

    nop

    :pswitch_data_80
    .packed-switch 0x1
        :pswitch_6c
        :pswitch_67
        :pswitch_5c
        :pswitch_4d
        :pswitch_3d
        :pswitch_38
    .end packed-switch
.end method

.method public getPropertySet(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertySet;
    .registers 5

    const/4 v0, 0x0

    .line 1
    invoke-virtual {p0, v0, p1, p2, p3}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->getPropertySet(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertySet;

    move-result-object p1

    return-object p1
.end method

.method public getPropertySet(Ljava/util/List;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertySet;
    .registers 12
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Ljava/util/List<",
            "Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;",
            ">;",
            "Ljava/lang/Object;",
            "Ljava/lang/Object;",
            "Ljava/lang/Object;",
            ")",
            "Lorg/apache/commons/jexl3/introspection/JexlPropertySet;"
        }
    .end annotation

    .line 2
    invoke-virtual {p2}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v0

    .line 3
    invoke-static {p3}, Lorg/apache/commons/jexl3/internal/introspection/AbstractExecutor;->castString(Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v1

    .line 4
    invoke-virtual {p0}, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->base()Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    move-result-object v2

    const/4 v3, 0x0

    if-nez p1, :cond_15

    .line 5
    iget-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->strategy:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

    invoke-interface {p1, v3, p2}, Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;->apply(Lorg/apache/commons/jexl3/JexlOperator;Ljava/lang/Object;)Ljava/util/List;

    move-result-object p1

    .line 6
    :cond_15
    invoke-interface {p1}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object p1

    move-object v4, v3

    :cond_1a
    :goto_1a
    invoke-interface {p1}, Ljava/util/Iterator;->hasNext()Z

    move-result v5

    if-eqz v5, :cond_74

    invoke-interface {p1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v5

    check-cast v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;

    .line 7
    instance-of v6, v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$JexlResolver;

    if-eqz v6, :cond_6d

    .line 8
    sget-object v6, Lorg/apache/commons/jexl3/internal/introspection/Uberspect$1;->$SwitchMap$org$apache$commons$jexl3$introspection$JexlUberspect$JexlResolver:[I

    check-cast v5, Lorg/apache/commons/jexl3/introspection/JexlUberspect$JexlResolver;

    invoke-virtual {v5}, Ljava/lang/Enum;->ordinal()I

    move-result v5

    aget v5, v6, v5

    const/4 v6, 0x1

    if-eq v5, v6, :cond_68

    const/4 v6, 0x2

    if-eq v5, v6, :cond_63

    const/4 v6, 0x3

    if-eq v5, v6, :cond_58

    const/4 v6, 0x4

    if-eq v5, v6, :cond_49

    const/4 v6, 0x5

    if-eq v5, v6, :cond_44

    goto :goto_1a

    .line 9
    :cond_44
    invoke-static {v2, v0, v1, p4}, Lorg/apache/commons/jexl3/internal/introspection/FieldSetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertySet;

    move-result-object v4

    goto :goto_71

    .line 10
    :cond_49
    invoke-static {v2, v0, p3, p4}, Lorg/apache/commons/jexl3/internal/introspection/DuckSetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/DuckSetExecutor;

    move-result-object v4

    if-nez v4, :cond_71

    if-eqz v1, :cond_71

    if-eq v1, p3, :cond_71

    .line 11
    invoke-static {v2, v0, v1, p4}, Lorg/apache/commons/jexl3/internal/introspection/DuckSetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/DuckSetExecutor;

    move-result-object v4

    goto :goto_71

    .line 12
    :cond_58
    invoke-static {p3}, Lorg/apache/commons/jexl3/internal/introspection/AbstractExecutor;->castInteger(Ljava/lang/Object;)Ljava/lang/Integer;

    move-result-object v5

    if-eqz v5, :cond_71

    .line 13
    invoke-static {v2, v0, p3, p4}, Lorg/apache/commons/jexl3/internal/introspection/ListSetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/ListSetExecutor;

    move-result-object v4

    goto :goto_71

    .line 14
    :cond_63
    invoke-static {v2, v0, p3, p4}, Lorg/apache/commons/jexl3/internal/introspection/MapSetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/MapSetExecutor;

    move-result-object v4

    goto :goto_71

    .line 15
    :cond_68
    invoke-static {v2, v0, v1, p4}, Lorg/apache/commons/jexl3/internal/introspection/PropertySetExecutor;->discover(Lorg/apache/commons/jexl3/internal/introspection/Introspector;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Object;)Lorg/apache/commons/jexl3/internal/introspection/PropertySetExecutor;

    move-result-object v4

    goto :goto_71

    .line 16
    :cond_6d
    invoke-interface {v5, p0, p2, p3, p4}, Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;->getPropertySet(Lorg/apache/commons/jexl3/introspection/JexlUberspect;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lorg/apache/commons/jexl3/introspection/JexlPropertySet;

    move-result-object v4

    :cond_71
    :goto_71
    if-eqz v4, :cond_1a

    return-object v4

    :cond_74
    return-object v3
.end method

.method public getResolvers(Lorg/apache/commons/jexl3/JexlOperator;Ljava/lang/Object;)Ljava/util/List;
    .registers 4
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "(",
            "Lorg/apache/commons/jexl3/JexlOperator;",
            "Ljava/lang/Object;",
            ")",
            "Ljava/util/List<",
            "Lorg/apache/commons/jexl3/introspection/JexlUberspect$PropertyResolver;",
            ">;"
        }
    .end annotation

    iget-object v0, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->strategy:Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;

    invoke-interface {v0, p1, p2}, Lorg/apache/commons/jexl3/introspection/JexlUberspect$ResolverStrategy;->apply(Lorg/apache/commons/jexl3/JexlOperator;Ljava/lang/Object;)Ljava/util/List;

    move-result-object p1

    return-object p1
.end method

.method public getVersion()I
    .registers 2

    iget-object v0, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->version:Ljava/util/concurrent/atomic/AtomicInteger;

    invoke-virtual {v0}, Ljava/util/concurrent/atomic/AtomicInteger;->intValue()I

    move-result v0

    return v0
.end method

.method public setClassLoader(Ljava/lang/ClassLoader;)V
    .registers 4

    .line 1
    monitor-enter p0

    .line 2
    :try_start_1
    iget-object v0, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

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

    move-result-object v0

    check-cast v0, Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    if-eqz v0, :cond_f

    .line 3
    invoke-virtual {v0, p1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->setLoader(Ljava/lang/ClassLoader;)V

    goto :goto_1d

    .line 4
    :cond_f
    new-instance v0, Lorg/apache/commons/jexl3/internal/introspection/Introspector;

    iget-object v1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->rlog:Lorg/apache/commons/logging/Log;

    invoke-direct {v0, v1, p1}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;-><init>(Lorg/apache/commons/logging/Log;Ljava/lang/ClassLoader;)V

    .line 5
    new-instance p1, Ljava/lang/ref/SoftReference;

    invoke-direct {p1, v0}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->ref:Ljava/lang/ref/Reference;

    .line 6
    :goto_1d
    new-instance p1, Ljava/lang/ref/SoftReference;

    invoke-virtual {v0}, Lorg/apache/commons/jexl3/internal/introspection/Introspector;->getLoader()Ljava/lang/ClassLoader;

    move-result-object v0

    invoke-direct {p1, v0}, Ljava/lang/ref/SoftReference;-><init>(Ljava/lang/Object;)V

    iput-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->loader:Ljava/lang/ref/Reference;

    .line 7
    iget-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->operatorMap:Ljava/util/Map;

    invoke-interface {p1}, Ljava/util/Map;->clear()V

    .line 8
    iget-object p1, p0, Lorg/apache/commons/jexl3/internal/introspection/Uberspect;->version:Ljava/util/concurrent/atomic/AtomicInteger;

    invoke-virtual {p1}, Ljava/util/concurrent/atomic/AtomicInteger;->incrementAndGet()I

    .line 9
    monitor-exit p0

    return-void

    :catchall_34
    move-exception p1

    monitor-exit p0
    :try_end_36
    .catchall {:try_start_1 .. :try_end_36} :catchall_34

    throw p1
.end method