Enums.java 3.29 KB
package com.google.common.base;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtCompatible;
import com.google.common.annotations.GwtIncompatible;
import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.WeakHashMap;
import javax.annotation.Nullable;

@Beta
@GwtCompatible(emulated=true)
public final class Enums
{
  @GwtIncompatible("java.lang.ref.WeakReference")
  private static final Map<Class<? extends Enum<?>>, Map<String, WeakReference<? extends Enum<?>>>> a = new WeakHashMap();
  
  @GwtIncompatible("java.lang.ref.WeakReference")
  private static <T extends Enum<T>> Map<String, WeakReference<? extends Enum<?>>> a(Class<T> paramClass)
  {
    Object localObject1;
    synchronized (a)
    {
      Object localObject2 = (Map)a.get(paramClass);
      localObject1 = localObject2;
      if (localObject2 != null) {
        break label101;
      }
      localObject1 = new HashMap();
      localObject2 = EnumSet.allOf(paramClass).iterator();
      if (((Iterator)localObject2).hasNext())
      {
        Enum localEnum = (Enum)((Iterator)localObject2).next();
        ((Map)localObject1).put(localEnum.name(), new WeakReference(localEnum));
      }
    }
    a.put(paramClass, localObject1);
    label101:
    return (Map<String, WeakReference<? extends Enum<?>>>)localObject1;
  }
  
  @GwtIncompatible("reflection")
  public static Field getField(Enum<?> paramEnum)
  {
    Class localClass = paramEnum.getDeclaringClass();
    try
    {
      paramEnum = localClass.getDeclaredField(paramEnum.name());
      return paramEnum;
    }
    catch (NoSuchFieldException paramEnum)
    {
      throw new AssertionError(paramEnum);
    }
  }
  
  public static <T extends Enum<T>> Optional<T> getIfPresent(Class<T> paramClass, String paramString)
  {
    Preconditions.checkNotNull(paramClass);
    Preconditions.checkNotNull(paramString);
    paramString = (WeakReference)a(paramClass).get(paramString);
    if (paramString == null) {
      return Optional.absent();
    }
    return Optional.of(paramClass.cast(paramString.get()));
  }
  
  public static <T extends Enum<T>> Converter<String, T> stringConverter(Class<T> paramClass)
  {
    return new a(paramClass);
  }
  
  static final class a<T extends Enum<T>>
    extends Converter<String, T>
    implements Serializable
  {
    private static final long serialVersionUID = 0L;
    private final Class<T> a;
    
    a(Class<T> paramClass)
    {
      this.a = ((Class)Preconditions.checkNotNull(paramClass));
    }
    
    public final boolean equals(@Nullable Object paramObject)
    {
      if ((paramObject instanceof a))
      {
        paramObject = (a)paramObject;
        return this.a.equals(((a)paramObject).a);
      }
      return false;
    }
    
    public final int hashCode()
    {
      return this.a.hashCode();
    }
    
    public final String toString()
    {
      String str = String.valueOf(String.valueOf(this.a.getName()));
      return str.length() + 29 + "Enums.stringConverter(" + str + ".class)";
    }
  }
}


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