Suppliers.java 6.44 KB
package com.google.common.base;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.VisibleForTesting;
import java.io.Serializable;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nullable;

@GwtCompatible
public final class Suppliers
{
  public static <F, T> Supplier<T> compose(Function<? super F, T> paramFunction, Supplier<F> paramSupplier)
  {
    Preconditions.checkNotNull(paramFunction);
    Preconditions.checkNotNull(paramSupplier);
    return new c(paramFunction, paramSupplier);
  }
  
  public static <T> Supplier<T> memoize(Supplier<T> paramSupplier)
  {
    if ((paramSupplier instanceof b)) {
      return paramSupplier;
    }
    return new b((Supplier)Preconditions.checkNotNull(paramSupplier));
  }
  
  public static <T> Supplier<T> memoizeWithExpiration(Supplier<T> paramSupplier, long paramLong, TimeUnit paramTimeUnit)
  {
    return new a(paramSupplier, paramLong, paramTimeUnit);
  }
  
  public static <T> Supplier<T> ofInstance(@Nullable T paramT)
  {
    return new f(paramT);
  }
  
  @Beta
  public static <T> Function<Supplier<T>, T> supplierFunction()
  {
    return e.a;
  }
  
  public static <T> Supplier<T> synchronizedSupplier(Supplier<T> paramSupplier)
  {
    return new g((Supplier)Preconditions.checkNotNull(paramSupplier));
  }
  
  @VisibleForTesting
  static final class a<T>
    implements Supplier<T>, Serializable
  {
    private static final long serialVersionUID = 0L;
    final Supplier<T> a;
    final long b;
    volatile transient T c;
    volatile transient long d;
    
    a(Supplier<T> paramSupplier, long paramLong, TimeUnit paramTimeUnit)
    {
      this.a = ((Supplier)Preconditions.checkNotNull(paramSupplier));
      this.b = paramTimeUnit.toNanos(paramLong);
      if (paramLong > 0L) {}
      for (boolean bool = true;; bool = false)
      {
        Preconditions.checkArgument(bool);
        return;
      }
    }
    
    public final T get()
    {
      long l1 = this.d;
      long l2 = System.nanoTime();
      if ((l1 == 0L) || (l2 - l1 >= 0L)) {}
      try
      {
        if (l1 == this.d)
        {
          Object localObject1 = this.a.get();
          this.c = localObject1;
          l2 += this.b;
          l1 = l2;
          if (l2 == 0L) {
            l1 = 1L;
          }
          this.d = l1;
          return (T)localObject1;
        }
        return (T)this.c;
      }
      finally {}
    }
    
    public final String toString()
    {
      String str = String.valueOf(String.valueOf(this.a));
      long l = this.b;
      return str.length() + 62 + "Suppliers.memoizeWithExpiration(" + str + ", " + l + ", NANOS)";
    }
  }
  
  @VisibleForTesting
  static final class b<T>
    implements Supplier<T>, Serializable
  {
    private static final long serialVersionUID = 0L;
    final Supplier<T> a;
    volatile transient boolean b;
    transient T c;
    
    b(Supplier<T> paramSupplier)
    {
      this.a = paramSupplier;
    }
    
    public final T get()
    {
      if (!this.b) {}
      try
      {
        if (!this.b)
        {
          Object localObject1 = this.a.get();
          this.c = localObject1;
          this.b = true;
          return (T)localObject1;
        }
        return (T)this.c;
      }
      finally {}
    }
    
    public final String toString()
    {
      String str = String.valueOf(String.valueOf(this.a));
      return str.length() + 19 + "Suppliers.memoize(" + str + ")";
    }
  }
  
  static final class c<F, T>
    implements Supplier<T>, Serializable
  {
    private static final long serialVersionUID = 0L;
    final Function<? super F, T> a;
    final Supplier<F> b;
    
    c(Function<? super F, T> paramFunction, Supplier<F> paramSupplier)
    {
      this.a = paramFunction;
      this.b = paramSupplier;
    }
    
    public final boolean equals(@Nullable Object paramObject)
    {
      boolean bool2 = false;
      boolean bool1 = bool2;
      if ((paramObject instanceof c))
      {
        paramObject = (c)paramObject;
        bool1 = bool2;
        if (this.a.equals(((c)paramObject).a))
        {
          bool1 = bool2;
          if (this.b.equals(((c)paramObject).b)) {
            bool1 = true;
          }
        }
      }
      return bool1;
    }
    
    public final T get()
    {
      return (T)this.a.apply(this.b.get());
    }
    
    public final int hashCode()
    {
      return Objects.hashCode(new Object[] { this.a, this.b });
    }
    
    public final String toString()
    {
      String str1 = String.valueOf(String.valueOf(this.a));
      String str2 = String.valueOf(String.valueOf(this.b));
      return str1.length() + 21 + str2.length() + "Suppliers.compose(" + str1 + ", " + str2 + ")";
    }
  }
  
  static abstract interface d
    extends Function
  {}
  
  static enum e
    implements Suppliers.d<Object>
  {
    private e() {}
    
    public final String toString()
    {
      return "Suppliers.supplierFunction()";
    }
  }
  
  static final class f<T>
    implements Supplier<T>, Serializable
  {
    private static final long serialVersionUID = 0L;
    final T a;
    
    f(@Nullable T paramT)
    {
      this.a = paramT;
    }
    
    public final boolean equals(@Nullable Object paramObject)
    {
      if ((paramObject instanceof f))
      {
        paramObject = (f)paramObject;
        return Objects.equal(this.a, ((f)paramObject).a);
      }
      return false;
    }
    
    public final T get()
    {
      return (T)this.a;
    }
    
    public final int hashCode()
    {
      return Objects.hashCode(new Object[] { this.a });
    }
    
    public final String toString()
    {
      String str = String.valueOf(String.valueOf(this.a));
      return str.length() + 22 + "Suppliers.ofInstance(" + str + ")";
    }
  }
  
  static final class g<T>
    implements Supplier<T>, Serializable
  {
    private static final long serialVersionUID = 0L;
    final Supplier<T> a;
    
    g(Supplier<T> paramSupplier)
    {
      this.a = paramSupplier;
    }
    
    public final T get()
    {
      synchronized (this.a)
      {
        Object localObject1 = this.a.get();
        return (T)localObject1;
      }
    }
    
    public final String toString()
    {
      String str = String.valueOf(String.valueOf(this.a));
      return str.length() + 32 + "Suppliers.synchronizedSupplier(" + str + ")";
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/base/Suppliers.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */