12ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelpackage com.xtremelabs.robolectric.shadows; 22ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 32ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelimport com.xtremelabs.robolectric.internal.Implementation; 42ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelimport com.xtremelabs.robolectric.internal.Implements; 52ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelimport com.xtremelabs.robolectric.internal.RealObject; 62ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 72ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelimport android.util.Pair; 82ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 92ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelimport java.lang.reflect.Field; 102ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 112ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel/** 122ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel * Shadow of {@code Pair} 132ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel */ 142ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel@SuppressWarnings({"UnusedDeclaration"}) 152ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel@Implements(Pair.class) 162ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkelpublic class ShadowPair { 172ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel @RealObject private Pair realPair; 182ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 192ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel public void __constructor__(Object first, Object second) { 202ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel setFields(realPair, first, second); 212ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 222ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 232ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel @Implementation 242ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel public static <F, S> Pair<F, S> create(F f, S s) { 252ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel return new Pair<F, S>(f, s); 262ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 272ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 282ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel @Override @Implementation 292ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel public int hashCode() { 302ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel return realPair.first.hashCode() + realPair.second.hashCode(); 312ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 322ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 332ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel @Override @Implementation 342ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel public boolean equals(Object o) { 352ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel if (o == this) return true; 362ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel if (!(o instanceof Pair)) return false; 372ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel final Pair other = (Pair) o; 382ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel return realPair.first.equals(other.first) && realPair.second.equals(other.second); 392ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 402ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 412ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel private static void setFields(Pair p, Object first, Object second) { 422ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel try { 432ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel Field f = Pair.class.getDeclaredField("first"); 442ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel f.setAccessible(true); 452ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel f.set(p, first); 462ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 472ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel Field s = Pair.class.getDeclaredField("second"); 482ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel s.setAccessible(true); 492ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel s.set(p, second); 502ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } catch (NoSuchFieldException e) { 512ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel throw new RuntimeException(e); 522ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } catch (IllegalAccessException e) { 532ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel throw new RuntimeException(e); 542ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 552ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel } 562ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel} 572ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 582ed797adb849f96d26ffaae31d68a2a67f56f27bJan Berkel 59