OSDN Git Service

release-request-513a9883-0d18-4c2f-80ce-cadb234b4e89-for-git_nyc-mr2-pixel-monthly...
[android-x86/frameworks-base.git] / api / system-current.txt
index d1c0394..0fe164a 100644 (file)
@@ -504,6 +504,7 @@ package android {
     field public static final int colorPressedHighlight = 16843661; // 0x101038d
     field public static final int colorPrimary = 16843827; // 0x1010433
     field public static final int colorPrimaryDark = 16843828; // 0x1010434
+    field public static final int colorSecondary = 16844080; // 0x1010530
     field public static final int columnCount = 16843639; // 0x1010377
     field public static final int columnDelay = 16843215; // 0x10101cf
     field public static final int columnOrderPreserved = 16843640; // 0x1010378
@@ -527,7 +528,9 @@ package android {
     field public static final int contentInsetStart = 16843859; // 0x1010453
     field public static final int contentInsetStartWithNavigation = 16844066; // 0x1010522
     field public static final int contextClickable = 16844007; // 0x10104e7
+    field public static final int contextDescription = 16844078; // 0x101052e
     field public static final int contextPopupMenuStyle = 16844033; // 0x1010501
+    field public static final int contextUri = 16844077; // 0x101052d
     field public static final int controlX1 = 16843772; // 0x10103fc
     field public static final int controlX2 = 16843774; // 0x10103fe
     field public static final int controlY1 = 16843773; // 0x10103fd
@@ -1146,6 +1149,7 @@ package android {
     field public static final int rotation = 16843558; // 0x1010326
     field public static final int rotationX = 16843559; // 0x1010327
     field public static final int rotationY = 16843560; // 0x1010328
+    field public static final int roundIcon = 16844076; // 0x101052c
     field public static final int rowCount = 16843637; // 0x1010375
     field public static final int rowDelay = 16843216; // 0x10101d0
     field public static final int rowEdgeFlags = 16843329; // 0x1010241
@@ -1217,11 +1221,16 @@ package android {
     field public static final int shareInterpolator = 16843195; // 0x10101bb
     field public static final int sharedUserId = 16842763; // 0x101000b
     field public static final int sharedUserLabel = 16843361; // 0x1010261
+    field public static final int shortcutDisabledMessage = 16844075; // 0x101052b
+    field public static final int shortcutId = 16844072; // 0x1010528
+    field public static final int shortcutLongLabel = 16844074; // 0x101052a
+    field public static final int shortcutShortLabel = 16844073; // 0x1010529
     field public static final int shouldDisableView = 16843246; // 0x10101ee
     field public static final int showAsAction = 16843481; // 0x10102d9
     field public static final int showDefault = 16843258; // 0x10101fa
     field public static final int showDividers = 16843561; // 0x1010329
     field public static final int showForAllUsers = 16844015; // 0x10104ef
+    field public static final int showMetadataInPreview = 16844079; // 0x101052f
     field public static final deprecated int showOnLockScreen = 16843721; // 0x10103c9
     field public static final int showSilent = 16843259; // 0x10101fb
     field public static final int showText = 16843949; // 0x10104ad
@@ -3022,11 +3031,11 @@ package android.accounts {
     field public static final java.lang.String LOGIN_ACCOUNTS_CHANGED_ACTION = "android.accounts.LOGIN_ACCOUNTS_CHANGED";
   }
 
-  public abstract interface AccountManagerCallback {
+  public abstract interface AccountManagerCallback<V> {
     method public abstract void run(android.accounts.AccountManagerFuture<V>);
   }
 
-  public abstract interface AccountManagerFuture {
+  public abstract interface AccountManagerFuture<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V getResult() throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
     method public abstract V getResult(long, java.util.concurrent.TimeUnit) throws android.accounts.AuthenticatorException, java.io.IOException, android.accounts.OperationCanceledException;
@@ -3172,7 +3181,7 @@ package android.animation {
     method public java.lang.Object evaluate(float, java.lang.Object, java.lang.Object);
   }
 
-  public abstract class BidirectionalTypeConverter extends android.animation.TypeConverter {
+  public abstract class BidirectionalTypeConverter<T, V> extends android.animation.TypeConverter {
     ctor public BidirectionalTypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract T convertBack(V);
     method public android.animation.BidirectionalTypeConverter<V, T> invert();
@@ -3264,26 +3273,26 @@ package android.animation {
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
     method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
-    method public static android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
-    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
+    method public static <T> android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
-    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static <T> android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, float[][]);
     method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, int[][]);
     method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static <T> android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V, P> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
     method public void setProperty(android.util.Property);
@@ -3307,17 +3316,17 @@ package android.animation {
     method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, float[][]);
     method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, int[][]);
     method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static <V> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static <T> android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
-    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method public static <T, V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
+    method public static <V> android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public void setConverter(android.animation.TypeConverter);
     method public void setEvaluator(android.animation.TypeEvaluator);
     method public void setFloatValues(float...);
@@ -3354,12 +3363,12 @@ package android.animation {
     method public abstract float getInterpolation(float);
   }
 
-  public abstract class TypeConverter {
+  public abstract class TypeConverter<T, V> {
     ctor public TypeConverter(java.lang.Class<T>, java.lang.Class<V>);
     method public abstract V convert(T);
   }
 
-  public abstract interface TypeEvaluator {
+  public abstract interface TypeEvaluator<T> {
     method public abstract T evaluate(float, T, T);
   }
 
@@ -3832,6 +3841,7 @@ package android.app {
     method public void moveTaskToFront(int, int);
     method public void moveTaskToFront(int, int, android.os.Bundle);
     method public deprecated void restartPackage(java.lang.String);
+    method public static void setVrThread(int);
     method public void setWatchHeapLimit(long);
     field public static final java.lang.String ACTION_REPORT_HEAP_LIMIT = "android.app.action.REPORT_HEAP_LIMIT";
     field public static final int LOCK_TASK_MODE_LOCKED = 1; // 0x1
@@ -4515,6 +4525,15 @@ package android.app {
     field public static final int VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION = 3; // 0x3
   }
 
+  public abstract class EphemeralResolverService extends android.app.Service {
+    ctor public EphemeralResolverService();
+    method public final void attachBaseContext(android.content.Context);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract java.util.List<android.content.pm.EphemeralResolveInfo> onEphemeralResolveInfoList(int[], int);
+    field public static final java.lang.String EXTRA_RESOLVE_INFO = "android.app.extra.RESOLVE_INFO";
+    field public static final java.lang.String EXTRA_SEQUENCE = "android.app.extra.SEQUENCE";
+  }
+
   public class ExpandableListActivity extends android.app.Activity implements android.widget.ExpandableListView.OnChildClickListener android.widget.ExpandableListView.OnGroupCollapseListener android.widget.ExpandableListView.OnGroupExpandListener android.view.View.OnCreateContextMenuListener {
     ctor public ExpandableListActivity();
     method public android.widget.ExpandableListAdapter getExpandableListAdapter();
@@ -4707,7 +4726,7 @@ package android.app {
     method public android.os.Parcelable saveAllState();
   }
 
-  public abstract class FragmentHostCallback extends android.app.FragmentContainer {
+  public abstract class FragmentHostCallback<E> extends android.app.FragmentContainer {
     ctor public FragmentHostCallback(android.content.Context, android.os.Handler, int);
     method public void onAttachFragment(android.app.Fragment);
     method public void onDump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
@@ -4974,12 +4993,12 @@ package android.app {
     method public abstract void destroyLoader(int);
     method public abstract void dump(java.lang.String, java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
     method public static void enableDebugLogging(boolean);
-    method public abstract android.content.Loader<D> getLoader(int);
-    method public abstract android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
-    method public abstract android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> getLoader(int);
+    method public abstract <D> android.content.Loader<D> initLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
+    method public abstract <D> android.content.Loader<D> restartLoader(int, android.os.Bundle, android.app.LoaderManager.LoaderCallbacks<D>);
   }
 
-  public static abstract interface LoaderManager.LoaderCallbacks {
+  public static abstract interface LoaderManager.LoaderCallbacks<D> {
     method public abstract android.content.Loader<D> onCreateLoader(int, android.os.Bundle);
     method public abstract void onLoadFinished(android.content.Loader<D>, D);
     method public abstract void onLoaderReset(android.content.Loader<D>);
@@ -5185,12 +5204,14 @@ package android.app {
     method public android.app.Notification.Action.Builder extend(android.app.Notification.Action.Builder);
     method public java.lang.CharSequence getCancelLabel();
     method public java.lang.CharSequence getConfirmLabel();
+    method public boolean getHintDisplayActionInline();
     method public boolean getHintLaunchesActivity();
     method public java.lang.CharSequence getInProgressLabel();
     method public boolean isAvailableOffline();
     method public android.app.Notification.Action.WearableExtender setAvailableOffline(boolean);
     method public android.app.Notification.Action.WearableExtender setCancelLabel(java.lang.CharSequence);
     method public android.app.Notification.Action.WearableExtender setConfirmLabel(java.lang.CharSequence);
+    method public android.app.Notification.Action.WearableExtender setHintDisplayActionInline(boolean);
     method public android.app.Notification.Action.WearableExtender setHintLaunchesActivity(boolean);
     method public android.app.Notification.Action.WearableExtender setInProgressLabel(java.lang.CharSequence);
   }
@@ -5904,7 +5925,10 @@ package android.app {
     method public android.content.pm.ServiceInfo getServiceInfo();
     method public java.lang.String getServiceName();
     method public java.lang.String getSettingsActivity();
+    method public boolean getShowMetadataInPreview();
     method public java.lang.CharSequence loadAuthor(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public java.lang.CharSequence loadContextDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
+    method public android.net.Uri loadContextUri(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
     method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
     method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
     method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager);
@@ -6767,11 +6791,13 @@ package android.app.usage {
     method public android.content.res.Configuration getConfiguration();
     method public int getEventType();
     method public java.lang.String getPackageName();
+    method public java.lang.String getShortcutId();
     method public long getTimeStamp();
     field public static final int CONFIGURATION_CHANGE = 5; // 0x5
     field public static final int MOVE_TO_BACKGROUND = 2; // 0x2
     field public static final int MOVE_TO_FOREGROUND = 1; // 0x1
     field public static final int NONE = 0; // 0x0
+    field public static final int SHORTCUT_INVOCATION = 8; // 0x8
     field public static final int USER_INTERACTION = 7; // 0x7
   }
 
@@ -7926,7 +7952,7 @@ package android.content {
     ctor public AsyncQueryHandler.WorkerHandler(android.os.Looper);
   }
 
-  public abstract class AsyncTaskLoader extends android.content.Loader {
+  public abstract class AsyncTaskLoader<D> extends android.content.Loader {
     ctor public AsyncTaskLoader(android.content.Context);
     method public void cancelLoadInBackground();
     method public boolean isLoadInBackgroundCanceled();
@@ -8108,7 +8134,7 @@ package android.content {
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
     method public android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method protected final android.os.ParcelFileDescriptor openFileHelper(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
-    method public android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
+    method public <T> android.os.ParcelFileDescriptor openPipeHelper(android.net.Uri, java.lang.String, android.os.Bundle, T, android.content.ContentProvider.PipeDataWriter<T>) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openTypedAssetFile(android.net.Uri, java.lang.String, android.os.Bundle, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public abstract android.database.Cursor query(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
@@ -8121,7 +8147,7 @@ package android.content {
     method public abstract int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
 
-  public static abstract interface ContentProvider.PipeDataWriter {
+  public static abstract interface ContentProvider.PipeDataWriter<T> {
     method public abstract void writeDataToPipe(android.os.ParcelFileDescriptor, android.net.Uri, java.lang.String, android.os.Bundle, T);
   }
 
@@ -8394,7 +8420,7 @@ package android.content {
     method public final java.lang.String getString(int);
     method public final java.lang.String getString(int, java.lang.Object...);
     method public abstract java.lang.Object getSystemService(java.lang.String);
-    method public final T getSystemService(java.lang.Class<T>);
+    method public final <T> T getSystemService(java.lang.Class<T>);
     method public abstract java.lang.String getSystemServiceName(java.lang.Class<?>);
     method public final java.lang.CharSequence getText(int);
     method public abstract android.content.res.Resources.Theme getTheme();
@@ -8515,6 +8541,7 @@ package android.content {
     field public static final java.lang.String RESTRICTIONS_SERVICE = "restrictions";
     field public static final java.lang.String SEARCH_SERVICE = "search";
     field public static final java.lang.String SENSOR_SERVICE = "sensor";
+    field public static final java.lang.String SHORTCUT_SERVICE = "shortcut";
     field public static final java.lang.String STORAGE_SERVICE = "storage";
     field public static final java.lang.String SYSTEM_HEALTH_SERVICE = "systemhealth";
     field public static final java.lang.String TELECOM_SERVICE = "telecom";
@@ -8762,8 +8789,8 @@ package android.content {
     method public long getLongExtra(java.lang.String, long);
     method public java.lang.String getPackage();
     method public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
-    method public T getParcelableExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayListExtra(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelableExtra(java.lang.String);
     method public java.lang.String getScheme();
     method public android.content.Intent getSelector();
     method public java.io.Serializable getSerializableExtra(java.lang.String);
@@ -9250,7 +9277,7 @@ package android.content {
     ctor public IntentSender.SendIntentException(java.lang.Exception);
   }
 
-  public class Loader {
+  public class Loader<D> {
     ctor public Loader(android.content.Context);
     method public void abandon();
     method public boolean cancelLoad();
@@ -9287,11 +9314,11 @@ package android.content {
     ctor public Loader.ForceLoadContentObserver();
   }
 
-  public static abstract interface Loader.OnLoadCanceledListener {
+  public static abstract interface Loader.OnLoadCanceledListener<D> {
     method public abstract void onLoadCanceled(android.content.Loader<D>);
   }
 
-  public static abstract interface Loader.OnLoadCompleteListener {
+  public static abstract interface Loader.OnLoadCompleteListener<D> {
     method public abstract void onLoadComplete(android.content.Loader<D>, D);
   }
 
@@ -9855,13 +9882,20 @@ package android.content.pm {
 
   public class LauncherApps {
     method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
+    method public android.graphics.drawable.Drawable getShortcutBadgedIconDrawable(android.content.pm.ShortcutInfo, int);
+    method public android.graphics.drawable.Drawable getShortcutIconDrawable(android.content.pm.ShortcutInfo, int);
+    method public java.util.List<android.content.pm.ShortcutInfo> getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle);
+    method public boolean hasShortcutHostPermission();
     method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle);
     method public boolean isPackageEnabled(java.lang.String, android.os.UserHandle);
+    method public void pinShortcuts(java.lang.String, java.util.List<java.lang.String>, android.os.UserHandle);
     method public void registerCallback(android.content.pm.LauncherApps.Callback);
     method public void registerCallback(android.content.pm.LauncherApps.Callback, android.os.Handler);
     method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle);
     method public void startAppDetailsActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
     method public void startMainActivity(android.content.ComponentName, android.os.UserHandle, android.graphics.Rect, android.os.Bundle);
+    method public void startShortcut(java.lang.String, java.lang.String, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
+    method public void startShortcut(android.content.pm.ShortcutInfo, android.graphics.Rect, android.os.Bundle);
     method public void unregisterCallback(android.content.pm.LauncherApps.Callback);
   }
 
@@ -9874,6 +9908,20 @@ package android.content.pm {
     method public void onPackagesSuspended(java.lang.String[], android.os.UserHandle);
     method public abstract void onPackagesUnavailable(java.lang.String[], android.os.UserHandle, boolean);
     method public void onPackagesUnsuspended(java.lang.String[], android.os.UserHandle);
+    method public void onShortcutsChanged(java.lang.String, java.util.List<android.content.pm.ShortcutInfo>, android.os.UserHandle);
+  }
+
+  public static class LauncherApps.ShortcutQuery {
+    ctor public LauncherApps.ShortcutQuery();
+    method public android.content.pm.LauncherApps.ShortcutQuery setActivity(android.content.ComponentName);
+    method public android.content.pm.LauncherApps.ShortcutQuery setChangedSince(long);
+    method public android.content.pm.LauncherApps.ShortcutQuery setPackage(java.lang.String);
+    method public android.content.pm.LauncherApps.ShortcutQuery setQueryFlags(int);
+    method public android.content.pm.LauncherApps.ShortcutQuery setShortcutIds(java.util.List<java.lang.String>);
+    field public static final int FLAG_GET_KEY_FIELDS_ONLY = 4; // 0x4
+    field public static final int FLAG_MATCH_DYNAMIC = 1; // 0x1
+    field public static final int FLAG_MATCH_MANIFEST = 8; // 0x8
+    field public static final int FLAG_MATCH_PINNED = 2; // 0x2
   }
 
   public class PackageInfo implements android.os.Parcelable {
@@ -10444,6 +10492,66 @@ package android.content.pm {
     field public java.lang.String permission;
   }
 
+  public final class ShortcutInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.ComponentName getActivity();
+    method public java.util.Set<java.lang.String> getCategories();
+    method public java.lang.CharSequence getDisabledMessage();
+    method public android.os.PersistableBundle getExtras();
+    method public java.lang.String getId();
+    method public android.content.Intent getIntent();
+    method public android.content.Intent[] getIntents();
+    method public long getLastChangedTimestamp();
+    method public java.lang.CharSequence getLongLabel();
+    method public java.lang.String getPackage();
+    method public int getRank();
+    method public java.lang.CharSequence getShortLabel();
+    method public android.os.UserHandle getUserHandle();
+    method public boolean hasKeyFieldsOnly();
+    method public boolean isDeclaredInManifest();
+    method public boolean isDynamic();
+    method public boolean isEnabled();
+    method public boolean isImmutable();
+    method public boolean isPinned();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.content.pm.ShortcutInfo> CREATOR;
+    field public static final java.lang.String SHORTCUT_CATEGORY_CONVERSATION = "android.shortcut.conversation";
+  }
+
+  public static class ShortcutInfo.Builder {
+    ctor public ShortcutInfo.Builder(android.content.Context, java.lang.String);
+    method public android.content.pm.ShortcutInfo build();
+    method public android.content.pm.ShortcutInfo.Builder setActivity(android.content.ComponentName);
+    method public android.content.pm.ShortcutInfo.Builder setCategories(java.util.Set<java.lang.String>);
+    method public android.content.pm.ShortcutInfo.Builder setDisabledMessage(java.lang.CharSequence);
+    method public android.content.pm.ShortcutInfo.Builder setExtras(android.os.PersistableBundle);
+    method public android.content.pm.ShortcutInfo.Builder setIcon(android.graphics.drawable.Icon);
+    method public android.content.pm.ShortcutInfo.Builder setIntent(android.content.Intent);
+    method public android.content.pm.ShortcutInfo.Builder setIntents(android.content.Intent[]);
+    method public android.content.pm.ShortcutInfo.Builder setLongLabel(java.lang.CharSequence);
+    method public android.content.pm.ShortcutInfo.Builder setRank(int);
+    method public android.content.pm.ShortcutInfo.Builder setShortLabel(java.lang.CharSequence);
+  }
+
+  public class ShortcutManager {
+    method public boolean addDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
+    method public void disableShortcuts(java.util.List<java.lang.String>);
+    method public void disableShortcuts(java.util.List<java.lang.String>, java.lang.CharSequence);
+    method public void enableShortcuts(java.util.List<java.lang.String>);
+    method public java.util.List<android.content.pm.ShortcutInfo> getDynamicShortcuts();
+    method public int getIconMaxHeight();
+    method public int getIconMaxWidth();
+    method public java.util.List<android.content.pm.ShortcutInfo> getManifestShortcuts();
+    method public int getMaxShortcutCountPerActivity();
+    method public java.util.List<android.content.pm.ShortcutInfo> getPinnedShortcuts();
+    method public boolean isRateLimitingActive();
+    method public void removeAllDynamicShortcuts();
+    method public void removeDynamicShortcuts(java.util.List<java.lang.String>);
+    method public void reportShortcutUsed(java.lang.String);
+    method public boolean setDynamicShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
+    method public boolean updateShortcuts(java.util.List<android.content.pm.ShortcutInfo>);
+  }
+
   public class Signature implements android.os.Parcelable {
     ctor public Signature(byte[]);
     ctor public Signature(java.lang.String);
@@ -10664,7 +10772,7 @@ package android.content.res {
   }
 
   public class Resources {
-    ctor public Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration);
+    ctor public deprecated Resources(android.content.res.AssetManager, android.util.DisplayMetrics, android.content.res.Configuration);
     method public final void finishPreloading();
     method public final void flushLayoutCache();
     method public android.content.res.XmlResourceParser getAnimation(int) throws android.content.res.Resources.NotFoundException;
@@ -10715,7 +10823,7 @@ package android.content.res {
     method public android.content.res.AssetFileDescriptor openRawResourceFd(int) throws android.content.res.Resources.NotFoundException;
     method public void parseBundleExtra(java.lang.String, android.util.AttributeSet, android.os.Bundle) throws org.xmlpull.v1.XmlPullParserException;
     method public void parseBundleExtras(android.content.res.XmlResourceParser, android.os.Bundle) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
-    method public void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
+    method public deprecated void updateConfiguration(android.content.res.Configuration, android.util.DisplayMetrics);
   }
 
   public static class Resources.NotFoundException extends java.lang.RuntimeException {
@@ -11179,7 +11287,7 @@ package android.database {
     method public boolean isNull(int);
   }
 
-  public abstract class Observable {
+  public abstract class Observable<T> {
     ctor public Observable();
     method public void registerObserver(T);
     method public void unregisterAll();
@@ -13069,7 +13177,7 @@ package android.graphics.drawable {
   public class AnimatedStateListDrawable extends android.graphics.drawable.StateListDrawable {
     ctor public AnimatedStateListDrawable();
     method public void addState(int[], android.graphics.drawable.Drawable, int);
-    method public void addTransition(int, int, T, boolean);
+    method public <T extends android.graphics.drawable.Drawable & android.graphics.drawable.Animatable> void addTransition(int, int, T, boolean);
   }
 
   public class AnimatedVectorDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Animatable2 {
@@ -14201,7 +14309,7 @@ package android.hardware.camera2 {
   }
 
   public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
+    method public <T> T get(android.hardware.camera2.CameraCharacteristics.Key<T>);
     method public java.util.List<android.hardware.camera2.CaptureRequest.Key<?>> getAvailableCaptureRequestKeys();
     method public java.util.List<android.hardware.camera2.CaptureResult.Key<?>> getAvailableCaptureResultKeys();
     field public static final android.hardware.camera2.CameraCharacteristics.Key<int[]> COLOR_CORRECTION_AVAILABLE_ABERRATION_MODES;
@@ -14286,7 +14394,7 @@ package android.hardware.camera2 {
     field public static final android.hardware.camera2.CameraCharacteristics.Key<java.lang.Integer> TONEMAP_MAX_CURVE_POINTS;
   }
 
-  public static final class CameraCharacteristics.Key {
+  public static final class CameraCharacteristics.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -14351,7 +14459,7 @@ package android.hardware.camera2 {
     method public void onTorchModeUnavailable(java.lang.String);
   }
 
-  public abstract class CameraMetadata {
+  public abstract class CameraMetadata<TKey> {
     method public java.util.List<TKey> getKeys();
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_FAST = 1; // 0x1
     field public static final int COLOR_CORRECTION_ABERRATION_MODE_HIGH_QUALITY = 2; // 0x2
@@ -14559,7 +14667,7 @@ package android.hardware.camera2 {
 
   public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
     method public int describeContents();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public java.lang.Object getTag();
     method public boolean isReprocess();
     method public void writeToParcel(android.os.Parcel, int);
@@ -14622,20 +14730,20 @@ package android.hardware.camera2 {
   public static final class CaptureRequest.Builder {
     method public void addTarget(android.view.Surface);
     method public android.hardware.camera2.CaptureRequest build();
-    method public T get(android.hardware.camera2.CaptureRequest.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureRequest.Key<T>);
     method public void removeTarget(android.view.Surface);
-    method public void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
+    method public <T> void set(android.hardware.camera2.CaptureRequest.Key<T>, T);
     method public void setTag(java.lang.Object);
   }
 
-  public static final class CaptureRequest.Key {
+  public static final class CaptureRequest.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
   }
 
   public class CaptureResult extends android.hardware.camera2.CameraMetadata {
-    method public T get(android.hardware.camera2.CaptureResult.Key<T>);
+    method public <T> T get(android.hardware.camera2.CaptureResult.Key<T>);
     method public long getFrameNumber();
     method public android.hardware.camera2.CaptureRequest getRequest();
     method public int getSequenceId();
@@ -14716,7 +14824,7 @@ package android.hardware.camera2 {
     field public static final android.hardware.camera2.CaptureResult.Key<java.lang.Integer> TONEMAP_PRESET_CURVE;
   }
 
-  public static final class CaptureResult.Key {
+  public static final class CaptureResult.Key<T> {
     method public final boolean equals(java.lang.Object);
     method public java.lang.String getName();
     method public final int hashCode();
@@ -14848,14 +14956,14 @@ package android.hardware.camera2.params {
     method public android.util.Size[] getInputSizes(int);
     method public final int[] getOutputFormats();
     method public long getOutputMinFrameDuration(int, android.util.Size);
-    method public long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
-    method public android.util.Size[] getOutputSizes(java.lang.Class<T>);
+    method public <T> long getOutputMinFrameDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> android.util.Size[] getOutputSizes(java.lang.Class<T>);
     method public android.util.Size[] getOutputSizes(int);
     method public long getOutputStallDuration(int, android.util.Size);
-    method public long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
+    method public <T> long getOutputStallDuration(java.lang.Class<T>, android.util.Size);
     method public final int[] getValidOutputFormatsForInput(int);
     method public boolean isOutputSupportedFor(int);
-    method public static boolean isOutputSupportedFor(java.lang.Class<T>);
+    method public static <T> boolean isOutputSupportedFor(java.lang.Class<T>);
     method public boolean isOutputSupportedFor(android.view.Surface);
   }
 
@@ -17303,7 +17411,7 @@ package android.icu.math {
 
 package android.icu.text {
 
-  public final class AlphabeticIndex implements java.lang.Iterable {
+  public final class AlphabeticIndex<V> implements java.lang.Iterable {
     ctor public AlphabeticIndex(android.icu.util.ULocale);
     ctor public AlphabeticIndex(java.util.Locale);
     ctor public AlphabeticIndex(android.icu.text.RuleBasedCollator);
@@ -17329,7 +17437,7 @@ package android.icu.text {
     method public android.icu.text.AlphabeticIndex<V> setUnderflowLabel(java.lang.String);
   }
 
-  public static class AlphabeticIndex.Bucket implements java.lang.Iterable {
+  public static class AlphabeticIndex.Bucket<V> implements java.lang.Iterable {
     method public java.lang.String getLabel();
     method public android.icu.text.AlphabeticIndex.Bucket.LabelType getLabelType();
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Record<V>> iterator();
@@ -17345,14 +17453,14 @@ package android.icu.text {
     enum_constant public static final android.icu.text.AlphabeticIndex.Bucket.LabelType UNDERFLOW;
   }
 
-  public static final class AlphabeticIndex.ImmutableIndex implements java.lang.Iterable {
+  public static final class AlphabeticIndex.ImmutableIndex<V> implements java.lang.Iterable {
     method public android.icu.text.AlphabeticIndex.Bucket<V> getBucket(int);
     method public int getBucketCount();
     method public int getBucketIndex(java.lang.CharSequence);
     method public java.util.Iterator<android.icu.text.AlphabeticIndex.Bucket<V>> iterator();
   }
 
-  public static class AlphabeticIndex.Record {
+  public static class AlphabeticIndex.Record<V> {
     method public V getData();
     method public java.lang.CharSequence getName();
   }
@@ -18865,8 +18973,8 @@ package android.icu.text {
     method public final android.icu.text.UnicodeSet addAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet addAll(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet addAll(java.lang.Iterable<?>);
-    method public android.icu.text.UnicodeSet addAll(T...);
-    method public T addAllTo(T);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet addAll(T...);
+    method public <T extends java.util.Collection<java.lang.String>> T addAllTo(T);
     method public void addMatchSetTo(android.icu.text.UnicodeSet);
     method public android.icu.text.UnicodeSet applyIntPropertyValue(int, int);
     method public final android.icu.text.UnicodeSet applyPattern(java.lang.String);
@@ -18894,15 +19002,15 @@ package android.icu.text {
     method public final boolean contains(java.lang.CharSequence);
     method public boolean containsAll(android.icu.text.UnicodeSet);
     method public boolean containsAll(java.lang.String);
-    method public boolean containsAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsAll(java.lang.Iterable<T>);
     method public boolean containsNone(int, int);
     method public boolean containsNone(android.icu.text.UnicodeSet);
     method public boolean containsNone(java.lang.CharSequence);
-    method public boolean containsNone(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> boolean containsNone(java.lang.Iterable<T>);
     method public final boolean containsSome(int, int);
     method public final boolean containsSome(android.icu.text.UnicodeSet);
     method public final boolean containsSome(java.lang.CharSequence);
-    method public final boolean containsSome(java.lang.Iterable<T>);
+    method public final <T extends java.lang.CharSequence> boolean containsSome(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet freeze();
     method public static android.icu.text.UnicodeSet from(java.lang.CharSequence);
     method public static android.icu.text.UnicodeSet fromAll(java.lang.CharSequence);
@@ -18920,14 +19028,14 @@ package android.icu.text {
     method public final android.icu.text.UnicodeSet remove(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet removeAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet removeAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet removeAll(java.lang.Iterable<T>);
     method public final android.icu.text.UnicodeSet removeAllStrings();
     method public android.icu.text.UnicodeSet retain(int, int);
     method public final android.icu.text.UnicodeSet retain(int);
     method public final android.icu.text.UnicodeSet retain(java.lang.CharSequence);
     method public final android.icu.text.UnicodeSet retainAll(java.lang.CharSequence);
     method public android.icu.text.UnicodeSet retainAll(android.icu.text.UnicodeSet);
-    method public android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
+    method public <T extends java.lang.CharSequence> android.icu.text.UnicodeSet retainAll(java.lang.Iterable<T>);
     method public android.icu.text.UnicodeSet set(int, int);
     method public android.icu.text.UnicodeSet set(android.icu.text.UnicodeSet);
     method public int size();
@@ -19337,7 +19445,7 @@ package android.icu.util {
     method public long getToDate();
   }
 
-  public abstract interface Freezable implements java.lang.Cloneable {
+  public abstract interface Freezable<T> implements java.lang.Cloneable {
     method public abstract T cloneAsThawed();
     method public abstract T freeze();
     method public abstract boolean isFrozen();
@@ -19619,7 +19727,7 @@ package android.icu.util {
     field public static final android.icu.util.TimeUnit YEAR;
   }
 
-  public class Output {
+  public class Output<T> {
     ctor public Output();
     ctor public Output(T);
     field public T value;
@@ -21064,6 +21172,7 @@ package android.media {
     field public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR;
     field public static final int ENCODING_AC3 = 5; // 0x5
     field public static final int ENCODING_DEFAULT = 1; // 0x1
+    field public static final int ENCODING_DOLBY_TRUEHD = 14; // 0xe
     field public static final int ENCODING_DTS = 7; // 0x7
     field public static final int ENCODING_DTS_HD = 8; // 0x8
     field public static final int ENCODING_E_AC3 = 6; // 0x6
@@ -25916,6 +26025,33 @@ package android.net.http {
 
 package android.net.metrics {
 
+  public final class ApfProgramEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.metrics.ApfProgramEvent> CREATOR;
+    field public static final int FLAG_HAS_IPV4_ADDRESS = 1; // 0x1
+    field public static final int FLAG_MULTICAST_FILTER_ON = 0; // 0x0
+    field public final int currentRas;
+    field public final int filteredRas;
+    field public final int flags;
+    field public final long lifetime;
+    field public final int programLength;
+  }
+
+  public final class ApfStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.metrics.ApfStats> CREATOR;
+    field public final int droppedRas;
+    field public final long durationMs;
+    field public final int matchingRas;
+    field public final int maxProgramSize;
+    field public final int parseErrors;
+    field public final int programUpdates;
+    field public final int receivedRas;
+    field public final int zeroLifetimeRas;
+  }
+
   public final class DefaultNetworkEvent implements android.os.Parcelable {
     method public int describeContents();
     method public static void logEvent(int, int[], int, boolean, boolean);
@@ -25933,6 +26069,7 @@ package android.net.metrics {
     method public static void logStateEvent(java.lang.String, java.lang.String);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator<android.net.metrics.DhcpClientEvent> CREATOR;
+    field public final int durationMs;
     field public final java.lang.String ifName;
     field public final java.lang.String msg;
   }
@@ -26024,6 +26161,18 @@ package android.net.metrics {
     field public final int netId;
   }
 
+  public final class RaEvent implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.net.metrics.RaEvent> CREATOR;
+    field public final long dnsslLifetime;
+    field public final long prefixPreferredLifetime;
+    field public final long prefixValidLifetime;
+    field public final long rdnssLifetime;
+    field public final long routeInfoLifetime;
+    field public final long routerLifetime;
+  }
+
   public final class ValidationProbeEvent implements android.os.Parcelable {
     method public int describeContents();
     method public static void logEvent(int, long, int, int);
@@ -30509,7 +30658,7 @@ package android.opengl {
 
 package android.os {
 
-  public abstract class AsyncTask {
+  public abstract class AsyncTask<Params, Progress, Result> {
     ctor public AsyncTask();
     method public final boolean cancel(boolean);
     method protected abstract Result doInBackground(Params...);
@@ -30709,6 +30858,7 @@ package android.os {
     field public static final int LOLLIPOP_MR1 = 22; // 0x16
     field public static final int M = 23; // 0x17
     field public static final int N = 24; // 0x18
+    field public static final int N_MR1 = 25; // 0x19
   }
 
   public final class Bundle extends android.os.BaseBundle implements java.lang.Cloneable android.os.Parcelable {
@@ -30736,16 +30886,16 @@ package android.os {
     method public float getFloat(java.lang.String, float);
     method public float[] getFloatArray(java.lang.String);
     method public java.util.ArrayList<java.lang.Integer> getIntegerArrayList(java.lang.String);
-    method public T getParcelable(java.lang.String);
+    method public <T extends android.os.Parcelable> T getParcelable(java.lang.String);
     method public android.os.Parcelable[] getParcelableArray(java.lang.String);
-    method public java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
+    method public <T extends android.os.Parcelable> java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
     method public java.io.Serializable getSerializable(java.lang.String);
     method public short getShort(java.lang.String);
     method public short getShort(java.lang.String, short);
     method public short[] getShortArray(java.lang.String);
     method public android.util.Size getSize(java.lang.String);
     method public android.util.SizeF getSizeF(java.lang.String);
-    method public android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
+    method public <T extends android.os.Parcelable> android.util.SparseArray<T> getSparseParcelableArray(java.lang.String);
     method public java.util.ArrayList<java.lang.String> getStringArrayList(java.lang.String);
     method public boolean hasFileDescriptors();
     method public void putAll(android.os.Bundle);
@@ -31250,8 +31400,8 @@ package android.os {
     method public final long[] createLongArray();
     method public final java.lang.String[] createStringArray();
     method public final java.util.ArrayList<java.lang.String> createStringArrayList();
-    method public final T[] createTypedArray(android.os.Parcelable.Creator<T>);
-    method public final java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
+    method public final <T> T[] createTypedArray(android.os.Parcelable.Creator<T>);
+    method public final <T> java.util.ArrayList<T> createTypedArrayList(android.os.Parcelable.Creator<T>);
     method public final int dataAvail();
     method public final int dataCapacity();
     method public final int dataPosition();
@@ -31284,7 +31434,7 @@ package android.os {
     method public final long readLong();
     method public final void readLongArray(long[]);
     method public final void readMap(java.util.Map, java.lang.ClassLoader);
-    method public final T readParcelable(java.lang.ClassLoader);
+    method public final <T extends android.os.Parcelable> T readParcelable(java.lang.ClassLoader);
     method public final android.os.Parcelable[] readParcelableArray(java.lang.ClassLoader);
     method public final android.os.PersistableBundle readPersistableBundle();
     method public final android.os.PersistableBundle readPersistableBundle(java.lang.ClassLoader);
@@ -31297,9 +31447,9 @@ package android.os {
     method public final void readStringArray(java.lang.String[]);
     method public final void readStringList(java.util.List<java.lang.String>);
     method public final android.os.IBinder readStrongBinder();
-    method public final void readTypedArray(T[], android.os.Parcelable.Creator<T>);
-    method public final void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
-    method public final T readTypedObject(android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedArray(T[], android.os.Parcelable.Creator<T>);
+    method public final <T> void readTypedList(java.util.List<T>, android.os.Parcelable.Creator<T>);
+    method public final <T> T readTypedObject(android.os.Parcelable.Creator<T>);
     method public final java.lang.Object readValue(java.lang.ClassLoader);
     method public final void recycle();
     method public final void setDataCapacity(int);
@@ -31330,7 +31480,7 @@ package android.os {
     method public final void writeMap(java.util.Map);
     method public final void writeNoException();
     method public final void writeParcelable(android.os.Parcelable, int);
-    method public final void writeParcelableArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeParcelableArray(T[], int);
     method public final void writePersistableBundle(android.os.PersistableBundle);
     method public final void writeSerializable(java.io.Serializable);
     method public final void writeSize(android.util.Size);
@@ -31342,9 +31492,9 @@ package android.os {
     method public final void writeStringList(java.util.List<java.lang.String>);
     method public final void writeStrongBinder(android.os.IBinder);
     method public final void writeStrongInterface(android.os.IInterface);
-    method public final void writeTypedArray(T[], int);
-    method public final void writeTypedList(java.util.List<T>);
-    method public final void writeTypedObject(T, int);
+    method public final <T extends android.os.Parcelable> void writeTypedArray(T[], int);
+    method public final <T extends android.os.Parcelable> void writeTypedList(java.util.List<T>);
+    method public final <T extends android.os.Parcelable> void writeTypedObject(T, int);
     method public final void writeValue(java.lang.Object);
     field public static final android.os.Parcelable.Creator<java.lang.String> STRING_CREATOR;
   }
@@ -31422,11 +31572,11 @@ package android.os {
     field public static final int PARCELABLE_WRITE_RETURN_VALUE = 1; // 0x1
   }
 
-  public static abstract interface Parcelable.ClassLoaderCreator implements android.os.Parcelable.Creator {
+  public static abstract interface Parcelable.ClassLoaderCreator<T> implements android.os.Parcelable.Creator {
     method public abstract T createFromParcel(android.os.Parcel, java.lang.ClassLoader);
   }
 
-  public static abstract interface Parcelable.Creator {
+  public static abstract interface Parcelable.Creator<T> {
     method public abstract T createFromParcel(android.os.Parcel);
     method public abstract T[] newArray(int);
   }
@@ -31544,6 +31694,7 @@ package android.os {
     method public static void installPackage(android.content.Context, java.io.File, boolean) throws java.io.IOException;
     method public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener, android.os.Handler) throws java.io.IOException;
     method public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener) throws java.io.IOException;
+    method public static void rebootWipeAb(android.content.Context, java.io.File, java.lang.String) throws java.io.IOException;
     method public static void rebootWipeCache(android.content.Context) throws java.io.IOException;
     method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException;
     method public static void scheduleUpdateOnBoot(android.content.Context, java.io.File) throws java.io.IOException;
@@ -31567,7 +31718,7 @@ package android.os {
     method public abstract void onResult(android.os.Bundle);
   }
 
-  public class RemoteCallbackList {
+  public class RemoteCallbackList<E extends android.os.IInterface> {
     ctor public RemoteCallbackList();
     method public int beginBroadcast();
     method public void finishBroadcast();
@@ -31784,6 +31935,7 @@ package android.os {
     method public android.os.Bundle getUserRestrictions();
     method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
     method public boolean hasUserRestriction(java.lang.String);
+    method public boolean isDemoUser();
     method public boolean isManagedProfile();
     method public boolean isManagedProfile(int);
     method public boolean isQuietModeEnabled(android.os.UserHandle);
@@ -32032,6 +32184,7 @@ package android.os.storage {
     method public boolean isObbMounted(java.lang.String);
     method public boolean mountObb(java.lang.String, java.lang.String, android.os.storage.OnObbStateChangeListener);
     method public boolean unmountObb(java.lang.String, boolean, android.os.storage.OnObbStateChangeListener);
+    field public static final java.lang.String ACTION_MANAGE_STORAGE = "android.os.storage.action.MANAGE_STORAGE";
   }
 
   public final class StorageVolume implements android.os.Parcelable {
@@ -33213,6 +33366,7 @@ package android.provider {
   public static class CallLog.Calls implements android.provider.BaseColumns {
     ctor public CallLog.Calls();
     method public static java.lang.String getLastOutgoingCall(android.content.Context);
+    field public static final int ANSWERED_EXTERNALLY_TYPE = 7; // 0x7
     field public static final int BLOCKED_TYPE = 6; // 0x6
     field public static final java.lang.String CACHED_FORMATTED_NUMBER = "formatted_number";
     field public static final java.lang.String CACHED_LOOKUP_URI = "lookup_uri";
@@ -33235,6 +33389,7 @@ package android.provider {
     field public static final java.lang.String DURATION = "duration";
     field public static final java.lang.String EXTRA_CALL_TYPE_FILTER = "android.provider.extra.CALL_TYPE_FILTER";
     field public static final java.lang.String FEATURES = "features";
+    field public static final int FEATURES_PULLED_EXTERNALLY = 2; // 0x2
     field public static final int FEATURES_VIDEO = 1; // 0x1
     field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location";
     field public static final int INCOMING_TYPE = 1; // 0x1
@@ -35072,6 +35227,7 @@ package android.provider {
     field public static final java.lang.String DATA_ROAMING = "data_roaming";
     field public static final java.lang.String DEBUG_APP = "debug_app";
     field public static final java.lang.String DEVELOPMENT_SETTINGS_ENABLED = "development_settings_enabled";
+    field public static final java.lang.String DEVICE_NAME = "device_name";
     field public static final java.lang.String DEVICE_PROVISIONED = "device_provisioned";
     field public static final java.lang.String HTTP_PROXY = "http_proxy";
     field public static final deprecated java.lang.String INSTALL_NON_MARKET_APPS = "install_non_market_apps";
@@ -35082,7 +35238,7 @@ package android.provider {
     field public static final java.lang.String RADIO_CELL = "cell";
     field public static final java.lang.String RADIO_NFC = "nfc";
     field public static final java.lang.String RADIO_WIFI = "wifi";
-    field public static final java.lang.String SHOW_PROCESSES = "show_processes";
+    field public static final deprecated java.lang.String SHOW_PROCESSES = "show_processes";
     field public static final java.lang.String STAY_ON_WHILE_PLUGGED_IN = "stay_on_while_plugged_in";
     field public static final java.lang.String THEATER_MODE_ON = "theater_mode_on";
     field public static final java.lang.String TRANSITION_ANIMATION_SCALE = "transition_animation_scale";
@@ -35660,6 +35816,7 @@ package android.provider {
     field public static final java.lang.String ACTION_NEW_VOICEMAIL = "android.intent.action.NEW_VOICEMAIL";
     field public static final java.lang.String ACTION_SYNC_VOICEMAIL = "android.provider.action.SYNC_VOICEMAIL";
     field public static final java.lang.String AUTHORITY = "com.android.voicemail";
+    field public static final java.lang.String EXTRA_PHONE_ACCOUNT_HANDLE = "android.provider.extra.PHONE_ACCOUNT_HANDLE";
     field public static final java.lang.String EXTRA_SELF_CHANGE = "com.android.voicemail.extra.SELF_CHANGE";
     field public static final java.lang.String PARAM_KEY_SOURCE_PACKAGE = "source_package";
   }
@@ -35668,6 +35825,9 @@ package android.provider {
     method public static android.net.Uri buildSourceUri(java.lang.String);
     field public static final java.lang.String CONFIGURATION_STATE = "configuration_state";
     field public static final int CONFIGURATION_STATE_CAN_BE_CONFIGURED = 2; // 0x2
+    field public static final int CONFIGURATION_STATE_CONFIGURING = 3; // 0x3
+    field public static final int CONFIGURATION_STATE_DISABLED = 5; // 0x5
+    field public static final int CONFIGURATION_STATE_FAILED = 4; // 0x4
     field public static final int CONFIGURATION_STATE_NOT_CONFIGURED = 1; // 0x1
     field public static final int CONFIGURATION_STATE_OK = 0; // 0x0
     field public static final android.net.Uri CONTENT_URI;
@@ -35692,6 +35852,7 @@ package android.provider {
     field public static final int QUOTA_UNAVAILABLE = -1; // 0xffffffff
     field public static final java.lang.String SETTINGS_URI = "settings_uri";
     field public static final java.lang.String SOURCE_PACKAGE = "source_package";
+    field public static final java.lang.String SOURCE_TYPE = "source_type";
     field public static final java.lang.String VOICEMAIL_ACCESS_URI = "voicemail_access_uri";
   }
 
@@ -37117,7 +37278,7 @@ package android.service.carrier {
     field public static final java.lang.String SERVICE_INTERFACE = "android.service.carrier.CarrierMessagingService";
   }
 
-  public static abstract interface CarrierMessagingService.ResultCallback {
+  public static abstract interface CarrierMessagingService.ResultCallback<T> {
     method public abstract void onReceiveResult(T) throws android.os.RemoteException;
   }
 
@@ -37268,7 +37429,7 @@ package android.service.media {
     field public static final java.lang.String EXTRA_SUGGESTED = "android.service.media.extra.SUGGESTED";
   }
 
-  public class MediaBrowserService.Result {
+  public class MediaBrowserService.Result<T> {
     method public void detach();
     method public void sendResult(T);
   }
@@ -38772,10 +38933,15 @@ package android.telecom {
     method public void phoneAccountSelected(android.telecom.PhoneAccountHandle, boolean);
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
+    method public void pullExternalCall();
+    method public final void putExtras(android.os.Bundle);
     method public void registerCallback(android.telecom.Call.Callback);
     method public void registerCallback(android.telecom.Call.Callback, android.os.Handler);
     method public void reject(boolean, java.lang.String);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
     method public deprecated void removeListener(android.telecom.Call.Listener);
+    method public void sendCallEvent(java.lang.String, android.os.Bundle);
     method public void splitFromConference();
     method public void stopDtmfTone();
     method public void swapConference();
@@ -38790,6 +38956,7 @@ package android.telecom {
     field public static final int STATE_HOLDING = 3; // 0x3
     field public static final int STATE_NEW = 0; // 0x0
     field public static final deprecated int STATE_PRE_DIAL_WAIT = 8; // 0x8
+    field public static final int STATE_PULLING_CALL = 11; // 0xb
     field public static final int STATE_RINGING = 2; // 0x2
     field public static final int STATE_SELECT_PHONE_ACCOUNT = 8; // 0x8
   }
@@ -38800,6 +38967,7 @@ package android.telecom {
     method public void onCannedTextResponsesLoaded(android.telecom.Call, java.util.List<java.lang.String>);
     method public void onChildrenChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
     method public void onConferenceableCallsChanged(android.telecom.Call, java.util.List<android.telecom.Call>);
+    method public void onConnectionEvent(android.telecom.Call, java.lang.String, android.os.Bundle);
     method public void onDetailsChanged(android.telecom.Call, android.telecom.Call.Details);
     method public void onParentChanged(android.telecom.Call, android.telecom.Call);
     method public void onPostDialWait(android.telecom.Call, java.lang.String);
@@ -38830,6 +38998,7 @@ package android.telecom {
     method public static java.lang.String propertiesToString(int);
     field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 4194304; // 0x400000
     field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 8388608; // 0x800000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
     field public static final int CAPABILITY_HOLD = 1; // 0x1
     field public static final int CAPABILITY_MANAGE_CONFERENCE = 128; // 0x80
@@ -38849,7 +39018,9 @@ package android.telecom {
     field public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 4; // 0x4
     field public static final int PROPERTY_ENTERPRISE_CALL = 32; // 0x20
     field public static final int PROPERTY_GENERIC_CONFERENCE = 2; // 0x2
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 128; // 0x80
     field public static final int PROPERTY_HIGH_DEF_AUDIO = 16; // 0x10
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 64; // 0x40
     field public static final int PROPERTY_WIFI = 8; // 0x8
   }
 
@@ -38906,6 +39077,7 @@ package android.telecom {
     method public final java.util.List<android.telecom.Connection> getConferenceableConnections();
     method public final deprecated long getConnectTimeMillis();
     method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
     method public final long getConnectionTime();
     method public final java.util.List<android.telecom.Connection> getConnections();
     method public final android.telecom.DisconnectCause getDisconnectCause();
@@ -38920,6 +39092,7 @@ package android.telecom {
     method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onConnectionAdded(android.telecom.Connection);
     method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
     method public void onHold();
     method public void onMerge(android.telecom.Connection);
     method public void onMerge();
@@ -38928,11 +39101,15 @@ package android.telecom {
     method public void onStopDtmfTone();
     method public void onSwap();
     method public void onUnhold();
+    method public final void putExtras(android.os.Bundle);
     method public final void removeConnection(android.telecom.Connection);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
     method public final void setActive();
     method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
     method public final deprecated void setConnectTimeMillis(long);
     method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
     method public final void setConnectionTime(long);
     method public final void setDialing();
     method public final void setDisconnected(android.telecom.DisconnectCause);
@@ -38963,6 +39140,7 @@ package android.telecom {
     method public final android.telecom.Conference getConference();
     method public final java.util.List<android.telecom.Conferenceable> getConferenceables();
     method public final int getConnectionCapabilities();
+    method public final int getConnectionProperties();
     method public final android.telecom.DisconnectCause getDisconnectCause();
     method public final android.os.Bundle getExtras();
     method public final int getState();
@@ -38974,16 +39152,24 @@ package android.telecom {
     method public void onAnswer();
     method public deprecated void onAudioStateChanged(android.telecom.AudioState);
     method public void onCallAudioStateChanged(android.telecom.CallAudioState);
+    method public void onCallEvent(java.lang.String, android.os.Bundle);
     method public void onDisconnect();
+    method public void onExtrasChanged(android.os.Bundle);
     method public void onHold();
     method public void onPlayDtmfTone(char);
     method public void onPostDialContinue(boolean);
+    method public void onPullExternalCall();
     method public void onReject();
     method public void onReject(java.lang.String);
     method public void onSeparate();
     method public void onStateChanged(int);
     method public void onStopDtmfTone();
     method public void onUnhold();
+    method public static java.lang.String propertiesToString(int);
+    method public final void putExtras(android.os.Bundle);
+    method public final void removeExtras(java.util.List<java.lang.String>);
+    method public final void removeExtras(java.lang.String...);
+    method public void sendConnectionEvent(java.lang.String, android.os.Bundle);
     method public final void setActive();
     method public final void setAddress(android.net.Uri, int);
     method public final void setAudioModeIsVoip(boolean);
@@ -38991,6 +39177,7 @@ package android.telecom {
     method public final void setConferenceableConnections(java.util.List<android.telecom.Connection>);
     method public final void setConferenceables(java.util.List<android.telecom.Conferenceable>);
     method public final void setConnectionCapabilities(int);
+    method public final void setConnectionProperties(int);
     method public final void setDialing();
     method public final void setDisconnected(android.telecom.DisconnectCause);
     method public final void setExtras(android.os.Bundle);
@@ -38999,6 +39186,7 @@ package android.telecom {
     method public final void setNextPostDialChar(char);
     method public final void setOnHold();
     method public final void setPostDialWait(java.lang.String);
+    method public final void setPulling();
     method public final void setRingbackRequested(boolean);
     method public final void setRinging();
     method public final void setStatusHints(android.telecom.StatusHints);
@@ -39007,6 +39195,7 @@ package android.telecom {
     method public static java.lang.String stateToString(int);
     field public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO = 8388608; // 0x800000
     field public static final int CAPABILITY_CAN_PAUSE_VIDEO = 1048576; // 0x100000
+    field public static final int CAPABILITY_CAN_PULL_CALL = 16777216; // 0x1000000
     field public static final int CAPABILITY_CAN_SEND_RESPONSE_VIA_CONNECTION = 4194304; // 0x400000
     field public static final int CAPABILITY_CAN_UPGRADE_TO_VIDEO = 524288; // 0x80000
     field public static final int CAPABILITY_DISCONNECT_FROM_CONFERENCE = 8192; // 0x2000
@@ -39024,15 +39213,21 @@ package android.telecom {
     field public static final int CAPABILITY_SUPPORTS_VT_REMOTE_TX = 2048; // 0x800
     field public static final int CAPABILITY_SUPPORT_HOLD = 2; // 0x2
     field public static final int CAPABILITY_SWAP_CONFERENCE = 8; // 0x8
+    field public static final java.lang.String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
+    field public static final java.lang.String EVENT_CALL_PULL_FAILED = "android.telecom.event.CALL_PULL_FAILED";
+    field public static final java.lang.String EXTRA_ANSWERING_DROPS_FG_CALL = "android.telecom.extra.ANSWERING_DROPS_FG_CALL";
     field public static final java.lang.String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT";
     field public static final java.lang.String EXTRA_CHILD_ADDRESS = "android.telecom.extra.CHILD_ADDRESS";
     field public static final java.lang.String EXTRA_LAST_FORWARDED_NUMBER = "android.telecom.extra.LAST_FORWARDED_NUMBER";
+    field public static final int PROPERTY_HAS_CDMA_VOICE_PRIVACY = 32; // 0x20
+    field public static final int PROPERTY_IS_EXTERNAL_CALL = 16; // 0x10
     field public static final int STATE_ACTIVE = 4; // 0x4
     field public static final int STATE_DIALING = 3; // 0x3
     field public static final int STATE_DISCONNECTED = 6; // 0x6
     field public static final int STATE_HOLDING = 5; // 0x5
     field public static final int STATE_INITIALIZING = 0; // 0x0
     field public static final int STATE_NEW = 1; // 0x1
+    field public static final int STATE_PULLING_CALL = 7; // 0x7
     field public static final int STATE_RINGING = 2; // 0x2
   }
 
@@ -39110,7 +39305,9 @@ package android.telecom {
     method public java.lang.String getReason();
     method public int getTone();
     method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ANSWERED_ELSEWHERE = 11; // 0xb
     field public static final int BUSY = 7; // 0x7
+    field public static final int CALL_PULLED = 12; // 0xc
     field public static final int CANCELED = 4; // 0x4
     field public static final int CONNECTION_MANAGER_NOT_SUPPORTED = 10; // 0xa
     field public static final android.os.Parcelable.Creator<android.telecom.DisconnectCause> CREATOR;
@@ -39147,6 +39344,7 @@ package android.telecom {
     method public void onCallAudioStateChanged(android.telecom.CallAudioState);
     method public void onCallRemoved(android.telecom.Call);
     method public void onCanAddCallChanged(boolean);
+    method public void onConnectionEvent(android.telecom.Call, java.lang.String, android.os.Bundle);
     method public deprecated void onPhoneCreated(android.telecom.Phone);
     method public deprecated void onPhoneDestroyed(android.telecom.Phone);
     method public void onSilenceRinger();
@@ -39184,14 +39382,16 @@ package android.telecom {
   }
 
   public class ParcelableCallAnalytics implements android.os.Parcelable {
-    ctor public ParcelableCallAnalytics(long, long, int, boolean, boolean, int, int, boolean, java.lang.String, boolean);
+    ctor public ParcelableCallAnalytics(long, long, int, boolean, boolean, int, int, boolean, java.lang.String, boolean, java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent>, java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming>);
     ctor public ParcelableCallAnalytics(android.os.Parcel);
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> analyticsEvents();
     method public int describeContents();
     method public long getCallDurationMillis();
     method public int getCallTechnologies();
     method public int getCallTerminationCode();
     method public int getCallType();
     method public java.lang.String getConnectionService();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics.EventTiming> getEventTimings();
     method public long getStartTimeMillis();
     method public boolean isAdditionalCall();
     method public boolean isCreatedFromExistingConnection();
@@ -39212,6 +39412,73 @@ package android.telecom {
     field public static final int THIRD_PARTY_PHONE = 16; // 0x10
   }
 
+  public static final class ParcelableCallAnalytics.AnalyticsEvent implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.AnalyticsEvent(int, long);
+    method public int describeContents();
+    method public int getEventName();
+    method public long getTimeSinceLastEvent();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int AUDIO_ROUTE_BT = 204; // 0xcc
+    field public static final int AUDIO_ROUTE_EARPIECE = 205; // 0xcd
+    field public static final int AUDIO_ROUTE_HEADSET = 206; // 0xce
+    field public static final int AUDIO_ROUTE_SPEAKER = 207; // 0xcf
+    field public static final int BIND_CS = 5; // 0x5
+    field public static final int BLOCK_CHECK_FINISHED = 105; // 0x69
+    field public static final int BLOCK_CHECK_INITIATED = 104; // 0x68
+    field public static final int CONFERENCE_WITH = 300; // 0x12c
+    field public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.AnalyticsEvent> CREATOR;
+    field public static final int CS_BOUND = 6; // 0x6
+    field public static final int DIRECT_TO_VM_FINISHED = 103; // 0x67
+    field public static final int DIRECT_TO_VM_INITIATED = 102; // 0x66
+    field public static final int FILTERING_COMPLETED = 107; // 0x6b
+    field public static final int FILTERING_INITIATED = 106; // 0x6a
+    field public static final int FILTERING_TIMED_OUT = 108; // 0x6c
+    field public static final int MUTE = 202; // 0xca
+    field public static final int REMOTELY_HELD = 402; // 0x192
+    field public static final int REMOTELY_UNHELD = 403; // 0x193
+    field public static final int REQUEST_ACCEPT = 7; // 0x7
+    field public static final int REQUEST_HOLD = 400; // 0x190
+    field public static final int REQUEST_PULL = 500; // 0x1f4
+    field public static final int REQUEST_REJECT = 8; // 0x8
+    field public static final int REQUEST_UNHOLD = 401; // 0x191
+    field public static final int SCREENING_COMPLETED = 101; // 0x65
+    field public static final int SCREENING_SENT = 100; // 0x64
+    field public static final int SET_ACTIVE = 1; // 0x1
+    field public static final int SET_DIALING = 4; // 0x4
+    field public static final int SET_DISCONNECTED = 2; // 0x2
+    field public static final int SET_HOLD = 404; // 0x194
+    field public static final int SET_PARENT = 302; // 0x12e
+    field public static final int SET_SELECT_PHONE_ACCOUNT = 0; // 0x0
+    field public static final int SILENCE = 201; // 0xc9
+    field public static final int SKIP_RINGING = 200; // 0xc8
+    field public static final int SPLIT_CONFERENCE = 301; // 0x12d
+    field public static final int START_CONNECTION = 3; // 0x3
+    field public static final int SWAP = 405; // 0x195
+    field public static final int UNMUTE = 203; // 0xcb
+  }
+
+  public static final class ParcelableCallAnalytics.EventTiming implements android.os.Parcelable {
+    ctor public ParcelableCallAnalytics.EventTiming(int, long);
+    method public int describeContents();
+    method public int getName();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ACCEPT_TIMING = 0; // 0x0
+    field public static final int BIND_CS_TIMING = 6; // 0x6
+    field public static final int BLOCK_CHECK_FINISHED_TIMING = 9; // 0x9
+    field public static final android.os.Parcelable.Creator<android.telecom.ParcelableCallAnalytics.EventTiming> CREATOR;
+    field public static final int DIRECT_TO_VM_FINISHED_TIMING = 8; // 0x8
+    field public static final int DISCONNECT_TIMING = 2; // 0x2
+    field public static final int FILTERING_COMPLETED_TIMING = 10; // 0xa
+    field public static final int FILTERING_TIMED_OUT_TIMING = 11; // 0xb
+    field public static final int HOLD_TIMING = 3; // 0x3
+    field public static final int INVALID = 999999; // 0xf423f
+    field public static final int OUTGOING_TIME_TO_DIALING_TIMING = 5; // 0x5
+    field public static final int REJECT_TIMING = 1; // 0x1
+    field public static final int SCREENING_COMPLETED_TIMING = 7; // 0x7
+    field public static final int UNHOLD_TIMING = 4; // 0x4
+  }
+
   public final deprecated class Phone {
     method public final void addListener(android.telecom.Phone.Listener);
     method public final boolean canAddCall();
@@ -39324,6 +39591,7 @@ package android.telecom {
     method public void onConferenceableConnectionsChanged(android.telecom.RemoteConference, java.util.List<android.telecom.RemoteConnection>);
     method public void onConnectionAdded(android.telecom.RemoteConference, android.telecom.RemoteConnection);
     method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConference, int);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConference, int);
     method public void onConnectionRemoved(android.telecom.RemoteConference, android.telecom.RemoteConnection);
     method public void onDestroyed(android.telecom.RemoteConference);
     method public void onDisconnected(android.telecom.RemoteConference, android.telecom.DisconnectCause);
@@ -39342,6 +39610,7 @@ package android.telecom {
     method public android.telecom.RemoteConference getConference();
     method public java.util.List<android.telecom.RemoteConnection> getConferenceableConnections();
     method public int getConnectionCapabilities();
+    method public int getConnectionProperties();
     method public android.telecom.DisconnectCause getDisconnectCause();
     method public final android.os.Bundle getExtras();
     method public int getState();
@@ -39353,6 +39622,7 @@ package android.telecom {
     method public boolean isVoipAudioMode();
     method public void playDtmfTone(char);
     method public void postDialContinue(boolean);
+    method public void pullExternalCall();
     method public void registerCallback(android.telecom.RemoteConnection.Callback);
     method public void registerCallback(android.telecom.RemoteConnection.Callback, android.os.Handler);
     method public void reject();
@@ -39370,6 +39640,8 @@ package android.telecom {
     method public void onConferenceChanged(android.telecom.RemoteConnection, android.telecom.RemoteConference);
     method public void onConferenceableConnectionsChanged(android.telecom.RemoteConnection, java.util.List<android.telecom.RemoteConnection>);
     method public void onConnectionCapabilitiesChanged(android.telecom.RemoteConnection, int);
+    method public void onConnectionEvent(android.telecom.RemoteConnection, java.lang.String, android.os.Bundle);
+    method public void onConnectionPropertiesChanged(android.telecom.RemoteConnection, int);
     method public void onDestroyed(android.telecom.RemoteConnection);
     method public void onDisconnected(android.telecom.RemoteConnection, android.telecom.DisconnectCause);
     method public void onExtrasChanged(android.telecom.RemoteConnection, android.os.Bundle);
@@ -39423,6 +39695,41 @@ package android.telecom {
     field public static final android.os.Parcelable.Creator<android.telecom.StatusHints> CREATOR;
   }
 
+  public final class TelecomAnalytics implements android.os.Parcelable {
+    ctor public TelecomAnalytics(java.util.List<android.telecom.TelecomAnalytics.SessionTiming>, java.util.List<android.telecom.ParcelableCallAnalytics>);
+    method public int describeContents();
+    method public java.util.List<android.telecom.ParcelableCallAnalytics> getCallAnalytics();
+    method public java.util.List<android.telecom.TelecomAnalytics.SessionTiming> getSessionTimings();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics> CREATOR;
+  }
+
+  public static final class TelecomAnalytics.SessionTiming implements android.os.Parcelable {
+    ctor public TelecomAnalytics.SessionTiming(int, long);
+    method public int describeContents();
+    method public java.lang.Integer getKey();
+    method public long getTime();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.telecom.TelecomAnalytics.SessionTiming> CREATOR;
+    field public static final int CSW_ADD_CONFERENCE_CALL = 108; // 0x6c
+    field public static final int CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100; // 0x64
+    field public static final int CSW_REMOVE_CALL = 106; // 0x6a
+    field public static final int CSW_SET_ACTIVE = 101; // 0x65
+    field public static final int CSW_SET_DIALING = 103; // 0x67
+    field public static final int CSW_SET_DISCONNECTED = 104; // 0x68
+    field public static final int CSW_SET_IS_CONFERENCED = 107; // 0x6b
+    field public static final int CSW_SET_ON_HOLD = 105; // 0x69
+    field public static final int CSW_SET_RINGING = 102; // 0x66
+    field public static final int ICA_ANSWER_CALL = 1; // 0x1
+    field public static final int ICA_CONFERENCE = 8; // 0x8
+    field public static final int ICA_DISCONNECT_CALL = 3; // 0x3
+    field public static final int ICA_HOLD_CALL = 4; // 0x4
+    field public static final int ICA_MUTE = 6; // 0x6
+    field public static final int ICA_REJECT_CALL = 2; // 0x2
+    field public static final int ICA_SET_AUDIO_ROUTE = 7; // 0x7
+    field public static final int ICA_UNHOLD_CALL = 5; // 0x5
+  }
+
   public class TelecomManager {
     method public void acceptRingingCall();
     method public void acceptRingingCall(int);
@@ -39432,7 +39739,7 @@ package android.telecom {
     method public deprecated void clearAccounts();
     method public void clearPhoneAccounts();
     method public android.content.Intent createManageBlockedNumbersIntent();
-    method public java.util.List<android.telecom.ParcelableCallAnalytics> dumpAnalytics();
+    method public android.telecom.TelecomAnalytics dumpAnalytics();
     method public void enablePhoneAccount(android.telecom.PhoneAccountHandle, boolean);
     method public boolean endCall();
     method public android.net.Uri getAdnUriForPhoneAccount(android.telecom.PhoneAccountHandle);
@@ -39493,6 +39800,7 @@ package android.telecom {
     field public static final java.lang.String EXTRA_START_CALL_WITH_VIDEO_STATE = "android.telecom.extra.START_CALL_WITH_VIDEO_STATE";
     field public static final java.lang.String GATEWAY_ORIGINAL_ADDRESS = "android.telecom.extra.GATEWAY_ORIGINAL_ADDRESS";
     field public static final java.lang.String GATEWAY_PROVIDER_PACKAGE = "android.telecom.extra.GATEWAY_PROVIDER_PACKAGE";
+    field public static final java.lang.String METADATA_INCLUDE_EXTERNAL_CALLS = "android.telecom.INCLUDE_EXTERNAL_CALLS";
     field public static final java.lang.String METADATA_IN_CALL_SERVICE_RINGING = "android.telecom.IN_CALL_SERVICE_RINGING";
     field public static final java.lang.String METADATA_IN_CALL_SERVICE_UI = "android.telecom.IN_CALL_SERVICE_UI";
     field public static final int PRESENTATION_ALLOWED = 1; // 0x1
@@ -39549,9 +39857,11 @@ package android.telephony {
     field public static final java.lang.String ACTION_CARRIER_CONFIG_CHANGED = "android.telephony.action.CARRIER_CONFIG_CHANGED";
     field public static final java.lang.String KEY_ADDITIONAL_CALL_SETTING_BOOL = "additional_call_setting_bool";
     field public static final java.lang.String KEY_ALLOW_ADDING_APNS_BOOL = "allow_adding_apns_bool";
+    field public static final java.lang.String KEY_ALLOW_ADD_CALL_DURING_VIDEO_CALL_BOOL = "allow_add_call_during_video_call";
     field public static final java.lang.String KEY_ALLOW_EMERGENCY_NUMBERS_IN_CALL_LOG_BOOL = "allow_emergency_numbers_in_call_log_bool";
     field public static final java.lang.String KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL = "allow_emergency_video_calls_bool";
     field public static final java.lang.String KEY_ALLOW_LOCAL_DTMF_TONES_BOOL = "allow_local_dtmf_tones_bool";
+    field public static final java.lang.String KEY_ALLOW_MERGE_WIFI_CALLS_WHEN_VOWIFI_OFF_BOOL = "allow_merge_wifi_calls_when_vowifi_off_bool";
     field public static final java.lang.String KEY_ALLOW_NON_EMERGENCY_CALLS_IN_ECM_BOOL = "allow_non_emergency_calls_in_ecm_bool";
     field public static final java.lang.String KEY_ALWAYS_SHOW_EMERGENCY_ALERT_ONOFF_BOOL = "always_show_emergency_alert_onoff_bool";
     field public static final java.lang.String KEY_APN_EXPAND_BOOL = "apn_expand_bool";
@@ -39583,6 +39893,7 @@ package android.telephony {
     field public static final java.lang.String KEY_CSP_ENABLED_BOOL = "csp_enabled_bool";
     field public static final java.lang.String KEY_DEFAULT_SIM_CALL_MANAGER_STRING = "default_sim_call_manager_string";
     field public static final java.lang.String KEY_DISABLE_CDMA_ACTIVATION_CODE_BOOL = "disable_cdma_activation_code_bool";
+    field public static final java.lang.String KEY_DROP_VIDEO_CALL_WHEN_ANSWERING_AUDIO_CALL_BOOL = "drop_video_call_when_answering_audio_call_bool";
     field public static final java.lang.String KEY_DTMF_TYPE_ENABLED_BOOL = "dtmf_type_enabled_bool";
     field public static final java.lang.String KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT = "duration_blocking_disabled_after_emergency_int";
     field public static final java.lang.String KEY_EDITABLE_ENHANCED_4G_LTE_BOOL = "editable_enhanced_4g_lte_bool";
@@ -39640,6 +39951,7 @@ package android.telephony {
     field public static final java.lang.String KEY_SUPPORT_CONFERENCE_CALL_BOOL = "support_conference_call_bool";
     field public static final java.lang.String KEY_SUPPORT_PAUSE_IMS_VIDEO_CALLS_BOOL = "support_pause_ims_video_calls_bool";
     field public static final java.lang.String KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL = "support_swap_after_merge_bool";
+    field public static final java.lang.String KEY_TREAT_DOWNGRADED_VIDEO_CALLS_AS_VIDEO_CALLS_BOOL = "treat_downgraded_video_calls_as_video_calls_bool";
     field public static final java.lang.String KEY_USE_HFA_FOR_PROVISIONING_BOOL = "use_hfa_for_provisioning_bool";
     field public static final java.lang.String KEY_USE_OTASP_FOR_PROVISIONING_BOOL = "use_otasp_for_provisioning_bool";
     field public static final java.lang.String KEY_USE_RCS_PRESENCE_BOOL = "use_rcs_presence_bool";
@@ -40135,6 +40447,26 @@ package android.telephony {
     method public void onSubscriptionsChanged();
   }
 
+  public final class TelephonyHistogram implements android.os.Parcelable {
+    ctor public TelephonyHistogram(int, int, int);
+    ctor public TelephonyHistogram(android.telephony.TelephonyHistogram);
+    ctor public TelephonyHistogram(android.os.Parcel);
+    method public void addTimeTaken(int);
+    method public int describeContents();
+    method public int getAverageTime();
+    method public int getBucketCount();
+    method public int[] getBucketCounters();
+    method public int[] getBucketEndPoints();
+    method public int getCategory();
+    method public int getId();
+    method public int getMaxTime();
+    method public int getMinTime();
+    method public int getSampleCount();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.telephony.TelephonyHistogram> CREATOR;
+    field public static final int TELEPHONY_CATEGORY_RIL = 1; // 0x1
+  }
+
   public class TelephonyManager {
     method public void answerRingingCall();
     method public void call(java.lang.String, java.lang.String);
@@ -40184,6 +40516,7 @@ package android.telephony {
     method public java.lang.String getSimSerialNumber();
     method public int getSimState();
     method public java.lang.String getSubscriberId();
+    method public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
     method public java.lang.String getVoiceMailAlphaTag();
     method public java.lang.String getVoiceMailNumber();
     method public int getVoiceNetworkType();
@@ -40207,6 +40540,7 @@ package android.telephony {
     method public boolean isSmsCapable();
     method public boolean isTtyModeSupported();
     method public boolean isVideoCallingEnabled();
+    method public boolean isVisualVoicemailEnabled(android.telecom.PhoneAccountHandle);
     method public boolean isVoiceCapable();
     method public boolean isVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle);
     method public boolean isWorldPhone();
@@ -40220,6 +40554,7 @@ package android.telephony {
     method public boolean setPreferredNetworkTypeToGlobal();
     method public boolean setRadio(boolean);
     method public boolean setRadioPower(boolean);
+    method public void setVisualVoicemailEnabled(android.telecom.PhoneAccountHandle, boolean);
     method public boolean setVoiceMailNumber(java.lang.String, java.lang.String);
     method public void silenceRinger();
     method public boolean supplyPin(java.lang.String);
@@ -40272,12 +40607,15 @@ package android.telephony {
     field public static final int NETWORK_TYPE_EVDO_A = 6; // 0x6
     field public static final int NETWORK_TYPE_EVDO_B = 12; // 0xc
     field public static final int NETWORK_TYPE_GPRS = 1; // 0x1
+    field public static final int NETWORK_TYPE_GSM = 16; // 0x10
     field public static final int NETWORK_TYPE_HSDPA = 8; // 0x8
     field public static final int NETWORK_TYPE_HSPA = 10; // 0xa
     field public static final int NETWORK_TYPE_HSPAP = 15; // 0xf
     field public static final int NETWORK_TYPE_HSUPA = 9; // 0x9
     field public static final int NETWORK_TYPE_IDEN = 11; // 0xb
+    field public static final int NETWORK_TYPE_IWLAN = 18; // 0x12
     field public static final int NETWORK_TYPE_LTE = 13; // 0xd
+    field public static final int NETWORK_TYPE_TD_SCDMA = 17; // 0x11
     field public static final int NETWORK_TYPE_UMTS = 3; // 0x3
     field public static final int NETWORK_TYPE_UNKNOWN = 0; // 0x0
     field public static final int PHONE_TYPE_CDMA = 2; // 0x2
@@ -40411,14 +40749,14 @@ package android.telephony.gsm {
 
 package android.test {
 
-  public abstract deprecated class ActivityInstrumentationTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase(java.lang.String, java.lang.Class<T>, boolean);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class ActivityInstrumentationTestCase2 extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityInstrumentationTestCase2<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public deprecated ActivityInstrumentationTestCase2(java.lang.String, java.lang.Class<T>);
     ctor public ActivityInstrumentationTestCase2(java.lang.Class<T>);
     method public T getActivity();
@@ -40433,7 +40771,7 @@ package android.test {
     method protected void setActivity(android.app.Activity);
   }
 
-  public abstract deprecated class ActivityUnitTestCase extends android.test.ActivityTestCase {
+  public abstract deprecated class ActivityUnitTestCase<T extends android.app.Activity> extends android.test.ActivityTestCase {
     ctor public ActivityUnitTestCase(java.lang.Class<T>);
     method public T getActivity();
     method public int getFinishedActivityRequest();
@@ -40479,7 +40817,7 @@ package android.test {
     method public void testStarted(java.lang.String);
   }
 
-  public abstract deprecated class ApplicationTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ApplicationTestCase<T extends android.app.Application> extends android.test.AndroidTestCase {
     ctor public ApplicationTestCase(java.lang.Class<T>);
     method protected final void createApplication();
     method public T getApplication();
@@ -40505,8 +40843,8 @@ package android.test {
     method public android.app.Instrumentation getInstrumentation();
     method public deprecated void injectInsrumentation(android.app.Instrumentation);
     method public void injectInstrumentation(android.app.Instrumentation);
-    method public final T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
-    method public final T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
+    method public final <T extends android.app.Activity> T launchActivity(java.lang.String, java.lang.Class<T>, android.os.Bundle);
+    method public final <T extends android.app.Activity> T launchActivityWithIntent(java.lang.String, java.lang.Class<T>, android.content.Intent);
     method public void runTestOnUiThread(java.lang.Runnable) throws java.lang.Throwable;
     method public void sendKeys(java.lang.String);
     method public void sendKeys(int...);
@@ -40546,7 +40884,7 @@ package android.test {
 
   public class LoaderTestCase extends android.test.AndroidTestCase {
     ctor public LoaderTestCase();
-    method public T getLoaderResultSynchronously(android.content.Loader<T>);
+    method public <T> T getLoaderResultSynchronously(android.content.Loader<T>);
   }
 
   public final deprecated class MoreAsserts {
@@ -40601,20 +40939,20 @@ package android.test {
     method public abstract void startTiming(boolean);
   }
 
-  public abstract deprecated class ProviderTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class ProviderTestCase<T extends android.content.ContentProvider> extends android.test.InstrumentationTestCase {
     ctor public ProviderTestCase(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract class ProviderTestCase2 extends android.test.AndroidTestCase {
+  public abstract class ProviderTestCase2<T extends android.content.ContentProvider> extends android.test.AndroidTestCase {
     ctor public ProviderTestCase2(java.lang.Class<T>, java.lang.String);
     method public android.test.mock.MockContentResolver getMockContentResolver();
     method public android.test.IsolatedContext getMockContext();
     method public T getProvider();
-    method public static android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> android.content.ContentResolver newResolverWithContentProviderFromSql(android.content.Context, java.lang.String, java.lang.Class<T>, java.lang.String, java.lang.String, int, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
   public deprecated class RenamingDelegatingContext extends android.content.ContextWrapper {
@@ -40622,11 +40960,11 @@ package android.test {
     ctor public RenamingDelegatingContext(android.content.Context, android.content.Context, java.lang.String);
     method public java.lang.String getDatabasePrefix();
     method public void makeExistingFilesAndDbsAccessible();
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
-    method public static T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
+    method public static <T extends android.content.ContentProvider> T providerWithRenamedContext(java.lang.Class<T>, android.content.Context, java.lang.String, boolean) throws java.lang.IllegalAccessException, java.lang.InstantiationException;
   }
 
-  public abstract deprecated class ServiceTestCase extends android.test.AndroidTestCase {
+  public abstract deprecated class ServiceTestCase<T extends android.app.Service> extends android.test.AndroidTestCase {
     ctor public ServiceTestCase(java.lang.Class<T>);
     method protected android.os.IBinder bindService(android.content.Intent);
     method public android.app.Application getApplication();
@@ -40639,7 +40977,7 @@ package android.test {
     method public void testServiceTestCaseSetUpProperly() throws java.lang.Exception;
   }
 
-  public abstract deprecated class SingleLaunchActivityTestCase extends android.test.InstrumentationTestCase {
+  public abstract deprecated class SingleLaunchActivityTestCase<T extends android.app.Activity> extends android.test.InstrumentationTestCase {
     ctor public SingleLaunchActivityTestCase(java.lang.String, java.lang.Class<T>);
     method public T getActivity();
     method public void testActivityTestCaseSetUpProperly() throws java.lang.Exception;
@@ -41006,7 +41344,7 @@ package android.test.suitebuilder {
     ctor public TestMethod(java.lang.String, java.lang.Class<? extends junit.framework.TestCase>);
     ctor public TestMethod(junit.framework.TestCase);
     method public junit.framework.TestCase createTest() throws java.lang.IllegalAccessException, java.lang.InstantiationException, java.lang.reflect.InvocationTargetException;
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.Class<? extends junit.framework.TestCase> getEnclosingClass();
     method public java.lang.String getEnclosingClassname();
     method public java.lang.String getName();
@@ -41449,7 +41787,7 @@ package android.text {
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public deprecated int getTextRunCursor(int, int, int, int, int, android.graphics.Paint);
     method public int getTextWatcherDepth();
     method public android.text.SpannableStringBuilder insert(int, java.lang.CharSequence, int, int);
@@ -41471,7 +41809,7 @@ package android.text {
     method public int getSpanEnd(java.lang.Object);
     method public int getSpanFlags(java.lang.Object);
     method public int getSpanStart(java.lang.Object);
-    method public T[] getSpans(int, int, java.lang.Class<T>);
+    method public <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public final int length();
     method public int nextSpanTransition(int, int, java.lang.Class);
     method public final java.lang.String toString();
@@ -41481,7 +41819,7 @@ package android.text {
     method public abstract int getSpanEnd(java.lang.Object);
     method public abstract int getSpanFlags(java.lang.Object);
     method public abstract int getSpanStart(java.lang.Object);
-    method public abstract T[] getSpans(int, int, java.lang.Class<T>);
+    method public abstract <T> T[] getSpans(int, int, java.lang.Class<T>);
     method public abstract int nextSpanTransition(int, int, java.lang.Class);
     field public static final int SPAN_COMPOSING = 256; // 0x100
     field public static final int SPAN_EXCLUSIVE_EXCLUSIVE = 33; // 0x21
@@ -42458,7 +42796,7 @@ package android.text.style {
     field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
   }
 
-  public static class TtsSpan.Builder {
+  public static class TtsSpan.Builder<C extends android.text.style.TtsSpan.Builder<?>> {
     ctor public TtsSpan.Builder(java.lang.String);
     method public android.text.style.TtsSpan build();
     method public C setIntArgument(java.lang.String, int);
@@ -42554,7 +42892,7 @@ package android.text.style {
     method public android.text.style.TtsSpan.OrdinalBuilder setNumber(java.lang.String);
   }
 
-  public static class TtsSpan.SemioticClassBuilder extends android.text.style.TtsSpan.Builder {
+  public static class TtsSpan.SemioticClassBuilder<C extends android.text.style.TtsSpan.SemioticClassBuilder<?>> extends android.text.style.TtsSpan.Builder {
     ctor public TtsSpan.SemioticClassBuilder(java.lang.String);
     method public C setAnimacy(java.lang.String);
     method public C setCase(java.lang.String);
@@ -42961,7 +43299,7 @@ package android.util {
     ctor public AndroidRuntimeException(java.lang.Exception);
   }
 
-  public final class ArrayMap implements java.util.Map {
+  public final class ArrayMap<K, V> implements java.util.Map {
     ctor public ArrayMap();
     ctor public ArrayMap(int);
     ctor public ArrayMap(android.util.ArrayMap<K, V>);
@@ -42989,7 +43327,7 @@ package android.util {
     method public java.util.Collection<V> values();
   }
 
-  public final class ArraySet implements java.util.Collection java.util.Set {
+  public final class ArraySet<E> implements java.util.Collection java.util.Set {
     ctor public ArraySet();
     ctor public ArraySet(int);
     ctor public ArraySet(android.util.ArraySet<E>);
@@ -43010,7 +43348,7 @@ package android.util {
     method public boolean retainAll(java.util.Collection<?>);
     method public int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
     method public E valueAt(int);
   }
 
@@ -43095,7 +43433,10 @@ package android.util {
     method public boolean equals(android.util.DisplayMetrics);
     method public void setTo(android.util.DisplayMetrics);
     method public void setToDefaults();
+    field public static final int DENSITY_260 = 260; // 0x104
     field public static final int DENSITY_280 = 280; // 0x118
+    field public static final int DENSITY_300 = 300; // 0x12c
+    field public static final int DENSITY_340 = 340; // 0x154
     field public static final int DENSITY_360 = 360; // 0x168
     field public static final int DENSITY_400 = 400; // 0x190
     field public static final int DENSITY_420 = 420; // 0x1a4
@@ -43152,13 +43493,13 @@ package android.util {
   public deprecated class FloatMath {
   }
 
-  public abstract class FloatProperty extends android.util.Property {
+  public abstract class FloatProperty<T> extends android.util.Property {
     ctor public FloatProperty(java.lang.String);
     method public final void set(T, java.lang.Float);
     method public abstract void setValue(T, float);
   }
 
-  public abstract class IntProperty extends android.util.Property {
+  public abstract class IntProperty<T> extends android.util.Property {
     ctor public IntProperty(java.lang.String);
     method public final void set(T, java.lang.Integer);
     method public abstract void setValue(T, int);
@@ -43258,7 +43599,7 @@ package android.util {
     method public void println(java.lang.String);
   }
 
-  public class LongSparseArray implements java.lang.Cloneable {
+  public class LongSparseArray<E> implements java.lang.Cloneable {
     ctor public LongSparseArray();
     ctor public LongSparseArray(int);
     method public void append(long, E);
@@ -43278,7 +43619,7 @@ package android.util {
     method public E valueAt(int);
   }
 
-  public class LruCache {
+  public class LruCache<K, V> {
     ctor public LruCache(int);
     method protected V create(K);
     method public final synchronized int createCount();
@@ -43366,9 +43707,9 @@ package android.util {
     ctor public NoSuchPropertyException(java.lang.String);
   }
 
-  public class Pair {
+  public class Pair<F, S> {
     ctor public Pair(F, S);
-    method public static android.util.Pair<A, B> create(A, B);
+    method public static <A, B> android.util.Pair<A, B> create(A, B);
     field public final F first;
     field public final S second;
   }
@@ -43401,22 +43742,22 @@ package android.util {
     method public abstract void println(java.lang.String);
   }
 
-  public abstract class Property {
+  public abstract class Property<T, V> {
     ctor public Property(java.lang.Class<V>, java.lang.String);
     method public abstract V get(T);
     method public java.lang.String getName();
     method public java.lang.Class<V> getType();
     method public boolean isReadOnly();
-    method public static android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
+    method public static <T, V> android.util.Property<T, V> of(java.lang.Class<T>, java.lang.Class<V>, java.lang.String);
     method public void set(T, V);
   }
 
-  public final class Range {
+  public final class Range<T extends java.lang.Comparable<? super T>> {
     ctor public Range(T, T);
     method public T clamp(T);
     method public boolean contains(T);
     method public boolean contains(android.util.Range<T>);
-    method public static android.util.Range<T> create(T, T);
+    method public static <T extends java.lang.Comparable<? super T>> android.util.Range<T> create(T, T);
     method public android.util.Range<T> extend(android.util.Range<T>);
     method public android.util.Range<T> extend(T, T);
     method public android.util.Range<T> extend(T);
@@ -43460,7 +43801,7 @@ package android.util {
     method public static android.util.SizeF parseSizeF(java.lang.String) throws java.lang.NumberFormatException;
   }
 
-  public class SparseArray implements java.lang.Cloneable {
+  public class SparseArray<E> implements java.lang.Cloneable {
     ctor public SparseArray();
     ctor public SparseArray(int);
     method public void append(int, E);
@@ -44425,6 +44766,10 @@ package android.view {
     field public static final int KEYCODE_SWITCH_CHARSET = 95; // 0x5f
     field public static final int KEYCODE_SYM = 63; // 0x3f
     field public static final int KEYCODE_SYSRQ = 120; // 0x78
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_DOWN = 281; // 0x119
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_LEFT = 282; // 0x11a
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_RIGHT = 283; // 0x11b
+    field public static final int KEYCODE_SYSTEM_NAVIGATION_UP = 280; // 0x118
     field public static final int KEYCODE_T = 48; // 0x30
     field public static final int KEYCODE_TAB = 61; // 0x3d
     field public static final int KEYCODE_TV = 170; // 0xaa
@@ -45307,6 +45652,7 @@ package android.view {
     method public float getPivotY();
     method public android.view.PointerIcon getPointerIcon();
     method public android.content.res.Resources getResources();
+    method public final boolean getRevealOnFocusHint();
     method public final int getRight();
     method protected float getRightFadingEdgeStrength();
     method protected int getRightPaddingOffset();
@@ -45594,6 +45940,7 @@ package android.view {
     method public void setPivotY(float);
     method public void setPointerIcon(android.view.PointerIcon);
     method public void setPressed(boolean);
+    method public final void setRevealOnFocusHint(boolean);
     method public final void setRight(int);
     method public void setRotation(float);
     method public void setRotationX(float);
@@ -46746,6 +47093,7 @@ package android.view {
     field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
     field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
     field public static final int TYPE_CHANGED = 2; // 0x2
+    field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
     field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
     field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
     field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
@@ -47518,6 +47866,7 @@ package android.view.inputmethod {
     method public boolean clearMetaKeyStates(int);
     method public void closeConnection();
     method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
     method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
     method public boolean commitText(java.lang.CharSequence, int);
     method public boolean deleteSurroundingText(int, int);
@@ -47627,6 +47976,7 @@ package android.view.inputmethod {
     field public static final int IME_NULL = 0; // 0x0
     field public int actionId;
     field public java.lang.CharSequence actionLabel;
+    field public java.lang.String[] contentMimeTypes;
     field public android.os.Bundle extras;
     field public int fieldId;
     field public java.lang.String fieldName;
@@ -47686,6 +48036,7 @@ package android.view.inputmethod {
     method public abstract boolean clearMetaKeyStates(int);
     method public abstract void closeConnection();
     method public abstract boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public abstract boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
     method public abstract boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
     method public abstract boolean commitText(java.lang.CharSequence, int);
     method public abstract boolean deleteSurroundingText(int, int);
@@ -47711,6 +48062,7 @@ package android.view.inputmethod {
     field public static final int CURSOR_UPDATE_MONITOR = 2; // 0x2
     field public static final int GET_EXTRACTED_TEXT_MONITOR = 1; // 0x1
     field public static final int GET_TEXT_WITH_STYLES = 1; // 0x1
+    field public static final int INPUT_CONTENT_GRANT_READ_URI_PERMISSION = 1; // 0x1
   }
 
   public class InputConnectionWrapper implements android.view.inputmethod.InputConnection {
@@ -47719,6 +48071,7 @@ package android.view.inputmethod {
     method public boolean clearMetaKeyStates(int);
     method public void closeConnection();
     method public boolean commitCompletion(android.view.inputmethod.CompletionInfo);
+    method public boolean commitContent(android.view.inputmethod.InputContentInfo, int, android.os.Bundle);
     method public boolean commitCorrection(android.view.inputmethod.CorrectionInfo);
     method public boolean commitText(java.lang.CharSequence, int);
     method public boolean deleteSurroundingText(int, int);
@@ -47743,6 +48096,19 @@ package android.view.inputmethod {
     method public void setTarget(android.view.inputmethod.InputConnection);
   }
 
+  public final class InputContentInfo implements android.os.Parcelable {
+    ctor public InputContentInfo(android.net.Uri, android.content.ClipDescription);
+    ctor public InputContentInfo(android.net.Uri, android.content.ClipDescription, android.net.Uri);
+    method public int describeContents();
+    method public android.net.Uri getContentUri();
+    method public android.content.ClipDescription getDescription();
+    method public android.net.Uri getLinkUri();
+    method public void releasePermission();
+    method public void requestPermission();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator<android.view.inputmethod.InputContentInfo> CREATOR;
+  }
+
   public abstract interface InputMethod {
     method public abstract void attachToken(android.os.IBinder);
     method public abstract void bindInput(android.view.inputmethod.InputBinding);
@@ -48240,7 +48606,7 @@ package android.webkit {
     method public static java.lang.String stripAnchor(java.lang.String);
   }
 
-  public abstract interface ValueCallback {
+  public abstract interface ValueCallback<T> {
     method public abstract void onReceiveValue(T);
   }
 
@@ -49255,7 +49621,7 @@ package android.widget {
     field public static final int NO_SELECTION = -2147483648; // 0x80000000
   }
 
-  public abstract class AdapterView extends android.view.ViewGroup {
+  public abstract class AdapterView<T extends android.widget.Adapter> extends android.view.ViewGroup {
     ctor public AdapterView(android.content.Context);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
@@ -49378,7 +49744,7 @@ package android.widget {
     ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
   }
 
-  public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
+  public class ArrayAdapter<T> extends android.widget.BaseAdapter implements android.widget.Filterable android.widget.ThemedSpinnerAdapter {
     ctor public ArrayAdapter(android.content.Context, int);
     ctor public ArrayAdapter(android.content.Context, int, int);
     ctor public ArrayAdapter(android.content.Context, int, T[]);
@@ -49439,7 +49805,7 @@ package android.widget {
     method protected void performFiltering(java.lang.CharSequence, int);
     method public void performValidation();
     method protected void replaceText(java.lang.CharSequence);
-    method public void setAdapter(T);
+    method public <T extends android.widget.ListAdapter & android.widget.Filterable> void setAdapter(T);
     method public void setCompletionHint(java.lang.CharSequence);
     method public void setDropDownAnchor(int);
     method public void setDropDownBackgroundDrawable(android.graphics.drawable.Drawable);
@@ -51724,7 +52090,7 @@ package android.widget {
 
 package com.android.internal.util {
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public abstract boolean apply(T);
   }
 
@@ -53771,13 +54137,13 @@ package java.lang {
     enum_constant public static final java.lang.Character.UnicodeScript YI;
   }
 
-  public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
-    method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
+  public final class Class<T> implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
+    method public <U> java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
     method public boolean desiredAssertionStatus();
     method public static java.lang.Class<?> forName(java.lang.String) throws java.lang.ClassNotFoundException;
     method public static java.lang.Class<?> forName(java.lang.String, boolean, java.lang.ClassLoader) throws java.lang.ClassNotFoundException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.String getCanonicalName();
     method public java.lang.ClassLoader getClassLoader();
@@ -53894,7 +54260,7 @@ package java.lang {
   public abstract interface Cloneable {
   }
 
-  public abstract interface Comparable {
+  public abstract interface Comparable<T> {
     method public abstract int compareTo(T);
   }
 
@@ -53948,7 +54314,7 @@ package java.lang {
     field public static final java.lang.Class<java.lang.Double> TYPE;
   }
 
-  public abstract class Enum implements java.lang.Comparable java.io.Serializable {
+  public abstract class Enum<E extends java.lang.Enum<E>> implements java.lang.Comparable java.io.Serializable {
     ctor protected Enum(java.lang.String, int);
     method protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException;
     method public final int compareTo(E);
@@ -53958,7 +54324,7 @@ package java.lang {
     method public final int hashCode();
     method public final java.lang.String name();
     method public final int ordinal();
-    method public static T valueOf(java.lang.Class<T>, java.lang.String);
+    method public static <T extends java.lang.Enum<T>> T valueOf(java.lang.Class<T>, java.lang.String);
   }
 
   public class EnumConstantNotPresentException extends java.lang.RuntimeException {
@@ -54077,7 +54443,7 @@ package java.lang {
     ctor public IndexOutOfBoundsException(java.lang.String);
   }
 
-  public class InheritableThreadLocal extends java.lang.ThreadLocal {
+  public class InheritableThreadLocal<T> extends java.lang.ThreadLocal {
     ctor public InheritableThreadLocal();
     method protected T childValue(T);
   }
@@ -54148,7 +54514,7 @@ package java.lang {
     ctor public InterruptedException(java.lang.String);
   }
 
-  public abstract interface Iterable {
+  public abstract interface Iterable<T> {
     method public default void forEach(java.util.function.Consumer<? super T>);
     method public abstract java.util.Iterator<T> iterator();
     method public default java.util.Spliterator<T> spliterator();
@@ -54356,12 +54722,12 @@ package java.lang {
   }
 
   public class Package implements java.lang.reflect.AnnotatedElement {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getAnnotations();
-    method public A[] getAnnotationsByType(java.lang.Class<A>);
-    method public A getDeclaredAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getDeclaredAnnotation(java.lang.Class<A>);
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A[] getDeclaredAnnotationsByType(java.lang.Class<A>);
     method public java.lang.String getImplementationTitle();
     method public java.lang.String getImplementationVendor();
     method public java.lang.String getImplementationVersion();
@@ -54921,7 +55287,7 @@ package java.lang {
     method public void uncaughtException(java.lang.Thread, java.lang.Throwable);
   }
 
-  public class ThreadLocal {
+  public class ThreadLocal<T> {
     ctor public ThreadLocal();
     method public T get();
     method protected T initialValue();
@@ -55061,30 +55427,30 @@ package java.lang.annotation {
 
 package java.lang.ref {
 
-  public class PhantomReference extends java.lang.ref.Reference {
+  public class PhantomReference<T> extends java.lang.ref.Reference {
     ctor public PhantomReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public abstract class Reference {
+  public abstract class Reference<T> {
     method public void clear();
     method public boolean enqueue();
     method public T get();
     method public boolean isEnqueued();
   }
 
-  public class ReferenceQueue {
+  public class ReferenceQueue<T> {
     ctor public ReferenceQueue();
     method public java.lang.ref.Reference<? extends T> poll();
     method public java.lang.ref.Reference<? extends T> remove(long) throws java.lang.IllegalArgumentException, java.lang.InterruptedException;
     method public java.lang.ref.Reference<? extends T> remove() throws java.lang.InterruptedException;
   }
 
-  public class SoftReference extends java.lang.ref.Reference {
+  public class SoftReference<T> extends java.lang.ref.Reference {
     ctor public SoftReference(T);
     ctor public SoftReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
 
-  public class WeakReference extends java.lang.ref.Reference {
+  public class WeakReference<T> extends java.lang.ref.Reference {
     ctor public WeakReference(T);
     ctor public WeakReference(T, java.lang.ref.ReferenceQueue<? super T>);
   }
@@ -55095,7 +55461,7 @@ package java.lang.reflect {
 
   public class AccessibleObject implements java.lang.reflect.AnnotatedElement {
     ctor protected AccessibleObject();
-    method public T getAnnotation(java.lang.Class<T>);
+    method public <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public java.lang.annotation.Annotation[] getAnnotations();
     method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
     method public boolean isAccessible();
@@ -55104,12 +55470,12 @@ package java.lang.reflect {
   }
 
   public abstract interface AnnotatedElement {
-    method public abstract T getAnnotation(java.lang.Class<T>);
+    method public abstract <T extends java.lang.annotation.Annotation> T getAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getAnnotations();
-    method public default T[] getAnnotationsByType(java.lang.Class<T>);
-    method public default java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> java.lang.annotation.Annotation getDeclaredAnnotation(java.lang.Class<T>);
     method public abstract java.lang.annotation.Annotation[] getDeclaredAnnotations();
-    method public default T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
+    method public default <T extends java.lang.annotation.Annotation> T[] getDeclaredAnnotationsByType(java.lang.Class<T>);
     method public default boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
   }
 
@@ -55137,8 +55503,8 @@ package java.lang.reflect {
     method public static void setShort(java.lang.Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
   }
 
-  public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+  public final class Constructor<T> extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<T> getDeclaringClass();
     method public java.lang.Class<?>[] getExceptionTypes();
     method public java.lang.reflect.Type[] getGenericExceptionTypes();
@@ -55157,7 +55523,7 @@ package java.lang.reflect {
 
   public final class Field extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member {
     method public java.lang.Object get(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public boolean getBoolean(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public byte getByte(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
     method public char getChar(java.lang.Object) throws java.lang.IllegalAccessException, java.lang.IllegalArgumentException;
@@ -55223,7 +55589,7 @@ package java.lang.reflect {
   }
 
   public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
-    method public A getAnnotation(java.lang.Class<A>);
+    method public <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A>);
     method public java.lang.Class<?> getDeclaringClass();
     method public java.lang.Object getDefaultValue();
     method public java.lang.Class<?>[] getExceptionTypes();
@@ -55301,7 +55667,7 @@ package java.lang.reflect {
   public abstract interface Type {
   }
 
-  public abstract interface TypeVariable implements java.lang.reflect.Type {
+  public abstract interface TypeVariable<D extends java.lang.reflect.GenericDeclaration> implements java.lang.reflect.Type {
     method public abstract java.lang.reflect.Type[] getBounds();
     method public abstract D getGenericDeclaration();
     method public abstract java.lang.String getName();
@@ -56090,7 +56456,7 @@ package java.net {
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
-  public abstract interface SocketOption {
+  public abstract interface SocketOption<T> {
     method public abstract java.lang.String name();
     method public abstract java.lang.Class<T> type();
   }
@@ -56674,7 +57040,7 @@ package java.nio.channels {
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
-    method public abstract java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
@@ -56750,8 +57116,8 @@ package java.nio.channels {
   public abstract interface NetworkChannel implements java.nio.channels.Channel {
     method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
-    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
-    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
   }
 
@@ -56868,7 +57234,7 @@ package java.nio.channels {
     method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
-    method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
     method public final int validOps();
   }
@@ -56886,7 +57252,7 @@ package java.nio.channels {
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
     method public final long read(java.nio.ByteBuffer[]) throws java.io.IOException;
-    method public abstract java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract <T> java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownInput() throws java.io.IOException;
     method public abstract java.nio.channels.SocketChannel shutdownOutput() throws java.io.IOException;
     method public abstract java.net.Socket socket();
@@ -57133,12 +57499,12 @@ package java.security {
 
   public final class AccessController {
     method public static void checkPermission(java.security.Permission) throws java.security.AccessControlException;
-    method public static T doPrivileged(java.security.PrivilegedAction<T>);
-    method public static T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
-    method public static T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivileged(java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivileged(java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedAction<T>);
+    method public static <T> T doPrivilegedWithCombiner(java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
     method public static java.security.AccessControlContext getContext();
   }
 
@@ -57177,7 +57543,7 @@ package java.security {
     method public static java.security.AlgorithmParameters getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.AlgorithmParameters getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method public final <T extends java.security.spec.AlgorithmParameterSpec> T getParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method public final java.security.Provider getProvider();
     method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method public final void init(byte[]) throws java.io.IOException;
@@ -57189,7 +57555,7 @@ package java.security {
     ctor public AlgorithmParametersSpi();
     method protected abstract byte[] engineGetEncoded() throws java.io.IOException;
     method protected abstract byte[] engineGetEncoded(java.lang.String) throws java.io.IOException;
-    method protected abstract T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
+    method protected abstract <T extends java.security.spec.AlgorithmParameterSpec> T engineGetParameterSpec(java.lang.Class<T>) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec) throws java.security.spec.InvalidParameterSpecException;
     method protected abstract void engineInit(byte[]) throws java.io.IOException;
     method protected abstract void engineInit(byte[], java.lang.String) throws java.io.IOException;
@@ -57374,7 +57740,7 @@ package java.security {
     method public static java.security.KeyFactory getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException;
     method public static java.security.KeyFactory getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException;
-    method public final T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method public final <T extends java.security.spec.KeySpec> T getKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method public final java.security.Provider getProvider();
     method public final java.security.Key translateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
@@ -57383,7 +57749,7 @@ package java.security {
     ctor public KeyFactorySpi();
     method protected abstract java.security.PrivateKey engineGeneratePrivate(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.PublicKey engineGeneratePublic(java.security.spec.KeySpec) throws java.security.spec.InvalidKeySpecException;
-    method protected abstract T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
+    method protected abstract <T extends java.security.spec.KeySpec> T engineGetKeySpec(java.security.Key, java.lang.Class<T>) throws java.security.spec.InvalidKeySpecException;
     method protected abstract java.security.Key engineTranslateKey(java.security.Key) throws java.security.InvalidKeyException;
   }
 
@@ -57652,7 +58018,7 @@ package java.security {
     field public static final long serialVersionUID = 6034044314589513430L; // 0x53bd3b559a12c6d6L
   }
 
-  public abstract interface PrivilegedAction {
+  public abstract interface PrivilegedAction<T> {
     method public abstract T run();
   }
 
@@ -57661,7 +58027,7 @@ package java.security {
     method public java.lang.Exception getException();
   }
 
-  public abstract interface PrivilegedExceptionAction {
+  public abstract interface PrivilegedExceptionAction<T> {
     method public abstract T run() throws java.lang.Exception;
   }
 
@@ -59843,11 +60209,11 @@ package java.sql {
     method public abstract void free() throws java.sql.SQLException;
     method public abstract java.io.InputStream getBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Reader getCharacterStream() throws java.sql.SQLException;
-    method public abstract T getSource(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Source> T getSource(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract java.lang.String getString() throws java.sql.SQLException;
     method public abstract java.io.OutputStream setBinaryStream() throws java.sql.SQLException;
     method public abstract java.io.Writer setCharacterStream() throws java.sql.SQLException;
-    method public abstract T setResult(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T extends javax.xml.transform.Result> T setResult(java.lang.Class<T>) throws java.sql.SQLException;
     method public abstract void setString(java.lang.String) throws java.sql.SQLException;
   }
 
@@ -59971,7 +60337,7 @@ package java.sql {
 
   public abstract interface Wrapper {
     method public abstract boolean isWrapperFor(java.lang.Class<?>) throws java.sql.SQLException;
-    method public abstract T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
+    method public abstract <T> T unwrap(java.lang.Class<T>) throws java.sql.SQLException;
   }
 
 }
@@ -60504,7 +60870,7 @@ package java.text {
 
 package java.util {
 
-  public abstract class AbstractCollection implements java.util.Collection {
+  public abstract class AbstractCollection<E> implements java.util.Collection {
     ctor protected AbstractCollection();
     method public boolean add(E);
     method public boolean addAll(java.util.Collection<? extends E>);
@@ -60518,10 +60884,10 @@ package java.util {
     method public boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public abstract class AbstractList extends java.util.AbstractCollection implements java.util.List {
+  public abstract class AbstractList<E> extends java.util.AbstractCollection implements java.util.List {
     ctor protected AbstractList();
     method public void add(int, E);
     method public boolean addAll(int, java.util.Collection<? extends E>);
@@ -60538,7 +60904,7 @@ package java.util {
     field protected transient int modCount;
   }
 
-  public abstract class AbstractMap implements java.util.Map {
+  public abstract class AbstractMap<K, V> implements java.util.Map {
     ctor protected AbstractMap();
     method public void clear();
     method public boolean containsKey(java.lang.Object);
@@ -60554,7 +60920,7 @@ package java.util {
     method public java.util.Collection<V> values();
   }
 
-  public static class AbstractMap.SimpleEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleEntry(K, V);
     ctor public AbstractMap.SimpleEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -60562,7 +60928,7 @@ package java.util {
     method public V setValue(V);
   }
 
-  public static class AbstractMap.SimpleImmutableEntry implements java.util.Map.Entry java.io.Serializable {
+  public static class AbstractMap.SimpleImmutableEntry<K, V> implements java.util.Map.Entry java.io.Serializable {
     ctor public AbstractMap.SimpleImmutableEntry(K, V);
     ctor public AbstractMap.SimpleImmutableEntry(java.util.Map.Entry<? extends K, ? extends V>);
     method public K getKey();
@@ -60570,23 +60936,23 @@ package java.util {
     method public V setValue(V);
   }
 
-  public abstract class AbstractQueue extends java.util.AbstractCollection implements java.util.Queue {
+  public abstract class AbstractQueue<E> extends java.util.AbstractCollection implements java.util.Queue {
     ctor protected AbstractQueue();
     method public E element();
     method public E remove();
   }
 
-  public abstract class AbstractSequentialList extends java.util.AbstractList {
+  public abstract class AbstractSequentialList<E> extends java.util.AbstractList {
     ctor protected AbstractSequentialList();
     method public E get(int);
     method public abstract java.util.ListIterator<E> listIterator(int);
   }
 
-  public abstract class AbstractSet extends java.util.AbstractCollection implements java.util.Set {
+  public abstract class AbstractSet<E> extends java.util.AbstractCollection implements java.util.Set {
     ctor protected AbstractSet();
   }
 
-  public class ArrayDeque extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
+  public class ArrayDeque<E> extends java.util.AbstractCollection implements java.lang.Cloneable java.util.Deque java.io.Serializable {
     ctor public ArrayDeque();
     ctor public ArrayDeque(int);
     ctor public ArrayDeque(java.util.Collection<? extends E>);
@@ -60618,7 +60984,7 @@ package java.util {
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class ArrayList<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public ArrayList(int);
     ctor public ArrayList();
     ctor public ArrayList(java.util.Collection<? extends E>);
@@ -60635,7 +61001,7 @@ package java.util {
   }
 
   public class Arrays {
-    method public static java.util.List<T> asList(T...);
+    method public static <T> java.util.List<T> asList(T...);
     method public static int binarySearch(long[], long);
     method public static int binarySearch(long[], int, int, long);
     method public static int binarySearch(int[], int);
@@ -60652,10 +61018,10 @@ package java.util {
     method public static int binarySearch(float[], int, int, float);
     method public static int binarySearch(java.lang.Object[], java.lang.Object);
     method public static int binarySearch(java.lang.Object[], int, int, java.lang.Object);
-    method public static int binarySearch(T[], T, java.util.Comparator<? super T>);
-    method public static int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
-    method public static T[] copyOf(T[], int);
-    method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
+    method public static <T> int binarySearch(T[], T, java.util.Comparator<? super T>);
+    method public static <T> int binarySearch(T[], int, int, T, java.util.Comparator<? super T>);
+    method public static <T> T[] copyOf(T[], int);
+    method public static <T, U> T[] copyOf(U[], int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOf(byte[], int);
     method public static short[] copyOf(short[], int);
     method public static int[] copyOf(int[], int);
@@ -60664,8 +61030,8 @@ package java.util {
     method public static float[] copyOf(float[], int);
     method public static double[] copyOf(double[], int);
     method public static boolean[] copyOf(boolean[], int);
-    method public static T[] copyOfRange(T[], int, int);
-    method public static T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
+    method public static <T> T[] copyOfRange(T[], int, int);
+    method public static <T, U> T[] copyOfRange(U[], int, int, java.lang.Class<? extends T[]>);
     method public static byte[] copyOfRange(byte[], int, int);
     method public static short[] copyOfRange(short[], int, int);
     method public static int[] copyOfRange(int[], int, int);
@@ -60713,15 +61079,15 @@ package java.util {
     method public static int hashCode(float[]);
     method public static int hashCode(double[]);
     method public static int hashCode(java.lang.Object[]);
-    method public static void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
-    method public static void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], java.util.function.BinaryOperator<T>);
+    method public static <T> void parallelPrefix(T[], int, int, java.util.function.BinaryOperator<T>);
     method public static void parallelPrefix(long[], java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(long[], int, int, java.util.function.LongBinaryOperator);
     method public static void parallelPrefix(double[], java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(double[], int, int, java.util.function.DoubleBinaryOperator);
     method public static void parallelPrefix(int[], java.util.function.IntBinaryOperator);
     method public static void parallelPrefix(int[], int, int, java.util.function.IntBinaryOperator);
-    method public static void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T> void parallelSetAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void parallelSetAll(int[], java.util.function.IntUnaryOperator);
     method public static void parallelSetAll(long[], java.util.function.IntToLongFunction);
     method public static void parallelSetAll(double[], java.util.function.IntToDoubleFunction);
@@ -60739,11 +61105,11 @@ package java.util {
     method public static void parallelSort(float[], int, int);
     method public static void parallelSort(double[]);
     method public static void parallelSort(double[], int, int);
-    method public static void parallelSort(T[]);
-    method public static void parallelSort(T[], int, int);
-    method public static void parallelSort(T[], java.util.Comparator<? super T>);
-    method public static void parallelSort(T[], int, int, java.util.Comparator<? super T>);
-    method public static void setAll(T[], java.util.function.IntFunction<? extends T>);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[]);
+    method public static <T extends java.lang.Comparable<? super T>> void parallelSort(T[], int, int);
+    method public static <T> void parallelSort(T[], java.util.Comparator<? super T>);
+    method public static <T> void parallelSort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> void setAll(T[], java.util.function.IntFunction<? extends T>);
     method public static void setAll(int[], java.util.function.IntUnaryOperator);
     method public static void setAll(long[], java.util.function.IntToLongFunction);
     method public static void setAll(double[], java.util.function.IntToDoubleFunction);
@@ -60763,18 +61129,18 @@ package java.util {
     method public static void sort(double[], int, int);
     method public static void sort(java.lang.Object[]);
     method public static void sort(java.lang.Object[], int, int);
-    method public static void sort(T[], java.util.Comparator<? super T>);
-    method public static void sort(T[], int, int, java.util.Comparator<? super T>);
-    method public static java.util.Spliterator<T> spliterator(T[]);
-    method public static java.util.Spliterator<T> spliterator(T[], int, int);
+    method public static <T> void sort(T[], java.util.Comparator<? super T>);
+    method public static <T> void sort(T[], int, int, java.util.Comparator<? super T>);
+    method public static <T> java.util.Spliterator<T> spliterator(T[]);
+    method public static <T> java.util.Spliterator<T> spliterator(T[], int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[]);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[]);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[]);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int);
-    method public static java.util.stream.Stream<T> stream(T[]);
-    method public static java.util.stream.Stream<T> stream(T[], int, int);
+    method public static <T> java.util.stream.Stream<T> stream(T[]);
+    method public static <T> java.util.stream.Stream<T> stream(T[], int, int);
     method public static java.util.stream.IntStream stream(int[]);
     method public static java.util.stream.IntStream stream(int[], int, int);
     method public static java.util.stream.LongStream stream(long[]);
@@ -60931,7 +61297,7 @@ package java.util {
     field protected long time;
   }
 
-  public abstract interface Collection implements java.lang.Iterable {
+  public abstract interface Collection<E> implements java.lang.Iterable {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -60949,86 +61315,86 @@ package java.util {
     method public abstract int size();
     method public default java.util.stream.Stream<E> stream();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class Collections {
-    method public static boolean addAll(java.util.Collection<? super T>, T...);
-    method public static java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
-    method public static int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
-    method public static int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
-    method public static java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
-    method public static java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
-    method public static java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
-    method public static java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
-    method public static java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
-    method public static void copy(java.util.List<? super T>, java.util.List<? extends T>);
+    method public static <T> boolean addAll(java.util.Collection<? super T>, T...);
+    method public static <T> java.util.Queue<T> asLifoQueue(java.util.Deque<T>);
+    method public static <T> int binarySearch(java.util.List<? extends java.lang.Comparable<? super T>>, T);
+    method public static <T> int binarySearch(java.util.List<? extends T>, T, java.util.Comparator<? super T>);
+    method public static <E> java.util.Collection<E> checkedCollection(java.util.Collection<E>, java.lang.Class<E>);
+    method public static <E> java.util.List<E> checkedList(java.util.List<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.Map<K, V> checkedMap(java.util.Map<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.Set<E> checkedSet(java.util.Set<E>, java.lang.Class<E>);
+    method public static <K, V> java.util.SortedMap<K, V> checkedSortedMap(java.util.SortedMap<K, V>, java.lang.Class<K>, java.lang.Class<V>);
+    method public static <E> java.util.SortedSet<E> checkedSortedSet(java.util.SortedSet<E>, java.lang.Class<E>);
+    method public static <T> void copy(java.util.List<? super T>, java.util.List<? extends T>);
     method public static boolean disjoint(java.util.Collection<?>, java.util.Collection<?>);
-    method public static java.util.Enumeration<T> emptyEnumeration();
-    method public static java.util.Iterator<T> emptyIterator();
-    method public static final java.util.List<T> emptyList();
-    method public static java.util.ListIterator<T> emptyListIterator();
-    method public static final java.util.Map<K, V> emptyMap();
-    method public static final java.util.Set<T> emptySet();
-    method public static java.util.Enumeration<T> enumeration(java.util.Collection<T>);
-    method public static void fill(java.util.List<? super T>, T);
+    method public static <T> java.util.Enumeration<T> emptyEnumeration();
+    method public static <T> java.util.Iterator<T> emptyIterator();
+    method public static final <T> java.util.List<T> emptyList();
+    method public static <T> java.util.ListIterator<T> emptyListIterator();
+    method public static final <K, V> java.util.Map<K, V> emptyMap();
+    method public static final <T> java.util.Set<T> emptySet();
+    method public static <T> java.util.Enumeration<T> enumeration(java.util.Collection<T>);
+    method public static <T> void fill(java.util.List<? super T>, T);
     method public static int frequency(java.util.Collection<?>, java.lang.Object);
     method public static int indexOfSubList(java.util.List<?>, java.util.List<?>);
     method public static int lastIndexOfSubList(java.util.List<?>, java.util.List<?>);
-    method public static java.util.ArrayList<T> list(java.util.Enumeration<T>);
-    method public static T max(java.util.Collection<? extends T>);
-    method public static T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static T min(java.util.Collection<? extends T>);
-    method public static T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
-    method public static java.util.List<T> nCopies(int, T);
-    method public static java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
-    method public static boolean replaceAll(java.util.List<T>, T, T);
+    method public static <T> java.util.ArrayList<T> list(java.util.Enumeration<T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T max(java.util.Collection<? extends T>);
+    method public static <T> T max(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Object & java.lang.Comparable<? super T>> T min(java.util.Collection<? extends T>);
+    method public static <T> T min(java.util.Collection<? extends T>, java.util.Comparator<? super T>);
+    method public static <T> java.util.List<T> nCopies(int, T);
+    method public static <E> java.util.Set<E> newSetFromMap(java.util.Map<E, java.lang.Boolean>);
+    method public static <T> boolean replaceAll(java.util.List<T>, T, T);
     method public static void reverse(java.util.List<?>);
-    method public static java.util.Comparator<T> reverseOrder();
-    method public static java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
+    method public static <T> java.util.Comparator<T> reverseOrder();
+    method public static <T> java.util.Comparator<T> reverseOrder(java.util.Comparator<T>);
     method public static void rotate(java.util.List<?>, int);
     method public static void shuffle(java.util.List<?>);
     method public static void shuffle(java.util.List<?>, java.util.Random);
-    method public static java.util.Set<E> singleton(E);
-    method public static java.util.List<E> singletonList(E);
-    method public static java.util.Map<K, V> singletonMap(K, V);
-    method public static void sort(java.util.List<T>);
-    method public static void sort(java.util.List<T>, java.util.Comparator<? super T>);
+    method public static <E> java.util.Set<E> singleton(E);
+    method public static <E> java.util.List<E> singletonList(E);
+    method public static <K, V> java.util.Map<K, V> singletonMap(K, V);
+    method public static <T extends java.lang.Comparable<? super T>> void sort(java.util.List<T>);
+    method public static <T> void sort(java.util.List<T>, java.util.Comparator<? super T>);
     method public static void swap(java.util.List<?>, int, int);
-    method public static java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
-    method public static java.util.List<T> synchronizedList(java.util.List<T>);
-    method public static java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
-    method public static java.util.Set<T> synchronizedSet(java.util.Set<T>);
-    method public static java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
-    method public static java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
-    method public static java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
-    method public static java.util.List<T> unmodifiableList(java.util.List<? extends T>);
-    method public static java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
-    method public static java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
-    method public static java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
-    method public static java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> synchronizedCollection(java.util.Collection<T>);
+    method public static <T> java.util.List<T> synchronizedList(java.util.List<T>);
+    method public static <K, V> java.util.Map<K, V> synchronizedMap(java.util.Map<K, V>);
+    method public static <T> java.util.Set<T> synchronizedSet(java.util.Set<T>);
+    method public static <K, V> java.util.SortedMap<K, V> synchronizedSortedMap(java.util.SortedMap<K, V>);
+    method public static <T> java.util.SortedSet<T> synchronizedSortedSet(java.util.SortedSet<T>);
+    method public static <T> java.util.Collection<T> unmodifiableCollection(java.util.Collection<? extends T>);
+    method public static <T> java.util.List<T> unmodifiableList(java.util.List<? extends T>);
+    method public static <K, V> java.util.Map<K, V> unmodifiableMap(java.util.Map<? extends K, ? extends V>);
+    method public static <T> java.util.Set<T> unmodifiableSet(java.util.Set<? extends T>);
+    method public static <K, V> java.util.SortedMap<K, V> unmodifiableSortedMap(java.util.SortedMap<K, ? extends V>);
+    method public static <T> java.util.SortedSet<T> unmodifiableSortedSet(java.util.SortedSet<T>);
     field public static final java.util.List EMPTY_LIST;
     field public static final java.util.Map EMPTY_MAP;
     field public static final java.util.Set EMPTY_SET;
   }
 
-  public abstract interface Comparator {
+  public abstract interface Comparator<T> {
     method public abstract int compare(T, T);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public static java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, U> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public static <T, U extends java.lang.Comparable<? super U>> java.util.Comparator<T> comparing(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Comparator<T> comparingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.Comparator<T> comparingLong(java.util.function.ToLongFunction<? super T>);
     method public abstract boolean equals(java.lang.Object);
-    method public static java.util.Comparator<T> naturalOrder();
-    method public static java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
-    method public static java.util.Comparator<T> reverseOrder();
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> naturalOrder();
+    method public static <T> java.util.Comparator<T> nullsFirst(java.util.Comparator<? super T>);
+    method public static <T> java.util.Comparator<T> nullsLast(java.util.Comparator<? super T>);
+    method public static <T extends java.lang.Comparable<? super T>> java.util.Comparator<T> reverseOrder();
     method public default java.util.Comparator<T> reversed();
     method public default java.util.Comparator<T> thenComparing(java.util.Comparator<? super T>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
-    method public default java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
+    method public default <U> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>, java.util.Comparator<? super U>);
+    method public default <U extends java.lang.Comparable<? super U>> java.util.Comparator<T> thenComparing(java.util.function.Function<? super T, ? extends U>);
     method public default java.util.Comparator<T> thenComparingDouble(java.util.function.ToDoubleFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingInt(java.util.function.ToIntFunction<? super T>);
     method public default java.util.Comparator<T> thenComparingLong(java.util.function.ToLongFunction<? super T>);
@@ -61087,7 +61453,7 @@ package java.util {
     method public deprecated java.lang.String toLocaleString();
   }
 
-  public abstract interface Deque implements java.util.Queue {
+  public abstract interface Deque<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -61117,7 +61483,7 @@ package java.util {
     method public abstract int size();
   }
 
-  public abstract class Dictionary {
+  public abstract class Dictionary<K, V> {
     ctor public Dictionary();
     method public abstract java.util.Enumeration<V> elements();
     method public abstract V get(java.lang.Object);
@@ -61148,7 +61514,7 @@ package java.util {
     ctor public EmptyStackException();
   }
 
-  public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
+  public class EnumMap<K extends java.lang.Enum<K>, V> extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable {
     ctor public EnumMap(java.lang.Class<K>);
     ctor public EnumMap(java.util.EnumMap<K, ? extends V>);
     ctor public EnumMap(java.util.Map<K, ? extends V>);
@@ -61156,23 +61522,23 @@ package java.util {
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
   }
 
-  public abstract class EnumSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
-    method public static java.util.EnumSet<E> allOf(java.lang.Class<E>);
+  public abstract class EnumSet<E extends java.lang.Enum<E>> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> allOf(java.lang.Class<E>);
     method public java.util.EnumSet<E> clone();
-    method public static java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
-    method public static java.util.EnumSet<E> copyOf(java.util.Collection<E>);
-    method public static java.util.EnumSet<E> noneOf(java.lang.Class<E>);
-    method public static java.util.EnumSet<E> of(E);
-    method public static java.util.EnumSet<E> of(E, E);
-    method public static java.util.EnumSet<E> of(E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E, E, E, E);
-    method public static java.util.EnumSet<E> of(E, E...);
-    method public static java.util.EnumSet<E> range(E, E);
-  }
-
-  public abstract interface Enumeration {
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> complementOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.EnumSet<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> copyOf(java.util.Collection<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> noneOf(java.lang.Class<E>);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E, E, E, E);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> of(E, E...);
+    method public static <E extends java.lang.Enum<E>> java.util.EnumSet<E> range(E, E);
+  }
+
+  public abstract interface Enumeration<E> {
     method public abstract boolean hasMoreElements();
     method public abstract E nextElement();
   }
@@ -61180,7 +61546,7 @@ package java.util {
   public abstract interface EventListener {
   }
 
-  public abstract class EventListenerProxy implements java.util.EventListener {
+  public abstract class EventListenerProxy<T extends java.util.EventListener> implements java.util.EventListener {
     ctor public EventListenerProxy(T);
     method public T getListener();
   }
@@ -61266,7 +61632,7 @@ package java.util {
     field public static final int BC = 0; // 0x0
   }
 
-  public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class HashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public HashMap(int, float);
     ctor public HashMap(int);
     ctor public HashMap();
@@ -61278,7 +61644,7 @@ package java.util {
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
   }
 
-  public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class HashSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public HashSet();
     ctor public HashSet(java.util.Collection<? extends E>);
     ctor public HashSet(int, float);
@@ -61289,7 +61655,7 @@ package java.util {
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class Hashtable<K, V> extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public Hashtable(int, float);
     ctor public Hashtable(int);
     ctor public Hashtable();
@@ -61324,7 +61690,7 @@ package java.util {
     method public java.util.Collection<V> values();
   }
 
-  public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
+  public class IdentityHashMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable {
     ctor public IdentityHashMap();
     ctor public IdentityHashMap(int);
     ctor public IdentityHashMap(java.util.Map<? extends K, ? extends V>);
@@ -61391,14 +61757,14 @@ package java.util {
     ctor public InvalidPropertiesFormatException(java.lang.String);
   }
 
-  public abstract interface Iterator {
+  public abstract interface Iterator<E> {
     method public default void forEachRemaining(java.util.function.Consumer<? super E>);
     method public abstract boolean hasNext();
     method public abstract E next();
     method public default void remove();
   }
 
-  public class LinkedHashMap extends java.util.HashMap implements java.util.Map {
+  public class LinkedHashMap<K, V> extends java.util.HashMap implements java.util.Map {
     ctor public LinkedHashMap(int, float);
     ctor public LinkedHashMap(int);
     ctor public LinkedHashMap();
@@ -61407,14 +61773,14 @@ package java.util {
     method protected boolean removeEldestEntry(java.util.Map.Entry<K, V>);
   }
 
-  public class LinkedHashSet extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
+  public class LinkedHashSet<E> extends java.util.HashSet implements java.lang.Cloneable java.io.Serializable java.util.Set {
     ctor public LinkedHashSet(int, float);
     ctor public LinkedHashSet(int);
     ctor public LinkedHashSet();
     ctor public LinkedHashSet(java.util.Collection<? extends E>);
   }
 
-  public class LinkedList extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
+  public class LinkedList<E> extends java.util.AbstractSequentialList implements java.lang.Cloneable java.util.Deque java.util.List java.io.Serializable {
     ctor public LinkedList();
     ctor public LinkedList(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -61445,7 +61811,7 @@ package java.util {
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface List implements java.util.Collection {
+  public abstract interface List<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract void add(int, E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
@@ -61472,10 +61838,10 @@ package java.util {
     method public default void sort(java.util.Comparator<? super E>);
     method public abstract java.util.List<E> subList(int, int);
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
-  public abstract interface ListIterator implements java.util.Iterator {
+  public abstract interface ListIterator<E> implements java.util.Iterator {
     method public abstract void add(E);
     method public abstract boolean hasNext();
     method public abstract boolean hasPrevious();
@@ -61592,7 +61958,7 @@ package java.util {
     method public final long getSum();
   }
 
-  public abstract interface Map {
+  public abstract interface Map<K, V> {
     method public abstract void clear();
     method public default V compute(K, java.util.function.BiFunction<? super K, ? super V, ? extends V>);
     method public default V computeIfAbsent(K, java.util.function.Function<? super K, ? extends V>);
@@ -61620,11 +61986,11 @@ package java.util {
     method public abstract java.util.Collection<V> values();
   }
 
-  public static abstract interface Map.Entry {
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
-    method public static java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
+  public static abstract interface Map.Entry<K, V> {
+    method public static <K extends java.lang.Comparable<? super K>, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByKey(java.util.Comparator<? super K>);
+    method public static <K, V extends java.lang.Comparable<? super V>> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue();
+    method public static <K, V> java.util.Comparator<java.util.Map.Entry<K, V>> comparingByValue(java.util.Comparator<? super V>);
     method public abstract boolean equals(java.lang.Object);
     method public abstract K getKey();
     method public abstract V getValue();
@@ -61648,7 +62014,7 @@ package java.util {
     method public java.lang.String getKey();
   }
 
-  public abstract interface NavigableMap implements java.util.SortedMap {
+  public abstract interface NavigableMap<K, V> implements java.util.SortedMap {
     method public abstract java.util.Map.Entry<K, V> ceilingEntry(K);
     method public abstract K ceilingKey(K);
     method public abstract java.util.NavigableSet<K> descendingKeySet();
@@ -61672,7 +62038,7 @@ package java.util {
     method public abstract java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public abstract interface NavigableSet implements java.util.SortedSet {
+  public abstract interface NavigableSet<E> implements java.util.SortedSet {
     method public abstract E ceiling(E);
     method public abstract java.util.Iterator<E> descendingIterator();
     method public abstract java.util.NavigableSet<E> descendingSet();
@@ -61696,16 +62062,16 @@ package java.util {
   }
 
   public final class Objects {
-    method public static int compare(T, T, java.util.Comparator<? super T>);
+    method public static <T> int compare(T, T, java.util.Comparator<? super T>);
     method public static boolean deepEquals(java.lang.Object, java.lang.Object);
     method public static boolean equals(java.lang.Object, java.lang.Object);
     method public static int hash(java.lang.Object...);
     method public static int hashCode(java.lang.Object);
     method public static boolean isNull(java.lang.Object);
     method public static boolean nonNull(java.lang.Object);
-    method public static T requireNonNull(T);
-    method public static T requireNonNull(T, java.lang.String);
-    method public static T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
+    method public static <T> T requireNonNull(T);
+    method public static <T> T requireNonNull(T, java.lang.String);
+    method public static <T> T requireNonNull(T, java.util.function.Supplier<java.lang.String>);
     method public static java.lang.String toString(java.lang.Object);
     method public static java.lang.String toString(java.lang.Object, java.lang.String);
   }
@@ -61727,19 +62093,19 @@ package java.util {
     method public abstract void update(java.util.Observable, java.lang.Object);
   }
 
-  public final class Optional {
-    method public static java.util.Optional<T> empty();
+  public final class Optional<T> {
+    method public static <T> java.util.Optional<T> empty();
     method public java.util.Optional<T> filter(java.util.function.Predicate<? super T>);
-    method public java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
+    method public <U> java.util.Optional<U> flatMap(java.util.function.Function<? super T, java.util.Optional<U>>);
     method public T get();
     method public void ifPresent(java.util.function.Consumer<? super T>);
     method public boolean isPresent();
-    method public java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.Optional<T> of(T);
-    method public static java.util.Optional<T> ofNullable(T);
+    method public <U> java.util.Optional<U> map(java.util.function.Function<? super T, ? extends U>);
+    method public static <T> java.util.Optional<T> of(T);
+    method public static <T> java.util.Optional<T> ofNullable(T);
     method public T orElse(T);
     method public T orElseGet(java.util.function.Supplier<? extends T>);
-    method public T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> T orElseThrow(java.util.function.Supplier<? extends X>) throws java.lang.Throwable;
   }
 
   public final class OptionalDouble {
@@ -61750,7 +62116,7 @@ package java.util {
     method public static java.util.OptionalDouble of(double);
     method public double orElse(double);
     method public double orElseGet(java.util.function.DoubleSupplier);
-    method public double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> double orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalInt {
@@ -61761,7 +62127,7 @@ package java.util {
     method public static java.util.OptionalInt of(int);
     method public int orElse(int);
     method public int orElseGet(java.util.function.IntSupplier);
-    method public int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> int orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
   public final class OptionalLong {
@@ -61772,10 +62138,10 @@ package java.util {
     method public static java.util.OptionalLong of(long);
     method public long orElse(long);
     method public long orElseGet(java.util.function.LongSupplier);
-    method public long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
+    method public <X extends java.lang.Throwable> long orElseThrow(java.util.function.Supplier<X>) throws java.lang.Throwable;
   }
 
-  public abstract interface PrimitiveIterator implements java.util.Iterator {
+  public abstract interface PrimitiveIterator<T, T_CONS> implements java.util.Iterator {
     method public abstract void forEachRemaining(T_CONS);
   }
 
@@ -61800,7 +62166,7 @@ package java.util {
     method public abstract long nextLong();
   }
 
-  public class PriorityQueue extends java.util.AbstractQueue implements java.io.Serializable {
+  public class PriorityQueue<E> extends java.util.AbstractQueue implements java.io.Serializable {
     ctor public PriorityQueue();
     ctor public PriorityQueue(int);
     ctor public PriorityQueue(java.util.Comparator<? super E>);
@@ -61849,7 +62215,7 @@ package java.util {
     method public java.lang.Object handleGetObject(java.lang.String);
   }
 
-  public abstract interface Queue implements java.util.Collection {
+  public abstract interface Queue<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract E element();
     method public abstract boolean offer(E);
@@ -61999,15 +62365,15 @@ package java.util {
     ctor public ServiceConfigurationError(java.lang.String, java.lang.Throwable);
   }
 
-  public final class ServiceLoader implements java.lang.Iterable {
+  public final class ServiceLoader<S> implements java.lang.Iterable {
     method public java.util.Iterator<S> iterator();
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
-    method public static java.util.ServiceLoader<S> load(java.lang.Class<S>);
-    method public static java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>, java.lang.ClassLoader);
+    method public static <S> java.util.ServiceLoader<S> load(java.lang.Class<S>);
+    method public static <S> java.util.ServiceLoader<S> loadInstalled(java.lang.Class<S>);
     method public void reload();
   }
 
-  public abstract interface Set implements java.util.Collection {
+  public abstract interface Set<E> implements java.util.Collection {
     method public abstract boolean add(E);
     method public abstract boolean addAll(java.util.Collection<? extends E>);
     method public abstract void clear();
@@ -62022,7 +62388,7 @@ package java.util {
     method public abstract boolean retainAll(java.util.Collection<?>);
     method public abstract int size();
     method public abstract java.lang.Object[] toArray();
-    method public abstract T[] toArray(T[]);
+    method public abstract <T> T[] toArray(T[]);
   }
 
   public class SimpleTimeZone extends java.util.TimeZone {
@@ -62048,7 +62414,7 @@ package java.util {
     field public static final int WALL_TIME = 0; // 0x0
   }
 
-  public abstract interface SortedMap implements java.util.Map {
+  public abstract interface SortedMap<K, V> implements java.util.Map {
     method public abstract java.util.Comparator<? super K> comparator();
     method public abstract java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public abstract K firstKey();
@@ -62060,7 +62426,7 @@ package java.util {
     method public abstract java.util.Collection<V> values();
   }
 
-  public abstract interface SortedSet implements java.util.Set {
+  public abstract interface SortedSet<E> implements java.util.Set {
     method public abstract java.util.Comparator<? super E> comparator();
     method public abstract E first();
     method public abstract java.util.SortedSet<E> headSet(E);
@@ -62069,7 +62435,7 @@ package java.util {
     method public abstract java.util.SortedSet<E> tailSet(E);
   }
 
-  public abstract interface Spliterator {
+  public abstract interface Spliterator<T> {
     method public abstract int characteristics();
     method public abstract long estimateSize();
     method public default void forEachRemaining(java.util.function.Consumer<? super T>);
@@ -62112,7 +62478,7 @@ package java.util {
     method public abstract java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract interface Spliterator.OfPrimitive implements java.util.Spliterator {
+  public static abstract interface Spliterator.OfPrimitive<T, T_CONS, T_SPLITR extends java.util.Spliterator.OfPrimitive<T, T_CONS, T_SPLITR>> implements java.util.Spliterator {
     method public default void forEachRemaining(T_CONS);
     method public abstract boolean tryAdvance(T_CONS);
     method public abstract T_SPLITR trySplit();
@@ -62122,25 +62488,25 @@ package java.util {
     method public static java.util.Spliterator.OfDouble emptyDoubleSpliterator();
     method public static java.util.Spliterator.OfInt emptyIntSpliterator();
     method public static java.util.Spliterator.OfLong emptyLongSpliterator();
-    method public static java.util.Spliterator<T> emptySpliterator();
-    method public static java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
+    method public static <T> java.util.Spliterator<T> emptySpliterator();
+    method public static <T> java.util.Iterator<T> iterator(java.util.Spliterator<? extends T>);
     method public static java.util.PrimitiveIterator.OfInt iterator(java.util.Spliterator.OfInt);
     method public static java.util.PrimitiveIterator.OfLong iterator(java.util.Spliterator.OfLong);
     method public static java.util.PrimitiveIterator.OfDouble iterator(java.util.Spliterator.OfDouble);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int);
-    method public static java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.lang.Object[], int, int, int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int);
     method public static java.util.Spliterator.OfInt spliterator(int[], int, int, int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int);
     method public static java.util.Spliterator.OfLong spliterator(long[], int, int, int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int);
     method public static java.util.Spliterator.OfDouble spliterator(double[], int, int, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
-    method public static java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Collection<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliterator(java.util.Iterator<? extends T>, long, int);
     method public static java.util.Spliterator.OfInt spliterator(java.util.PrimitiveIterator.OfInt, long, int);
     method public static java.util.Spliterator.OfLong spliterator(java.util.PrimitiveIterator.OfLong, long, int);
     method public static java.util.Spliterator.OfDouble spliterator(java.util.PrimitiveIterator.OfDouble, long, int);
-    method public static java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
+    method public static <T> java.util.Spliterator<T> spliteratorUnknownSize(java.util.Iterator<? extends T>, int);
     method public static java.util.Spliterator.OfInt spliteratorUnknownSize(java.util.PrimitiveIterator.OfInt, int);
     method public static java.util.Spliterator.OfLong spliteratorUnknownSize(java.util.PrimitiveIterator.OfLong, int);
     method public static java.util.Spliterator.OfDouble spliteratorUnknownSize(java.util.PrimitiveIterator.OfDouble, int);
@@ -62167,7 +62533,7 @@ package java.util {
     method public java.util.Spliterator.OfLong trySplit();
   }
 
-  public static abstract class Spliterators.AbstractSpliterator implements java.util.Spliterator {
+  public static abstract class Spliterators.AbstractSpliterator<T> implements java.util.Spliterator {
     ctor protected Spliterators.AbstractSpliterator(long, int);
     method public int characteristics();
     method public long estimateSize();
@@ -62202,7 +62568,7 @@ package java.util {
     method public java.util.SplittableRandom split();
   }
 
-  public class Stack extends java.util.Vector {
+  public class Stack<E> extends java.util.Vector {
     ctor public Stack();
     method public boolean empty();
     method public synchronized E peek();
@@ -62286,7 +62652,7 @@ package java.util {
     ctor public TooManyListenersException(java.lang.String);
   }
 
-  public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
+  public class TreeMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable {
     ctor public TreeMap();
     ctor public TreeMap(java.util.Comparator<? super K>);
     ctor public TreeMap(java.util.Map<? extends K, ? extends V>);
@@ -62323,7 +62689,7 @@ package java.util {
     method public java.util.SortedMap<K, V> tailMap(K);
   }
 
-  public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class TreeSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public TreeSet();
     ctor public TreeSet(java.util.Comparator<? super E>);
     ctor public TreeSet(java.util.Collection<? extends E>);
@@ -62376,7 +62742,7 @@ package java.util {
     method public java.lang.String getFlags();
   }
 
-  public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class Vector<E> extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public Vector(int, int);
     ctor public Vector(int);
     ctor public Vector();
@@ -62411,7 +62777,7 @@ package java.util {
     field protected java.lang.Object[] elementData;
   }
 
-  public class WeakHashMap extends java.util.AbstractMap implements java.util.Map {
+  public class WeakHashMap<K, V> extends java.util.AbstractMap implements java.util.Map {
     ctor public WeakHashMap(int, float);
     ctor public WeakHashMap(int);
     ctor public WeakHashMap();
@@ -62427,18 +62793,18 @@ package java.util.concurrent {
 
   public abstract class AbstractExecutorService implements java.util.concurrent.ExecutorService {
     ctor public AbstractExecutorService();
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
-    method protected java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.lang.Runnable, T);
+    method protected <T> java.util.concurrent.RunnableFuture<T> newTaskFor(java.util.concurrent.Callable<T>);
     method public java.util.concurrent.Future<?> submit(java.lang.Runnable);
-    method public java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
-    method public java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
   }
 
-  public class ArrayBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class ArrayBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public ArrayBlockingQueue(int);
     ctor public ArrayBlockingQueue(int, boolean);
     ctor public ArrayBlockingQueue(int, boolean, java.util.Collection<? extends E>);
@@ -62457,7 +62823,7 @@ package java.util.concurrent {
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingDeque implements java.util.concurrent.BlockingQueue java.util.Deque {
+  public abstract interface BlockingDeque<E> implements java.util.concurrent.BlockingQueue java.util.Deque {
     method public abstract boolean add(E);
     method public abstract void addFirst(E);
     method public abstract void addLast(E);
@@ -62489,7 +62855,7 @@ package java.util.concurrent {
     method public abstract E takeLast() throws java.lang.InterruptedException;
   }
 
-  public abstract interface BlockingQueue implements java.util.Queue {
+  public abstract interface BlockingQueue<E> implements java.util.Queue {
     method public abstract boolean add(E);
     method public abstract boolean contains(java.lang.Object);
     method public abstract int drainTo(java.util.Collection<? super E>);
@@ -62508,7 +62874,7 @@ package java.util.concurrent {
     ctor public BrokenBarrierException(java.lang.String);
   }
 
-  public abstract interface Callable {
+  public abstract interface Callable<V> {
     method public abstract V call() throws java.lang.Exception;
   }
 
@@ -62517,28 +62883,28 @@ package java.util.concurrent {
     ctor public CancellationException(java.lang.String);
   }
 
-  public class CompletableFuture implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
+  public class CompletableFuture<T> implements java.util.concurrent.CompletionStage java.util.concurrent.Future {
     ctor public CompletableFuture();
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> allOf(java.util.concurrent.CompletableFuture<?>...);
     method public static java.util.concurrent.CompletableFuture<java.lang.Object> anyOf(java.util.concurrent.CompletableFuture<?>...);
-    method public java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public boolean cancel(boolean);
     method public boolean complete(T);
     method public boolean completeExceptionally(java.lang.Throwable);
-    method public static java.util.concurrent.CompletableFuture<U> completedFuture(U);
+    method public static <U> java.util.concurrent.CompletableFuture<U> completedFuture(U);
     method public java.util.concurrent.CompletableFuture<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
     method public T get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public T get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public T getNow(T);
     method public int getNumberOfDependents();
-    method public java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public boolean isCancelled();
     method public boolean isCompletedExceptionally();
     method public boolean isDone();
@@ -62553,23 +62919,23 @@ package java.util.concurrent {
     method public java.util.concurrent.CompletableFuture<java.lang.Void> runAfterEitherAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable);
     method public static java.util.concurrent.CompletableFuture<java.lang.Void> runAsync(java.lang.Runnable, java.util.concurrent.Executor);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
-    method public static java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>);
+    method public static <U> java.util.concurrent.CompletableFuture<U> supplyAsync(java.util.function.Supplier<U>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public <U> java.util.concurrent.CompletableFuture<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public <U, V> java.util.concurrent.CompletableFuture<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public <U> java.util.concurrent.CompletableFuture<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRun(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public java.util.concurrent.CompletableFuture<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -62589,7 +62955,7 @@ package java.util.concurrent {
     ctor public CompletionException(java.lang.Throwable);
   }
 
-  public abstract interface CompletionService {
+  public abstract interface CompletionService<V> {
     method public abstract java.util.concurrent.Future<V> poll();
     method public abstract java.util.concurrent.Future<V> poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
     method public abstract java.util.concurrent.Future<V> submit(java.util.concurrent.Callable<V>);
@@ -62597,17 +62963,17 @@ package java.util.concurrent {
     method public abstract java.util.concurrent.Future<V> take() throws java.lang.InterruptedException;
   }
 
-  public abstract interface CompletionStage {
+  public abstract interface CompletionStage<T> {
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> acceptEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
-    method public abstract java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEither(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> applyToEitherAsync(java.util.concurrent.CompletionStage<? extends T>, java.util.function.Function<? super T, U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<T> exceptionally(java.util.function.Function<java.lang.Throwable, ? extends T>);
-    method public abstract java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handle(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> handleAsync(java.util.function.BiFunction<? super T, java.lang.Throwable, ? extends U>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBoth(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> runAfterBothAsync(java.util.concurrent.CompletionStage<?>, java.lang.Runnable, java.util.concurrent.Executor);
@@ -62617,18 +62983,18 @@ package java.util.concurrent {
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAccept(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptAsync(java.util.function.Consumer<? super T>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
-    method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
-    method public abstract java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
-    method public abstract java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
-    method public abstract java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBoth(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<java.lang.Void> thenAcceptBothAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiConsumer<? super T, ? super U>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApply(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenApplyAsync(java.util.function.Function<? super T, ? extends U>, java.util.concurrent.Executor);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombine(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>);
+    method public abstract <U, V> java.util.concurrent.CompletionStage<V> thenCombineAsync(java.util.concurrent.CompletionStage<? extends U>, java.util.function.BiFunction<? super T, ? super U, ? extends V>, java.util.concurrent.Executor);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenCompose(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>);
+    method public abstract <U> java.util.concurrent.CompletionStage<U> thenComposeAsync(java.util.function.Function<? super T, ? extends java.util.concurrent.CompletionStage<U>>, java.util.concurrent.Executor);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRun(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable);
     method public abstract java.util.concurrent.CompletionStage<java.lang.Void> thenRunAsync(java.lang.Runnable, java.util.concurrent.Executor);
@@ -62638,7 +63004,7 @@ package java.util.concurrent {
     method public abstract java.util.concurrent.CompletionStage<T> whenCompleteAsync(java.util.function.BiConsumer<? super T, ? super java.lang.Throwable>, java.util.concurrent.Executor);
   }
 
-  public class ConcurrentHashMap extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
+  public class ConcurrentHashMap<K, V> extends java.util.AbstractMap implements java.util.concurrent.ConcurrentMap java.io.Serializable {
     ctor public ConcurrentHashMap();
     ctor public ConcurrentHashMap(int);
     ctor public ConcurrentHashMap(java.util.Map<? extends K, ? extends V>);
@@ -62652,29 +63018,29 @@ package java.util.concurrent {
     method public java.util.Set<java.util.Map.Entry<K, V>> entrySet();
     method public void forEach(java.util.function.BiConsumer<? super K, ? super V>);
     method public void forEach(long, java.util.function.BiConsumer<? super K, ? super V>);
-    method public void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEach(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachEntry(long, java.util.function.Consumer<? super java.util.Map.Entry<K, V>>);
-    method public void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachEntry(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachKey(long, java.util.function.Consumer<? super K>);
-    method public void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachKey(long, java.util.function.Function<? super K, ? extends U>, java.util.function.Consumer<? super U>);
     method public void forEachValue(long, java.util.function.Consumer<? super V>);
-    method public void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
+    method public <U> void forEachValue(long, java.util.function.Function<? super V, ? extends U>, java.util.function.Consumer<? super U>);
     method public V getOrDefault(java.lang.Object, V);
     method public java.util.concurrent.ConcurrentHashMap.KeySetView<K, V> keySet(V);
     method public java.util.Enumeration<K> keys();
     method public long mappingCount();
     method public V merge(K, V, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
-    method public static java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet();
+    method public static <K> java.util.concurrent.ConcurrentHashMap.KeySetView<K, java.lang.Boolean> newKeySet(int);
     method public V putIfAbsent(K, V);
-    method public U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduce(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public java.util.Map.Entry<K, V> reduceEntries(long, java.util.function.BiFunction<java.util.Map.Entry<K, V>, java.util.Map.Entry<K, V>, ? extends java.util.Map.Entry<K, V>>);
-    method public U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceEntriesToDouble(long, java.util.function.ToDoubleFunction<java.util.Map.Entry<K, V>>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceEntriesToInt(long, java.util.function.ToIntFunction<java.util.Map.Entry<K, V>>, int, java.util.function.IntBinaryOperator);
     method public long reduceEntriesToLong(long, java.util.function.ToLongFunction<java.util.Map.Entry<K, V>>, long, java.util.function.LongBinaryOperator);
     method public K reduceKeys(long, java.util.function.BiFunction<? super K, ? super K, ? extends K>);
-    method public U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceKeys(long, java.util.function.Function<? super K, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceKeysToDouble(long, java.util.function.ToDoubleFunction<? super K>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceKeysToInt(long, java.util.function.ToIntFunction<? super K>, int, java.util.function.IntBinaryOperator);
     method public long reduceKeysToLong(long, java.util.function.ToLongFunction<? super K>, long, java.util.function.LongBinaryOperator);
@@ -62682,7 +63048,7 @@ package java.util.concurrent {
     method public int reduceToInt(long, java.util.function.ToIntBiFunction<? super K, ? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceToLong(long, java.util.function.ToLongBiFunction<? super K, ? super V>, long, java.util.function.LongBinaryOperator);
     method public V reduceValues(long, java.util.function.BiFunction<? super V, ? super V, ? extends V>);
-    method public U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
+    method public <U> U reduceValues(long, java.util.function.Function<? super V, ? extends U>, java.util.function.BiFunction<? super U, ? super U, ? extends U>);
     method public double reduceValuesToDouble(long, java.util.function.ToDoubleFunction<? super V>, double, java.util.function.DoubleBinaryOperator);
     method public int reduceValuesToInt(long, java.util.function.ToIntFunction<? super V>, int, java.util.function.IntBinaryOperator);
     method public long reduceValuesToLong(long, java.util.function.ToLongFunction<? super V>, long, java.util.function.LongBinaryOperator);
@@ -62690,13 +63056,13 @@ package java.util.concurrent {
     method public boolean replace(K, V, V);
     method public V replace(K, V);
     method public void replaceAll(java.util.function.BiFunction<? super K, ? super V, ? extends V>);
-    method public U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
-    method public U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
-    method public U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
-    method public U searchValues(long, java.util.function.Function<? super V, ? extends U>);
+    method public <U> U search(long, java.util.function.BiFunction<? super K, ? super V, ? extends U>);
+    method public <U> U searchEntries(long, java.util.function.Function<java.util.Map.Entry<K, V>, ? extends U>);
+    method public <U> U searchKeys(long, java.util.function.Function<? super K, ? extends U>);
+    method public <U> U searchValues(long, java.util.function.Function<? super V, ? extends U>);
   }
 
-   static abstract class ConcurrentHashMap.CollectionView implements java.util.Collection java.io.Serializable {
+   static abstract class ConcurrentHashMap.CollectionView<K, V, E> implements java.util.Collection java.io.Serializable {
     method public final void clear();
     method public abstract boolean contains(java.lang.Object);
     method public final boolean containsAll(java.util.Collection<?>);
@@ -62708,11 +63074,11 @@ package java.util.concurrent {
     method public final boolean retainAll(java.util.Collection<?>);
     method public final int size();
     method public final java.lang.Object[] toArray();
-    method public final T[] toArray(T[]);
+    method public final <T> T[] toArray(T[]);
     method public final java.lang.String toString();
   }
 
-  public static class ConcurrentHashMap.KeySetView extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
+  public static class ConcurrentHashMap.KeySetView<K, V> extends java.util.concurrent.ConcurrentHashMap.CollectionView implements java.io.Serializable java.util.Set {
     method public boolean add(K);
     method public boolean addAll(java.util.Collection<? extends K>);
     method public boolean contains(java.lang.Object);
@@ -62723,7 +63089,7 @@ package java.util.concurrent {
     method public java.util.Spliterator<K> spliterator();
   }
 
-  public class ConcurrentLinkedDeque extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
+  public class ConcurrentLinkedDeque<E> extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
     ctor public ConcurrentLinkedDeque();
     ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
     method public void addFirst(E);
@@ -62753,7 +63119,7 @@ package java.util.concurrent {
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public class ConcurrentLinkedQueue extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
+  public class ConcurrentLinkedQueue<E> extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
     ctor public ConcurrentLinkedQueue();
     ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
     method public java.util.Iterator<E> iterator();
@@ -62764,14 +63130,14 @@ package java.util.concurrent {
     method public java.util.Spliterator<E> spliterator();
   }
 
-  public abstract interface ConcurrentMap implements java.util.Map {
+  public abstract interface ConcurrentMap<K, V> implements java.util.Map {
     method public abstract V putIfAbsent(K, V);
     method public abstract boolean remove(java.lang.Object, java.lang.Object);
     method public abstract boolean replace(K, V, V);
     method public abstract V replace(K, V);
   }
 
-  public abstract interface ConcurrentNavigableMap implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
+  public abstract interface ConcurrentNavigableMap<K, V> implements java.util.concurrent.ConcurrentMap java.util.NavigableMap {
     method public abstract java.util.NavigableSet<K> descendingKeySet();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> descendingMap();
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> headMap(K, boolean);
@@ -62784,7 +63150,7 @@ package java.util.concurrent {
     method public abstract java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
+  public class ConcurrentSkipListMap<K, V> extends java.util.AbstractMap implements java.lang.Cloneable java.util.concurrent.ConcurrentNavigableMap java.io.Serializable {
     ctor public ConcurrentSkipListMap();
     ctor public ConcurrentSkipListMap(java.util.Comparator<? super K>);
     ctor public ConcurrentSkipListMap(java.util.Map<? extends K, ? extends V>);
@@ -62828,7 +63194,7 @@ package java.util.concurrent {
     method public java.util.concurrent.ConcurrentNavigableMap<K, V> tailMap(K);
   }
 
-  public class ConcurrentSkipListSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
+  public class ConcurrentSkipListSet<E> extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable {
     ctor public ConcurrentSkipListSet();
     ctor public ConcurrentSkipListSet(java.util.Comparator<? super E>);
     ctor public ConcurrentSkipListSet(java.util.Collection<? extends E>);
@@ -62856,7 +63222,7 @@ package java.util.concurrent {
     method public java.util.NavigableSet<E> tailSet(E);
   }
 
-  public class CopyOnWriteArrayList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
+  public class CopyOnWriteArrayList<E> implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable {
     ctor public CopyOnWriteArrayList();
     ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>);
     ctor public CopyOnWriteArrayList(E[]);
@@ -62888,10 +63254,10 @@ package java.util.concurrent {
     method public int size();
     method public java.util.List<E> subList(int, int);
     method public java.lang.Object[] toArray();
-    method public T[] toArray(T[]);
+    method public <T> T[] toArray(T[]);
   }
 
-  public class CopyOnWriteArraySet extends java.util.AbstractSet implements java.io.Serializable {
+  public class CopyOnWriteArraySet<E> extends java.util.AbstractSet implements java.io.Serializable {
     ctor public CopyOnWriteArraySet();
     ctor public CopyOnWriteArraySet(java.util.Collection<? extends E>);
     method public void forEach(java.util.function.Consumer<? super E>);
@@ -62909,7 +63275,7 @@ package java.util.concurrent {
     method public long getCount();
   }
 
-  public abstract class CountedCompleter extends java.util.concurrent.ForkJoinTask {
+  public abstract class CountedCompleter<T> extends java.util.concurrent.ForkJoinTask {
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>, int);
     ctor protected CountedCompleter(java.util.concurrent.CountedCompleter<?>);
     ctor protected CountedCompleter();
@@ -62946,7 +63312,7 @@ package java.util.concurrent {
     method public void reset();
   }
 
-  public class DelayQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
+  public class DelayQueue<E extends java.util.concurrent.Delayed> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue {
     ctor public DelayQueue();
     ctor public DelayQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -62967,7 +63333,7 @@ package java.util.concurrent {
     method public abstract long getDelay(java.util.concurrent.TimeUnit);
   }
 
-  public class Exchanger {
+  public class Exchanger<V> {
     ctor public Exchanger();
     method public V exchange(V) throws java.lang.InterruptedException;
     method public V exchange(V, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -62984,7 +63350,7 @@ package java.util.concurrent {
     method public abstract void execute(java.lang.Runnable);
   }
 
-  public class ExecutorCompletionService implements java.util.concurrent.CompletionService {
+  public class ExecutorCompletionService<V> implements java.util.concurrent.CompletionService {
     ctor public ExecutorCompletionService(java.util.concurrent.Executor);
     ctor public ExecutorCompletionService(java.util.concurrent.Executor, java.util.concurrent.BlockingQueue<java.util.concurrent.Future<V>>);
     method public java.util.concurrent.Future<V> poll();
@@ -62996,21 +63362,21 @@ package java.util.concurrent {
 
   public abstract interface ExecutorService implements java.util.concurrent.Executor {
     method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
-    method public abstract java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
-    method public abstract T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.lang.InterruptedException;
+    method public abstract <T> java.util.List<java.util.concurrent.Future<T>> invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public abstract <T> T invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>, long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
     method public abstract boolean isShutdown();
     method public abstract boolean isTerminated();
     method public abstract void shutdown();
     method public abstract java.util.List<java.lang.Runnable> shutdownNow();
-    method public abstract java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
-    method public abstract java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.util.concurrent.Callable<T>);
+    method public abstract <T> java.util.concurrent.Future<T> submit(java.lang.Runnable, T);
     method public abstract java.util.concurrent.Future<?> submit(java.lang.Runnable);
   }
 
   public class Executors {
-    method public static java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.Callable<T> callable(java.lang.Runnable, T);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.lang.Runnable);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedAction<?>);
     method public static java.util.concurrent.Callable<java.lang.Object> callable(java.security.PrivilegedExceptionAction<?>);
@@ -63027,8 +63393,8 @@ package java.util.concurrent {
     method public static java.util.concurrent.ScheduledExecutorService newSingleThreadScheduledExecutor(java.util.concurrent.ThreadFactory);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool(int);
     method public static java.util.concurrent.ExecutorService newWorkStealingPool();
-    method public static java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
-    method public static java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallable(java.util.concurrent.Callable<T>);
+    method public static <T> java.util.concurrent.Callable<T> privilegedCallableUsingCurrentClassLoader(java.util.concurrent.Callable<T>);
     method public static java.util.concurrent.ThreadFactory privilegedThreadFactory();
     method public static java.util.concurrent.ExecutorService unconfigurableExecutorService(java.util.concurrent.ExecutorService);
     method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
@@ -63056,7 +63422,7 @@ package java.util.concurrent {
     method public long getStealCount();
     method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
     method public boolean hasQueuedSubmissions();
-    method public T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> T invoke(java.util.concurrent.ForkJoinTask<T>);
     method public boolean isQuiescent();
     method public boolean isShutdown();
     method public boolean isTerminated();
@@ -63065,7 +63431,7 @@ package java.util.concurrent {
     method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
     method public void shutdown();
     method public java.util.List<java.lang.Runnable> shutdownNow();
-    method public java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    method public <T> java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
     field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
   }
 
@@ -63078,11 +63444,11 @@ package java.util.concurrent {
     method public abstract boolean isReleasable();
   }
 
-  public abstract class ForkJoinTask implements java.util.concurrent.Future java.io.Serializable {
+  public abstract class ForkJoinTask<V> implements java.util.concurrent.Future java.io.Serializable {
     ctor public ForkJoinTask();
     method public static java.util.concurrent.ForkJoinTask<?> adapt(java.lang.Runnable);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
-    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
+    method public static <T> java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
     method public boolean cancel(boolean);
     method public final boolean compareAndSetForkJoinTaskTag(short, short);
     method public void complete(V);
@@ -63102,7 +63468,7 @@ package java.util.concurrent {
     method public final V invoke();
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
     method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
-    method public static java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public static <T extends java.util.concurrent.ForkJoinTask<?>> java.util.Collection<T> invokeAll(java.util.Collection<T>);
     method public final boolean isCancelled();
     method public final boolean isCompletedAbnormally();
     method public final boolean isCompletedNormally();
@@ -63128,7 +63494,7 @@ package java.util.concurrent {
     method protected void onTermination(java.lang.Throwable);
   }
 
-  public abstract interface Future {
+  public abstract interface Future<V> {
     method public abstract boolean cancel(boolean);
     method public abstract V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
     method public abstract V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
@@ -63136,7 +63502,7 @@ package java.util.concurrent {
     method public abstract boolean isDone();
   }
 
-  public class FutureTask implements java.util.concurrent.RunnableFuture {
+  public class FutureTask<V> implements java.util.concurrent.RunnableFuture {
     ctor public FutureTask(java.util.concurrent.Callable<V>);
     ctor public FutureTask(java.lang.Runnable, V);
     method public boolean cancel(boolean);
@@ -63151,7 +63517,7 @@ package java.util.concurrent {
     method protected void setException(java.lang.Throwable);
   }
 
-  public class LinkedBlockingDeque extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
+  public class LinkedBlockingDeque<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingDeque java.io.Serializable {
     ctor public LinkedBlockingDeque();
     ctor public LinkedBlockingDeque(int);
     ctor public LinkedBlockingDeque(java.util.Collection<? extends E>);
@@ -63195,7 +63561,7 @@ package java.util.concurrent {
     method public E takeLast() throws java.lang.InterruptedException;
   }
 
-  public class LinkedBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class LinkedBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public LinkedBlockingQueue();
     ctor public LinkedBlockingQueue(int);
     ctor public LinkedBlockingQueue(java.util.Collection<? extends E>);
@@ -63214,7 +63580,7 @@ package java.util.concurrent {
     method public E take() throws java.lang.InterruptedException;
   }
 
-  public class LinkedTransferQueue extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
+  public class LinkedTransferQueue<E> extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
     ctor public LinkedTransferQueue();
     ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
     method public int drainTo(java.util.Collection<? super E>);
@@ -63261,7 +63627,7 @@ package java.util.concurrent {
     method public int register();
   }
 
-  public class PriorityBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class PriorityBlockingQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public PriorityBlockingQueue();
     ctor public PriorityBlockingQueue(int);
     ctor public PriorityBlockingQueue(int, java.util.Comparator<? super E>);
@@ -63290,7 +63656,7 @@ package java.util.concurrent {
     method protected final void setRawResult(java.lang.Void);
   }
 
-  public abstract class RecursiveTask extends java.util.concurrent.ForkJoinTask {
+  public abstract class RecursiveTask<V> extends java.util.concurrent.ForkJoinTask {
     ctor public RecursiveTask();
     method protected abstract V compute();
     method protected final boolean exec();
@@ -63309,22 +63675,22 @@ package java.util.concurrent {
     method public abstract void rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor);
   }
 
-  public abstract interface RunnableFuture implements java.util.concurrent.Future java.lang.Runnable {
+  public abstract interface RunnableFuture<V> implements java.util.concurrent.Future java.lang.Runnable {
     method public abstract void run();
   }
 
-  public abstract interface RunnableScheduledFuture implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
+  public abstract interface RunnableScheduledFuture<V> implements java.util.concurrent.RunnableFuture java.util.concurrent.ScheduledFuture {
     method public abstract boolean isPeriodic();
   }
 
   public abstract interface ScheduledExecutorService implements java.util.concurrent.ExecutorService {
     method public abstract java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public abstract java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public abstract <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public abstract java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
   }
 
-  public abstract interface ScheduledFuture implements java.util.concurrent.Delayed java.util.concurrent.Future {
+  public abstract interface ScheduledFuture<V> implements java.util.concurrent.Delayed java.util.concurrent.Future {
   }
 
   public class ScheduledThreadPoolExecutor extends java.util.concurrent.ThreadPoolExecutor implements java.util.concurrent.ScheduledExecutorService {
@@ -63332,13 +63698,13 @@ package java.util.concurrent {
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.RejectedExecutionHandler);
     ctor public ScheduledThreadPoolExecutor(int, java.util.concurrent.ThreadFactory, java.util.concurrent.RejectedExecutionHandler);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
-    method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.lang.Runnable, java.util.concurrent.RunnableScheduledFuture<V>);
+    method protected <V> java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
     method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
     method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
     method public boolean getRemoveOnCancelPolicy();
     method public java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
-    method public java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
+    method public <V> java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
@@ -63368,7 +63734,7 @@ package java.util.concurrent {
     method public boolean tryAcquire(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
   }
 
-  public class SynchronousQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
+  public class SynchronousQueue<E> extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public SynchronousQueue();
     ctor public SynchronousQueue(boolean);
     method public int drainTo(java.util.Collection<? super E>);
@@ -63486,7 +63852,7 @@ package java.util.concurrent {
     ctor public TimeoutException(java.lang.String);
   }
 
-  public abstract interface TransferQueue implements java.util.concurrent.BlockingQueue {
+  public abstract interface TransferQueue<E> implements java.util.concurrent.BlockingQueue {
     method public abstract int getWaitingConsumerCount();
     method public abstract boolean hasWaitingConsumer();
     method public abstract void transfer(E) throws java.lang.InterruptedException;
@@ -63556,7 +63922,7 @@ package java.util.concurrent.atomic {
     method public final boolean weakCompareAndSet(int, int, int);
   }
 
-  public abstract class AtomicIntegerFieldUpdater {
+  public abstract class AtomicIntegerFieldUpdater<T> {
     ctor protected AtomicIntegerFieldUpdater();
     method public final int accumulateAndGet(T, int, java.util.function.IntBinaryOperator);
     method public int addAndGet(T, int);
@@ -63571,7 +63937,7 @@ package java.util.concurrent.atomic {
     method public final int getAndUpdate(T, java.util.function.IntUnaryOperator);
     method public int incrementAndGet(T);
     method public abstract void lazySet(T, int);
-    method public static java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicIntegerFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, int);
     method public final int updateAndGet(T, java.util.function.IntUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, int, int);
@@ -63624,7 +63990,7 @@ package java.util.concurrent.atomic {
     method public final boolean weakCompareAndSet(int, long, long);
   }
 
-  public abstract class AtomicLongFieldUpdater {
+  public abstract class AtomicLongFieldUpdater<T> {
     ctor protected AtomicLongFieldUpdater();
     method public final long accumulateAndGet(T, long, java.util.function.LongBinaryOperator);
     method public long addAndGet(T, long);
@@ -63639,13 +64005,13 @@ package java.util.concurrent.atomic {
     method public final long getAndUpdate(T, java.util.function.LongUnaryOperator);
     method public long incrementAndGet(T);
     method public abstract void lazySet(T, long);
-    method public static java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
+    method public static <U> java.util.concurrent.atomic.AtomicLongFieldUpdater<U> newUpdater(java.lang.Class<U>, java.lang.String);
     method public abstract void set(T, long);
     method public final long updateAndGet(T, java.util.function.LongUnaryOperator);
     method public abstract boolean weakCompareAndSet(T, long, long);
   }
 
-  public class AtomicMarkableReference {
+  public class AtomicMarkableReference<V> {
     ctor public AtomicMarkableReference(V, boolean);
     method public boolean attemptMark(V, boolean);
     method public boolean compareAndSet(V, V, boolean, boolean);
@@ -63656,7 +64022,7 @@ package java.util.concurrent.atomic {
     method public boolean weakCompareAndSet(V, V, boolean, boolean);
   }
 
-  public class AtomicReference implements java.io.Serializable {
+  public class AtomicReference<V> implements java.io.Serializable {
     ctor public AtomicReference(V);
     ctor public AtomicReference();
     method public final V accumulateAndGet(V, java.util.function.BinaryOperator<V>);
@@ -63671,7 +64037,7 @@ package java.util.concurrent.atomic {
     method public final boolean weakCompareAndSet(V, V);
   }
 
-  public class AtomicReferenceArray implements java.io.Serializable {
+  public class AtomicReferenceArray<E> implements java.io.Serializable {
     ctor public AtomicReferenceArray(int);
     ctor public AtomicReferenceArray(E[]);
     method public final E accumulateAndGet(int, E, java.util.function.BinaryOperator<E>);
@@ -63687,7 +64053,7 @@ package java.util.concurrent.atomic {
     method public final boolean weakCompareAndSet(int, E, E);
   }
 
-  public abstract class AtomicReferenceFieldUpdater {
+  public abstract class AtomicReferenceFieldUpdater<T, V> {
     ctor protected AtomicReferenceFieldUpdater();
     method public final V accumulateAndGet(T, V, java.util.function.BinaryOperator<V>);
     method public abstract boolean compareAndSet(T, V, V);
@@ -63696,13 +64062,13 @@ package java.util.concurrent.atomic {
     method public V getAndSet(T, V);
     method public final V getAndUpdate(T, java.util.function.UnaryOperator<V>);
     method public abstract void lazySet(T, V);
-    method public static java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
+    method public static <U, W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater<U, W> newUpdater(java.lang.Class<U>, java.lang.Class<W>, java.lang.String);
     method public abstract void set(T, V);
     method public final V updateAndGet(T, java.util.function.UnaryOperator<V>);
     method public abstract boolean weakCompareAndSet(T, V, V);
   }
 
-  public class AtomicStampedReference {
+  public class AtomicStampedReference<V> {
     ctor public AtomicStampedReference(V, int);
     method public boolean attemptStamp(V, int);
     method public boolean compareAndSet(V, V, int, int);
@@ -64005,33 +64371,33 @@ package java.util.concurrent.locks {
 
 package java.util.function {
 
-  public abstract interface BiConsumer {
+  public abstract interface BiConsumer<T, U> {
     method public abstract void accept(T, U);
     method public default java.util.function.BiConsumer<T, U> andThen(java.util.function.BiConsumer<? super T, ? super U>);
   }
 
-  public abstract interface BiFunction {
-    method public default java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface BiFunction<T, U, R> {
+    method public default <V> java.util.function.BiFunction<T, U, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T, U);
   }
 
-  public abstract interface BiPredicate {
+  public abstract interface BiPredicate<T, U> {
     method public default java.util.function.BiPredicate<T, U> and(java.util.function.BiPredicate<? super T, ? super U>);
     method public default java.util.function.BiPredicate<T, U> negate();
     method public default java.util.function.BiPredicate<T, U> or(java.util.function.BiPredicate<? super T, ? super U>);
     method public abstract boolean test(T, U);
   }
 
-  public abstract interface BinaryOperator implements java.util.function.BiFunction {
-    method public static java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
+  public abstract interface BinaryOperator<T> implements java.util.function.BiFunction {
+    method public static <T> java.util.function.BinaryOperator<T> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.function.BinaryOperator<T> minBy(java.util.Comparator<? super T>);
   }
 
   public abstract interface BooleanSupplier {
     method public abstract boolean getAsBoolean();
   }
 
-  public abstract interface Consumer {
+  public abstract interface Consumer<T> {
     method public abstract void accept(T);
     method public default java.util.function.Consumer<T> andThen(java.util.function.Consumer<? super T>);
   }
@@ -64045,7 +64411,7 @@ package java.util.function {
     method public default java.util.function.DoubleConsumer andThen(java.util.function.DoubleConsumer);
   }
 
-  public abstract interface DoubleFunction {
+  public abstract interface DoubleFunction<R> {
     method public abstract R apply(double);
   }
 
@@ -64075,11 +64441,11 @@ package java.util.function {
     method public static java.util.function.DoubleUnaryOperator identity();
   }
 
-  public abstract interface Function {
-    method public default java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
+  public abstract interface Function<T, R> {
+    method public default <V> java.util.function.Function<T, V> andThen(java.util.function.Function<? super R, ? extends V>);
     method public abstract R apply(T);
-    method public default java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
-    method public static java.util.function.Function<T, T> identity();
+    method public default <V> java.util.function.Function<V, R> compose(java.util.function.Function<? super V, ? extends T>);
+    method public static <T> java.util.function.Function<T, T> identity();
   }
 
   public abstract interface IntBinaryOperator {
@@ -64091,7 +64457,7 @@ package java.util.function {
     method public default java.util.function.IntConsumer andThen(java.util.function.IntConsumer);
   }
 
-  public abstract interface IntFunction {
+  public abstract interface IntFunction<R> {
     method public abstract R apply(int);
   }
 
@@ -64130,7 +64496,7 @@ package java.util.function {
     method public default java.util.function.LongConsumer andThen(java.util.function.LongConsumer);
   }
 
-  public abstract interface LongFunction {
+  public abstract interface LongFunction<R> {
     method public abstract R apply(long);
   }
 
@@ -64160,56 +64526,56 @@ package java.util.function {
     method public static java.util.function.LongUnaryOperator identity();
   }
 
-  public abstract interface ObjDoubleConsumer {
+  public abstract interface ObjDoubleConsumer<T> {
     method public abstract void accept(T, double);
   }
 
-  public abstract interface ObjIntConsumer {
+  public abstract interface ObjIntConsumer<T> {
     method public abstract void accept(T, int);
   }
 
-  public abstract interface ObjLongConsumer {
+  public abstract interface ObjLongConsumer<T> {
     method public abstract void accept(T, long);
   }
 
-  public abstract interface Predicate {
+  public abstract interface Predicate<T> {
     method public default java.util.function.Predicate<T> and(java.util.function.Predicate<? super T>);
-    method public static java.util.function.Predicate<T> isEqual(java.lang.Object);
+    method public static <T> java.util.function.Predicate<T> isEqual(java.lang.Object);
     method public default java.util.function.Predicate<T> negate();
     method public default java.util.function.Predicate<T> or(java.util.function.Predicate<? super T>);
     method public abstract boolean test(T);
   }
 
-  public abstract interface Supplier {
+  public abstract interface Supplier<T> {
     method public abstract T get();
   }
 
-  public abstract interface ToDoubleBiFunction {
+  public abstract interface ToDoubleBiFunction<T, U> {
     method public abstract double applyAsDouble(T, U);
   }
 
-  public abstract interface ToDoubleFunction {
+  public abstract interface ToDoubleFunction<T> {
     method public abstract double applyAsDouble(T);
   }
 
-  public abstract interface ToIntBiFunction {
+  public abstract interface ToIntBiFunction<T, U> {
     method public abstract int applyAsInt(T, U);
   }
 
-  public abstract interface ToIntFunction {
+  public abstract interface ToIntFunction<T> {
     method public abstract int applyAsInt(T);
   }
 
-  public abstract interface ToLongBiFunction {
+  public abstract interface ToLongBiFunction<T, U> {
     method public abstract long applyAsLong(T, U);
   }
 
-  public abstract interface ToLongFunction {
+  public abstract interface ToLongFunction<T> {
     method public abstract long applyAsLong(T);
   }
 
-  public abstract interface UnaryOperator implements java.util.function.Function {
-    method public static java.util.function.UnaryOperator<T> identity();
+  public abstract interface UnaryOperator<T> implements java.util.function.Function {
+    method public static <T> java.util.function.UnaryOperator<T> identity();
   }
 
 }
@@ -64797,7 +65163,7 @@ package java.util.regex {
 
 package java.util.stream {
 
-  public abstract interface BaseStream implements java.lang.AutoCloseable {
+  public abstract interface BaseStream<T, S extends java.util.stream.BaseStream<T, S>> implements java.lang.AutoCloseable {
     method public abstract void close();
     method public abstract boolean isParallel();
     method public abstract java.util.Iterator<T> iterator();
@@ -64808,13 +65174,13 @@ package java.util.stream {
     method public abstract S unordered();
   }
 
-  public abstract interface Collector {
+  public abstract interface Collector<T, A, R> {
     method public abstract java.util.function.BiConsumer<A, T> accumulator();
     method public abstract java.util.Set<java.util.stream.Collector.Characteristics> characteristics();
     method public abstract java.util.function.BinaryOperator<A> combiner();
     method public abstract java.util.function.Function<A, R> finisher();
-    method public static java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
-    method public static java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, R> java.util.stream.Collector<T, R, R> of(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, T>, java.util.function.BinaryOperator<R>, java.util.stream.Collector.Characteristics...);
+    method public static <T, A, R> java.util.stream.Collector<T, A, R> of(java.util.function.Supplier<A>, java.util.function.BiConsumer<A, T>, java.util.function.BinaryOperator<A>, java.util.function.Function<A, R>, java.util.stream.Collector.Characteristics...);
     method public abstract java.util.function.Supplier<A> supplier();
   }
 
@@ -64827,43 +65193,43 @@ package java.util.stream {
   }
 
   public final class Collectors {
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> counting();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> averagingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, A, R, RR> java.util.stream.Collector<T, A, RR> collectingAndThen(java.util.stream.Collector<T, A, R>, java.util.function.Function<R, RR>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> counting();
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.Map<K, java.util.List<T>>> groupingBy(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.Map<K, D>> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, D, A, M extends java.util.Map<K, D>> java.util.stream.Collector<T, ?, M> groupingBy(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, java.util.List<T>>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>);
+    method public static <T, K, A, D> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, D>> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T, K, A, D, M extends java.util.concurrent.ConcurrentMap<K, D>> java.util.stream.Collector<T, ?, M> groupingByConcurrent(java.util.function.Function<? super T, ? extends K>, java.util.function.Supplier<M>, java.util.stream.Collector<? super T, A, D>);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining();
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence);
     method public static java.util.stream.Collector<java.lang.CharSequence, ?, java.lang.String> joining(java.lang.CharSequence, java.lang.CharSequence, java.lang.CharSequence);
-    method public static java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
-    method public static java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
-    method public static java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
-    method public static java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.List<T>> toList();
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
-    method public static java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
-    method public static java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
-    method public static java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
+    method public static <T, U, A, R> java.util.stream.Collector<T, ?, R> mapping(java.util.function.Function<? super T, ? extends U>, java.util.stream.Collector<? super U, A, R>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> maxBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> minBy(java.util.Comparator<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, java.util.List<T>>> partitioningBy(java.util.function.Predicate<? super T>);
+    method public static <T, D, A> java.util.stream.Collector<T, ?, java.util.Map<java.lang.Boolean, D>> partitioningBy(java.util.function.Predicate<? super T>, java.util.stream.Collector<? super T, A, D>);
+    method public static <T> java.util.stream.Collector<T, ?, T> reducing(T, java.util.function.BinaryOperator<T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Optional<T>> reducing(java.util.function.BinaryOperator<T>);
+    method public static <T, U> java.util.stream.Collector<T, ?, U> reducing(U, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.DoubleSummaryStatistics> summarizingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.IntSummaryStatistics> summarizingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.LongSummaryStatistics> summarizingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Double> summingDouble(java.util.function.ToDoubleFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Integer> summingInt(java.util.function.ToIntFunction<? super T>);
+    method public static <T> java.util.stream.Collector<T, ?, java.lang.Long> summingLong(java.util.function.ToLongFunction<? super T>);
+    method public static <T, C extends java.util.Collection<T>> java.util.stream.Collector<T, ?, C> toCollection(java.util.function.Supplier<C>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.concurrent.ConcurrentMap<K, U>> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.concurrent.ConcurrentMap<K, U>> java.util.stream.Collector<T, ?, M> toConcurrentMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.List<T>> toList();
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>);
+    method public static <T, K, U> java.util.stream.Collector<T, ?, java.util.Map<K, U>> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>);
+    method public static <T, K, U, M extends java.util.Map<K, U>> java.util.stream.Collector<T, ?, M> toMap(java.util.function.Function<? super T, ? extends K>, java.util.function.Function<? super T, ? extends U>, java.util.function.BinaryOperator<U>, java.util.function.Supplier<M>);
+    method public static <T> java.util.stream.Collector<T, ?, java.util.Set<T>> toSet();
   }
 
   public abstract interface DoubleStream implements java.util.stream.BaseStream {
@@ -64872,7 +65238,7 @@ package java.util.stream {
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Double> boxed();
     method public static java.util.stream.DoubleStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjDoubleConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.DoubleStream concat(java.util.stream.DoubleStream, java.util.stream.DoubleStream);
     method public abstract long count();
     method public abstract java.util.stream.DoubleStream distinct();
@@ -64890,7 +65256,7 @@ package java.util.stream {
     method public abstract java.util.stream.DoubleStream map(java.util.function.DoubleUnaryOperator);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.DoubleToIntFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.DoubleToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.DoubleFunction<? extends U>);
     method public abstract java.util.OptionalDouble max();
     method public abstract java.util.OptionalDouble min();
     method public abstract boolean noneMatch(java.util.function.DoublePredicate);
@@ -64923,7 +65289,7 @@ package java.util.stream {
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Integer> boxed();
     method public static java.util.stream.IntStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjIntConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.IntStream concat(java.util.stream.IntStream, java.util.stream.IntStream);
     method public abstract long count();
     method public abstract java.util.stream.IntStream distinct();
@@ -64941,7 +65307,7 @@ package java.util.stream {
     method public abstract java.util.stream.IntStream map(java.util.function.IntUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.IntToDoubleFunction);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.IntToLongFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.IntFunction<? extends U>);
     method public abstract java.util.OptionalInt max();
     method public abstract java.util.OptionalInt min();
     method public abstract boolean noneMatch(java.util.function.IntPredicate);
@@ -64975,7 +65341,7 @@ package java.util.stream {
     method public abstract java.util.OptionalDouble average();
     method public abstract java.util.stream.Stream<java.lang.Long> boxed();
     method public static java.util.stream.LongStream.Builder builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.ObjLongConsumer<R>, java.util.function.BiConsumer<R, R>);
     method public static java.util.stream.LongStream concat(java.util.stream.LongStream, java.util.stream.LongStream);
     method public abstract long count();
     method public abstract java.util.stream.LongStream distinct();
@@ -64993,7 +65359,7 @@ package java.util.stream {
     method public abstract java.util.stream.LongStream map(java.util.function.LongUnaryOperator);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.LongToDoubleFunction);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.LongToIntFunction);
-    method public abstract java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
+    method public abstract <U> java.util.stream.Stream<U> mapToObj(java.util.function.LongFunction<? extends U>);
     method public abstract java.util.OptionalLong max();
     method public abstract java.util.OptionalLong min();
     method public abstract boolean noneMatch(java.util.function.LongPredicate);
@@ -65020,49 +65386,49 @@ package java.util.stream {
     method public abstract java.util.stream.LongStream build();
   }
 
-  public abstract interface Stream implements java.util.stream.BaseStream {
+  public abstract interface Stream<T> implements java.util.stream.BaseStream {
     method public abstract boolean allMatch(java.util.function.Predicate<? super T>);
     method public abstract boolean anyMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream.Builder<T> builder();
-    method public abstract R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
-    method public abstract R collect(java.util.stream.Collector<? super T, A, R>);
-    method public static java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
+    method public static <T> java.util.stream.Stream.Builder<T> builder();
+    method public abstract <R> R collect(java.util.function.Supplier<R>, java.util.function.BiConsumer<R, ? super T>, java.util.function.BiConsumer<R, R>);
+    method public abstract <R, A> R collect(java.util.stream.Collector<? super T, A, R>);
+    method public static <T> java.util.stream.Stream<T> concat(java.util.stream.Stream<? extends T>, java.util.stream.Stream<? extends T>);
     method public abstract long count();
     method public abstract java.util.stream.Stream<T> distinct();
-    method public static java.util.stream.Stream<T> empty();
+    method public static <T> java.util.stream.Stream<T> empty();
     method public abstract java.util.stream.Stream<T> filter(java.util.function.Predicate<? super T>);
     method public abstract java.util.Optional<T> findAny();
     method public abstract java.util.Optional<T> findFirst();
-    method public abstract java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
+    method public abstract <R> java.util.stream.Stream<R> flatMap(java.util.function.Function<? super T, ? extends java.util.stream.Stream<? extends R>>);
     method public abstract java.util.stream.DoubleStream flatMapToDouble(java.util.function.Function<? super T, ? extends java.util.stream.DoubleStream>);
     method public abstract java.util.stream.IntStream flatMapToInt(java.util.function.Function<? super T, ? extends java.util.stream.IntStream>);
     method public abstract java.util.stream.LongStream flatMapToLong(java.util.function.Function<? super T, ? extends java.util.stream.LongStream>);
     method public abstract void forEach(java.util.function.Consumer<? super T>);
     method public abstract void forEachOrdered(java.util.function.Consumer<? super T>);
-    method public static java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
-    method public static java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
+    method public static <T> java.util.stream.Stream<T> generate(java.util.function.Supplier<T>);
+    method public static <T> java.util.stream.Stream<T> iterate(T, java.util.function.UnaryOperator<T>);
     method public abstract java.util.stream.Stream<T> limit(long);
-    method public abstract java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
+    method public abstract <R> java.util.stream.Stream<R> map(java.util.function.Function<? super T, ? extends R>);
     method public abstract java.util.stream.DoubleStream mapToDouble(java.util.function.ToDoubleFunction<? super T>);
     method public abstract java.util.stream.IntStream mapToInt(java.util.function.ToIntFunction<? super T>);
     method public abstract java.util.stream.LongStream mapToLong(java.util.function.ToLongFunction<? super T>);
     method public abstract java.util.Optional<T> max(java.util.Comparator<? super T>);
     method public abstract java.util.Optional<T> min(java.util.Comparator<? super T>);
     method public abstract boolean noneMatch(java.util.function.Predicate<? super T>);
-    method public static java.util.stream.Stream<T> of(T);
-    method public static java.util.stream.Stream<T> of(T...);
+    method public static <T> java.util.stream.Stream<T> of(T);
+    method public static <T> java.util.stream.Stream<T> of(T...);
     method public abstract java.util.stream.Stream<T> peek(java.util.function.Consumer<? super T>);
     method public abstract T reduce(T, java.util.function.BinaryOperator<T>);
     method public abstract java.util.Optional<T> reduce(java.util.function.BinaryOperator<T>);
-    method public abstract U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
+    method public abstract <U> U reduce(U, java.util.function.BiFunction<U, ? super T, U>, java.util.function.BinaryOperator<U>);
     method public abstract java.util.stream.Stream<T> skip(long);
     method public abstract java.util.stream.Stream<T> sorted();
     method public abstract java.util.stream.Stream<T> sorted(java.util.Comparator<? super T>);
     method public abstract java.lang.Object[] toArray();
-    method public abstract A[] toArray(java.util.function.IntFunction<A[]>);
+    method public abstract <A> A[] toArray(java.util.function.IntFunction<A[]>);
   }
 
-  public static abstract interface Stream.Builder implements java.util.function.Consumer {
+  public static abstract interface Stream.Builder<T> implements java.util.function.Consumer {
     method public abstract void accept(T);
     method public default java.util.stream.Stream.Builder<T> add(T);
     method public abstract java.util.stream.Stream<T> build();
@@ -65075,8 +65441,8 @@ package java.util.stream {
     method public static java.util.stream.IntStream intStream(java.util.function.Supplier<? extends java.util.Spliterator.OfInt>, int, boolean);
     method public static java.util.stream.LongStream longStream(java.util.Spliterator.OfLong, boolean);
     method public static java.util.stream.LongStream longStream(java.util.function.Supplier<? extends java.util.Spliterator.OfLong>, int, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
-    method public static java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.Spliterator<T>, boolean);
+    method public static <T> java.util.stream.Stream<T> stream(java.util.function.Supplier<? extends java.util.Spliterator<T>>, int, boolean);
   }
 
 }
@@ -67247,16 +67613,16 @@ package javax.security.auth {
   public final class Subject implements java.io.Serializable {
     ctor public Subject();
     ctor public Subject(boolean, java.util.Set<? extends java.security.Principal>, java.util.Set<?>, java.util.Set<?>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
-    method public static T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
-    method public static T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedAction<T>);
+    method public static <T> T doAs(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>) throws java.security.PrivilegedActionException;
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedAction<T>, java.security.AccessControlContext);
+    method public static <T> T doAsPrivileged(javax.security.auth.Subject, java.security.PrivilegedExceptionAction<T>, java.security.AccessControlContext) throws java.security.PrivilegedActionException;
     method public java.util.Set<java.security.Principal> getPrincipals();
-    method public java.util.Set<T> getPrincipals(java.lang.Class<T>);
+    method public <T extends java.security.Principal> java.util.Set<T> getPrincipals(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPrivateCredentials();
-    method public java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPrivateCredentials(java.lang.Class<T>);
     method public java.util.Set<java.lang.Object> getPublicCredentials();
-    method public java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
+    method public <T> java.util.Set<T> getPublicCredentials(java.lang.Class<T>);
     method public static javax.security.auth.Subject getSubject(java.security.AccessControlContext);
     method public boolean isReadOnly();
     method public void setReadOnly();