1 package com.xtremelabs.robolectric.shadows; 2 3 import com.xtremelabs.robolectric.internal.Implementation; 4 import com.xtremelabs.robolectric.internal.Implements; 5 import com.xtremelabs.robolectric.internal.RealObject; 6 7 import android.util.Pair; 8 9 import java.lang.reflect.Field; 10 11 /** 12 * Shadow of {@code Pair} 13 */ 14 @SuppressWarnings({"UnusedDeclaration"}) 15 @Implements(Pair.class) 16 public class ShadowPair { 17 @RealObject private Pair realPair; 18 __constructor__(Object first, Object second)19 public void __constructor__(Object first, Object second) { 20 setFields(realPair, first, second); 21 } 22 23 @Implementation create(F f, S s)24 public static <F, S> Pair<F, S> create(F f, S s) { 25 return new Pair<F, S>(f, s); 26 } 27 28 @Override @Implementation hashCode()29 public int hashCode() { 30 return realPair.first.hashCode() + realPair.second.hashCode(); 31 } 32 33 @Override @Implementation equals(Object o)34 public boolean equals(Object o) { 35 if (o == this) return true; 36 if (!(o instanceof Pair)) return false; 37 final Pair other = (Pair) o; 38 return realPair.first.equals(other.first) && realPair.second.equals(other.second); 39 } 40 setFields(Pair p, Object first, Object second)41 private static void setFields(Pair p, Object first, Object second) { 42 try { 43 Field f = Pair.class.getDeclaredField("first"); 44 f.setAccessible(true); 45 f.set(p, first); 46 47 Field s = Pair.class.getDeclaredField("second"); 48 s.setAccessible(true); 49 s.set(p, second); 50 } catch (NoSuchFieldException e) { 51 throw new RuntimeException(e); 52 } catch (IllegalAccessException e) { 53 throw new RuntimeException(e); 54 } 55 } 56 } 57 58 59