1package com.xtremelabs.robolectric;
2
3import java.lang.reflect.Field;
4import java.lang.reflect.Modifier;
5import java.util.Arrays;
6import java.util.List;
7
8import org.apache.http.Header;
9import org.apache.http.HttpRequest;
10import org.apache.http.HttpResponse;
11import org.apache.http.impl.client.DefaultRequestDirector;
12
13import android.accounts.AccountManager;
14import android.app.*;
15import android.appwidget.AppWidgetManager;
16import android.bluetooth.BluetoothAdapter;
17import android.bluetooth.BluetoothDevice;
18import android.content.*;
19import android.content.pm.ResolveInfo;
20import android.content.pm.Signature;
21import android.content.res.AssetManager;
22import android.content.res.Configuration;
23import android.content.res.Resources;
24import android.content.res.Resources.Theme;
25import android.database.CursorWrapper;
26import android.database.sqlite.*;
27import android.graphics.*;
28import android.graphics.drawable.*;
29import android.hardware.Camera;
30import android.hardware.SensorManager;
31import android.location.Address;
32import android.location.Geocoder;
33import android.location.LocationManager;
34import android.media.AudioManager;
35import android.media.MediaPlayer;
36import android.media.MediaRecorder;
37import android.net.ConnectivityManager;
38import android.net.NetworkInfo;
39import android.net.wifi.ScanResult;
40import android.net.wifi.WifiConfiguration;
41import android.net.wifi.WifiInfo;
42import android.net.wifi.WifiManager;
43import android.os.*;
44import android.preference.*;
45import android.support.v4.app.DialogFragment;
46import android.support.v4.app.Fragment;
47import android.support.v4.app.FragmentActivity;
48import android.support.v4.app.FragmentPagerAdapter;
49import android.support.v4.app.ListFragment;
50import android.support.v4.content.CursorLoader;
51import android.support.v4.view.PagerAdapter;
52import android.support.v4.view.ViewPager;
53import android.telephony.PhoneNumberUtils;
54import android.telephony.SmsManager;
55import android.telephony.TelephonyManager;
56import android.text.ClipboardManager;
57import android.text.TextPaint;
58import android.text.format.DateFormat;
59import android.text.method.PasswordTransformationMethod;
60import android.util.SparseArray;
61import android.util.SparseBooleanArray;
62import android.util.SparseIntArray;
63import android.view.*;
64import android.view.animation.*;
65import android.view.inputmethod.InputMethodManager;
66import android.webkit.*;
67import android.widget.*;
68
69import com.xtremelabs.robolectric.bytecode.RobolectricInternals;
70import com.xtremelabs.robolectric.bytecode.ShadowWrangler;
71import com.xtremelabs.robolectric.shadows.*;
72import com.xtremelabs.robolectric.shadows.ShadowResources.ShadowTheme;
73import com.xtremelabs.robolectric.tester.org.apache.http.FakeHttpLayer;
74import com.xtremelabs.robolectric.tester.org.apache.http.HttpRequestInfo;
75import com.xtremelabs.robolectric.tester.org.apache.http.RequestMatcher;
76import com.xtremelabs.robolectric.util.Scheduler;
77
78public class Robolectric {
79    public static Application application;
80
81    public static <T> T newInstanceOf(Class<T> clazz) {
82        return RobolectricInternals.newInstanceOf(clazz);
83    }
84
85    public static Object newInstanceOf(String className) {
86        try {
87            Class<?> clazz = Class.forName(className);
88            if (clazz != null) {
89                return newInstanceOf(clazz);
90            }
91        } catch (ClassNotFoundException e) {
92        }
93        return null;
94    }
95
96    public static void bindShadowClass(Class<?> shadowClass) {
97        RobolectricInternals.bindShadowClass(shadowClass);
98    }
99
100    public static void bindDefaultShadowClasses() {
101        bindShadowClasses(getDefaultShadowClasses());
102    }
103
104    public static void bindShadowClasses(List<Class<?>> shadowClasses) {
105        for (Class<?> shadowClass : shadowClasses) {
106            bindShadowClass(shadowClass);
107        }
108    }
109
110    /**
111     * Invoke this utility method in tests to reveal which Android api classes and methods are being invoked
112     * for which there are no shadows or shadow methods. This helps expose which methods are being invoked
113     * either by a third party library or application code which need new shadow methods to be written. Generates
114     * output for the current test only.
115     */
116    public static void logMissingInvokedShadowMethods() {
117        ShadowWrangler.getInstance().logMissingInvokedShadowMethods();
118    }
119
120    public static List<Class<?>> getDefaultShadowClasses() {
121        return Arrays.asList(
122                ShadowAbsListView.class,
123                ShadowAbsoluteLayout.class,
124                ShadowAbsSeekBar.class,
125                ShadowAbsSpinner.class,
126                ShadowAbstractCursor.class,
127                ShadowAccount.class,
128                ShadowAccountManager.class,
129                ShadowActivity.class,
130                ShadowActivityInfo.class,
131                ShadowActivityGroup.class,
132                ShadowActivityManager.class,
133                ShadowAdapterView.class,
134                ShadowAddress.class,
135                ShadowAlarmManager.class,
136                ShadowAlertDialog.class,
137                ShadowAlertDialog.ShadowBuilder.class,
138                ShadowAlphaAnimation.class,
139                ShadowAndroidHttpClient.class,
140                ShadowAnimation.class,
141                ShadowAnimationDrawable.class,
142                ShadowAnimationSet.class,
143                ShadowAnimationUtils.class,
144                ShadowApplication.class,
145                ShadowAppWidgetManager.class,
146                ShadowArrayAdapter.class,
147                ShadowAssetManager.class,
148                ShadowAsyncTask.class,
149                ShadowAudioManager.class,
150                ShadowAutoCompleteTextView.class,
151                ShadowBase64.class,
152                ShadowBaseAdapter.class,
153                ShadowBinder.class,
154                ShadowBitmap.class,
155                ShadowBitmapDrawable.class,
156                ShadowBitmapFactory.class,
157                ShadowBluetoothAdapter.class,
158                ShadowBluetoothDevice.class,
159                ShadowBundle.class,
160                ShadowButton.class,
161                ShadowCamera.class,
162                ShadowCameraParameters.class,
163                ShadowCameraSize.class,
164                ShadowCanvas.class,
165                ShadowCheckedTextView.class,
166                ShadowClipboardManager.class,
167                ShadowColor.class,
168                ShadowColorDrawable.class,
169                ShadowColorMatrix.class,
170                ShadowColorMatrixColorFilter.class,
171                ShadowColorStateList.class,
172                ShadowComponentName.class,
173                ShadowCompoundButton.class,
174                ShadowConfiguration.class,
175                ShadowConnectivityManager.class,
176                ShadowContentProvider.class,
177                ShadowContentProviderOperation.class,
178                ShadowContentProviderOperationBuilder.class,
179                ShadowContentProviderResult.class,
180                ShadowContentResolver.class,
181                ShadowContentUris.class,
182                ShadowContentValues.class,
183                ShadowContext.class,
184                ShadowContextWrapper.class,
185                ShadowContextThemeWrapper.class,
186                ShadowCookieManager.class,
187                ShadowCookieSyncManager.class,
188                ShadowCriteria.class,
189                ShadowCountDownTimer.class,
190                ShadowCursorAdapter.class,
191                ShadowCursorLoader.class,
192                ShadowCursorWrapper.class,
193                ShadowDatabaseUtils.class,
194                ShadowDateFormat.class,
195                ShadowDefaultRequestDirector.class,
196                ShadowDisplay.class,
197                ShadowDrawable.class,
198                ShadowDialog.class,
199                ShadowDialogFragment.class,
200                ShadowDialogPreference.class,
201                ShadowEditText.class,
202                ShadowEnvironment.class,
203                ShadowExpandableListView.class,
204                ShadowFilter.class,
205                ShadowFloatMath.class,
206                ShadowFragment.class,
207                ShadowFragmentActivity.class,
208                ShadowFragmentPagerAdapter.class,
209                ShadowFrameLayout.class,
210                ShadowGallery.class,
211                ShadowGeocoder.class,
212                ShadowGeoPoint.class,
213                ShadowGridView.class,
214                ShadowHandler.class,
215                ShadowHandlerThread.class,
216                ShadowHtml.class,
217                ShadowImageView.class,
218                ShadowInputMethodManager.class,
219                ShadowIntent.class,
220                ShadowIntentFilter.class,
221                ShadowIntentFilterAuthorityEntry.class,
222                ShadowItemizedOverlay.class,
223                ShadowJsPromptResult.class,
224                ShadowJsResult.class,
225                ShadowKeyEvent.class,
226                ShadowKeyguardManager.class,
227                ShadowKeyGuardLock.class,
228                ShadowLayerDrawable.class,
229                ShadowLayoutInflater.class,
230                ShadowLayoutParams.class,
231                ShadowLinearLayout.class,
232                ShadowLinkMovementMethod.class,
233                ShadowListActivity.class,
234                ShadowListFragment.class,
235                ShadowListPreference.class,
236                ShadowListView.class,
237                ShadowLocation.class,
238                ShadowLocationManager.class,
239                ShadowLog.class,
240                ShadowLooper.class,
241                ShadowMapController.class,
242                ShadowMapActivity.class,
243                ShadowMapView.class,
244                ShadowMarginLayoutParams.class,
245                ShadowMatrix.class,
246                ShadowMatrixCursor.class,
247                ShadowMediaPlayer.class,
248                ShadowMediaRecorder.class,
249                ShadowMediaStore.ShadowImages.ShadowMedia.class,
250                ShadowMenuInflater.class,
251                ShadowMessage.class,
252                ShadowMessenger.class,
253                ShadowMimeTypeMap.class,
254                ShadowMotionEvent.class,
255                ShadowNotification.class,
256                ShadowNdefMessage.class,
257                ShadowNdefRecord.class,
258                ShadowNfcAdapter.class,
259                ShadowNotificationManager.class,
260                ShadowNetworkInfo.class,
261                ShadowOverlayItem.class,
262                ShadowPagerAdapter.class,
263                ShadowPaint.class,
264                ShadowPair.class,
265                ShadowParcel.class,
266                ShadowPasswordTransformationMethod.class,
267                ShadowPath.class,
268                ShadowPatterns.class,
269                ShadowPendingIntent.class,
270                ShadowPeriodicSync.class,
271                ShadowPhoneNumberUtils.class,
272                ShadowPoint.class,
273                ShadowPointF.class,
274                ShadowPopupWindow.class,
275                ShadowPowerManager.class,
276                ShadowPowerManager.ShadowWakeLock.class,
277                ShadowPreference.class,
278                ShadowPreferenceActivity.class,
279                ShadowPreferenceCategory.class,
280                ShadowPreferenceGroup.class,
281                ShadowPreferenceManager.class,
282                ShadowPreferenceScreen.class,
283                ShadowProcess.class,
284                ShadowProgressBar.class,
285                ShadowProgressDialog.class,
286                ShadowRadioButton.class,
287                ShadowRadioGroup.class,
288                ShadowRatingBar.class,
289                ShadowRect.class,
290                ShadowResolveInfo.class,
291                ShadowRemoteCallbackList.class,
292                ShadowRemoteViews.class,
293                ShadowResultReceiver.class,
294                ShadowResourceCursorAdapter.class,
295                ShadowResources.class,
296                ShadowResources.ShadowTheme.class,
297                ShadowScanResult.class,
298                ShadowScrollView.class,
299                ShadowSeekBar.class,
300                ShadowSensorManager.class,
301                ShadowService.class,
302                ShadowSettings.class,
303                ShadowSettings.ShadowGlobal.class,
304                ShadowSettings.ShadowSecure.class,
305                ShadowSettings.ShadowSystem.class,
306                ShadowSignature.class,
307                ShadowSimpleCursorAdapter.class,
308                ShadowShapeDrawable.class,
309                ShadowSmsManager.class,
310                ShadowSpannableString.class,
311                ShadowSpannableStringBuilder.class,
312                ShadowSparseArray.class,
313                ShadowSparseBooleanArray.class,
314                ShadowSparseIntArray.class,
315                ShadowSpinner.class,
316                ShadowSSLCertificateSocketFactory.class,
317                ShadowSyncResult.class,
318                ShadowSyncResult.ShadowSyncStats.class,
319                ShadowSQLiteProgram.class,
320                ShadowSQLiteCloseable.class,
321                ShadowSQLiteDatabase.class,
322                ShadowSQLiteCursor.class,
323                ShadowSQLiteOpenHelper.class,
324                ShadowSQLiteStatement.class,
325                ShadowSQLiteQueryBuilder.class,
326                ShadowSslErrorHandler.class,
327                ShadowStateListDrawable.class,
328                ShadowStatFs.class,
329                ShadowSurfaceView.class,
330                ShadowTabActivity.class,
331                ShadowTabHost.class,
332                ShadowTabSpec.class,
333                ShadowTelephonyManager.class,
334                ShadowTextPaint.class,
335                ShadowTextUtils.class,
336                ShadowTextView.class,
337                ShadowTime.class,
338                ShadowToast.class,
339                ShadowTranslateAnimation.class,
340                ShadowTypedArray.class,
341                ShadowTypedValue.class,
342                ShadowUriMatcher.class,
343                ShadowURLSpan.class,
344                ShadowVibrator.class,
345                ShadowVideoView.class,
346                ShadowView.class,
347                ShadowViewAnimator.class,
348                ShadowViewConfiguration.class,
349                ShadowViewGroup.class,
350                ShadowViewFlipper.class,
351                ShadowViewMeasureSpec.class,
352                ShadowViewPager.class,
353                ShadowViewStub.class,
354                ShadowViewTreeObserver.class,
355                ShadowWebView.class,
356                ShadowWifiConfiguration.class,
357                ShadowWifiInfo.class,
358                ShadowWifiManager.class,
359                ShadowWifiManager.ShadowWifiLock.class,
360                ShadowWindow.class,
361                ShadowZoomButtonsController.class
362        );
363    }
364
365    public static void resetStaticState() {
366        ShadowWrangler.getInstance().silence();
367        Robolectric.application = new Application();
368        ShadowBinder.reset();
369        ShadowBitmapFactory.reset();
370        ShadowDrawable.reset();
371        ShadowMediaStore.reset();
372        ShadowLog.reset();
373        ShadowContext.clearFilesAndCache();
374        ShadowLooper.resetThreadLoopers();
375        ShadowDialog.reset();
376        ShadowContentResolver.reset();
377        ShadowLocalBroadcastManager.reset();
378        ShadowMimeTypeMap.reset();
379        ShadowStatFs.reset();
380        ShadowProcess.reset();
381        ShadowAccount.reset();
382        ShadowIntent.reset();
383        ShadowSignature.reset();
384        ShadowBundle.reset();
385        ShadowPatterns.reset();
386    }
387
388    public static <T> T directlyOn(T shadowedObject) {
389        return RobolectricInternals.directlyOn(shadowedObject);
390    }
391
392    public static ShadowAbsListView shadowOf(AbsListView instance) {
393        return (ShadowAbsListView) shadowOf_(instance);
394    }
395
396    public static ShadowAbsSeekBar shadowOf(AbsSeekBar instance) {
397        return (ShadowAbsSeekBar) shadowOf_(instance);
398    }
399
400    public static ShadowAccountManager shadowOf(AccountManager instance) {
401        return (ShadowAccountManager) shadowOf_(instance);
402    }
403
404    public static ShadowActivity shadowOf(Activity instance) {
405        return (ShadowActivity) shadowOf_(instance);
406    }
407
408    public static ShadowActivityGroup shadowOf(ActivityGroup instance) {
409        return (ShadowActivityGroup) shadowOf_(instance);
410    }
411
412    public static ShadowActivityManager shadowOf(ActivityManager instance) {
413        return (ShadowActivityManager) shadowOf_(instance);
414    }
415
416    public static ShadowAdapterView shadowOf(AdapterView instance) {
417        return (ShadowAdapterView) shadowOf_(instance);
418    }
419
420    public static ShadowAddress shadowOf(Address instance) {
421        return (ShadowAddress) shadowOf_(instance);
422    }
423
424    public static ShadowAlarmManager shadowOf(AlarmManager instance) {
425        return (ShadowAlarmManager) Robolectric.shadowOf_(instance);
426    }
427
428    public static ShadowAlertDialog shadowOf(AlertDialog instance) {
429        return (ShadowAlertDialog) shadowOf_(instance);
430    }
431
432    public static ShadowAlphaAnimation shadowOf(AlphaAnimation instance) {
433        return (ShadowAlphaAnimation) shadowOf_(instance);
434    }
435
436    public static ShadowAnimation shadowOf(Animation instance) {
437        return (ShadowAnimation) shadowOf_(instance);
438    }
439
440    public static ShadowAnimationDrawable shadowOf(AnimationDrawable instance) {
441        return (ShadowAnimationDrawable) shadowOf_(instance);
442    }
443
444    public static ShadowAnimationSet shadowOf(AnimationSet instance) {
445        return (ShadowAnimationSet) shadowOf_(instance);
446    }
447
448    public static ShadowAnimationUtils shadowOf(AnimationUtils instance) {
449        return (ShadowAnimationUtils) shadowOf_(instance);
450    }
451
452    public static ShadowApplication shadowOf(Application instance) {
453        return (ShadowApplication) shadowOf_(instance);
454    }
455
456    public static ShadowAppWidgetManager shadowOf(AppWidgetManager instance) {
457        return (ShadowAppWidgetManager) shadowOf_(instance);
458    }
459
460    public static ShadowArrayAdapter shadowOf(ArrayAdapter instance) {
461        return (ShadowArrayAdapter) shadowOf_(instance);
462    }
463
464    public static ShadowAssetManager shadowOf(AssetManager instance) {
465        return (ShadowAssetManager) Robolectric.shadowOf_(instance);
466    }
467
468    @SuppressWarnings("rawtypes")
469	public static ShadowAsyncTask shadowOf(AsyncTask instance){
470    	return (ShadowAsyncTask) Robolectric.shadowOf_( instance );
471    }
472
473    public static ShadowAudioManager shadowOf(AudioManager instance) {
474        return (ShadowAudioManager) shadowOf_(instance);
475    }
476
477    public static ShadowAutoCompleteTextView shadowOf(AutoCompleteTextView instance) {
478        return (ShadowAutoCompleteTextView) shadowOf_(instance);
479    }
480
481    public static ShadowBaseAdapter shadowOf(BaseAdapter other) {
482        return (ShadowBaseAdapter) Robolectric.shadowOf_(other);
483    }
484
485    public static ShadowBitmap shadowOf(Bitmap other) {
486        return (ShadowBitmap) Robolectric.shadowOf_(other);
487    }
488
489    public static ShadowBitmapDrawable shadowOf(BitmapDrawable instance) {
490        return (ShadowBitmapDrawable) shadowOf_(instance);
491    }
492
493    public static ShadowBluetoothAdapter shadowOf(BluetoothAdapter other) {
494        return (ShadowBluetoothAdapter) Robolectric.shadowOf_(other);
495    }
496
497    public static ShadowBluetoothDevice shadowOf(BluetoothDevice other) {
498        return (ShadowBluetoothDevice) Robolectric.shadowOf_(other);
499    }
500
501    public static ShadowBundle shadowOf(Bundle instance) {
502        return (ShadowBundle) shadowOf_(instance);
503    }
504
505    public static ShadowCamera shadowOf(Camera instance) {
506        return (ShadowCamera) shadowOf_(instance);
507    }
508
509    public static ShadowCameraParameters shadowOf(Camera.Parameters instance) {
510        return (ShadowCameraParameters) shadowOf_(instance);
511    }
512
513    public static ShadowCameraSize shadowOf(Camera.Size instance) {
514        return (ShadowCameraSize) shadowOf_(instance);
515    }
516
517    public static ShadowCanvas shadowOf(Canvas instance) {
518        return (ShadowCanvas) shadowOf_(instance);
519    }
520
521    public static ShadowCheckedTextView shadowOf(CheckedTextView instance) {
522        return (ShadowCheckedTextView) shadowOf_(instance);
523    }
524
525    public static ShadowClipboardManager shadowOf(ClipboardManager instance) {
526        return (ShadowClipboardManager) shadowOf_(instance);
527    }
528
529    public static ShadowColor shadowOf(Color instance) {
530        return (ShadowColor) shadowOf_(instance);
531    }
532
533    public static ShadowColorDrawable shadowOf(ColorDrawable instance) {
534        return (ShadowColorDrawable) shadowOf_(instance);
535    }
536
537    public static ShadowColorMatrix shadowOf(ColorMatrix instance) {
538        return (ShadowColorMatrix) shadowOf_(instance);
539    }
540
541    public static ShadowConfiguration shadowOf(Configuration instance) {
542        return (ShadowConfiguration) Robolectric.shadowOf_(instance);
543    }
544
545    public static ShadowConnectivityManager shadowOf(ConnectivityManager instance) {
546        return (ShadowConnectivityManager) shadowOf_(instance);
547    }
548
549    public static ShadowCookieManager shadowOf(CookieManager instance) {
550        return (ShadowCookieManager) shadowOf_(instance);
551    }
552
553    public static ShadowContentResolver shadowOf(ContentResolver instance) {
554        return (ShadowContentResolver) shadowOf_(instance);
555    }
556
557    public static ShadowContentProviderOperation shadowOf(ContentProviderOperation instance) {
558        return (ShadowContentProviderOperation) shadowOf_(instance);
559    }
560
561    public static ShadowContentProviderOperationBuilder shadowOf(ContentProviderOperation.Builder instance) {
562        return (ShadowContentProviderOperationBuilder) shadowOf_(instance);
563    }
564
565    public static ShadowContentProviderResult shadowOf(ContentProviderResult instance) {
566        return (ShadowContentProviderResult) shadowOf_(instance);
567    }
568
569    public static ShadowCookieSyncManager shadowOf(CookieSyncManager instance) {
570        return (ShadowCookieSyncManager) shadowOf_(instance);
571    }
572
573    public static ShadowContext shadowOf(Context instance) {
574        return (ShadowContext) shadowOf_(instance);
575    }
576
577    public static ShadowContentValues shadowOf(ContentValues other) {
578        return (ShadowContentValues) Robolectric.shadowOf_(other);
579    }
580
581    public static ShadowContextWrapper shadowOf(ContextWrapper instance) {
582        return (ShadowContextWrapper) shadowOf_(instance);
583    }
584
585    public static ShadowCountDownTimer shadowOf(CountDownTimer instance) {
586        return (ShadowCountDownTimer) Robolectric.shadowOf_(instance);
587    }
588
589    public static ShadowCursorAdapter shadowOf(CursorAdapter instance) {
590        return (ShadowCursorAdapter) shadowOf_(instance);
591    }
592
593    public static ShadowCursorLoader shadowOf(CursorLoader instance) {
594        return (ShadowCursorLoader) shadowOf_(instance);
595    }
596
597    public static ShadowCursorWrapper shadowOf(CursorWrapper instance) {
598        return (ShadowCursorWrapper) shadowOf_(instance);
599    }
600
601    public static ShadowDateFormat shadowOf(DateFormat instance) {
602        return (ShadowDateFormat) shadowOf_(instance);
603    }
604
605    public static ShadowDefaultRequestDirector shadowOf(DefaultRequestDirector instance) {
606        return (ShadowDefaultRequestDirector) shadowOf_(instance);
607    }
608
609    public static ShadowDialog shadowOf(Dialog instance) {
610        return (ShadowDialog) shadowOf_(instance);
611    }
612
613    public static ShadowDialogFragment shadowOf(DialogFragment instance) {
614        return (ShadowDialogFragment) shadowOf_(instance);
615    }
616
617    public static ShadowDialogPreference shadowOf(DialogPreference instance) {
618        return (ShadowDialogPreference) shadowOf_(instance);
619    }
620
621    public static ShadowDrawable shadowOf(Drawable instance) {
622        return (ShadowDrawable) shadowOf_(instance);
623    }
624
625    public static ShadowDisplay shadowOf(Display instance) {
626        return (ShadowDisplay) shadowOf_(instance);
627    }
628
629    public static ShadowExpandableListView shadowOf(ExpandableListView instance) {
630        return (ShadowExpandableListView) shadowOf_(instance);
631    }
632
633    public static ShadowFilter shadowOf(Filter instance) {
634        return (ShadowFilter) shadowOf_(instance);
635    }
636
637    public static ShadowFragment shadowOf(Fragment instance) {
638        return (ShadowFragment) shadowOf_(instance);
639    }
640
641    public static ShadowFragmentActivity shadowOf(FragmentActivity instance) {
642        return (ShadowFragmentActivity) shadowOf_(instance);
643    }
644
645    public static ShadowFragmentPagerAdapter shadowOf(FragmentPagerAdapter instance) {
646        return (ShadowFragmentPagerAdapter) shadowOf_(instance);
647    }
648
649    public static ShadowFrameLayout shadowOf(FrameLayout instance) {
650        return (ShadowFrameLayout) shadowOf_(instance);
651    }
652
653    public static ShadowGallery shadowOf(Gallery instance) {
654        return (ShadowGallery) shadowOf_(instance);
655    }
656
657    public static ShadowGeocoder shadowOf(Geocoder instance) {
658        return (ShadowGeocoder) shadowOf_(instance);
659    }
660
661    public static ShadowGridView shadowOf(GridView instance) {
662        return (ShadowGridView) shadowOf_(instance);
663    }
664
665    public static ShadowHandler shadowOf(Handler instance) {
666        return (ShadowHandler) shadowOf_(instance);
667    }
668
669    public static ShadowHandlerThread shadowOf(HandlerThread instance) {
670        return (ShadowHandlerThread) shadowOf_(instance);
671    }
672
673    public static ShadowImageView shadowOf(ImageView instance) {
674        return (ShadowImageView) shadowOf_(instance);
675    }
676
677    public static ShadowInputMethodManager shadowOf(InputMethodManager instance) {
678        return (ShadowInputMethodManager) shadowOf_(instance);
679    }
680
681    public static ShadowIntent shadowOf(Intent instance) {
682        return (ShadowIntent) shadowOf_(instance);
683    }
684
685    public static ShadowJsPromptResult shadowOf(JsPromptResult instance) {
686        return (ShadowJsPromptResult) shadowOf_(instance);
687    }
688
689    public static ShadowJsResult shadowOf(JsResult instance) {
690        return (ShadowJsResult) shadowOf_(instance);
691    }
692
693    public static ShadowKeyguardManager shadowOf(KeyguardManager instance) {
694        return (ShadowKeyguardManager) shadowOf_(instance);
695    }
696
697    public static ShadowKeyGuardLock shadowOf(KeyguardManager.KeyguardLock instance) {
698        return (ShadowKeyGuardLock) shadowOf_(instance);
699    }
700
701    public static ShadowLayerDrawable shadowOf(LayerDrawable instance) {
702        return (ShadowLayerDrawable) shadowOf_(instance);
703    }
704
705    public static ShadowLayoutInflater shadowOf(LayoutInflater instance) {
706        return (ShadowLayoutInflater) shadowOf_(instance);
707    }
708
709    public static ShadowListActivity shadowOf(ListActivity instance) {
710        return (ShadowListActivity) shadowOf_(instance);
711    }
712
713    public static ShadowListFragment shadowOf(ListFragment instance) {
714        return (ShadowListFragment) shadowOf_(instance);
715    }
716
717    public static ShadowListPreference shadowOf(ListPreference instance) {
718        return (ShadowListPreference) shadowOf_(instance);
719    }
720
721    public static ShadowListView shadowOf(ListView instance) {
722        return (ShadowListView) shadowOf_(instance);
723    }
724
725    public static ShadowLocationManager shadowOf(LocationManager instance) {
726        return (ShadowLocationManager) shadowOf_(instance);
727    }
728
729    public static ShadowLooper shadowOf(Looper instance) {
730        return (ShadowLooper) shadowOf_(instance);
731    }
732
733    public static ShadowMatrix shadowOf(Matrix other) {
734        return (ShadowMatrix) Robolectric.shadowOf_(other);
735    }
736
737    public static ShadowMediaPlayer shadowOf(MediaPlayer instance) {
738        return (ShadowMediaPlayer) shadowOf_(instance);
739    }
740
741    public static ShadowMediaRecorder shadowOf(MediaRecorder instance) {
742        return (ShadowMediaRecorder) shadowOf_(instance);
743    }
744
745    public static ShadowMenuInflater shadowOf(MenuInflater instance) {
746        return (ShadowMenuInflater) shadowOf_(instance);
747    }
748
749    public static ShadowMessage shadowOf(Message instance) {
750        return (ShadowMessage) shadowOf_(instance);
751    }
752
753    public static ShadowMimeTypeMap shadowOf(MimeTypeMap instance) {
754        return (ShadowMimeTypeMap) shadowOf_(instance);
755    }
756
757    public static ShadowMotionEvent shadowOf(MotionEvent other) {
758        return (ShadowMotionEvent) Robolectric.shadowOf_(other);
759    }
760
761    public static ShadowNetworkInfo shadowOf(NetworkInfo instance) {
762        return (ShadowNetworkInfo) shadowOf_(instance);
763    }
764
765    public static ShadowNotification shadowOf(Notification other) {
766        return (ShadowNotification) Robolectric.shadowOf_(other);
767    }
768
769    public static ShadowNotificationManager shadowOf(NotificationManager other) {
770        return (ShadowNotificationManager) Robolectric.shadowOf_(other);
771    }
772
773    public static ShadowPagerAdapter shadowOf(PagerAdapter instance) {
774        return (ShadowPagerAdapter) shadowOf_(instance);
775    }
776
777    public static ShadowPaint shadowOf(Paint instance) {
778        return (ShadowPaint) shadowOf_(instance);
779    }
780
781    public static ShadowParcel shadowOf(Parcel instance) {
782        return (ShadowParcel) shadowOf_(instance);
783    }
784
785    public static ShadowPasswordTransformationMethod shadowOf(PasswordTransformationMethod instance) {
786        return (ShadowPasswordTransformationMethod) shadowOf_(instance);
787    }
788
789    public static ShadowPath shadowOf(Path instance) {
790        return (ShadowPath) shadowOf_(instance);
791    }
792
793    public static ShadowPendingIntent shadowOf(PendingIntent instance) {
794        return (ShadowPendingIntent) shadowOf_(instance);
795    }
796
797    public static ShadowPhoneNumberUtils shadowOf(PhoneNumberUtils instance) {
798        return (ShadowPhoneNumberUtils) shadowOf_(instance);
799    }
800
801    public static ShadowPopupWindow shadowOf(PopupWindow instance) {
802        return (ShadowPopupWindow) shadowOf_(instance);
803    }
804
805    public static ShadowPowerManager shadowOf(PowerManager instance) {
806        return (ShadowPowerManager) shadowOf_(instance);
807    }
808
809    public static ShadowPreference shadowOf(Preference instance) {
810        return (ShadowPreference) shadowOf_(instance);
811    }
812
813    public static ShadowPreferenceActivity shadowOf(PreferenceActivity instance) {
814        return (ShadowPreferenceActivity) shadowOf_(instance);
815    }
816
817    public static ShadowPreferenceCategory shadowOf(PreferenceCategory instance) {
818        return (ShadowPreferenceCategory) shadowOf_(instance);
819    }
820
821    public static ShadowPreferenceGroup shadowOf(PreferenceGroup instance) {
822        return (ShadowPreferenceGroup) shadowOf_(instance);
823    }
824
825    public static ShadowPreferenceScreen shadowOf(PreferenceScreen instance) {
826        return (ShadowPreferenceScreen) shadowOf_(instance);
827    }
828
829    public static ShadowProgressBar shadowOf(ProgressBar instance) {
830        return (ShadowProgressBar) shadowOf_(instance);
831    }
832
833    public static ShadowProgressDialog shadowOf(ProgressDialog instance) {
834        return (ShadowProgressDialog) shadowOf_(instance);
835    }
836
837    public static ShadowRect shadowOf(Rect instance) {
838        return (ShadowRect) shadowOf_(instance);
839    }
840
841    public static ShadowRatingBar shadowOf(RatingBar instance) {
842        return (ShadowRatingBar) shadowOf_(instance);
843    }
844
845    public static ShadowRemoteViews shadowOf(RemoteViews instance) {
846        return (ShadowRemoteViews) shadowOf_(instance);
847    }
848
849    public static ShadowResolveInfo shadowOf(ResolveInfo instance) {
850        return (ShadowResolveInfo) shadowOf_(instance);
851    }
852
853    public static ShadowResourceCursorAdapter shadowOf(ResourceCursorAdapter instance) {
854        return (ShadowResourceCursorAdapter) shadowOf_(instance);
855    }
856
857    public static ShadowResources shadowOf(Resources instance) {
858        return (ShadowResources) shadowOf_(instance);
859    }
860
861    public static ShadowResultReceiver shadowOf(ResultReceiver instance) {
862        return (ShadowResultReceiver) shadowOf_(instance);
863    }
864
865    public static ShadowScanResult shadowOf(ScanResult instance) {
866        return (ShadowScanResult) shadowOf_(instance);
867    }
868
869    public static ShadowScrollView shadowOf(ScrollView instance) {
870        return (ShadowScrollView) shadowOf_(instance);
871    }
872
873    public static ShadowSeekBar shadowOf(SeekBar instance) {
874        return (ShadowSeekBar) shadowOf_(instance);
875    }
876
877    public static ShadowSensorManager shadowOf(SensorManager instance) {
878        return (ShadowSensorManager) shadowOf_(instance);
879    }
880
881    public static ShadowService shadowOf(Service instance) {
882        return (ShadowService) shadowOf_(instance);
883    }
884
885    public static ShadowShapeDrawable shadowOf(ShapeDrawable instance) {
886        return (ShadowShapeDrawable) shadowOf_(instance);
887    }
888
889    public static ShadowSignature shadowOf(Signature instance) {
890        return (ShadowSignature) shadowOf_(instance);
891    }
892
893    public static ShadowSimpleCursorAdapter shadowOf(SimpleCursorAdapter instance) {
894        return (ShadowSimpleCursorAdapter) shadowOf_(instance);
895    }
896
897    public static ShadowSmsManager shadowOf(SmsManager instance) {
898        return (ShadowSmsManager) shadowOf_(instance);
899    }
900
901    public static <E> ShadowSparseArray<E> shadowOf(SparseArray<E> other) {
902        //noinspection unchecked
903        return (ShadowSparseArray<E>) Robolectric.shadowOf_(other);
904    }
905
906    public static ShadowSparseBooleanArray shadowOf(SparseBooleanArray other) {
907        return (ShadowSparseBooleanArray) Robolectric.shadowOf_(other);
908    }
909
910    public static ShadowSparseIntArray shadowOf(SparseIntArray other){
911    	return (ShadowSparseIntArray) Robolectric.shadowOf_( other );
912    }
913
914    public static ShadowSQLiteCursor shadowOf(SQLiteCursor other) {
915        return (ShadowSQLiteCursor) Robolectric.shadowOf_(other);
916    }
917
918    public static ShadowSQLiteDatabase shadowOf(SQLiteDatabase other) {
919        return (ShadowSQLiteDatabase) Robolectric.shadowOf_(other);
920    }
921
922    public static ShadowSQLiteOpenHelper shadowOf(SQLiteOpenHelper other) {
923        return (ShadowSQLiteOpenHelper) Robolectric.shadowOf_(other);
924    }
925
926    public static ShadowSQLiteProgram shadowOf(SQLiteProgram other) {
927        return (ShadowSQLiteProgram) Robolectric.shadowOf_(other);
928    }
929
930    public static ShadowSQLiteQueryBuilder shadowOf(SQLiteQueryBuilder other) {
931        return (ShadowSQLiteQueryBuilder) Robolectric.shadowOf_(other);
932    }
933
934    public static ShadowSQLiteStatement shadowOf(SQLiteStatement other) {
935        return (ShadowSQLiteStatement) Robolectric.shadowOf_(other);
936    }
937
938    public static ShadowSslErrorHandler shadowOf(SslErrorHandler instance) {
939        return (ShadowSslErrorHandler) shadowOf_(instance);
940    }
941
942    public static ShadowStateListDrawable shadowOf(StateListDrawable instance) {
943        return (ShadowStateListDrawable) shadowOf_(instance);
944    }
945
946    public static ShadowTabHost shadowOf(TabHost instance) {
947        return (ShadowTabHost) shadowOf_(instance);
948    }
949
950    public static ShadowTabSpec shadowOf(TabHost.TabSpec instance) {
951        return (ShadowTabSpec) shadowOf_(instance);
952    }
953
954    public static ShadowTelephonyManager shadowOf(TelephonyManager instance) {
955        return (ShadowTelephonyManager) shadowOf_(instance);
956    }
957
958    public static ShadowTextPaint shadowOf(TextPaint instance) {
959        return (ShadowTextPaint) shadowOf_(instance);
960    }
961
962    public static ShadowTextView shadowOf(TextView instance) {
963        return (ShadowTextView) shadowOf_(instance);
964    }
965
966    public static ShadowToast shadowOf(Toast instance) {
967        return (ShadowToast) shadowOf_(instance);
968    }
969
970    public static ShadowTranslateAnimation shadowOf(TranslateAnimation instance) {
971        return (ShadowTranslateAnimation) shadowOf_(instance);
972    }
973
974    public static ShadowUriMatcher shadowOf(UriMatcher instance) {
975        return (ShadowUriMatcher) shadowOf_(instance);
976    }
977
978    public static ShadowView shadowOf(View instance) {
979        return (ShadowView) shadowOf_(instance);
980    }
981
982    public static ShadowViewAnimator shadowOf(ViewAnimator instance) {
983        return (ShadowViewAnimator) shadowOf_(instance);
984    }
985
986    public static ShadowViewConfiguration shadowOf(ViewConfiguration instance) {
987        return (ShadowViewConfiguration) shadowOf_(instance);
988    }
989
990    public static ShadowViewFlipper shadowOf(ViewFlipper instance) {
991        return (ShadowViewFlipper) shadowOf_(instance);
992    }
993
994    public static ShadowViewPager shadowOf(ViewPager instance) {
995        return (ShadowViewPager) shadowOf_(instance);
996    }
997
998    public static ShadowViewTreeObserver shadowOf(ViewTreeObserver instance) {
999        return (ShadowViewTreeObserver) shadowOf_(instance);
1000    }
1001
1002    public static ShadowViewGroup shadowOf(ViewGroup instance) {
1003        return (ShadowViewGroup) shadowOf_(instance);
1004    }
1005
1006    public static ShadowVibrator shadowOf(Vibrator instance) {
1007        return (ShadowVibrator) shadowOf_(instance);
1008    }
1009
1010    public static ShadowVideoView shadowOf(VideoView instance) {
1011        return (ShadowVideoView) shadowOf_(instance);
1012    }
1013
1014    public static ShadowWebView shadowOf(WebView instance) {
1015        return (ShadowWebView) shadowOf_(instance);
1016    }
1017
1018    public static ShadowWifiConfiguration shadowOf(WifiConfiguration instance) {
1019        return (ShadowWifiConfiguration) shadowOf_(instance);
1020    }
1021
1022    public static ShadowWifiInfo shadowOf(WifiInfo instance) {
1023        return (ShadowWifiInfo) shadowOf_(instance);
1024    }
1025
1026    public static ShadowWifiManager shadowOf(WifiManager instance) {
1027        return (ShadowWifiManager) shadowOf_(instance);
1028    }
1029
1030    public static ShadowZoomButtonsController shadowOf(ZoomButtonsController instance) {
1031        return (ShadowZoomButtonsController) shadowOf_(instance);
1032    }
1033
1034    public static ShadowTheme shadowOf(Theme instance) {
1035        return (ShadowTheme) shadowOf_(instance);
1036    }
1037
1038    @SuppressWarnings({"unchecked"})
1039    public static <P, R> P shadowOf_(R instance) {
1040        return (P) ShadowWrangler.getInstance().shadowOf(instance);
1041    }
1042
1043    /**
1044     * Runs any background tasks previously queued by {@link android.os.AsyncTask#execute(Object[])}.
1045     * <p/>
1046     * <p/>
1047     * Note: calling this method does not pause or un-pause the scheduler.
1048     */
1049    public static void runBackgroundTasks() {
1050        getBackgroundScheduler().advanceBy(0);
1051    }
1052
1053    /**
1054     * Runs any immediately runnable tasks previously queued on the UI thread,
1055     * e.g. by {@link Activity#runOnUiThread(Runnable)} or {@link android.os.AsyncTask#onPostExecute(Object)}.
1056     * <p/>
1057     * <p/>
1058     * Note: calling this method does not pause or un-pause the scheduler.
1059     */
1060    public static void runUiThreadTasks() {
1061        getUiThreadScheduler().advanceBy(0);
1062    }
1063
1064    public static void runUiThreadTasksIncludingDelayedTasks() {
1065        getUiThreadScheduler().advanceToLastPostedRunnable();
1066    }
1067
1068    /**
1069     * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
1070     *
1071     * @param statusCode   the status code of the response
1072     * @param responseBody the body of the response
1073     * @param headers      optional headers for the request
1074     */
1075    public static void addPendingHttpResponse(int statusCode, String responseBody, Header... headers) {
1076        getFakeHttpLayer().addPendingHttpResponse(statusCode, responseBody, headers);
1077    }
1078
1079    /**
1080     * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
1081     *
1082     * @param statusCode   the status code of the response
1083     * @param responseBody the body of the response
1084     * @param contentType  the contentType of the response
1085     * @deprecated use {@link #addPendingHttpResponse(int, String, Header...)} instead
1086     */
1087    @Deprecated
1088    public static void addPendingHttpResponseWithContentType(int statusCode, String responseBody, Header contentType) {
1089        getFakeHttpLayer().addPendingHttpResponse(statusCode, responseBody, contentType);
1090    }
1091
1092    /**
1093     * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
1094     *
1095     * @param httpResponse the response
1096     */
1097    public static void addPendingHttpResponse(HttpResponse httpResponse) {
1098        getFakeHttpLayer().addPendingHttpResponse(httpResponse);
1099    }
1100
1101    /**
1102     * Sets up an HTTP response to be returned by calls to Apache's {@code HttpClient} implementers.
1103     *
1104     * @param httpResponseGenerator an HttpResponseGenerator that will provide responses
1105     */
1106    public static void addPendingHttpResponse(HttpResponseGenerator httpResponseGenerator) {
1107        getFakeHttpLayer().addPendingHttpResponse(httpResponseGenerator);
1108    }
1109
1110    /**
1111     * Accessor to obtain HTTP requests made during the current test in the order in which they were made.
1112     *
1113     * @param index index of the request to retrieve.
1114     * @return the requested request.
1115     */
1116    public static HttpRequest getSentHttpRequest(int index) {
1117        return ShadowDefaultRequestDirector.getSentHttpRequest(index);
1118    }
1119
1120    public static HttpRequest getLatestSentHttpRequest() {
1121        return ShadowDefaultRequestDirector.getLatestSentHttpRequest();
1122    }
1123
1124    /**
1125     * Accessor to find out if HTTP requests were made during the current test.
1126     *
1127     * @return whether a request was made.
1128     */
1129    public static boolean httpRequestWasMade() {
1130        return getShadowApplication().getFakeHttpLayer().hasRequestInfos();
1131    }
1132
1133    public static boolean httpRequestWasMade(String uri) {
1134        return getShadowApplication().getFakeHttpLayer().hasRequestMatchingRule(new FakeHttpLayer.UriRequestMatcher(uri));
1135    }
1136
1137    /**
1138     * Accessor to obtain metadata for an HTTP request made during the current test in the order in which they were made.
1139     *
1140     * @param index index of the request to retrieve.
1141     * @return the requested request metadata.
1142     */
1143    public static HttpRequestInfo getSentHttpRequestInfo(int index) {
1144        return ShadowDefaultRequestDirector.getSentHttpRequestInfo(index);
1145    }
1146
1147    /**
1148     * Adds an HTTP response rule. The response will be returned when the rule is matched.
1149     *
1150     * @param method   method to match.
1151     * @param uri      uri to match.
1152     * @param response response to return when a match is found.
1153     */
1154    public static void addHttpResponseRule(String method, String uri, HttpResponse response) {
1155        getFakeHttpLayer().addHttpResponseRule(method, uri, response);
1156    }
1157
1158    /**
1159     * Adds an HTTP response rule with a default method of GET. The response will be returned when the rule is matched.
1160     *
1161     * @param uri      uri to match.
1162     * @param response response to return when a match is found.
1163     */
1164    public static void addHttpResponseRule(String uri, HttpResponse response) {
1165        getFakeHttpLayer().addHttpResponseRule(uri, response);
1166    }
1167
1168    /**
1169     * Adds an HTTP response rule. The response will be returned when the rule is matched.
1170     *
1171     * @param uri      uri to match.
1172     * @param response response to return when a match is found.
1173     */
1174    public static void addHttpResponseRule(String uri, String response) {
1175        getFakeHttpLayer().addHttpResponseRule(uri, response);
1176    }
1177
1178    /**
1179     * Adds an HTTP response rule. The response will be returned when the rule is matched.
1180     *
1181     * @param requestMatcher custom {@code RequestMatcher}.
1182     * @param response       response to return when a match is found.
1183     */
1184    public static void addHttpResponseRule(RequestMatcher requestMatcher, HttpResponse response) {
1185        getFakeHttpLayer().addHttpResponseRule(requestMatcher, response);
1186    }
1187
1188    /**
1189     * Adds an HTTP response rule. For each time the rule is matched, responses will be shifted
1190     * off the list and returned. When all responses have been given and the rule is matched again,
1191     * an exception will be thrown.
1192     *
1193     * @param requestMatcher custom {@code RequestMatcher}.
1194     * @param responses      responses to return in order when a match is found.
1195     */
1196    public static void addHttpResponseRule(RequestMatcher requestMatcher, List<? extends HttpResponse> responses) {
1197        getFakeHttpLayer().addHttpResponseRule(requestMatcher, responses);
1198    }
1199
1200    public static FakeHttpLayer getFakeHttpLayer() {
1201        return getShadowApplication().getFakeHttpLayer();
1202    }
1203
1204    public static void setDefaultHttpResponse(int statusCode, String responseBody) {
1205        getFakeHttpLayer().setDefaultHttpResponse(statusCode, responseBody);
1206    }
1207
1208    public static void setDefaultHttpResponse(HttpResponse defaultHttpResponse) {
1209        getFakeHttpLayer().setDefaultHttpResponse(defaultHttpResponse);
1210    }
1211
1212    public static void clearHttpResponseRules() {
1213        getFakeHttpLayer().clearHttpResponseRules();
1214    }
1215
1216    public static void clearPendingHttpResponses() {
1217        getFakeHttpLayer().clearPendingHttpResponses();
1218    }
1219
1220    public static void pauseLooper(Looper looper) {
1221        ShadowLooper.pauseLooper(looper);
1222    }
1223
1224    public static void unPauseLooper(Looper looper) {
1225        ShadowLooper.unPauseLooper(looper);
1226    }
1227
1228    public static void pauseMainLooper() {
1229        ShadowLooper.pauseMainLooper();
1230    }
1231
1232    public static void unPauseMainLooper() {
1233        ShadowLooper.unPauseMainLooper();
1234    }
1235
1236    public static void idleMainLooper(long interval) {
1237        ShadowLooper.idleMainLooper(interval);
1238    }
1239
1240    public static Scheduler getUiThreadScheduler() {
1241        return shadowOf(Looper.getMainLooper()).getScheduler();
1242    }
1243
1244    public static Scheduler getBackgroundScheduler() {
1245        return getShadowApplication().getBackgroundScheduler();
1246    }
1247
1248    public static ShadowApplication getShadowApplication() {
1249        return shadowOf(Robolectric.application);
1250    }
1251
1252    public static void setDisplayMetricsDensity(float densityMultiplier) {
1253        shadowOf(getShadowApplication().getResources()).setDensity(densityMultiplier);
1254    }
1255
1256    public static void setDefaultDisplay(Display display) {
1257        shadowOf(getShadowApplication().getResources()).setDisplay(display);
1258    }
1259
1260    /**
1261     * Calls {@code performClick()} on a {@code View} after ensuring that it and its ancestors are visible and that it
1262     * is enabled.
1263     *
1264     * @param view the view to click on
1265     * @return true if {@code View.OnClickListener}s were found and fired, false otherwise.
1266     * @throws RuntimeException if the preconditions are not met.
1267     */
1268    public static boolean clickOn(View view) {
1269        return shadowOf(view).checkedPerformClick();
1270    }
1271
1272    public static String visualize(View view) {
1273        Canvas canvas = new Canvas();
1274        view.draw(canvas);
1275        return shadowOf(canvas).getDescription();
1276    }
1277
1278    public static String visualize(Canvas canvas) {
1279        return shadowOf(canvas).getDescription();
1280    }
1281
1282    public static String visualize(Bitmap bitmap) {
1283        return shadowOf(bitmap).getDescription();
1284    }
1285
1286    /**
1287     * Reflection helper methods.
1288     */
1289    public static class Reflection {
1290        public static <T> T newInstanceOf(Class<T> clazz) {
1291            return Robolectric.newInstanceOf(clazz);
1292        }
1293
1294        public static Object newInstanceOf(String className) {
1295            return Robolectric.newInstanceOf(className);
1296        }
1297
1298        public static void setFinalStaticField(Class classWhichContainsField, String fieldName, Object newValue) {
1299            try {
1300                Field field = classWhichContainsField.getDeclaredField(fieldName);
1301                field.setAccessible(true);
1302
1303                Field modifiersField = Field.class.getDeclaredField("modifiers");
1304                modifiersField.setAccessible(true);
1305                modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
1306
1307                field.set(null, newValue);
1308            } catch (NoSuchFieldException e) {
1309                throw new RuntimeException(e);
1310            } catch (IllegalAccessException e) {
1311                throw new RuntimeException(e);
1312            }
1313        }
1314    }
1315
1316}
1317