summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp18
-rw-r--r--Android.mk4
-rw-r--r--api/current.txt1220
-rw-r--r--api/system-current.txt1221
-rw-r--r--api/test-current.txt1220
-rw-r--r--core/java/android/app/WallpaperManager.java8
-rw-r--r--core/java/android/app/job/JobScheduler.java2
-rw-r--r--core/java/android/net/InterfaceConfiguration.java8
-rw-r--r--core/java/android/os/HwBlob.java65
-rw-r--r--core/java/android/os/HwParcel.java16
-rw-r--r--core/java/android/os/IRecoverySystem.aidl1
-rw-r--r--core/java/android/os/RecoverySystem.java49
-rw-r--r--core/java/android/os/StrictMode.java56
-rw-r--r--core/java/android/view/WindowManagerGlobal.java15
-rw-r--r--core/jni/android_os_Debug.cpp28
-rw-r--r--core/jni/android_os_HwParcel.cpp209
-rw-r--r--core/jni/hwbinder/EphemeralStorage.cpp22
-rw-r--r--core/jni/hwbinder/EphemeralStorage.h3
-rw-r--r--core/res/AndroidManifest.xml3
-rwxr-xr-xcore/res/res/values-mcc204-mnc04/config.xml7
-rw-r--r--core/res/res/values-mcc310-mnc120/config.xml3
-rw-r--r--core/res/res/values-mcc310-mnc160/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc200/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc210/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc220/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc230/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc240/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc250/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc260/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc270/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc300/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc310/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc410/config.xml3
-rw-r--r--core/res/res/values-mcc310-mnc490/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc530/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc580/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc590/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc640/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc660/config.xml5
-rw-r--r--core/res/res/values-mcc310-mnc800/config.xml5
-rw-r--r--core/res/res/values-mcc311-mnc220/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc221/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc222/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc223/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc224/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc225/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc226/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc227/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc228/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc229/config.xml26
-rwxr-xr-xcore/res/res/values-mcc311-mnc480/config.xml5
-rw-r--r--core/res/res/values-mcc311-mnc490/config.xml3
-rw-r--r--core/res/res/values-mcc311-mnc580/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc581/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc582/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc583/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc584/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc585/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc586/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc587/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc588/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc589/config.xml26
-rw-r--r--core/res/res/values-mcc311-mnc870/config.xml3
-rw-r--r--core/res/res/values-mcc312-mnc530/config.xml3
-rw-r--r--core/res/res/values/config.xml15
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java27
-rw-r--r--data/etc/platform.xml2
-rw-r--r--libs/hwui/Properties.h2
-rw-r--r--native/android/Android.bp20
-rw-r--r--native/android/libandroid.map.txt194
-rw-r--r--native/graphics/jni/Android.bp20
-rw-r--r--native/graphics/jni/libjnigraphics.map.txt8
-rw-r--r--services/core/Android.mk2
-rw-r--r--services/core/java/com/android/server/BluetoothManagerService.java1
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java14
-rw-r--r--services/core/java/com/android/server/RecoverySystemService.java214
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java5
-rw-r--r--services/core/java/com/android/server/am/ActivityStarter.java14
-rw-r--r--services/core/java/com/android/server/connectivity/MetricsLoggerService.java8
-rw-r--r--services/core/java/com/android/server/connectivity/NetdEventListenerService.java (renamed from services/core/java/com/android/server/connectivity/DnsEventListenerService.java)14
-rw-r--r--services/core/java/com/android/server/connectivity/Tethering.java24
-rw-r--r--services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java13
-rw-r--r--services/core/java/com/android/server/fingerprint/FingerprintService.java1
-rw-r--r--services/core/java/com/android/server/pm/Installer.java5
-rw-r--r--services/core/java/com/android/server/pm/OtaDexoptService.java145
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java14
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerServiceUtils.java162
-rw-r--r--services/core/java/com/android/server/power/ShutdownThread.java8
-rw-r--r--services/core/jni/com_android_server_AlarmManagerService.cpp204
-rw-r--r--services/tests/servicestests/Android.mk1
-rw-r--r--telephony/java/android/telephony/CarrierConfigManager.java32
-rw-r--r--tools/aapt/Resource.cpp4
-rw-r--r--tools/aapt/StringPool.cpp4
-rw-r--r--tools/aapt/StringPool.h9
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl4
-rw-r--r--wifi/java/android/net/wifi/ScanResult.java9
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java34
-rw-r--r--wifi/java/android/net/wifi/WifiScanner.java21
-rw-r--r--wifi/java/android/net/wifi/nan/ConfigRequest.java105
-rw-r--r--wifi/java/android/net/wifi/nan/IWifiNanDiscoverySessionCallback.aidl (renamed from wifi/java/android/net/wifi/nan/IWifiNanSessionCallback.aidl)4
-rw-r--r--wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl2
-rw-r--r--wifi/java/android/net/wifi/nan/IWifiNanManager.aidl23
-rw-r--r--wifi/java/android/net/wifi/nan/PublishConfig.java46
-rw-r--r--wifi/java/android/net/wifi/nan/SubscribeConfig.java44
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanAttachCallback.java47
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanDiscoveryBaseSession.java289
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanDiscoverySessionCallback.java182
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanEventCallback.java105
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanIdentityChangedListener.java40
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanManager.java615
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanPublishDiscoverySession.java (renamed from wifi/java/android/net/wifi/nan/WifiNanPublishSession.java)33
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanSession.java285
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java223
-rw-r--r--wifi/java/android/net/wifi/nan/WifiNanSubscribeDiscoverySession.java (renamed from wifi/java/android/net/wifi/nan/WifiNanSubscribeSession.java)33
-rw-r--r--wifi/tests/Android.mk61
-rw-r--r--wifi/tests/AndroidManifest.xml38
-rw-r--r--wifi/tests/README.md50
-rwxr-xr-xwifi/tests/runtests.sh24
-rw-r--r--wifi/tests/src/android/net/wifi/FakeKeys.java83
-rw-r--r--wifi/tests/src/android/net/wifi/WifiEnterpriseConfigTest.java282
-rw-r--r--wifi/tests/src/android/net/wifi/WifiScannerTest.java111
122 files changed, 4518 insertions, 4267 deletions
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 000000000000..010b2b476e53
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+subdirs = [
+ "native/android",
+ "native/graphics/jni",
+]
diff --git a/Android.mk b/Android.mk
index 3b99111c9500..6c9b190e286d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -452,7 +452,7 @@ LOCAL_SRC_FILES += \
wifi/java/android/net/wifi/IWifiManager.aidl \
wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl \
wifi/java/android/net/wifi/nan/IWifiNanManager.aidl \
- wifi/java/android/net/wifi/nan/IWifiNanSessionCallback.aidl \
+ wifi/java/android/net/wifi/nan/IWifiNanDiscoverySessionCallback.aidl \
wifi/java/android/net/wifi/p2p/IWifiP2pManager.aidl \
wifi/java/android/net/wifi/IWifiScanner.aidl \
wifi/java/android/net/wifi/IRttManager.aidl \
@@ -492,7 +492,7 @@ framework_res_R_stamp := \
LOCAL_ADDITIONAL_DEPENDENCIES := $(framework_res_R_stamp)
LOCAL_NO_STANDARD_LIBRARIES := true
-LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs conscrypt okhttp core-junit bouncycastle ext
+LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt okhttp core-junit bouncycastle ext
LOCAL_STATIC_JAVA_LIBRARIES := framework-protos
LOCAL_MODULE := framework
diff --git a/api/current.txt b/api/current.txt
index e779e9bcde4b..b391b00458a5 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -2897,11 +2897,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;
@@ -3047,7 +3047,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();
@@ -3139,26 +3139,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);
@@ -3182,17 +3182,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...);
@@ -3229,12 +3229,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);
}
@@ -4561,7 +4561,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[]);
@@ -4828,12 +4828,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>);
@@ -7612,7 +7612,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();
@@ -7794,7 +7794,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);
@@ -7807,7 +7807,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);
}
@@ -8078,7 +8078,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();
@@ -8432,8 +8432,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);
@@ -8908,7 +8908,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();
@@ -8945,11 +8945,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);
}
@@ -10740,7 +10740,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();
@@ -12630,7 +12630,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 {
@@ -13754,7 +13754,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;
@@ -13839,7 +13839,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();
@@ -13904,7 +13904,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
@@ -14112,7 +14112,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);
@@ -14175,20 +14175,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();
@@ -14269,7 +14269,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();
@@ -14394,14 +14394,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);
}
@@ -16102,7 +16102,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);
@@ -16128,7 +16128,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();
@@ -16144,14 +16144,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();
}
@@ -17664,8 +17664,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);
@@ -17693,15 +17693,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);
@@ -17719,14 +17719,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();
@@ -18136,7 +18136,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();
@@ -18418,7 +18418,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;
@@ -28069,7 +28069,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...);
@@ -28295,16 +28295,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);
@@ -28809,8 +28809,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();
@@ -28843,7 +28843,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);
@@ -28856,9 +28856,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);
@@ -28889,7 +28889,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);
@@ -28901,9 +28901,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;
}
@@ -28981,11 +28981,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);
}
@@ -29099,7 +29099,7 @@ package android.os {
method public abstract void onProgress(int);
}
- public class RemoteCallbackList {
+ public class RemoteCallbackList<E extends android.os.IInterface> {
ctor public RemoteCallbackList();
method public int beginBroadcast();
method public void finishBroadcast();
@@ -29169,6 +29169,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -29181,6 +29182,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
}
public static final class StrictMode.VmPolicy {
@@ -34409,7 +34411,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;
}
@@ -34560,7 +34562,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);
}
@@ -37430,14 +37432,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();
@@ -37452,7 +37454,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();
@@ -37498,7 +37500,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();
@@ -37524,8 +37526,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...);
@@ -37565,7 +37567,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 {
@@ -37620,20 +37622,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 {
@@ -37641,11 +37643,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();
@@ -37658,7 +37660,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;
@@ -38013,7 +38015,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();
@@ -38456,7 +38458,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);
@@ -38478,7 +38480,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();
@@ -38488,7 +38490,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
@@ -39465,7 +39467,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);
@@ -39561,7 +39563,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);
@@ -39968,7 +39970,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>);
@@ -39996,7 +39998,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>);
@@ -40017,7 +40019,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);
}
@@ -40159,13 +40161,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);
@@ -40265,7 +40267,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);
@@ -40285,7 +40287,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();
@@ -40373,9 +40375,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;
}
@@ -40408,22 +40410,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);
@@ -40467,7 +40469,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);
@@ -45171,7 +45173,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);
}
@@ -45905,7 +45907,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);
@@ -46028,7 +46030,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[]);
@@ -46089,7 +46091,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);
@@ -48374,7 +48376,7 @@ package android.widget {
package com.android.internal.util {
- public abstract interface Predicate {
+ public abstract interface Predicate<T> {
method public abstract boolean apply(T);
}
@@ -50446,22 +50448,22 @@ 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 A[] getAnnotationsByType(java.lang.Class<A>);
+ method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
method public java.lang.String getCanonicalName();
method public java.lang.ClassLoader getClassLoader();
method public java.lang.Class<?>[] getClasses();
method public java.lang.Class<?> getComponentType();
method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
- method public A getDeclaredAnnotation(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 java.lang.Class<?>[] getDeclaredClasses();
method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
@@ -50573,7 +50575,7 @@ package java.lang {
public abstract interface Cloneable {
}
- public abstract interface Comparable {
+ public abstract interface Comparable<T> {
method public abstract int compareTo(T);
}
@@ -50627,7 +50629,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);
@@ -50637,7 +50639,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 {
@@ -50756,7 +50758,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);
}
@@ -50835,7 +50837,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();
@@ -51050,12 +51052,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();
@@ -51654,13 +51656,13 @@ 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();
method public void remove();
method public void set(T);
- method public static java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
+ method public static <S> java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
}
public class Throwable implements java.io.Serializable {
@@ -51763,6 +51765,8 @@ package java.lang.annotation {
enum_constant public static final java.lang.annotation.ElementType PACKAGE;
enum_constant public static final java.lang.annotation.ElementType PARAMETER;
enum_constant public static final java.lang.annotation.ElementType TYPE;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_PARAMETER;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_USE;
}
public class IncompleteAnnotationException extends java.lang.RuntimeException {
@@ -51798,30 +51802,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>);
}
@@ -51832,7 +51836,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();
@@ -51841,12 +51845,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> T 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>);
}
@@ -51874,7 +51878,7 @@ 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.Executable {
+ public final class Constructor<T> extends java.lang.reflect.Executable {
method public java.lang.Class<T> getDeclaringClass();
method public java.lang.Class<?>[] getExceptionTypes();
method public int getModifiers();
@@ -51896,7 +51900,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -52019,6 +52025,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ 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 java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
@@ -52042,7 +52063,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();
@@ -52831,7 +52852,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();
}
@@ -53363,9 +53384,9 @@ package java.nio.channels {
}
public abstract interface AsynchronousByteChannel implements java.nio.channels.AsynchronousChannel {
- method public abstract void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
}
@@ -53393,25 +53414,25 @@ package java.nio.channels {
public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
ctor protected AsynchronousFileChannel();
method public abstract void force(boolean) throws java.io.IOException;
- method public abstract void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
- method public final void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public abstract <A> void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public final <A> void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
method public abstract long size() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
}
public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
- method public abstract void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
+ method public abstract <A> void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
@@ -53419,30 +53440,30 @@ package java.nio.channels {
method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <T> java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
}
public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
- method public abstract void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
+ method public abstract <A> void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
- method public abstract java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <A> void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <T> java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
}
public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
@@ -53482,7 +53503,7 @@ package java.nio.channels {
ctor public ClosedSelectorException();
}
- public abstract interface CompletionHandler {
+ public abstract interface CompletionHandler<V, A> {
method public abstract void completed(V, A);
method public abstract void failed(java.lang.Throwable, A);
}
@@ -53506,7 +53527,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;
@@ -53611,8 +53632,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();
}
@@ -53734,7 +53755,7 @@ package java.nio.channels {
method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
method public abstract java.net.SocketAddress getLocalAddress() 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();
}
@@ -53757,7 +53778,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();
@@ -54042,11 +54063,11 @@ package java.nio.file {
ctor public DirectoryNotEmptyException(java.lang.String);
}
- public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable {
+ public abstract interface DirectoryStream<T> implements java.io.Closeable java.lang.Iterable {
method public abstract java.util.Iterator<T> iterator();
}
- public static abstract interface DirectoryStream.Filter {
+ public static abstract interface DirectoryStream.Filter<T> {
method public abstract boolean accept(T) throws java.io.IOException;
}
@@ -54058,7 +54079,7 @@ package java.nio.file {
public abstract class FileStore {
ctor protected FileStore();
method public abstract java.lang.Object getAttribute(java.lang.String) throws java.io.IOException;
- method public abstract V getFileStoreAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileStoreAttributeView> V getFileStoreAttributeView(java.lang.Class<V>);
method public abstract long getTotalSpace() throws java.io.IOException;
method public abstract long getUnallocatedSpace() throws java.io.IOException;
method public abstract long getUsableSpace() throws java.io.IOException;
@@ -54130,7 +54151,7 @@ package java.nio.file {
enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
}
- public abstract interface FileVisitor {
+ public abstract interface FileVisitor<T> {
method public abstract java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -54155,7 +54176,7 @@ package java.nio.file {
method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
method public static java.util.stream.Stream<java.nio.file.Path> find(java.nio.file.Path, int, java.util.function.BiPredicate<java.nio.file.Path, java.nio.file.attribute.BasicFileAttributes>, java.nio.file.FileVisitOption...) throws java.io.IOException;
method public static java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
- method public static V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public static <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54188,7 +54209,7 @@ package java.nio.file {
method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path) throws java.io.IOException;
- method public static A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public static <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54296,17 +54317,17 @@ package java.nio.file {
ctor public ReadOnlyFileSystemException();
}
- public abstract interface SecureDirectoryStream implements java.nio.file.DirectoryStream {
+ public abstract interface SecureDirectoryStream<T> implements java.nio.file.DirectoryStream {
method public abstract void deleteDirectory(T) throws java.io.IOException;
method public abstract void deleteFile(T) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.lang.Class<V>);
- method public abstract V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
}
- public class SimpleFileVisitor implements java.nio.file.FileVisitor {
+ public class SimpleFileVisitor<T> implements java.nio.file.FileVisitor {
ctor protected SimpleFileVisitor();
method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -54344,13 +54365,13 @@ package java.nio.file {
field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
}
- public abstract interface WatchEvent {
+ public abstract interface WatchEvent<T> {
method public abstract T context();
method public abstract int count();
method public abstract java.nio.file.WatchEvent.Kind<T> kind();
}
- public static abstract interface WatchEvent.Kind {
+ public static abstract interface WatchEvent.Kind<T> {
method public abstract java.lang.String name();
method public abstract java.lang.Class<T> type();
}
@@ -54486,7 +54507,7 @@ package java.nio.file.attribute {
method public abstract boolean isSystem();
}
- public abstract interface FileAttribute {
+ public abstract interface FileAttribute<T> {
method public abstract java.lang.String name();
method public abstract T value();
}
@@ -54583,7 +54604,7 @@ package java.nio.file.spi {
method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
method public abstract java.nio.file.Path getPath(java.net.URI);
@@ -54600,7 +54621,7 @@ package java.nio.file.spi {
method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public abstract <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public abstract java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public abstract void setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54630,12 +54651,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();
}
@@ -54674,7 +54695,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;
@@ -54686,7 +54707,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;
@@ -54878,7 +54899,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;
}
@@ -54887,7 +54908,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;
}
@@ -55175,7 +55196,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();
}
@@ -55184,7 +55205,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;
}
@@ -57378,11 +57399,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;
}
@@ -57506,7 +57527,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;
}
}
@@ -58039,7 +58060,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>);
@@ -58053,10 +58074,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>);
@@ -58073,7 +58094,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);
@@ -58089,7 +58110,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();
@@ -58097,7 +58118,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();
@@ -58105,23 +58126,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>);
@@ -58153,7 +58174,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>);
@@ -58170,7 +58191,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);
@@ -58187,10 +58208,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);
@@ -58199,8 +58220,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);
@@ -58248,15 +58269,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);
@@ -58274,11 +58295,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);
@@ -58298,18 +58319,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[]);
@@ -58493,7 +58514,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();
@@ -58511,86 +58532,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>);
@@ -58649,7 +58670,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);
@@ -58679,7 +58700,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);
@@ -58710,7 +58731,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>);
@@ -58718,23 +58739,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();
}
@@ -58742,7 +58763,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();
}
@@ -58828,7 +58849,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();
@@ -58848,7 +58869,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);
@@ -58859,7 +58880,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();
@@ -58894,7 +58915,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>);
@@ -58961,14 +58982,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();
@@ -58977,14 +58998,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);
@@ -59015,7 +59036,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>);
@@ -59042,10 +59063,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();
@@ -59096,8 +59117,10 @@ package java.util {
method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
method public java.lang.String getUnicodeLocaleType(java.lang.String);
method public java.lang.String getVariant();
+ method public boolean hasExtensions();
method public static synchronized void setDefault(java.util.Locale);
method public static synchronized void setDefault(java.util.Locale.Category, java.util.Locale);
+ method public java.util.Locale stripExtensions();
method public java.lang.String toLanguageTag();
method public final java.lang.String toString();
field public static final java.util.Locale CANADA;
@@ -59162,7 +59185,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>);
@@ -59190,11 +59213,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();
@@ -59218,7 +59241,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();
@@ -59242,7 +59265,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();
@@ -59266,16 +59289,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);
}
@@ -59297,19 +59320,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 {
@@ -59320,7 +59343,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 {
@@ -59331,7 +59354,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 {
@@ -59342,10 +59365,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);
}
@@ -59370,7 +59393,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>);
@@ -59419,7 +59442,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);
@@ -59463,6 +59486,7 @@ package java.util {
method public static final void clearCache();
method public static final void clearCache(java.lang.ClassLoader);
method public boolean containsKey(java.lang.String);
+ method public java.lang.String getBaseBundleName();
method public static final java.util.ResourceBundle getBundle(java.lang.String);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
@@ -59571,15 +59595,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();
@@ -59594,7 +59618,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 {
@@ -59620,7 +59644,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();
@@ -59632,7 +59656,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);
@@ -59641,7 +59665,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>);
@@ -59684,7 +59708,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();
@@ -59694,25 +59718,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);
@@ -59739,7 +59763,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();
@@ -59774,7 +59798,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();
@@ -59858,7 +59882,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>);
@@ -59895,7 +59919,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>);
@@ -59948,7 +59972,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();
@@ -59983,7 +60007,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();
@@ -59999,18 +60023,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>);
@@ -60029,7 +60053,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);
@@ -60061,7 +60085,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>);
@@ -60080,7 +60104,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;
}
@@ -60089,28 +60113,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();
@@ -60125,23 +60149,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);
@@ -60161,7 +60185,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>);
@@ -60169,17 +60193,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);
@@ -60189,18 +60213,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);
@@ -60210,7 +60234,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>);
@@ -60224,29 +60248,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);
@@ -60254,7 +60278,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);
@@ -60262,13 +60286,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<?>);
@@ -60280,11 +60304,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);
@@ -60295,7 +60319,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);
@@ -60325,7 +60349,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();
@@ -60336,14 +60360,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);
@@ -60356,7 +60380,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>);
@@ -60400,7 +60424,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>);
@@ -60428,7 +60452,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[]);
@@ -60460,10 +60484,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>);
@@ -60481,7 +60505,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();
@@ -60518,7 +60542,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>);
@@ -60539,7 +60563,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;
@@ -60556,7 +60580,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();
@@ -60568,21 +60592,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<?>);
@@ -60599,8 +60623,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);
@@ -60628,7 +60652,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();
@@ -60637,7 +60661,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;
}
@@ -60650,11 +60674,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);
@@ -60674,7 +60698,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();
@@ -60700,7 +60724,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;
@@ -60708,7 +60732,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);
@@ -60723,7 +60747,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>);
@@ -60767,7 +60791,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>);
@@ -60786,7 +60810,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>);
@@ -60833,7 +60857,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>);
@@ -60862,7 +60886,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();
@@ -60881,22 +60905,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 {
@@ -60904,13 +60928,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);
@@ -60940,7 +60964,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>);
@@ -61058,7 +61082,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;
@@ -61128,7 +61152,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);
@@ -61143,7 +61167,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);
@@ -61196,7 +61220,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);
@@ -61211,13 +61235,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);
@@ -61228,7 +61252,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>);
@@ -61243,7 +61267,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>);
@@ -61259,7 +61283,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);
@@ -61268,13 +61292,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);
@@ -61577,33 +61601,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>);
}
@@ -61617,7 +61641,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);
}
@@ -61647,11 +61671,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 {
@@ -61663,7 +61687,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);
}
@@ -61702,7 +61726,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);
}
@@ -61732,56 +61756,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();
}
}
@@ -62369,7 +62393,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();
@@ -62380,13 +62404,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();
}
@@ -62399,43 +62423,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 {
@@ -62444,7 +62468,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();
@@ -62462,7 +62486,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);
@@ -62495,7 +62519,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();
@@ -62513,7 +62537,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);
@@ -62547,7 +62571,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();
@@ -62565,7 +62589,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);
@@ -62592,49 +62616,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();
@@ -62647,8 +62671,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);
}
}
@@ -64821,16 +64845,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();
diff --git a/api/system-current.txt b/api/system-current.txt
index a4477f3e0dda..68c7b486022e 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3022,11 +3022,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 +3172,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 +3264,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 +3307,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 +3354,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);
}
@@ -4707,7 +4707,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 +4974,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>);
@@ -6675,6 +6675,7 @@ package android.app.job {
method public abstract java.util.List<android.app.job.JobInfo> getAllPendingJobs();
method public abstract android.app.job.JobInfo getPendingJob(int);
method public abstract int schedule(android.app.job.JobInfo);
+ method public abstract int scheduleAsPackage(android.app.job.JobInfo, java.lang.String, int, java.lang.String);
field public static final int RESULT_FAILURE = 0; // 0x0
field public static final int RESULT_SUCCESS = 1; // 0x1
}
@@ -7925,7 +7926,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();
@@ -8107,7 +8108,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);
@@ -8120,7 +8121,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);
}
@@ -8393,7 +8394,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();
@@ -8761,8 +8762,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);
@@ -9249,7 +9250,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();
@@ -9286,11 +9287,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);
}
@@ -11178,7 +11179,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();
@@ -13068,7 +13069,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 {
@@ -14200,7 +14201,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;
@@ -14285,7 +14286,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();
@@ -14350,7 +14351,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
@@ -14558,7 +14559,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);
@@ -14621,20 +14622,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();
@@ -14715,7 +14716,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();
@@ -14847,14 +14848,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);
}
@@ -17302,7 +17303,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);
@@ -17328,7 +17329,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();
@@ -17344,14 +17345,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();
}
@@ -18864,8 +18865,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);
@@ -18893,15 +18894,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);
@@ -18919,14 +18920,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();
@@ -19336,7 +19337,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();
@@ -19618,7 +19619,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;
@@ -30508,7 +30509,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...);
@@ -30735,16 +30736,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);
@@ -31249,8 +31250,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();
@@ -31283,7 +31284,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);
@@ -31296,9 +31297,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);
@@ -31329,7 +31330,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);
@@ -31341,9 +31342,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;
}
@@ -31421,11 +31422,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);
}
@@ -31566,7 +31567,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();
@@ -31636,6 +31637,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -31648,6 +31650,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
}
public static final class StrictMode.VmPolicy {
@@ -37116,7 +37119,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;
}
@@ -37267,7 +37270,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);
}
@@ -40417,14 +40420,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();
@@ -40439,7 +40442,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();
@@ -40485,7 +40488,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();
@@ -40511,8 +40514,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...);
@@ -40552,7 +40555,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 {
@@ -40607,20 +40610,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 {
@@ -40628,11 +40631,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();
@@ -40645,7 +40648,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;
@@ -41012,7 +41015,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();
@@ -41455,7 +41458,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);
@@ -41477,7 +41480,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();
@@ -41487,7 +41490,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
@@ -42464,7 +42467,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);
@@ -42560,7 +42563,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);
@@ -42967,7 +42970,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>);
@@ -42995,7 +42998,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>);
@@ -43016,7 +43019,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);
}
@@ -43158,13 +43161,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);
@@ -43264,7 +43267,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);
@@ -43284,7 +43287,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();
@@ -43372,9 +43375,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;
}
@@ -43407,22 +43410,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);
@@ -43466,7 +43469,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);
@@ -48246,7 +48249,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);
}
@@ -49261,7 +49264,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);
@@ -49384,7 +49387,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[]);
@@ -49445,7 +49448,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);
@@ -51730,7 +51733,7 @@ package android.widget {
package com.android.internal.util {
- public abstract interface Predicate {
+ public abstract interface Predicate<T> {
method public abstract boolean apply(T);
}
@@ -53802,22 +53805,22 @@ 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 A[] getAnnotationsByType(java.lang.Class<A>);
+ method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
method public java.lang.String getCanonicalName();
method public java.lang.ClassLoader getClassLoader();
method public java.lang.Class<?>[] getClasses();
method public java.lang.Class<?> getComponentType();
method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
- method public A getDeclaredAnnotation(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 java.lang.Class<?>[] getDeclaredClasses();
method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
@@ -53929,7 +53932,7 @@ package java.lang {
public abstract interface Cloneable {
}
- public abstract interface Comparable {
+ public abstract interface Comparable<T> {
method public abstract int compareTo(T);
}
@@ -53983,7 +53986,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);
@@ -53993,7 +53996,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 {
@@ -54112,7 +54115,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);
}
@@ -54191,7 +54194,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();
@@ -54406,12 +54409,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();
@@ -55010,13 +55013,13 @@ 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();
method public void remove();
method public void set(T);
- method public static java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
+ method public static <S> java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
}
public class Throwable implements java.io.Serializable {
@@ -55119,6 +55122,8 @@ package java.lang.annotation {
enum_constant public static final java.lang.annotation.ElementType PACKAGE;
enum_constant public static final java.lang.annotation.ElementType PARAMETER;
enum_constant public static final java.lang.annotation.ElementType TYPE;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_PARAMETER;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_USE;
}
public class IncompleteAnnotationException extends java.lang.RuntimeException {
@@ -55154,30 +55159,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>);
}
@@ -55188,7 +55193,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();
@@ -55197,12 +55202,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> T 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>);
}
@@ -55230,7 +55235,7 @@ 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.Executable {
+ public final class Constructor<T> extends java.lang.reflect.Executable {
method public java.lang.Class<T> getDeclaringClass();
method public java.lang.Class<?>[] getExceptionTypes();
method public int getModifiers();
@@ -55252,7 +55257,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -55375,6 +55382,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ 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 java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
@@ -55398,7 +55420,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();
@@ -56187,7 +56209,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();
}
@@ -56719,9 +56741,9 @@ package java.nio.channels {
}
public abstract interface AsynchronousByteChannel implements java.nio.channels.AsynchronousChannel {
- method public abstract void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
}
@@ -56749,25 +56771,25 @@ package java.nio.channels {
public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
ctor protected AsynchronousFileChannel();
method public abstract void force(boolean) throws java.io.IOException;
- method public abstract void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
- method public final void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public abstract <A> void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public final <A> void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
method public abstract long size() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
}
public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
- method public abstract void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
+ method public abstract <A> void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
@@ -56775,30 +56797,30 @@ package java.nio.channels {
method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <T> java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
}
public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
- method public abstract void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
+ method public abstract <A> void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
- method public abstract java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <A> void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <T> java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
}
public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
@@ -56838,7 +56860,7 @@ package java.nio.channels {
ctor public ClosedSelectorException();
}
- public abstract interface CompletionHandler {
+ public abstract interface CompletionHandler<V, A> {
method public abstract void completed(V, A);
method public abstract void failed(java.lang.Throwable, A);
}
@@ -56862,7 +56884,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;
@@ -56967,8 +56989,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();
}
@@ -57090,7 +57112,7 @@ package java.nio.channels {
method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
method public abstract java.net.SocketAddress getLocalAddress() 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();
}
@@ -57113,7 +57135,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();
@@ -57398,11 +57420,11 @@ package java.nio.file {
ctor public DirectoryNotEmptyException(java.lang.String);
}
- public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable {
+ public abstract interface DirectoryStream<T> implements java.io.Closeable java.lang.Iterable {
method public abstract java.util.Iterator<T> iterator();
}
- public static abstract interface DirectoryStream.Filter {
+ public static abstract interface DirectoryStream.Filter<T> {
method public abstract boolean accept(T) throws java.io.IOException;
}
@@ -57414,7 +57436,7 @@ package java.nio.file {
public abstract class FileStore {
ctor protected FileStore();
method public abstract java.lang.Object getAttribute(java.lang.String) throws java.io.IOException;
- method public abstract V getFileStoreAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileStoreAttributeView> V getFileStoreAttributeView(java.lang.Class<V>);
method public abstract long getTotalSpace() throws java.io.IOException;
method public abstract long getUnallocatedSpace() throws java.io.IOException;
method public abstract long getUsableSpace() throws java.io.IOException;
@@ -57486,7 +57508,7 @@ package java.nio.file {
enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
}
- public abstract interface FileVisitor {
+ public abstract interface FileVisitor<T> {
method public abstract java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -57511,7 +57533,7 @@ package java.nio.file {
method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
method public static java.util.stream.Stream<java.nio.file.Path> find(java.nio.file.Path, int, java.util.function.BiPredicate<java.nio.file.Path, java.nio.file.attribute.BasicFileAttributes>, java.nio.file.FileVisitOption...) throws java.io.IOException;
method public static java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
- method public static V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public static <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -57544,7 +57566,7 @@ package java.nio.file {
method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path) throws java.io.IOException;
- method public static A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public static <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -57652,17 +57674,17 @@ package java.nio.file {
ctor public ReadOnlyFileSystemException();
}
- public abstract interface SecureDirectoryStream implements java.nio.file.DirectoryStream {
+ public abstract interface SecureDirectoryStream<T> implements java.nio.file.DirectoryStream {
method public abstract void deleteDirectory(T) throws java.io.IOException;
method public abstract void deleteFile(T) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.lang.Class<V>);
- method public abstract V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
}
- public class SimpleFileVisitor implements java.nio.file.FileVisitor {
+ public class SimpleFileVisitor<T> implements java.nio.file.FileVisitor {
ctor protected SimpleFileVisitor();
method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -57700,13 +57722,13 @@ package java.nio.file {
field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
}
- public abstract interface WatchEvent {
+ public abstract interface WatchEvent<T> {
method public abstract T context();
method public abstract int count();
method public abstract java.nio.file.WatchEvent.Kind<T> kind();
}
- public static abstract interface WatchEvent.Kind {
+ public static abstract interface WatchEvent.Kind<T> {
method public abstract java.lang.String name();
method public abstract java.lang.Class<T> type();
}
@@ -57842,7 +57864,7 @@ package java.nio.file.attribute {
method public abstract boolean isSystem();
}
- public abstract interface FileAttribute {
+ public abstract interface FileAttribute<T> {
method public abstract java.lang.String name();
method public abstract T value();
}
@@ -57939,7 +57961,7 @@ package java.nio.file.spi {
method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
method public abstract java.nio.file.Path getPath(java.net.URI);
@@ -57956,7 +57978,7 @@ package java.nio.file.spi {
method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public abstract <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public abstract java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public abstract void setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -57986,12 +58008,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();
}
@@ -58030,7 +58052,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;
@@ -58042,7 +58064,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;
@@ -58234,7 +58256,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;
}
@@ -58243,7 +58265,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;
}
@@ -58531,7 +58553,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();
}
@@ -58540,7 +58562,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;
}
@@ -60734,11 +60756,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;
}
@@ -60862,7 +60884,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;
}
}
@@ -61395,7 +61417,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>);
@@ -61409,10 +61431,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>);
@@ -61429,7 +61451,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);
@@ -61445,7 +61467,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();
@@ -61453,7 +61475,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();
@@ -61461,23 +61483,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>);
@@ -61509,7 +61531,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>);
@@ -61526,7 +61548,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);
@@ -61543,10 +61565,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);
@@ -61555,8 +61577,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);
@@ -61604,15 +61626,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);
@@ -61630,11 +61652,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);
@@ -61654,18 +61676,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[]);
@@ -61849,7 +61871,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();
@@ -61867,86 +61889,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>);
@@ -62005,7 +62027,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);
@@ -62035,7 +62057,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);
@@ -62066,7 +62088,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>);
@@ -62074,23 +62096,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();
}
@@ -62098,7 +62120,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();
}
@@ -62184,7 +62206,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();
@@ -62204,7 +62226,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);
@@ -62215,7 +62237,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();
@@ -62250,7 +62272,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>);
@@ -62317,14 +62339,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();
@@ -62333,14 +62355,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);
@@ -62371,7 +62393,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>);
@@ -62398,10 +62420,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();
@@ -62452,8 +62474,10 @@ package java.util {
method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
method public java.lang.String getUnicodeLocaleType(java.lang.String);
method public java.lang.String getVariant();
+ method public boolean hasExtensions();
method public static synchronized void setDefault(java.util.Locale);
method public static synchronized void setDefault(java.util.Locale.Category, java.util.Locale);
+ method public java.util.Locale stripExtensions();
method public java.lang.String toLanguageTag();
method public final java.lang.String toString();
field public static final java.util.Locale CANADA;
@@ -62518,7 +62542,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>);
@@ -62546,11 +62570,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();
@@ -62574,7 +62598,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();
@@ -62598,7 +62622,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();
@@ -62622,16 +62646,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);
}
@@ -62653,19 +62677,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 {
@@ -62676,7 +62700,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 {
@@ -62687,7 +62711,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 {
@@ -62698,10 +62722,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);
}
@@ -62726,7 +62750,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>);
@@ -62775,7 +62799,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);
@@ -62819,6 +62843,7 @@ package java.util {
method public static final void clearCache();
method public static final void clearCache(java.lang.ClassLoader);
method public boolean containsKey(java.lang.String);
+ method public java.lang.String getBaseBundleName();
method public static final java.util.ResourceBundle getBundle(java.lang.String);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
@@ -62927,15 +62952,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();
@@ -62950,7 +62975,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 {
@@ -62976,7 +63001,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();
@@ -62988,7 +63013,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);
@@ -62997,7 +63022,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>);
@@ -63040,7 +63065,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();
@@ -63050,25 +63075,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);
@@ -63095,7 +63120,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();
@@ -63130,7 +63155,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();
@@ -63214,7 +63239,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>);
@@ -63251,7 +63276,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>);
@@ -63304,7 +63329,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();
@@ -63339,7 +63364,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();
@@ -63355,18 +63380,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>);
@@ -63385,7 +63410,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);
@@ -63417,7 +63442,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>);
@@ -63436,7 +63461,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;
}
@@ -63445,28 +63470,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();
@@ -63481,23 +63506,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);
@@ -63517,7 +63542,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>);
@@ -63525,17 +63550,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);
@@ -63545,18 +63570,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);
@@ -63566,7 +63591,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>);
@@ -63580,29 +63605,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);
@@ -63610,7 +63635,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);
@@ -63618,13 +63643,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<?>);
@@ -63636,11 +63661,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);
@@ -63651,7 +63676,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);
@@ -63681,7 +63706,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();
@@ -63692,14 +63717,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);
@@ -63712,7 +63737,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>);
@@ -63756,7 +63781,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>);
@@ -63784,7 +63809,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[]);
@@ -63816,10 +63841,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>);
@@ -63837,7 +63862,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();
@@ -63874,7 +63899,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>);
@@ -63895,7 +63920,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;
@@ -63912,7 +63937,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();
@@ -63924,21 +63949,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<?>);
@@ -63955,8 +63980,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);
@@ -63984,7 +64009,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();
@@ -63993,7 +64018,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;
}
@@ -64006,11 +64031,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);
@@ -64030,7 +64055,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();
@@ -64056,7 +64081,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;
@@ -64064,7 +64089,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);
@@ -64079,7 +64104,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>);
@@ -64123,7 +64148,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>);
@@ -64142,7 +64167,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>);
@@ -64189,7 +64214,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>);
@@ -64218,7 +64243,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();
@@ -64237,22 +64262,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 {
@@ -64260,13 +64285,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);
@@ -64296,7 +64321,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>);
@@ -64414,7 +64439,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;
@@ -64484,7 +64509,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);
@@ -64499,7 +64524,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);
@@ -64552,7 +64577,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);
@@ -64567,13 +64592,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);
@@ -64584,7 +64609,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>);
@@ -64599,7 +64624,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>);
@@ -64615,7 +64640,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);
@@ -64624,13 +64649,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);
@@ -64933,33 +64958,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>);
}
@@ -64973,7 +64998,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);
}
@@ -65003,11 +65028,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 {
@@ -65019,7 +65044,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);
}
@@ -65058,7 +65083,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);
}
@@ -65088,56 +65113,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();
}
}
@@ -65725,7 +65750,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();
@@ -65736,13 +65761,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();
}
@@ -65755,43 +65780,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 {
@@ -65800,7 +65825,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();
@@ -65818,7 +65843,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);
@@ -65851,7 +65876,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();
@@ -65869,7 +65894,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);
@@ -65903,7 +65928,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();
@@ -65921,7 +65946,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);
@@ -65948,49 +65973,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();
@@ -66003,8 +66028,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);
}
}
@@ -68177,16 +68202,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();
diff --git a/api/test-current.txt b/api/test-current.txt
index b3572ba7e821..2aa6cfe7e52f 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -2897,11 +2897,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;
@@ -3047,7 +3047,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();
@@ -3139,26 +3139,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);
@@ -3182,17 +3182,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...);
@@ -3229,12 +3229,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);
}
@@ -4562,7 +4562,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[]);
@@ -4829,12 +4829,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>);
@@ -7618,7 +7618,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();
@@ -7800,7 +7800,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);
@@ -7813,7 +7813,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);
}
@@ -8085,7 +8085,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();
@@ -8441,8 +8441,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);
@@ -8917,7 +8917,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();
@@ -8954,11 +8954,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);
}
@@ -10753,7 +10753,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();
@@ -12643,7 +12643,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 {
@@ -13767,7 +13767,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;
@@ -13852,7 +13852,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();
@@ -13917,7 +13917,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
@@ -14125,7 +14125,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);
@@ -14188,20 +14188,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();
@@ -14282,7 +14282,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();
@@ -14407,14 +14407,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);
}
@@ -16115,7 +16115,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);
@@ -16141,7 +16141,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();
@@ -16157,14 +16157,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();
}
@@ -17677,8 +17677,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);
@@ -17706,15 +17706,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);
@@ -17732,14 +17732,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();
@@ -18149,7 +18149,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();
@@ -18431,7 +18431,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;
@@ -28138,7 +28138,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...);
@@ -28364,16 +28364,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);
@@ -28878,8 +28878,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();
@@ -28912,7 +28912,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);
@@ -28925,9 +28925,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);
@@ -28958,7 +28958,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);
@@ -28970,9 +28970,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;
}
@@ -29050,11 +29050,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);
}
@@ -29168,7 +29168,7 @@ package android.os {
method public abstract void onProgress(int);
}
- public class RemoteCallbackList {
+ public class RemoteCallbackList<E extends android.os.IInterface> {
ctor public RemoteCallbackList();
method public int beginBroadcast();
method public void finishBroadcast();
@@ -29238,6 +29238,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder detectDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder detectNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder detectResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder detectUnbufferedIo();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeath();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDeathOnNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder penaltyDialog();
@@ -29250,6 +29251,7 @@ package android.os {
method public android.os.StrictMode.ThreadPolicy.Builder permitDiskWrites();
method public android.os.StrictMode.ThreadPolicy.Builder permitNetwork();
method public android.os.StrictMode.ThreadPolicy.Builder permitResourceMismatches();
+ method public android.os.StrictMode.ThreadPolicy.Builder permitUnbufferedIo();
}
public static final class StrictMode.VmPolicy {
@@ -34486,7 +34488,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;
}
@@ -34637,7 +34639,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);
}
@@ -37507,14 +37509,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();
@@ -37529,7 +37531,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();
@@ -37575,7 +37577,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();
@@ -37601,8 +37603,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...);
@@ -37642,7 +37644,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 {
@@ -37697,20 +37699,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 {
@@ -37718,11 +37720,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();
@@ -37735,7 +37737,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;
@@ -38092,7 +38094,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();
@@ -38535,7 +38537,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);
@@ -38557,7 +38559,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();
@@ -38567,7 +38569,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
@@ -39544,7 +39546,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);
@@ -39640,7 +39642,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);
@@ -40047,7 +40049,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>);
@@ -40075,7 +40077,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>);
@@ -40096,7 +40098,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);
}
@@ -40238,13 +40240,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);
@@ -40344,7 +40346,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);
@@ -40364,7 +40366,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();
@@ -40452,9 +40454,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;
}
@@ -40487,22 +40489,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);
@@ -40546,7 +40548,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);
@@ -45250,7 +45252,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);
}
@@ -45984,7 +45986,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);
@@ -46107,7 +46109,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[]);
@@ -46168,7 +46170,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);
@@ -48454,7 +48456,7 @@ package android.widget {
package com.android.internal.util {
- public abstract interface Predicate {
+ public abstract interface Predicate<T> {
method public abstract boolean apply(T);
}
@@ -50526,22 +50528,22 @@ 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 A[] getAnnotationsByType(java.lang.Class<A>);
+ method public <A extends java.lang.annotation.Annotation> A[] getAnnotationsByType(java.lang.Class<A>);
method public java.lang.String getCanonicalName();
method public java.lang.ClassLoader getClassLoader();
method public java.lang.Class<?>[] getClasses();
method public java.lang.Class<?> getComponentType();
method public java.lang.reflect.Constructor<T> getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
method public java.lang.reflect.Constructor<?>[] getConstructors() throws java.lang.SecurityException;
- method public A getDeclaredAnnotation(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 java.lang.Class<?>[] getDeclaredClasses();
method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException;
@@ -50653,7 +50655,7 @@ package java.lang {
public abstract interface Cloneable {
}
- public abstract interface Comparable {
+ public abstract interface Comparable<T> {
method public abstract int compareTo(T);
}
@@ -50707,7 +50709,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);
@@ -50717,7 +50719,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 {
@@ -50836,7 +50838,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);
}
@@ -50915,7 +50917,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();
@@ -51130,12 +51132,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();
@@ -51734,13 +51736,13 @@ 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();
method public void remove();
method public void set(T);
- method public static java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
+ method public static <S> java.lang.ThreadLocal<S> withInitial(java.util.function.Supplier<? extends S>);
}
public class Throwable implements java.io.Serializable {
@@ -51843,6 +51845,8 @@ package java.lang.annotation {
enum_constant public static final java.lang.annotation.ElementType PACKAGE;
enum_constant public static final java.lang.annotation.ElementType PARAMETER;
enum_constant public static final java.lang.annotation.ElementType TYPE;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_PARAMETER;
+ enum_constant public static final java.lang.annotation.ElementType TYPE_USE;
}
public class IncompleteAnnotationException extends java.lang.RuntimeException {
@@ -51878,30 +51882,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>);
}
@@ -51912,7 +51916,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();
@@ -51921,12 +51925,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> T 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>);
}
@@ -51954,7 +51958,7 @@ 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.Executable {
+ public final class Constructor<T> extends java.lang.reflect.Executable {
method public java.lang.Class<T> getDeclaringClass();
method public java.lang.Class<?>[] getExceptionTypes();
method public int getModifiers();
@@ -51976,7 +51980,9 @@ package java.lang.reflect {
method public abstract java.lang.annotation.Annotation[][] getParameterAnnotations();
method public int getParameterCount();
method public abstract java.lang.Class<?>[] getParameterTypes();
+ method public java.lang.reflect.Parameter[] getParameters();
method public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters();
+ method public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
method public boolean isSynthetic();
method public boolean isVarArgs();
method public abstract java.lang.String toGenericString();
@@ -52099,6 +52105,21 @@ package java.lang.reflect {
field public static final int VOLATILE = 64; // 0x40
}
+ public final class Parameter implements java.lang.reflect.AnnotatedElement {
+ 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 java.lang.reflect.Executable getDeclaringExecutable();
+ method public int getModifiers();
+ method public java.lang.String getName();
+ method public java.lang.reflect.Type getParameterizedType();
+ method public java.lang.Class<?> getType();
+ method public boolean isImplicit();
+ method public boolean isNamePresent();
+ method public boolean isSynthetic();
+ method public boolean isVarArgs();
+ }
+
public abstract interface ParameterizedType implements java.lang.reflect.Type {
method public abstract java.lang.reflect.Type[] getActualTypeArguments();
method public abstract java.lang.reflect.Type getOwnerType();
@@ -52122,7 +52143,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();
@@ -52911,7 +52932,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();
}
@@ -53443,9 +53464,9 @@ package java.nio.channels {
}
public abstract interface AsynchronousByteChannel implements java.nio.channels.AsynchronousChannel {
- method public abstract void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
}
@@ -53473,25 +53494,25 @@ package java.nio.channels {
public abstract class AsynchronousFileChannel implements java.nio.channels.AsynchronousChannel {
ctor protected AsynchronousFileChannel();
method public abstract void force(boolean) throws java.io.IOException;
- method public abstract void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
- method public final void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public abstract <A> void lock(long, long, boolean, A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
+ method public final <A> void lock(A, java.nio.channels.CompletionHandler<java.nio.channels.FileLock, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.FileLock> lock(long, long, boolean);
method public final java.util.concurrent.Future<java.nio.channels.FileLock> lock();
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.util.concurrent.ExecutorService, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public static java.nio.channels.AsynchronousFileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer, long);
method public abstract long size() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousFileChannel truncate(long) throws java.io.IOException;
method public abstract java.nio.channels.FileLock tryLock(long, long, boolean) throws java.io.IOException;
method public final java.nio.channels.FileLock tryLock() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer, long);
}
public abstract class AsynchronousServerSocketChannel implements java.nio.channels.AsynchronousChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousServerSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
- method public abstract void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
+ method public abstract <A> void accept(A, java.nio.channels.CompletionHandler<java.nio.channels.AsynchronousSocketChannel, ? super A>);
method public abstract java.util.concurrent.Future<java.nio.channels.AsynchronousSocketChannel> accept();
method public final java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
@@ -53499,30 +53520,30 @@ package java.nio.channels {
method public static java.nio.channels.AsynchronousServerSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousServerSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <T> java.nio.channels.AsynchronousServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
}
public abstract class AsynchronousSocketChannel implements java.nio.channels.AsynchronousByteChannel java.nio.channels.NetworkChannel {
ctor protected AsynchronousSocketChannel(java.nio.channels.spi.AsynchronousChannelProvider);
method public abstract java.nio.channels.AsynchronousSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
- method public abstract void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
+ method public abstract <A> void connect(java.net.SocketAddress, A, java.nio.channels.CompletionHandler<java.lang.Void, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress);
method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException;
method public static java.nio.channels.AsynchronousSocketChannel open() throws java.io.IOException;
method public final java.nio.channels.spi.AsynchronousChannelProvider provider();
- method public abstract void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> read(java.nio.ByteBuffer);
- method public abstract void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
- method public abstract java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+ method public abstract <A> void read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <T> java.nio.channels.AsynchronousSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownInput() throws java.io.IOException;
method public abstract java.nio.channels.AsynchronousSocketChannel shutdownOutput() throws java.io.IOException;
- method public abstract void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
- method public final void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
+ method public final <A> void write(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>);
method public abstract java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer);
- method public abstract void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
+ method public abstract <A> void write(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>);
}
public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel {
@@ -53562,7 +53583,7 @@ package java.nio.channels {
ctor public ClosedSelectorException();
}
- public abstract interface CompletionHandler {
+ public abstract interface CompletionHandler<V, A> {
method public abstract void completed(V, A);
method public abstract void failed(java.lang.Throwable, A);
}
@@ -53586,7 +53607,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;
@@ -53691,8 +53712,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();
}
@@ -53814,7 +53835,7 @@ package java.nio.channels {
method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
method public abstract java.net.SocketAddress getLocalAddress() 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();
}
@@ -53837,7 +53858,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();
@@ -54122,11 +54143,11 @@ package java.nio.file {
ctor public DirectoryNotEmptyException(java.lang.String);
}
- public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable {
+ public abstract interface DirectoryStream<T> implements java.io.Closeable java.lang.Iterable {
method public abstract java.util.Iterator<T> iterator();
}
- public static abstract interface DirectoryStream.Filter {
+ public static abstract interface DirectoryStream.Filter<T> {
method public abstract boolean accept(T) throws java.io.IOException;
}
@@ -54138,7 +54159,7 @@ package java.nio.file {
public abstract class FileStore {
ctor protected FileStore();
method public abstract java.lang.Object getAttribute(java.lang.String) throws java.io.IOException;
- method public abstract V getFileStoreAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileStoreAttributeView> V getFileStoreAttributeView(java.lang.Class<V>);
method public abstract long getTotalSpace() throws java.io.IOException;
method public abstract long getUnallocatedSpace() throws java.io.IOException;
method public abstract long getUsableSpace() throws java.io.IOException;
@@ -54210,7 +54231,7 @@ package java.nio.file {
enum_constant public static final java.nio.file.FileVisitResult TERMINATE;
}
- public abstract interface FileVisitor {
+ public abstract interface FileVisitor<T> {
method public abstract java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
method public abstract java.nio.file.FileVisitResult visitFile(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -54235,7 +54256,7 @@ package java.nio.file {
method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...);
method public static java.util.stream.Stream<java.nio.file.Path> find(java.nio.file.Path, int, java.util.function.BiPredicate<java.nio.file.Path, java.nio.file.attribute.BasicFileAttributes>, java.nio.file.FileVisitOption...) throws java.io.IOException;
method public static java.lang.Object getAttribute(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
- method public static V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public static <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public static java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.attribute.FileTime getLastModifiedTime(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.attribute.UserPrincipal getOwner(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54268,7 +54289,7 @@ package java.nio.file {
method public static byte[] readAllBytes(java.nio.file.Path) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException;
method public static java.util.List<java.lang.String> readAllLines(java.nio.file.Path) throws java.io.IOException;
- method public static A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public static <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public static java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public static java.nio.file.Path setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54376,17 +54397,17 @@ package java.nio.file {
ctor public ReadOnlyFileSystemException();
}
- public abstract interface SecureDirectoryStream implements java.nio.file.DirectoryStream {
+ public abstract interface SecureDirectoryStream<T> implements java.nio.file.DirectoryStream {
method public abstract void deleteDirectory(T) throws java.io.IOException;
method public abstract void deleteFile(T) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.lang.Class<V>);
- method public abstract V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.lang.Class<V>);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(T, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract void move(T, java.nio.file.SecureDirectoryStream<T>, T) throws java.io.IOException;
method public abstract java.nio.channels.SeekableByteChannel newByteChannel(T, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract java.nio.file.SecureDirectoryStream<T> newDirectoryStream(T, java.nio.file.LinkOption...) throws java.io.IOException;
}
- public class SimpleFileVisitor implements java.nio.file.FileVisitor {
+ public class SimpleFileVisitor<T> implements java.nio.file.FileVisitor {
ctor protected SimpleFileVisitor();
method public java.nio.file.FileVisitResult postVisitDirectory(T, java.io.IOException) throws java.io.IOException;
method public java.nio.file.FileVisitResult preVisitDirectory(T, java.nio.file.attribute.BasicFileAttributes) throws java.io.IOException;
@@ -54424,13 +54445,13 @@ package java.nio.file {
field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW;
}
- public abstract interface WatchEvent {
+ public abstract interface WatchEvent<T> {
method public abstract T context();
method public abstract int count();
method public abstract java.nio.file.WatchEvent.Kind<T> kind();
}
- public static abstract interface WatchEvent.Kind {
+ public static abstract interface WatchEvent.Kind<T> {
method public abstract java.lang.String name();
method public abstract java.lang.Class<T> type();
}
@@ -54566,7 +54587,7 @@ package java.nio.file.attribute {
method public abstract boolean isSystem();
}
- public abstract interface FileAttribute {
+ public abstract interface FileAttribute<T> {
method public abstract java.lang.String name();
method public abstract T value();
}
@@ -54663,7 +54684,7 @@ package java.nio.file.spi {
method public void createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException;
method public abstract void delete(java.nio.file.Path) throws java.io.IOException;
method public boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException;
- method public abstract V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
+ method public abstract <V extends java.nio.file.attribute.FileAttributeView> V getFileAttributeView(java.nio.file.Path, java.lang.Class<V>, java.nio.file.LinkOption...);
method public abstract java.nio.file.FileStore getFileStore(java.nio.file.Path) throws java.io.IOException;
method public abstract java.nio.file.FileSystem getFileSystem(java.net.URI);
method public abstract java.nio.file.Path getPath(java.net.URI);
@@ -54680,7 +54701,7 @@ package java.nio.file.spi {
method public java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.util.Map<java.lang.String, ?>) throws java.io.IOException;
method public java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
method public java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException;
- method public abstract A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
+ method public abstract <A extends java.nio.file.attribute.BasicFileAttributes> A readAttributes(java.nio.file.Path, java.lang.Class<A>, java.nio.file.LinkOption...) throws java.io.IOException;
method public abstract java.util.Map<java.lang.String, java.lang.Object> readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption...) throws java.io.IOException;
method public java.nio.file.Path readSymbolicLink(java.nio.file.Path) throws java.io.IOException;
method public abstract void setAttribute(java.nio.file.Path, java.lang.String, java.lang.Object, java.nio.file.LinkOption...) throws java.io.IOException;
@@ -54710,12 +54731,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();
}
@@ -54754,7 +54775,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;
@@ -54766,7 +54787,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;
@@ -54958,7 +54979,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;
}
@@ -54967,7 +54988,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;
}
@@ -55255,7 +55276,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();
}
@@ -55264,7 +55285,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;
}
@@ -57458,11 +57479,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;
}
@@ -57586,7 +57607,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;
}
}
@@ -58119,7 +58140,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>);
@@ -58133,10 +58154,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>);
@@ -58153,7 +58174,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);
@@ -58169,7 +58190,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();
@@ -58177,7 +58198,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();
@@ -58185,23 +58206,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>);
@@ -58233,7 +58254,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>);
@@ -58250,7 +58271,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);
@@ -58267,10 +58288,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);
@@ -58279,8 +58300,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);
@@ -58328,15 +58349,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);
@@ -58354,11 +58375,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);
@@ -58378,18 +58399,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[]);
@@ -58573,7 +58594,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();
@@ -58591,86 +58612,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>);
@@ -58729,7 +58750,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);
@@ -58759,7 +58780,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);
@@ -58790,7 +58811,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>);
@@ -58798,23 +58819,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();
}
@@ -58822,7 +58843,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();
}
@@ -58908,7 +58929,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();
@@ -58928,7 +58949,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);
@@ -58939,7 +58960,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();
@@ -58974,7 +58995,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>);
@@ -59041,14 +59062,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();
@@ -59057,14 +59078,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);
@@ -59095,7 +59116,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>);
@@ -59122,10 +59143,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();
@@ -59176,8 +59197,10 @@ package java.util {
method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
method public java.lang.String getUnicodeLocaleType(java.lang.String);
method public java.lang.String getVariant();
+ method public boolean hasExtensions();
method public static synchronized void setDefault(java.util.Locale);
method public static synchronized void setDefault(java.util.Locale.Category, java.util.Locale);
+ method public java.util.Locale stripExtensions();
method public java.lang.String toLanguageTag();
method public final java.lang.String toString();
field public static final java.util.Locale CANADA;
@@ -59242,7 +59265,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>);
@@ -59270,11 +59293,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();
@@ -59298,7 +59321,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();
@@ -59322,7 +59345,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();
@@ -59346,16 +59369,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);
}
@@ -59377,19 +59400,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 {
@@ -59400,7 +59423,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 {
@@ -59411,7 +59434,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 {
@@ -59422,10 +59445,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);
}
@@ -59450,7 +59473,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>);
@@ -59499,7 +59522,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);
@@ -59543,6 +59566,7 @@ package java.util {
method public static final void clearCache();
method public static final void clearCache(java.lang.ClassLoader);
method public boolean containsKey(java.lang.String);
+ method public java.lang.String getBaseBundleName();
method public static final java.util.ResourceBundle getBundle(java.lang.String);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control);
method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale);
@@ -59651,15 +59675,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();
@@ -59674,7 +59698,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 {
@@ -59700,7 +59724,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();
@@ -59712,7 +59736,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);
@@ -59721,7 +59745,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>);
@@ -59764,7 +59788,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();
@@ -59774,25 +59798,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);
@@ -59819,7 +59843,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();
@@ -59854,7 +59878,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();
@@ -59938,7 +59962,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>);
@@ -59975,7 +59999,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>);
@@ -60028,7 +60052,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();
@@ -60063,7 +60087,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();
@@ -60079,18 +60103,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>);
@@ -60109,7 +60133,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);
@@ -60141,7 +60165,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>);
@@ -60160,7 +60184,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;
}
@@ -60169,28 +60193,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();
@@ -60205,23 +60229,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);
@@ -60241,7 +60265,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>);
@@ -60249,17 +60273,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);
@@ -60269,18 +60293,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);
@@ -60290,7 +60314,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>);
@@ -60304,29 +60328,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);
@@ -60334,7 +60358,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);
@@ -60342,13 +60366,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<?>);
@@ -60360,11 +60384,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);
@@ -60375,7 +60399,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);
@@ -60405,7 +60429,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();
@@ -60416,14 +60440,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);
@@ -60436,7 +60460,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>);
@@ -60480,7 +60504,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>);
@@ -60508,7 +60532,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[]);
@@ -60540,10 +60564,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>);
@@ -60561,7 +60585,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();
@@ -60598,7 +60622,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>);
@@ -60619,7 +60643,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;
@@ -60636,7 +60660,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();
@@ -60648,21 +60672,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<?>);
@@ -60679,8 +60703,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);
@@ -60708,7 +60732,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();
@@ -60717,7 +60741,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;
}
@@ -60730,11 +60754,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);
@@ -60754,7 +60778,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();
@@ -60780,7 +60804,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;
@@ -60788,7 +60812,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);
@@ -60803,7 +60827,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>);
@@ -60847,7 +60871,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>);
@@ -60866,7 +60890,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>);
@@ -60913,7 +60937,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>);
@@ -60942,7 +60966,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();
@@ -60961,22 +60985,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 {
@@ -60984,13 +61008,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);
@@ -61020,7 +61044,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>);
@@ -61138,7 +61162,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;
@@ -61208,7 +61232,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);
@@ -61223,7 +61247,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);
@@ -61276,7 +61300,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);
@@ -61291,13 +61315,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);
@@ -61308,7 +61332,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>);
@@ -61323,7 +61347,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>);
@@ -61339,7 +61363,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);
@@ -61348,13 +61372,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);
@@ -61657,33 +61681,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>);
}
@@ -61697,7 +61721,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);
}
@@ -61727,11 +61751,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 {
@@ -61743,7 +61767,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);
}
@@ -61782,7 +61806,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);
}
@@ -61812,56 +61836,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();
}
}
@@ -62449,7 +62473,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();
@@ -62460,13 +62484,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();
}
@@ -62479,43 +62503,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 {
@@ -62524,7 +62548,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();
@@ -62542,7 +62566,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);
@@ -62575,7 +62599,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();
@@ -62593,7 +62617,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);
@@ -62627,7 +62651,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();
@@ -62645,7 +62669,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);
@@ -62672,49 +62696,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();
@@ -62727,8 +62751,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);
}
}
@@ -64901,16 +64925,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();
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 7f467f0585c8..84457b441030 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -898,7 +898,7 @@ public class WallpaperManager {
* wallpaper.
*/
public void setResource(@RawRes int resid) throws IOException {
- setResource(resid, FLAG_SYSTEM);
+ setResource(resid, FLAG_SYSTEM | FLAG_LOCK);
}
/**
@@ -1003,7 +1003,7 @@ public class WallpaperManager {
*/
public int setBitmap(Bitmap fullImage, Rect visibleCropHint, boolean allowBackup)
throws IOException {
- return setBitmap(fullImage, visibleCropHint, allowBackup, FLAG_SYSTEM);
+ return setBitmap(fullImage, visibleCropHint, allowBackup, FLAG_SYSTEM | FLAG_LOCK);
}
/**
@@ -1128,7 +1128,7 @@ public class WallpaperManager {
*/
public int setStream(InputStream bitmapData, Rect visibleCropHint, boolean allowBackup)
throws IOException {
- return setStream(bitmapData, visibleCropHint, allowBackup, FLAG_SYSTEM);
+ return setStream(bitmapData, visibleCropHint, allowBackup, FLAG_SYSTEM | FLAG_LOCK);
}
/**
@@ -1367,7 +1367,7 @@ public class WallpaperManager {
*/
@SystemApi
public void clearWallpaper() {
- clearWallpaper(FLAG_SYSTEM, mContext.getUserId());
+ clearWallpaper(FLAG_SYSTEM | FLAG_LOCK, mContext.getUserId());
}
/**
diff --git a/core/java/android/app/job/JobScheduler.java b/core/java/android/app/job/JobScheduler.java
index 9618cd10c086..1b640d08dde2 100644
--- a/core/java/android/app/job/JobScheduler.java
+++ b/core/java/android/app/job/JobScheduler.java
@@ -18,6 +18,7 @@ package android.app.job;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import java.util.List;
@@ -75,6 +76,7 @@ public abstract class JobScheduler {
* @return {@link #RESULT_SUCCESS} or {@link #RESULT_FAILURE}
* @hide
*/
+ @SystemApi
public abstract int scheduleAsPackage(JobInfo job, String packageName, int userId, String tag);
/**
diff --git a/core/java/android/net/InterfaceConfiguration.java b/core/java/android/net/InterfaceConfiguration.java
index 8cdd15305018..ea53a71245a5 100644
--- a/core/java/android/net/InterfaceConfiguration.java
+++ b/core/java/android/net/InterfaceConfiguration.java
@@ -80,6 +80,14 @@ public class InterfaceConfiguration implements Parcelable {
mFlags.add(FLAG_DOWN);
}
+ /**
+ * Set flags so that no changes will be made to the up/down status.
+ */
+ public void ignoreInterfaceUpDownStatus() {
+ mFlags.remove(FLAG_UP);
+ mFlags.remove(FLAG_DOWN);
+ }
+
public LinkAddress getLinkAddress() {
return mAddr;
}
diff --git a/core/java/android/os/HwBlob.java b/core/java/android/os/HwBlob.java
index 153c6e634ecb..88226f0a1665 100644
--- a/core/java/android/os/HwBlob.java
+++ b/core/java/android/os/HwBlob.java
@@ -16,6 +16,8 @@
package android.os;
+import android.annotation.NonNull;
+
import libcore.util.NativeAllocationRegistry;
/** @hide */
@@ -54,6 +56,69 @@ public class HwBlob {
public native final long handle();
+ public static Boolean[] wrapArray(@NonNull boolean[] array) {
+ final int n = array.length;
+ Boolean[] wrappedArray = new Boolean[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Long[] wrapArray(@NonNull long[] array) {
+ final int n = array.length;
+ Long[] wrappedArray = new Long[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Byte[] wrapArray(@NonNull byte[] array) {
+ final int n = array.length;
+ Byte[] wrappedArray = new Byte[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Short[] wrapArray(@NonNull short[] array) {
+ final int n = array.length;
+ Short[] wrappedArray = new Short[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Integer[] wrapArray(@NonNull int[] array) {
+ final int n = array.length;
+ Integer[] wrappedArray = new Integer[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Float[] wrapArray(@NonNull float[] array) {
+ final int n = array.length;
+ Float[] wrappedArray = new Float[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
+ public static Double[] wrapArray(@NonNull double[] array) {
+ final int n = array.length;
+ Double[] wrappedArray = new Double[n];
+ for (int i = 0; i < n; ++i) {
+ wrappedArray[i] = array[i];
+ }
+ return wrappedArray;
+ }
+
// Returns address of the "freeFunction".
private static native final long native_init();
diff --git a/core/java/android/os/HwParcel.java b/core/java/android/os/HwParcel.java
index e4d57184ede9..180e8f46e93b 100644
--- a/core/java/android/os/HwParcel.java
+++ b/core/java/android/os/HwParcel.java
@@ -53,21 +53,13 @@ public class HwParcel {
public native final void writeDouble(double val);
public native final void writeString(String val);
- public native final void writeBoolArray(int size, boolean[] val);
public native final void writeBoolVector(boolean[] val);
- public native final void writeInt8Array(int size, byte[] val);
public native final void writeInt8Vector(byte[] val);
- public native final void writeInt16Array(int size, short[] val);
public native final void writeInt16Vector(short[] val);
- public native final void writeInt32Array(int size, int[] val);
public native final void writeInt32Vector(int[] val);
- public native final void writeInt64Array(int size, long[] val);
public native final void writeInt64Vector(long[] val);
- public native final void writeFloatArray(int size, float[] val);
public native final void writeFloatVector(float[] val);
- public native final void writeDoubleArray(int size, double[] val);
public native final void writeDoubleVector(double[] val);
- public native final void writeStringArray(int size, String[] val);
public native final void writeStringVector(String[] val);
public native final void writeStrongBinder(IHwBinder binder);
@@ -82,21 +74,13 @@ public class HwParcel {
public native final double readDouble();
public native final String readString();
- public native final boolean[] readBoolArray(int size);
public native final boolean[] readBoolVector();
- public native final byte[] readInt8Array(int size);
public native final byte[] readInt8Vector();
- public native final short[] readInt16Array(int size);
public native final short[] readInt16Vector();
- public native final int[] readInt32Array(int size);
public native final int[] readInt32Vector();
- public native final long[] readInt64Array(int size);
public native final long[] readInt64Vector();
- public native final float[] readFloatArray(int size);
public native final float[] readFloatVector();
- public native final double[] readDoubleArray(int size);
public native final double[] readDoubleVector();
- public native final String[] readStringArray(int size);
public native final String[] readStringVector();
public native final IHwBinder readStrongBinder();
diff --git a/core/java/android/os/IRecoverySystem.aidl b/core/java/android/os/IRecoverySystem.aidl
index 12830a4996aa..c5ceecd7c8b9 100644
--- a/core/java/android/os/IRecoverySystem.aidl
+++ b/core/java/android/os/IRecoverySystem.aidl
@@ -25,4 +25,5 @@ interface IRecoverySystem {
boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener);
boolean setupBcb(in String command);
boolean clearBcb();
+ void rebootRecoveryWithCommand(in String command);
}
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index 028e30ab93f0..662e14cce49b 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -93,6 +93,14 @@ public class RecoverySystem {
*/
public static final File UNCRYPT_PACKAGE_FILE = new File(RECOVERY_DIR, "uncrypt_file");
+ /**
+ * UNCRYPT_STATUS_FILE stores the time cost (and error code in the case of a failure)
+ * of uncrypt.
+ *
+ * @hide
+ */
+ public static final File UNCRYPT_STATUS_FILE = new File(RECOVERY_DIR, "uncrypt_status");
+
// Length limits for reading files.
private static final int LOG_FILE_MAX_LENGTH = 64 * 1024;
@@ -663,28 +671,22 @@ public class RecoverySystem {
* @throws IOException if something goes wrong.
*/
private static void bootCommand(Context context, String... args) throws IOException {
- synchronized (sRequestLock) {
- LOG_FILE.delete();
+ LOG_FILE.delete();
- StringBuilder command = new StringBuilder();
- for (String arg : args) {
- if (!TextUtils.isEmpty(arg)) {
- command.append(arg);
- command.append("\n");
- }
+ StringBuilder command = new StringBuilder();
+ for (String arg : args) {
+ if (!TextUtils.isEmpty(arg)) {
+ command.append(arg);
+ command.append("\n");
}
+ }
- // Write the command into BCB (bootloader control block).
- RecoverySystem rs = (RecoverySystem) context.getSystemService(
- Context.RECOVERY_SERVICE);
- rs.setupBcb(command.toString());
-
- // Having set up the BCB, go ahead and reboot.
- PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
- pm.reboot(PowerManager.REBOOT_RECOVERY);
+ // Write the command into BCB (bootloader control block) and boot from
+ // there. Will not return unless failed.
+ RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE);
+ rs.rebootRecoveryWithCommand(command.toString());
- throw new IOException("Reboot failed (no permissions?)");
- }
+ throw new IOException("Reboot failed (no permissions?)");
}
// Read last_install; then report time (in seconds) and I/O (in MiB) for
@@ -879,6 +881,17 @@ public class RecoverySystem {
}
/**
+ * Talks to RecoverySystemService via Binder to set up the BCB command and
+ * reboot into recovery accordingly.
+ */
+ private void rebootRecoveryWithCommand(String command) {
+ try {
+ mService.rebootRecoveryWithCommand(command);
+ } catch (RemoteException ignored) {
+ }
+ }
+
+ /**
* Internally, recovery treats each line of the command file as a separate
* argv, so we only need to protect against newlines and nulls.
*/
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index c36b48886f37..ff69cf6a94bc 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -191,9 +191,14 @@ public final class StrictMode {
*/
public static final int DETECT_RESOURCE_MISMATCH = 0x10; // for ThreadPolicy
+ /**
+ * @hide
+ */
+ public static final int DETECT_UNBUFFERED_IO = 0x20; // for ThreadPolicy
+
private static final int ALL_THREAD_DETECT_BITS =
DETECT_DISK_WRITE | DETECT_DISK_READ | DETECT_NETWORK | DETECT_CUSTOM |
- DETECT_RESOURCE_MISMATCH;
+ DETECT_RESOURCE_MISMATCH | DETECT_UNBUFFERED_IO;
// Byte 2: Process-policy
@@ -465,6 +470,20 @@ public final class StrictMode {
}
/**
+ * Detect unbuffered input/output operations.
+ */
+ public Builder detectUnbufferedIo() {
+ return enable(DETECT_UNBUFFERED_IO);
+ }
+
+ /**
+ * Detect unbuffered input/output operations.
+ */
+ public Builder permitUnbufferedIo() {
+ return disable(DETECT_UNBUFFERED_IO);
+ }
+
+ /**
* Enables detection of mismatches between defined resource types
* and getter calls.
* <p>
@@ -974,6 +993,15 @@ public final class StrictMode {
}
/**
+ * @hide
+ */
+ private static class StrictModeUnbufferedIOViolation extends StrictModeViolation {
+ public StrictModeUnbufferedIOViolation(int policyMask) {
+ super(policyMask, DETECT_UNBUFFERED_IO, null);
+ }
+ }
+
+ /**
* Returns the bitmask of the current thread's policy.
*
* @return the bitmask of all the DETECT_* and PENALTY_* bits currently enabled
@@ -1281,6 +1309,20 @@ public final class StrictMode {
startHandlingViolationException(e);
}
+ // Part of BlockGuard.Policy; just part of StrictMode:
+ public void onUnbufferedIO() {
+ if ((mPolicyMask & DETECT_UNBUFFERED_IO) == 0) {
+ return;
+ }
+ if (tooManyViolationsThisLoop()) {
+ return;
+ }
+ BlockGuard.BlockGuardPolicyException e =
+ new StrictModeUnbufferedIOViolation(mPolicyMask);
+ e.fillInStackTrace();
+ startHandlingViolationException(e);
+ }
+
// Part of BlockGuard.Policy interface:
public void onReadFromDisk() {
if ((mPolicyMask & DETECT_DISK_READ) == 0) {
@@ -2208,6 +2250,18 @@ public final class StrictMode {
/**
* @hide
*/
+ public static void noteUnbufferedIO() {
+ BlockGuard.Policy policy = BlockGuard.getThreadPolicy();
+ if (!(policy instanceof AndroidBlockGuardPolicy)) {
+ // StrictMode not enabled.
+ return;
+ }
+ ((AndroidBlockGuardPolicy) policy).onUnbufferedIO();
+ }
+
+ /**
+ * @hide
+ */
public static void noteDiskRead() {
BlockGuard.Policy policy = BlockGuard.getThreadPolicy();
if (!(policy instanceof AndroidBlockGuardPolicy)) {
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 11734d31388e..830df990f205 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -335,20 +335,17 @@ public final class WindowManagerGlobal {
mViews.add(view);
mRoots.add(root);
mParams.add(wparams);
- }
- // do this last because it fires off messages to start doing things
- try {
- root.setView(view, wparams, panelParentView);
- } catch (RuntimeException e) {
- // BadTokenException or InvalidDisplayException, clean up.
- synchronized (mLock) {
- final int index = findViewLocked(view, false);
+ // do this last because it fires off messages to start doing things
+ try {
+ root.setView(view, wparams, panelParentView);
+ } catch (RuntimeException e) {
+ // BadTokenException or InvalidDisplayException, clean up.
if (index >= 0) {
removeViewLocked(index, true);
}
+ throw e;
}
- throw e;
}
}
diff --git a/core/jni/android_os_Debug.cpp b/core/jni/android_os_Debug.cpp
index e0bfecb14040..97c7f049fdb9 100644
--- a/core/jni/android_os_Debug.cpp
+++ b/core/jni/android_os_Debug.cpp
@@ -839,7 +839,8 @@ extern "C" void get_malloc_leak_info(uint8_t** info, size_t* overallSize,
size_t* infoSize, size_t* totalMemory, size_t* backtraceSize);
extern "C" void free_malloc_leak_info(uint8_t* info);
#define SIZE_FLAG_ZYGOTE_CHILD (1<<31)
-#define BACKTRACE_SIZE 32
+
+static size_t gNumBacktraceElements;
/*
* This is a qsort() callback.
@@ -859,11 +860,11 @@ static int compareHeapRecords(const void* vrec1, const void* vrec2)
return -1;
}
- intptr_t* bt1 = (intptr_t*)(rec1 + 2);
- intptr_t* bt2 = (intptr_t*)(rec2 + 2);
- for (size_t idx = 0; idx < BACKTRACE_SIZE; idx++) {
- intptr_t addr1 = bt1[idx];
- intptr_t addr2 = bt2[idx];
+ uintptr_t* bt1 = (uintptr_t*)(rec1 + 2);
+ uintptr_t* bt2 = (uintptr_t*)(rec2 + 2);
+ for (size_t idx = 0; idx < gNumBacktraceElements; idx++) {
+ uintptr_t addr1 = bt1[idx];
+ uintptr_t addr2 = bt2[idx];
if (addr1 == addr2) {
if (addr1 == 0)
break;
@@ -907,9 +908,10 @@ static void dumpNativeHeap(FILE* fp)
if (info == NULL) {
fprintf(fp, "Native heap dump not available. To enable, run these"
" commands (requires root):\n");
- fprintf(fp, "$ adb shell setprop libc.debug.malloc 1\n");
- fprintf(fp, "$ adb shell stop\n");
- fprintf(fp, "$ adb shell start\n");
+ fprintf(fp, "# adb shell stop\n");
+ fprintf(fp, "# adb shell setprop libc.debug.malloc.options "
+ "backtrace\n");
+ fprintf(fp, "# adb shell start\n");
return;
}
assert(infoSize != 0);
@@ -920,13 +922,11 @@ static void dumpNativeHeap(FILE* fp)
size_t recordCount = overallSize / infoSize;
fprintf(fp, "Total memory: %zu\n", totalMemory);
fprintf(fp, "Allocation records: %zd\n", recordCount);
- if (backtraceSize != BACKTRACE_SIZE) {
- fprintf(fp, "WARNING: mismatched backtrace sizes (%zu vs. %d)\n",
- backtraceSize, BACKTRACE_SIZE);
- }
+ fprintf(fp, "Backtrace size: %zd\n", backtraceSize);
fprintf(fp, "\n");
/* re-sort the entries */
+ gNumBacktraceElements = backtraceSize;
qsort(info, recordCount, infoSize, compareHeapRecords);
/* dump the entries to the file */
@@ -934,7 +934,7 @@ static void dumpNativeHeap(FILE* fp)
for (size_t idx = 0; idx < recordCount; idx++) {
size_t size = *(size_t*) ptr;
size_t allocations = *(size_t*) (ptr + sizeof(size_t));
- intptr_t* backtrace = (intptr_t*) (ptr + sizeof(size_t) * 2);
+ uintptr_t* backtrace = (uintptr_t*) (ptr + sizeof(size_t) * 2);
fprintf(fp, "z %d sz %8zu num %4zu bt",
(size & SIZE_FLAG_ZYGOTE_CHILD) != 0,
diff --git a/core/jni/android_os_HwParcel.cpp b/core/jni/android_os_HwParcel.cpp
index d453b29c0663..5c879b8894a1 100644
--- a/core/jni/android_os_HwParcel.cpp
+++ b/core/jni/android_os_HwParcel.cpp
@@ -431,35 +431,6 @@ static void JHwParcel_native_writeString(
signalExceptionForError(env, err);
}
-#define DEFINE_PARCEL_ARRAY_WRITER(Suffix,Type) \
-static void JHwParcel_native_write ## Suffix ## Array( \
- JNIEnv *env, jobject thiz, jint size, Type ## Array valObj) { \
- if (valObj == NULL) { \
- jniThrowException(env, "java/lang/NullPointerException", NULL); \
- return; \
- } \
- \
- jsize len = env->GetArrayLength(valObj); \
- \
- if (len != size) { \
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL); \
- return; \
- } \
- \
- sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz); \
- \
- const Type *val = \
- impl->getStorage()->allocTemporary ## Suffix ## Array(env, valObj); \
- \
- hardware::Parcel *parcel = impl->getParcel(); \
- \
- size_t parentHandle; \
- status_t err = parcel->writeBuffer( \
- val, size * sizeof(*val), &parentHandle); \
- \
- signalExceptionForError(env, err); \
-}
-
#define DEFINE_PARCEL_VECTOR_WRITER(Suffix,Type) \
static void JHwParcel_native_write ## Suffix ## Vector( \
JNIEnv *env, jobject thiz, Type ## Array valObj) { \
@@ -491,13 +462,6 @@ static void JHwParcel_native_write ## Suffix ## Vector( \
signalExceptionForError(env, err); \
}
-DEFINE_PARCEL_ARRAY_WRITER(Int8,jbyte)
-DEFINE_PARCEL_ARRAY_WRITER(Int16,jshort)
-DEFINE_PARCEL_ARRAY_WRITER(Int32,jint)
-DEFINE_PARCEL_ARRAY_WRITER(Int64,jlong)
-DEFINE_PARCEL_ARRAY_WRITER(Float,jfloat)
-DEFINE_PARCEL_ARRAY_WRITER(Double,jdouble)
-
DEFINE_PARCEL_VECTOR_WRITER(Int8,jbyte)
DEFINE_PARCEL_VECTOR_WRITER(Int16,jshort)
DEFINE_PARCEL_VECTOR_WRITER(Int32,jint)
@@ -505,43 +469,6 @@ DEFINE_PARCEL_VECTOR_WRITER(Int64,jlong)
DEFINE_PARCEL_VECTOR_WRITER(Float,jfloat)
DEFINE_PARCEL_VECTOR_WRITER(Double,jdouble)
-static void JHwParcel_native_writeBoolArray(
- JNIEnv *env, jobject thiz, jint size, jbooleanArray valObj) {
- if (valObj == NULL) {
- jniThrowException(env, "java/lang/NullPointerException", NULL);
- return;
- }
-
- jsize len = env->GetArrayLength(valObj);
-
- if (len != size) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
-
- sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz);
-
- jboolean *src = env->GetBooleanArrayElements(valObj, nullptr);
-
- bool *dst =
- (bool *)impl->getStorage()->allocTemporaryStorage(size * sizeof(bool));
-
- for (jint i = 0; i < size; ++i) {
- dst[i] = src[i];
- }
-
- env->ReleaseBooleanArrayElements(valObj, src, 0 /* mode */);
- src = nullptr;
-
- hardware::Parcel *parcel = impl->getParcel();
-
- size_t parentHandle;
- status_t err = parcel->writeBuffer(
- dst, size * sizeof(*dst), &parentHandle);
-
- signalExceptionForError(env, err);
-}
-
static void JHwParcel_native_writeBoolVector(
JNIEnv *env, jobject thiz, jbooleanArray valObj) {
if (valObj == NULL) {
@@ -651,22 +578,6 @@ static jstring JHwParcel_native_readString(JNIEnv *env, jobject thiz) {
return MakeStringObjFromHidlString(env, *s);
}
-#define DEFINE_PARCEL_ARRAY_READER(Suffix,Type,NewType) \
-static Type ## Array JHwParcel_native_read ## Suffix ## Array( \
- JNIEnv *env, jobject thiz, jint size) { \
- hardware::Parcel *parcel = \
- JHwParcel::GetNativeContext(env, thiz)->getParcel(); \
- \
- size_t parentHandle; \
- const Type *val = static_cast<const Type *>( \
- parcel->readBuffer(&parentHandle)); \
- \
- Type ## Array valObj = env->New ## NewType ## Array(size); \
- env->Set ## NewType ## ArrayRegion(valObj, 0, size, val); \
- \
- return valObj; \
-}
-
#define DEFINE_PARCEL_VECTOR_READER(Suffix,Type,NewType) \
static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \
JNIEnv *env, jobject thiz) { \
@@ -703,13 +614,6 @@ static Type ## Array JHwParcel_native_read ## Suffix ## Vector( \
return valObj; \
}
-DEFINE_PARCEL_ARRAY_READER(Int8,jbyte,Byte)
-DEFINE_PARCEL_ARRAY_READER(Int16,jshort,Short)
-DEFINE_PARCEL_ARRAY_READER(Int32,jint,Int)
-DEFINE_PARCEL_ARRAY_READER(Int64,jlong,Long)
-DEFINE_PARCEL_ARRAY_READER(Float,jfloat,Float)
-DEFINE_PARCEL_ARRAY_READER(Double,jdouble,Double)
-
DEFINE_PARCEL_VECTOR_READER(Int8,jbyte,Byte)
DEFINE_PARCEL_VECTOR_READER(Int16,jshort,Short)
DEFINE_PARCEL_VECTOR_READER(Int32,jint,Int)
@@ -717,25 +621,6 @@ DEFINE_PARCEL_VECTOR_READER(Int64,jlong,Long)
DEFINE_PARCEL_VECTOR_READER(Float,jfloat,Float)
DEFINE_PARCEL_VECTOR_READER(Double,jdouble,Double)
-static jbooleanArray JHwParcel_native_readBoolArray(
- JNIEnv *env, jobject thiz, jint size) {
- hardware::Parcel *parcel =
- JHwParcel::GetNativeContext(env, thiz)->getParcel();
-
- size_t parentHandle;
- const bool *val = static_cast<const bool *>(
- parcel->readBuffer(&parentHandle));
-
- jbooleanArray valObj = env->NewBooleanArray(size);
-
- for (jint i = 0; i < size; ++i) {
- jboolean x = val[i];
- env->SetBooleanArrayRegion(valObj, i, 1, &x);
- }
-
- return valObj;
-}
-
static jbooleanArray JHwParcel_native_readBoolVector(
JNIEnv *env, jobject thiz) {
hardware::Parcel *parcel =
@@ -797,80 +682,6 @@ static jobjectArray MakeStringArray(
return arrayObj;
}
-static jobjectArray JHwParcel_native_readStringArray(
- JNIEnv *env, jobject thiz, jint size) {
- hardware::Parcel *parcel =
- JHwParcel::GetNativeContext(env, thiz)->getParcel();
-
- size_t parentHandle;
- const hidl_string *val = static_cast<const hidl_string *>(
- parcel->readBuffer(&parentHandle));
-
- if (val == NULL) {
- signalExceptionForError(env, UNKNOWN_ERROR);
- return NULL;
- }
-
- status_t err = OK;
- for (jint i = 0; (err == OK) && (i < size); ++i) {
- err = const_cast<hidl_string *>(&val[i])
- ->readEmbeddedFromParcel(
- *parcel,
- parentHandle,
- i * sizeof(hidl_string));
- }
-
- if (err != OK) {
- signalExceptionForError(env, err);
- return NULL;
- }
-
- return MakeStringArray(env, val, size);
-}
-
-static void JHwParcel_native_writeStringArray(
- JNIEnv *env, jobject thiz, jint size, jobjectArray arrayObj) {
- if (arrayObj == NULL) {
- jniThrowException(env, "java/lang/NullPointerException", NULL);
- return;
- }
-
- jsize len = env->GetArrayLength(arrayObj);
-
- if (len != size) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
-
- sp<JHwParcel> impl = JHwParcel::GetNativeContext(env, thiz);
-
- hidl_string *strings = impl->getStorage()->allocStringArray(len);
-
- for (jsize i = 0; i < len; ++i) {
- ScopedLocalRef<jstring> stringObj(
- env,
- (jstring)env->GetObjectArrayElement(arrayObj, i));
-
- const hidl_string *s =
- impl->getStorage()->allocTemporaryString(env, stringObj.get());
-
- strings[i].setToExternal(s->c_str(), s->size());
- }
-
- hardware::Parcel *parcel = impl->getParcel();
-
- size_t parentHandle;
- status_t err = parcel->writeBuffer(
- strings, sizeof(hidl_string) * len, &parentHandle);
-
- for (jsize i = 0; (err == OK) && (i < len); ++i) {
- err = strings[i].writeEmbeddedToParcel(
- parcel, parentHandle, i * sizeof(hidl_string));
- }
-
- signalExceptionForError(env, err);
-}
-
static jobjectArray JHwParcel_native_readStringVector(
JNIEnv *env, jobject thiz) {
typedef hidl_vec<hidl_string> string_vec;
@@ -1047,26 +858,16 @@ static JNINativeMethod gMethods[] = {
{ "writeString", "(Ljava/lang/String;)V",
(void *)JHwParcel_native_writeString },
- { "writeBoolArray", "(I[Z)V", (void *)JHwParcel_native_writeBoolArray },
{ "writeBoolVector", "([Z)V", (void *)JHwParcel_native_writeBoolVector },
- { "writeInt8Array", "(I[B)V", (void *)JHwParcel_native_writeInt8Array },
{ "writeInt8Vector", "([B)V", (void *)JHwParcel_native_writeInt8Vector },
- { "writeInt16Array", "(I[S)V", (void *)JHwParcel_native_writeInt16Array },
{ "writeInt16Vector", "([S)V", (void *)JHwParcel_native_writeInt16Vector },
- { "writeInt32Array", "(I[I)V", (void *)JHwParcel_native_writeInt32Array },
{ "writeInt32Vector", "([I)V", (void *)JHwParcel_native_writeInt32Vector },
- { "writeInt64Array", "(I[J)V", (void *)JHwParcel_native_writeInt64Array },
{ "writeInt64Vector", "([J)V", (void *)JHwParcel_native_writeInt64Vector },
- { "writeFloatArray", "(I[F)V", (void *)JHwParcel_native_writeFloatArray },
{ "writeFloatVector", "([F)V", (void *)JHwParcel_native_writeFloatVector },
- { "writeDoubleArray", "(I[D)V", (void *)JHwParcel_native_writeDoubleArray },
{ "writeDoubleVector", "([D)V",
(void *)JHwParcel_native_writeDoubleVector },
- { "writeStringArray", "(I[Ljava/lang/String;)V",
- (void *)JHwParcel_native_writeStringArray },
-
{ "writeStringVector", "([Ljava/lang/String;)V",
(void *)JHwParcel_native_writeStringVector },
@@ -1087,24 +888,14 @@ static JNINativeMethod gMethods[] = {
{ "readString", "()Ljava/lang/String;",
(void *)JHwParcel_native_readString },
- { "readBoolArray", "(I)[Z", (void *)JHwParcel_native_readBoolArray },
{ "readBoolVector", "()[Z", (void *)JHwParcel_native_readBoolVector },
- { "readInt8Array", "(I)[B", (void *)JHwParcel_native_readInt8Array },
{ "readInt8Vector", "()[B", (void *)JHwParcel_native_readInt8Vector },
- { "readInt16Array", "(I)[S", (void *)JHwParcel_native_readInt16Array },
{ "readInt16Vector", "()[S", (void *)JHwParcel_native_readInt16Vector },
- { "readInt32Array", "(I)[I", (void *)JHwParcel_native_readInt32Array },
{ "readInt32Vector", "()[I", (void *)JHwParcel_native_readInt32Vector },
- { "readInt64Array", "(I)[J", (void *)JHwParcel_native_readInt64Array },
{ "readInt64Vector", "()[J", (void *)JHwParcel_native_readInt64Vector },
- { "readFloatArray", "(I)[F", (void *)JHwParcel_native_readFloatArray },
{ "readFloatVector", "()[F", (void *)JHwParcel_native_readFloatVector },
- { "readDoubleArray", "(I)[D", (void *)JHwParcel_native_readDoubleArray },
{ "readDoubleVector", "()[D", (void *)JHwParcel_native_readDoubleVector },
- { "readStringArray", "(I)[Ljava/lang/String;",
- (void *)JHwParcel_native_readStringArray },
-
{ "readStringVector", "()[Ljava/lang/String;",
(void *)JHwParcel_native_readStringVector },
diff --git a/core/jni/hwbinder/EphemeralStorage.cpp b/core/jni/hwbinder/EphemeralStorage.cpp
index 187beeea4de1..4996bc86cade 100644
--- a/core/jni/hwbinder/EphemeralStorage.cpp
+++ b/core/jni/hwbinder/EphemeralStorage.cpp
@@ -71,21 +71,6 @@ const hidl_string *EphemeralStorage::allocTemporaryString(
return s;
}
-#define DEFINE_ALLOC_ARRAY_METHODS(Suffix,Type,NewType) \
-const Type *EphemeralStorage::allocTemporary ## Suffix ## Array( \
- JNIEnv *env, Type ## Array arrayObj) { \
- Type ## Array obj = (Type ## Array)env->NewGlobalRef(arrayObj); \
- const Type *val = env->Get ## NewType ## ArrayElements(obj, NULL); \
- \
- Item item; \
- item.mType = TYPE_ ## Suffix ## _ARRAY; \
- item.mObj = obj; \
- item.mPtr = (void *)val; \
- mItems.push_back(item); \
- \
- return val; \
-}
-
#define DEFINE_ALLOC_VECTOR_METHODS(Suffix,Type,NewType) \
const hidl_vec<Type> *EphemeralStorage::allocTemporary ## Suffix ## Vector( \
JNIEnv *env, Type ## Array arrayObj) { \
@@ -107,13 +92,6 @@ const hidl_vec<Type> *EphemeralStorage::allocTemporary ## Suffix ## Vector( \
return vec; \
}
-DEFINE_ALLOC_ARRAY_METHODS(Int8,jbyte,Byte)
-DEFINE_ALLOC_ARRAY_METHODS(Int16,jshort,Short)
-DEFINE_ALLOC_ARRAY_METHODS(Int32,jint,Int)
-DEFINE_ALLOC_ARRAY_METHODS(Int64,jlong,Long)
-DEFINE_ALLOC_ARRAY_METHODS(Float,jfloat,Float)
-DEFINE_ALLOC_ARRAY_METHODS(Double,jdouble,Double)
-
DEFINE_ALLOC_VECTOR_METHODS(Int8,jbyte,Byte)
DEFINE_ALLOC_VECTOR_METHODS(Int16,jshort,Short)
DEFINE_ALLOC_VECTOR_METHODS(Int32,jint,Int)
diff --git a/core/jni/hwbinder/EphemeralStorage.h b/core/jni/hwbinder/EphemeralStorage.h
index b02ed9f5ea69..f07c782bfdf7 100644
--- a/core/jni/hwbinder/EphemeralStorage.h
+++ b/core/jni/hwbinder/EphemeralStorage.h
@@ -26,9 +26,6 @@
namespace android {
#define DECLARE_ALLOC_METHODS(Suffix,Type) \
- const Type *allocTemporary ## Suffix ## Array( \
- JNIEnv *env, Type ## Array arrayObj); \
- \
const ::android::hardware::hidl_vec<Type> * \
allocTemporary ## Suffix ## Vector( \
JNIEnv *env, Type ## Array arrayObj);
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index f712c346f88a..ae560f9f8779 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -198,6 +198,8 @@
<protected-broadcast android:name="android.btopp.intent.action.OPEN" />
<protected-broadcast android:name="android.btopp.intent.action.OPEN_INBOUND" />
<protected-broadcast android:name="android.btopp.intent.action.TRANSFER_COMPLETE" />
+ <protected-broadcast android:name="android.btopp.intent.action.ACCEPT" />
+ <protected-broadcast android:name="com.android.bluetooth.gatt.REFRESH_BATCHED_SCAN" />
<protected-broadcast android:name="com.android.bluetooth.pbap.authchall" />
<protected-broadcast android:name="com.android.bluetooth.pbap.userconfirmtimeout" />
<protected-broadcast android:name="com.android.bluetooth.pbap.authresponse" />
@@ -287,6 +289,7 @@
<protected-broadcast android:name="android.net.wifi.WIFI_AP_STATE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.WIFI_CREDENTIAL_CHANGED" />
<protected-broadcast android:name="android.net.wifi.WIFI_SCAN_AVAILABLE" />
+ <protected-broadcast android:name="android.net.wifi.nan.action.WIFI_NAN_STATE_CHANGED" />
<protected-broadcast android:name="android.net.wifi.SCAN_RESULTS" />
<protected-broadcast android:name="android.net.wifi.RSSI_CHANGED" />
<protected-broadcast android:name="android.net.wifi.STATE_CHANGE" />
diff --git a/core/res/res/values-mcc204-mnc04/config.xml b/core/res/res/values-mcc204-mnc04/config.xml
index 0f39e42e8b3c..ddf0e9fa9a68 100755
--- a/core/res/res/values-mcc204-mnc04/config.xml
+++ b/core/res/res/values-mcc204-mnc04/config.xml
@@ -25,13 +25,6 @@
-->
<integer name="config_mobile_mtu">1358</integer>
- <!-- service number convert map in roaming network. -->
- <!-- [dialstring],[replacement][,optional gid] -->
- <string-array translatable="false" name="dial_string_replace">
- <item>"*611:+19085594899,BAE0000000000000"</item>
- <item>"*86:+1MDN,BAE0000000000000"</item>
- </string-array>
-
<!-- Flag indicating whether strict threshold is used, or lenient threshold is used,
when evaluating RSRP for LTE antenna bar display
0. Strict threshold
diff --git a/core/res/res/values-mcc310-mnc120/config.xml b/core/res/res/values-mcc310-mnc120/config.xml
index 4b616885aab6..413c6980869f 100644
--- a/core/res/res/values-mcc310-mnc120/config.xml
+++ b/core/res/res/values-mcc310-mnc120/config.xml
@@ -25,9 +25,6 @@
-->
<integer name="config_mobile_mtu">1422</integer>
- <!-- Sprint need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">70</integer>
-
<!-- If this value is true, The mms content-disposition field is supported correctly.
If false, Content-disposition fragments are ignored -->
<bool name="config_mms_content_disposition_support">false</bool>
diff --git a/core/res/res/values-mcc310-mnc160/config.xml b/core/res/res/values-mcc310-mnc160/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc160/config.xml
+++ b/core/res/res/values-mcc310-mnc160/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc200/config.xml b/core/res/res/values-mcc310-mnc200/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc200/config.xml
+++ b/core/res/res/values-mcc310-mnc200/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc210/config.xml b/core/res/res/values-mcc310-mnc210/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc210/config.xml
+++ b/core/res/res/values-mcc310-mnc210/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc220/config.xml b/core/res/res/values-mcc310-mnc220/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc220/config.xml
+++ b/core/res/res/values-mcc310-mnc220/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc230/config.xml b/core/res/res/values-mcc310-mnc230/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc230/config.xml
+++ b/core/res/res/values-mcc310-mnc230/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc240/config.xml b/core/res/res/values-mcc310-mnc240/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc240/config.xml
+++ b/core/res/res/values-mcc310-mnc240/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc250/config.xml b/core/res/res/values-mcc310-mnc250/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc250/config.xml
+++ b/core/res/res/values-mcc310-mnc250/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc260/config.xml b/core/res/res/values-mcc310-mnc260/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc260/config.xml
+++ b/core/res/res/values-mcc310-mnc260/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc270/config.xml b/core/res/res/values-mcc310-mnc270/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc270/config.xml
+++ b/core/res/res/values-mcc310-mnc270/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc300/config.xml b/core/res/res/values-mcc310-mnc300/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc300/config.xml
+++ b/core/res/res/values-mcc310-mnc300/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc310/config.xml b/core/res/res/values-mcc310-mnc310/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc310/config.xml
+++ b/core/res/res/values-mcc310-mnc310/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc410/config.xml b/core/res/res/values-mcc310-mnc410/config.xml
index cddd5e331b13..9accdf02537f 100644
--- a/core/res/res/values-mcc310-mnc410/config.xml
+++ b/core/res/res/values-mcc310-mnc410/config.xml
@@ -67,7 +67,4 @@
<item>"#8"</item>
<item>"#9"</item>
</string-array>
- <!-- Flag indicating whether radio is to be restarted on the error of
- PDP_FAIL_REGULAR_DEACTIVATION/0x24 -->
- <bool name="config_restart_radio_on_pdp_fail_regular_deactivation">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc490/config.xml b/core/res/res/values-mcc310-mnc490/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc490/config.xml
+++ b/core/res/res/values-mcc310-mnc490/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc530/config.xml b/core/res/res/values-mcc310-mnc530/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc530/config.xml
+++ b/core/res/res/values-mcc310-mnc530/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc580/config.xml b/core/res/res/values-mcc310-mnc580/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc580/config.xml
+++ b/core/res/res/values-mcc310-mnc580/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc590/config.xml b/core/res/res/values-mcc310-mnc590/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc590/config.xml
+++ b/core/res/res/values-mcc310-mnc590/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc640/config.xml b/core/res/res/values-mcc310-mnc640/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc640/config.xml
+++ b/core/res/res/values-mcc310-mnc640/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc660/config.xml b/core/res/res/values-mcc310-mnc660/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc660/config.xml
+++ b/core/res/res/values-mcc310-mnc660/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc310-mnc800/config.xml b/core/res/res/values-mcc310-mnc800/config.xml
index 2cae7cc0376b..5a6a84bd06b3 100644
--- a/core/res/res/values-mcc310-mnc800/config.xml
+++ b/core/res/res/values-mcc310-mnc800/config.xml
@@ -32,9 +32,4 @@
<!-- Flag specifying whether VoLTE TTY is supported -->
<bool name="config_carrier_volte_tty_supported">false</bool>
-
- <!-- Flag specifying whether WFC over IMS should be available for carrier: independent of
- carrier provisioning. If false: hard disabled. If true: then depends on carrier
- provisioning, availability etc -->
- <bool name="config_carrier_wfc_ims_available">true</bool>
</resources>
diff --git a/core/res/res/values-mcc311-mnc220/config.xml b/core/res/res/values-mcc311-mnc220/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc220/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc221/config.xml b/core/res/res/values-mcc311-mnc221/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc221/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc222/config.xml b/core/res/res/values-mcc311-mnc222/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc222/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc223/config.xml b/core/res/res/values-mcc311-mnc223/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc223/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc224/config.xml b/core/res/res/values-mcc311-mnc224/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc224/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc225/config.xml b/core/res/res/values-mcc311-mnc225/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc225/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc226/config.xml b/core/res/res/values-mcc311-mnc226/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc226/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc227/config.xml b/core/res/res/values-mcc311-mnc227/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc227/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc228/config.xml b/core/res/res/values-mcc311-mnc228/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc228/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc229/config.xml b/core/res/res/values-mcc311-mnc229/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc229/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc480/config.xml b/core/res/res/values-mcc311-mnc480/config.xml
index 39ea2bf1f5aa..8d7fd6177500 100755
--- a/core/res/res/values-mcc311-mnc480/config.xml
+++ b/core/res/res/values-mcc311-mnc480/config.xml
@@ -52,11 +52,6 @@
<bool name="config_carrier_volte_provisioned">true</bool>
<bool name="config_auto_attach_data_on_creation">false</bool>
- <!-- service number convert map in roaming network. -->
- <string-array translatable="false" name="dial_string_replace">
- <item>"*611:+19085594899,"</item>
- <item>"*86:+1MDN,"</item>
- </string-array>
<!-- Flag indicating whether strict threshold is used, or lenient threshold is used,
when evaluating RSRP for LTE antenna bar display
diff --git a/core/res/res/values-mcc311-mnc490/config.xml b/core/res/res/values-mcc311-mnc490/config.xml
index d481c9717e23..836abdf39ab8 100644
--- a/core/res/res/values-mcc311-mnc490/config.xml
+++ b/core/res/res/values-mcc311-mnc490/config.xml
@@ -21,9 +21,6 @@
for different hardware and product builds. -->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Sprint need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">70</integer>
-
<!-- An array of CDMA roaming indicators which means international roaming -->
<integer-array translatable="false" name="config_cdma_international_roaming_indicators" >
<item>2</item>
diff --git a/core/res/res/values-mcc311-mnc580/config.xml b/core/res/res/values-mcc311-mnc580/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc580/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc581/config.xml b/core/res/res/values-mcc311-mnc581/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc581/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc582/config.xml b/core/res/res/values-mcc311-mnc582/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc582/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc583/config.xml b/core/res/res/values-mcc311-mnc583/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc583/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc584/config.xml b/core/res/res/values-mcc311-mnc584/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc584/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc585/config.xml b/core/res/res/values-mcc311-mnc585/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc585/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc586/config.xml b/core/res/res/values-mcc311-mnc586/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc586/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc587/config.xml b/core/res/res/values-mcc311-mnc587/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc587/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc588/config.xml b/core/res/res/values-mcc311-mnc588/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc588/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc589/config.xml b/core/res/res/values-mcc311-mnc589/config.xml
deleted file mode 100644
index 811e9c73d2e1..000000000000
--- a/core/res/res/values-mcc311-mnc589/config.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2014, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You my obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-
-<!-- These resources are around just to allow their values to be customized
- for different hardware and product builds. -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
- <!-- USC need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">300</integer>
-</resources>
diff --git a/core/res/res/values-mcc311-mnc870/config.xml b/core/res/res/values-mcc311-mnc870/config.xml
index 98cb72ee50f5..f6aed1335d66 100644
--- a/core/res/res/values-mcc311-mnc870/config.xml
+++ b/core/res/res/values-mcc311-mnc870/config.xml
@@ -25,9 +25,6 @@
-->
<integer name="config_mobile_mtu">1422</integer>
- <!-- Sprint need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">70</integer>
-
<!-- An array of CDMA roaming indicators which means international roaming -->
<integer-array translatable="false" name="config_cdma_international_roaming_indicators" >
<item>2</item>
diff --git a/core/res/res/values-mcc312-mnc530/config.xml b/core/res/res/values-mcc312-mnc530/config.xml
index 98cb72ee50f5..f6aed1335d66 100644
--- a/core/res/res/values-mcc312-mnc530/config.xml
+++ b/core/res/res/values-mcc312-mnc530/config.xml
@@ -25,9 +25,6 @@
-->
<integer name="config_mobile_mtu">1422</integer>
- <!-- Sprint need a 70 ms delay for 3way call -->
- <integer name="config_cdma_3waycall_flash_delay">70</integer>
-
<!-- An array of CDMA roaming indicators which means international roaming -->
<integer-array translatable="false" name="config_cdma_international_roaming_indicators" >
<item>2</item>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 05d9a28333b7..f90969561011 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2212,6 +2212,21 @@
<!-- Sprint need a 70 ms delay for 3way call -->
<integer name="config_cdma_3waycall_flash_delay">0</integer>
+ <!-- If there is no preload VM number in the sim card, carriers such as
+ Verizon require to load a default vm number from the configurantion.
+ Define config_default_vm_number for this purpose. And there are two
+ optional formats for this configuration as below:
+ (1)<item>voicemail number</item>
+ (2)<item>voicemail number;gid</item>
+ The logic to pick up the correct voicemail number:
+ (1) If the config_default_vm_number array has no gid special item, the last one will be
+ picked
+ (2) If the config_default_vm_number array has gid special item and it matches the current
+ sim's gid, it will be picked.
+ (3) If the config_default_vm_number array has gid special item but it doesn't match the
+ current sim's gid, the last one without gid will be picked -->
+ <string-array translatable="false" name="config_default_vm_number" />
+
<!--SIM does not save, but the voice mail number to be changed. -->
<bool name="editable_voicemailnumber">false</bool>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 5018e2fb63c0..9a394373059a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2237,6 +2237,7 @@
<java-symbol type="layout" name="resolver_different_item_header" />
<java-symbol type="array" name="config_default_vm_number" />
<java-symbol type="integer" name="config_cdma_3waycall_flash_delay"/>
+ <java-symbol type="array" name="config_default_vm_number" />
<java-symbol type="attr" name="windowBackgroundFallback" />
<java-symbol type="id" name="textSpacerNoButtons" />
<java-symbol type="array" name="dial_string_replace" />
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
index 68f3179f96c1..23135dd15690 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/functional/WifiAssociationTest.java
@@ -63,11 +63,6 @@ public class WifiAssociationTest extends ConnectivityManagerTestBase {
String password = arguments.getString("password");
- String freqStr = arguments.getString("frequency-band");
- if (freqStr != null) {
- setFrequencyBand(freqStr);
- }
-
assertTrue("enable Wifi failed", enableWifi());
WifiInfo wi = mWifiManager.getConnectionInfo();
logv("%s", wi);
@@ -80,28 +75,6 @@ public class WifiAssociationTest extends ConnectivityManagerTestBase {
}
/**
- * Set the frequency band and verify that it has been set.
- */
- private void setFrequencyBand(String frequencyBandStr) {
- int frequencyBand = -1;
- if ("2.4".equals(frequencyBandStr)) {
- frequencyBand = WifiManager.WIFI_FREQUENCY_BAND_2GHZ;
- } else if ("5.0".equals(frequencyBandStr)) {
- frequencyBand = WifiManager.WIFI_FREQUENCY_BAND_5GHZ;
- } else if ("auto".equals(frequencyBandStr)) {
- frequencyBand = WifiManager.WIFI_FREQUENCY_BAND_AUTO;
- } else {
- fail("Invalid frequency-band");
- }
- if (mWifiManager.getFrequencyBand() != frequencyBand) {
- logv("Set frequency band to %s", frequencyBandStr);
- mWifiManager.setFrequencyBand(frequencyBand, true);
- }
- assertEquals("Specified frequency band does not match operational band",
- frequencyBand, mWifiManager.getFrequencyBand());
- }
-
- /**
* Get the {@link WifiConfiguration} based on ssid, security, and password.
*/
private WifiConfiguration getConfig(String ssid, SecurityType securityType, String password) {
diff --git a/data/etc/platform.xml b/data/etc/platform.xml
index 627f3601de2f..e46f1666282e 100644
--- a/data/etc/platform.xml
+++ b/data/etc/platform.xml
@@ -43,7 +43,7 @@
</permission>
<permission name="android.permission.BLUETOOTH_STACK" >
- <group gid="net_bt_stack" />
+ <group gid="bluetooth" />
<group gid="wakelock" />
</permission>
diff --git a/libs/hwui/Properties.h b/libs/hwui/Properties.h
index a1dadc83dfa9..881bd5f57714 100644
--- a/libs/hwui/Properties.h
+++ b/libs/hwui/Properties.h
@@ -149,7 +149,7 @@ enum DebugLevel {
* This will disable the use of EGL_EXT_buffer_age and BUFFER_PRESERVED.
* Default is "true"
*/
-#define PROPERTY_ENABLE_PARTIAL_UPDATES "debug.hwui.enable_partial_updates"
+#define PROPERTY_ENABLE_PARTIAL_UPDATES "debug.hwui.use_partial_updates"
#define PROPERTY_FILTER_TEST_OVERHEAD "debug.hwui.filter_test_overhead"
diff --git a/native/android/Android.bp b/native/android/Android.bp
new file mode 100644
index 000000000000..33c9655d647e
--- /dev/null
+++ b/native/android/Android.bp
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The headers module is in frameworks/native/Android.bp.
+ndk_library {
+ name: "libandroid.ndk",
+ symbol_file: "libandroid.map.txt",
+ first_version: "9",
+}
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt
new file mode 100644
index 000000000000..5758a3ce2a25
--- /dev/null
+++ b/native/android/libandroid.map.txt
@@ -0,0 +1,194 @@
+LIBANDROID {
+ global:
+ AAssetDir_close;
+ AAssetDir_getNextFileName;
+ AAssetDir_rewind;
+ AAssetManager_fromJava;
+ AAssetManager_open;
+ AAssetManager_openDir;
+ AAsset_close;
+ AAsset_getBuffer;
+ AAsset_getLength;
+ AAsset_getLength64; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AAsset_getRemainingLength;
+ AAsset_getRemainingLength64; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AAsset_isAllocated;
+ AAsset_openFileDescriptor;
+ AAsset_openFileDescriptor64; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AAsset_read;
+ AAsset_seek;
+ AAsset_seek64; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AChoreographer_getInstance; # introduced=24
+ AChoreographer_postFrameCallback; # introduced=24
+ AChoreographer_postFrameCallbackDelayed; # introduced=24
+ AConfiguration_copy;
+ AConfiguration_delete;
+ AConfiguration_diff;
+ AConfiguration_fromAssetManager;
+ AConfiguration_getCountry;
+ AConfiguration_getDensity;
+ AConfiguration_getKeyboard;
+ AConfiguration_getKeysHidden;
+ AConfiguration_getLanguage;
+ AConfiguration_getLayoutDirection; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
+ AConfiguration_getMcc;
+ AConfiguration_getMnc;
+ AConfiguration_getNavHidden;
+ AConfiguration_getNavigation;
+ AConfiguration_getOrientation;
+ AConfiguration_getScreenHeightDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_getScreenLong;
+ AConfiguration_getScreenSize;
+ AConfiguration_getScreenWidthDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_getSdkVersion;
+ AConfiguration_getSmallestScreenWidthDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_getTouchscreen;
+ AConfiguration_getUiModeNight;
+ AConfiguration_getUiModeType;
+ AConfiguration_isBetterThan;
+ AConfiguration_match;
+ AConfiguration_new;
+ AConfiguration_setCountry;
+ AConfiguration_setDensity;
+ AConfiguration_setKeyboard;
+ AConfiguration_setKeysHidden;
+ AConfiguration_setLanguage;
+ AConfiguration_setLayoutDirection; # introduced-arm=17 introduced-arm64=21 introduced-mips=17 introduced-mips64=21 introduced-x86=17 introduced-x86_64=21
+ AConfiguration_setMcc;
+ AConfiguration_setMnc;
+ AConfiguration_setNavHidden;
+ AConfiguration_setNavigation;
+ AConfiguration_setOrientation;
+ AConfiguration_setScreenHeightDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_setScreenLong;
+ AConfiguration_setScreenSize;
+ AConfiguration_setScreenWidthDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_setSdkVersion;
+ AConfiguration_setSmallestScreenWidthDp; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AConfiguration_setTouchscreen;
+ AConfiguration_setUiModeNight;
+ AConfiguration_setUiModeType;
+ AInputEvent_getDeviceId;
+ AInputEvent_getSource;
+ AInputEvent_getType;
+ AInputQueue_attachLooper;
+ AInputQueue_detachLooper;
+ AInputQueue_finishEvent;
+ AInputQueue_getEvent;
+ AInputQueue_hasEvents;
+ AInputQueue_preDispatchEvent;
+ AKeyEvent_getAction;
+ AKeyEvent_getDownTime;
+ AKeyEvent_getEventTime;
+ AKeyEvent_getFlags;
+ AKeyEvent_getKeyCode;
+ AKeyEvent_getMetaState;
+ AKeyEvent_getRepeatCount;
+ AKeyEvent_getScanCode;
+ ALooper_acquire;
+ ALooper_addFd;
+ ALooper_forThread;
+ ALooper_pollAll;
+ ALooper_pollOnce;
+ ALooper_prepare;
+ ALooper_release;
+ ALooper_removeFd;
+ ALooper_wake;
+ AMotionEvent_getAction;
+ AMotionEvent_getAxisValue; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AMotionEvent_getButtonState; # introduced-arm=14 introduced-arm64=21 introduced-mips=14 introduced-mips64=21 introduced-x86=14 introduced-x86_64=21
+ AMotionEvent_getDownTime;
+ AMotionEvent_getEdgeFlags;
+ AMotionEvent_getEventTime;
+ AMotionEvent_getFlags;
+ AMotionEvent_getHistoricalAxisValue; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ AMotionEvent_getHistoricalEventTime;
+ AMotionEvent_getHistoricalOrientation;
+ AMotionEvent_getHistoricalPressure;
+ AMotionEvent_getHistoricalRawX;
+ AMotionEvent_getHistoricalRawY;
+ AMotionEvent_getHistoricalSize;
+ AMotionEvent_getHistoricalToolMajor;
+ AMotionEvent_getHistoricalToolMinor;
+ AMotionEvent_getHistoricalTouchMajor;
+ AMotionEvent_getHistoricalTouchMinor;
+ AMotionEvent_getHistoricalX;
+ AMotionEvent_getHistoricalY;
+ AMotionEvent_getHistorySize;
+ AMotionEvent_getMetaState;
+ AMotionEvent_getOrientation;
+ AMotionEvent_getPointerCount;
+ AMotionEvent_getPointerId;
+ AMotionEvent_getPressure;
+ AMotionEvent_getRawX;
+ AMotionEvent_getRawY;
+ AMotionEvent_getSize;
+ AMotionEvent_getToolMajor;
+ AMotionEvent_getToolMinor;
+ AMotionEvent_getToolType; # introduced-arm=14 introduced-arm64=21 introduced-mips=14 introduced-mips64=21 introduced-x86=14 introduced-x86_64=21
+ AMotionEvent_getTouchMajor;
+ AMotionEvent_getTouchMinor;
+ AMotionEvent_getX;
+ AMotionEvent_getXOffset;
+ AMotionEvent_getXPrecision;
+ AMotionEvent_getY;
+ AMotionEvent_getYOffset;
+ AMotionEvent_getYPrecision;
+ ANativeActivity_finish;
+ ANativeActivity_hideSoftInput;
+ ANativeActivity_setWindowFlags;
+ ANativeActivity_setWindowFormat;
+ ANativeActivity_showSoftInput;
+ ANativeWindow_acquire;
+ ANativeWindow_fromSurface;
+ ANativeWindow_fromSurfaceTexture; # introduced-arm=13 introduced-mips=13 introduced-x86=13
+ ANativeWindow_getFormat;
+ ANativeWindow_getHeight;
+ ANativeWindow_getWidth;
+ ANativeWindow_lock;
+ ANativeWindow_release;
+ ANativeWindow_setBuffersGeometry;
+ ANativeWindow_unlockAndPost;
+ AObbInfo_delete;
+ AObbInfo_getFlags;
+ AObbInfo_getPackageName;
+ AObbInfo_getVersion;
+ AObbScanner_getObbInfo;
+ ASensorEventQueue_disableSensor;
+ ASensorEventQueue_enableSensor;
+ ASensorEventQueue_getEvents;
+ ASensorEventQueue_hasEvents;
+ ASensorEventQueue_setEventRate;
+ ASensorManager_createEventQueue;
+ ASensorManager_destroyEventQueue;
+ ASensorManager_getDefaultSensor;
+ ASensorManager_getDefaultSensorEx; # introduced=21
+ ASensorManager_getInstance;
+ ASensorManager_getSensorList;
+ ASensor_getFifoMaxEventCount; # introduced=21
+ ASensor_getFifoReservedEventCount; # introduced=21
+ ASensor_getMinDelay;
+ ASensor_getName;
+ ASensor_getReportingMode; # introduced=21
+ ASensor_getResolution;
+ ASensor_getStringType; # introduced=21
+ ASensor_getType;
+ ASensor_getVendor;
+ ASensor_isWakeUpSensor; # introduced=21
+ AStorageManager_delete;
+ AStorageManager_getMountedObbPath;
+ AStorageManager_isObbMounted;
+ AStorageManager_mountObb;
+ AStorageManager_new;
+ AStorageManager_unmountObb;
+ ATrace_beginSection; # introduced=23
+ ATrace_endSection; # introduced=23
+ ATrace_isEnabled; # introduced=23
+ android_getTtsEngine; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ android_getaddrinfofornetwork; # introduced=23
+ android_setprocnetwork; # introduced=23
+ android_setsocknetwork; # introduced=23
+ getTtsEngine; # introduced-arm=13 introduced-arm64=21 introduced-mips=13 introduced-mips64=21 introduced-x86=13 introduced-x86_64=21
+ local:
+ *;
+};
diff --git a/native/graphics/jni/Android.bp b/native/graphics/jni/Android.bp
new file mode 100644
index 000000000000..e09b0b4443cd
--- /dev/null
+++ b/native/graphics/jni/Android.bp
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// The headers module is in frameworks/native/Android.bp.
+ndk_library {
+ name: "libjnigraphics.ndk",
+ symbol_file: "libjnigraphics.map.txt",
+ first_version: "9",
+}
diff --git a/native/graphics/jni/libjnigraphics.map.txt b/native/graphics/jni/libjnigraphics.map.txt
new file mode 100644
index 000000000000..a601d8af2830
--- /dev/null
+++ b/native/graphics/jni/libjnigraphics.map.txt
@@ -0,0 +1,8 @@
+LIBJNIGRAPHICS {
+ global:
+ AndroidBitmap_getInfo;
+ AndroidBitmap_lockPixels;
+ AndroidBitmap_unlockPixels;
+ local:
+ *;
+};
diff --git a/services/core/Android.mk b/services/core/Android.mk
index b965ce39e7d5..a5b1069974f2 100644
--- a/services/core/Android.mk
+++ b/services/core/Android.mk
@@ -11,7 +11,7 @@ LOCAL_SRC_FILES += \
java/com/android/server/EventLogTags.logtags \
java/com/android/server/am/EventLogTags.logtags \
../../../../system/netd/server/binder/android/net/INetd.aidl \
- ../../../../system/netd/server/binder/android/net/metrics/IDnsEventListener.aidl \
+ ../../../../system/netd/server/binder/android/net/metrics/INetdEventListener.aidl \
LOCAL_AIDL_INCLUDES += \
system/netd/server/binder
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 172025b38337..6575a2a86cb9 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -689,6 +689,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub {
if (mUnbinding) return;
mUnbinding = true;
mHandler.removeMessages(MESSAGE_BLUETOOTH_STATE_CHANGE);
+ mHandler.removeMessages(MESSAGE_BIND_PROFILE_SERVICE);
if (mBluetooth != null) {
//Unregister callback object
try {
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index b383633b06ed..f16376dfd348 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -760,7 +760,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
mTestMode = SystemProperties.get("cm.test.mode").equals("true")
&& SystemProperties.get("ro.build.type").equals("eng");
- mTethering = new Tethering(mContext, mNetd, statsService);
+ mTethering = new Tethering(mContext, mNetd, statsService, mPolicyManager);
mPermissionMonitor = new PermissionMonitor(mContext, mNetd);
@@ -2688,12 +2688,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
ConnectivityManager.enforceTetherChangePermission(mContext);
if (isTetheringSupported()) {
final int status = mTethering.tether(iface);
- if (status == ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- try {
- mPolicyManager.onTetheringChanged(iface, true);
- } catch (RemoteException e) {
- }
- }
return status;
} else {
return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
@@ -2706,12 +2700,6 @@ public class ConnectivityService extends IConnectivityManager.Stub
if (isTetheringSupported()) {
final int status = mTethering.untether(iface);
- if (status == ConnectivityManager.TETHER_ERROR_NO_ERROR) {
- try {
- mPolicyManager.onTetheringChanged(iface, false);
- } catch (RemoteException e) {
- }
- }
return status;
} else {
return ConnectivityManager.TETHER_ERROR_UNSUPPORTED;
diff --git a/services/core/java/com/android/server/RecoverySystemService.java b/services/core/java/com/android/server/RecoverySystemService.java
index 276687f844da..3c8c699a65bb 100644
--- a/services/core/java/com/android/server/RecoverySystemService.java
+++ b/services/core/java/com/android/server/RecoverySystemService.java
@@ -21,6 +21,7 @@ import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.IRecoverySystem;
import android.os.IRecoverySystemProgressListener;
+import android.os.PowerManager;
import android.os.RecoverySystem;
import android.os.RemoteException;
import android.os.SystemProperties;
@@ -50,8 +51,15 @@ public final class RecoverySystemService extends SystemService {
// The socket at /dev/socket/uncrypt to communicate with uncrypt.
private static final String UNCRYPT_SOCKET = "uncrypt";
+ // The init services that communicate with /system/bin/uncrypt.
+ private static final String INIT_SERVICE_UNCRYPT = "init.svc.uncrypt";
+ private static final String INIT_SERVICE_SETUP_BCB = "init.svc.setup-bcb";
+ private static final String INIT_SERVICE_CLEAR_BCB = "init.svc.clear-bcb";
+
private static final int SOCKET_CONNECTION_MAX_RETRY = 30;
+ private static final Object sRequestLock = new Object();
+
private Context mContext;
public RecoverySystemService(Context context) {
@@ -69,95 +77,155 @@ public final class RecoverySystemService extends SystemService {
public boolean uncrypt(String filename, IRecoverySystemProgressListener listener) {
if (DEBUG) Slog.d(TAG, "uncrypt: " + filename);
- mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
+ synchronized (sRequestLock) {
+ mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
- // Write the filename into UNCRYPT_PACKAGE_FILE to be read by
- // uncrypt.
- RecoverySystem.UNCRYPT_PACKAGE_FILE.delete();
+ final boolean available = checkAndWaitForUncryptService();
+ if (!available) {
+ Slog.e(TAG, "uncrypt service is unavailable.");
+ return false;
+ }
- try (FileWriter uncryptFile = new FileWriter(RecoverySystem.UNCRYPT_PACKAGE_FILE)) {
- uncryptFile.write(filename + "\n");
- } catch (IOException e) {
- Slog.e(TAG, "IOException when writing \"" + RecoverySystem.UNCRYPT_PACKAGE_FILE +
- "\": ", e);
- return false;
- }
+ // Write the filename into UNCRYPT_PACKAGE_FILE to be read by
+ // uncrypt.
+ RecoverySystem.UNCRYPT_PACKAGE_FILE.delete();
- // Trigger uncrypt via init.
- SystemProperties.set("ctl.start", "uncrypt");
+ try (FileWriter uncryptFile = new FileWriter(RecoverySystem.UNCRYPT_PACKAGE_FILE)) {
+ uncryptFile.write(filename + "\n");
+ } catch (IOException e) {
+ Slog.e(TAG, "IOException when writing \"" +
+ RecoverySystem.UNCRYPT_PACKAGE_FILE + "\":", e);
+ return false;
+ }
- // Connect to the uncrypt service socket.
- LocalSocket socket = connectService();
- if (socket == null) {
- Slog.e(TAG, "Failed to connect to uncrypt socket");
- return false;
- }
+ // Trigger uncrypt via init.
+ SystemProperties.set("ctl.start", "uncrypt");
- // Read the status from the socket.
- DataInputStream dis = null;
- DataOutputStream dos = null;
- try {
- dis = new DataInputStream(socket.getInputStream());
- dos = new DataOutputStream(socket.getOutputStream());
- int lastStatus = Integer.MIN_VALUE;
- while (true) {
- int status = dis.readInt();
- // Avoid flooding the log with the same message.
- if (status == lastStatus && lastStatus != Integer.MIN_VALUE) {
- continue;
- }
- lastStatus = status;
-
- if (status >= 0 && status <= 100) {
- // Update status
- Slog.i(TAG, "uncrypt read status: " + status);
- if (listener != null) {
- try {
- listener.onProgress(status);
- } catch (RemoteException ignored) {
- Slog.w(TAG, "RemoteException when posting progress");
- }
+ // Connect to the uncrypt service socket.
+ LocalSocket socket = connectService();
+ if (socket == null) {
+ Slog.e(TAG, "Failed to connect to uncrypt socket");
+ return false;
+ }
+
+ // Read the status from the socket.
+ DataInputStream dis = null;
+ DataOutputStream dos = null;
+ try {
+ dis = new DataInputStream(socket.getInputStream());
+ dos = new DataOutputStream(socket.getOutputStream());
+ int lastStatus = Integer.MIN_VALUE;
+ while (true) {
+ int status = dis.readInt();
+ // Avoid flooding the log with the same message.
+ if (status == lastStatus && lastStatus != Integer.MIN_VALUE) {
+ continue;
}
- if (status == 100) {
- Slog.i(TAG, "uncrypt successfully finished.");
- // Ack receipt of the final status code. uncrypt
- // waits for the ack so the socket won't be
- // destroyed before we receive the code.
+ lastStatus = status;
+
+ if (status >= 0 && status <= 100) {
+ // Update status
+ Slog.i(TAG, "uncrypt read status: " + status);
+ if (listener != null) {
+ try {
+ listener.onProgress(status);
+ } catch (RemoteException ignored) {
+ Slog.w(TAG, "RemoteException when posting progress");
+ }
+ }
+ if (status == 100) {
+ Slog.i(TAG, "uncrypt successfully finished.");
+ // Ack receipt of the final status code. uncrypt
+ // waits for the ack so the socket won't be
+ // destroyed before we receive the code.
+ dos.writeInt(0);
+ break;
+ }
+ } else {
+ // Error in /system/bin/uncrypt.
+ Slog.e(TAG, "uncrypt failed with status: " + status);
+ // Ack receipt of the final status code. uncrypt waits
+ // for the ack so the socket won't be destroyed before
+ // we receive the code.
dos.writeInt(0);
- break;
+ return false;
}
- } else {
- // Error in /system/bin/uncrypt.
- Slog.e(TAG, "uncrypt failed with status: " + status);
- // Ack receipt of the final status code. uncrypt waits
- // for the ack so the socket won't be destroyed before
- // we receive the code.
- dos.writeInt(0);
- return false;
}
+ } catch (IOException e) {
+ Slog.e(TAG, "IOException when reading status: ", e);
+ return false;
+ } finally {
+ IoUtils.closeQuietly(dis);
+ IoUtils.closeQuietly(dos);
+ IoUtils.closeQuietly(socket);
}
- } catch (IOException e) {
- Slog.e(TAG, "IOException when reading status: ", e);
- return false;
- } finally {
- IoUtils.closeQuietly(dis);
- IoUtils.closeQuietly(dos);
- IoUtils.closeQuietly(socket);
- }
- return true;
+ return true;
+ }
}
@Override // Binder call
public boolean clearBcb() {
if (DEBUG) Slog.d(TAG, "clearBcb");
- return setupOrClearBcb(false, null);
+ synchronized (sRequestLock) {
+ return setupOrClearBcb(false, null);
+ }
}
@Override // Binder call
public boolean setupBcb(String command) {
if (DEBUG) Slog.d(TAG, "setupBcb: [" + command + "]");
- return setupOrClearBcb(true, command);
+ synchronized (sRequestLock) {
+ return setupOrClearBcb(true, command);
+ }
+ }
+
+ @Override // Binder call
+ public void rebootRecoveryWithCommand(String command) {
+ if (DEBUG) Slog.d(TAG, "rebootRecoveryWithCommand: [" + command + "]");
+ synchronized (sRequestLock) {
+ if (!setupOrClearBcb(true, command)) {
+ return;
+ }
+
+ // Having set up the BCB, go ahead and reboot.
+ PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+ pm.reboot(PowerManager.REBOOT_RECOVERY);
+ }
+ }
+
+ /**
+ * Check if any of the init services is still running. If so, we cannot
+ * start a new uncrypt/setup-bcb/clear-bcb service right away; otherwise
+ * it may break the socket communication since init creates / deletes
+ * the socket (/dev/socket/uncrypt) on service start / exit.
+ */
+ private boolean checkAndWaitForUncryptService() {
+ for (int retry = 0; retry < SOCKET_CONNECTION_MAX_RETRY; retry++) {
+ final String uncryptService = SystemProperties.get(INIT_SERVICE_UNCRYPT);
+ final String setupBcbService = SystemProperties.get(INIT_SERVICE_SETUP_BCB);
+ final String clearBcbService = SystemProperties.get(INIT_SERVICE_CLEAR_BCB);
+ final boolean busy = "running".equals(uncryptService) ||
+ "running".equals(setupBcbService) || "running".equals(clearBcbService);
+ if (DEBUG) {
+ Slog.i(TAG, "retry: " + retry + " busy: " + busy +
+ " uncrypt: [" + uncryptService + "]" +
+ " setupBcb: [" + setupBcbService + "]" +
+ " clearBcb: [" + clearBcbService + "]");
+ }
+
+ if (!busy) {
+ return true;
+ }
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ Slog.w(TAG, "Interrupted:", e);
+ }
+ }
+
+ return false;
}
private LocalSocket connectService() {
@@ -176,7 +244,7 @@ public final class RecoverySystemService extends SystemService {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
- Slog.w(TAG, "Interrupted: ", e);
+ Slog.w(TAG, "Interrupted:", e);
}
}
}
@@ -190,6 +258,12 @@ public final class RecoverySystemService extends SystemService {
private boolean setupOrClearBcb(boolean isSetup, String command) {
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
+ final boolean available = checkAndWaitForUncryptService();
+ if (!available) {
+ Slog.e(TAG, "uncrypt service is unavailable.");
+ return false;
+ }
+
if (isSetup) {
SystemProperties.set("ctl.start", "setup-bcb");
} else {
@@ -232,7 +306,7 @@ public final class RecoverySystemService extends SystemService {
return false;
}
} catch (IOException e) {
- Slog.e(TAG, "IOException when communicating with uncrypt: ", e);
+ Slog.e(TAG, "IOException when communicating with uncrypt:", e);
return false;
} finally {
IoUtils.closeQuietly(dis);
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 867168a07a03..eb5bf228b852 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -6098,6 +6098,8 @@ public final class ActivityManagerService extends ActivityManagerNative
ProcessList.INVALID_ADJ, callerWillRestart, true, doit, evenPersistent,
packageName == null ? ("stop user " + userId) : ("stop " + packageName));
+ didSomething |= mActivityStarter.clearPendingActivityLaunchesLocked(packageName);
+
if (mStackSupervisor.finishDisabledPackageActivitiesLocked(
packageName, null, doit, evenPersistent, userId)) {
if (!doit) {
@@ -6427,6 +6429,8 @@ public final class ActivityManagerService extends ActivityManagerNative
app.debugging = false;
app.cached = false;
app.killedByAm = false;
+ app.killed = false;
+
// We carefully use the same state that PackageManager uses for
// filtering, since we use this flag to decide if we need to install
@@ -11429,6 +11433,7 @@ public final class ActivityManagerService extends ActivityManagerNative
&& userId == UserHandle.USER_SYSTEM
&& (info.flags & PERSISTENT_MASK) == PERSISTENT_MASK) {
r.persistent = true;
+ r.maxAdj = ProcessList.PERSISTENT_PROC_ADJ;
}
addProcessNameLocked(r);
return r;
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 7b3f65a728bf..85fa139906dd 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -2006,4 +2006,18 @@ class ActivityStarter {
}
}
}
+
+ boolean clearPendingActivityLaunchesLocked(String packageName) {
+ boolean didSomething = false;
+
+ for (int palNdx = mPendingActivityLaunches.size() - 1; palNdx >= 0; --palNdx) {
+ PendingActivityLaunch pal = mPendingActivityLaunches.get(palNdx);
+ ActivityRecord r = pal.r;
+ if (r != null && r.packageName.equals(packageName)) {
+ mPendingActivityLaunches.remove(palNdx);
+ didSomething = true;
+ }
+ }
+ return didSomething;
+ }
}
diff --git a/services/core/java/com/android/server/connectivity/MetricsLoggerService.java b/services/core/java/com/android/server/connectivity/MetricsLoggerService.java
index 69ef30fbe66a..3675b3e217d2 100644
--- a/services/core/java/com/android/server/connectivity/MetricsLoggerService.java
+++ b/services/core/java/com/android/server/connectivity/MetricsLoggerService.java
@@ -55,8 +55,8 @@ public class MetricsLoggerService extends SystemService {
if (DBG) Log.d(TAG, "onBootPhase: PHASE_SYSTEM_SERVICES_READY");
publishBinderService(ConnectivityMetricsLogger.CONNECTIVITY_METRICS_LOGGER_SERVICE,
mBinder);
- mDnsListener = new DnsEventListenerService(getContext());
- publishBinderService(mDnsListener.SERVICE_NAME, mDnsListener);
+ mNetdListener = new NetdEventListenerService(getContext());
+ publishBinderService(mNetdListener.SERVICE_NAME, mNetdListener);
}
}
@@ -91,7 +91,7 @@ public class MetricsLoggerService extends SystemService {
private final ArrayDeque<ConnectivityMetricsEvent> mEvents = new ArrayDeque<>();
- private DnsEventListenerService mDnsListener;
+ private NetdEventListenerService mNetdListener;
private void enforceConnectivityInternalPermission() {
getContext().enforceCallingOrSelfPermission(
@@ -223,7 +223,7 @@ public class MetricsLoggerService extends SystemService {
}
pw.println();
- mDnsListener.dump(pw);
+ mNetdListener.dump(pw);
}
public long logEvent(ConnectivityMetricsEvent event) {
diff --git a/services/core/java/com/android/server/connectivity/DnsEventListenerService.java b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
index 18ab73100b81..98f34ca11f71 100644
--- a/services/core/java/com/android/server/connectivity/DnsEventListenerService.java
+++ b/services/core/java/com/android/server/connectivity/NetdEventListenerService.java
@@ -22,7 +22,7 @@ import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
import android.net.Network;
import android.net.NetworkRequest;
-import android.net.metrics.IDnsEventListener;
+import android.net.metrics.INetdEventListener;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
@@ -35,13 +35,13 @@ import java.util.TreeMap;
/**
- * Implementation of the IDnsEventListener interface.
+ * Implementation of the INetdEventListener interface.
*/
-public class DnsEventListenerService extends IDnsEventListener.Stub {
+public class NetdEventListenerService extends INetdEventListener.Stub {
- public static final String SERVICE_NAME = "dns_listener";
+ public static final String SERVICE_NAME = "netd_listener";
- private static final String TAG = DnsEventListenerService.class.getSimpleName();
+ private static final String TAG = NetdEventListenerService.class.getSimpleName();
private static final boolean DBG = true;
private static final boolean VDBG = false;
@@ -106,7 +106,7 @@ public class DnsEventListenerService extends IDnsEventListener.Stub {
private final NetworkCallback mNetworkCallback = new NetworkCallback() {
@Override
public void onLost(Network network) {
- synchronized (DnsEventListenerService.this) {
+ synchronized (NetdEventListenerService.this) {
DnsEventBatch batch = mEventBatches.remove(network.netId);
if (batch != null) {
batch.logAndClear();
@@ -115,7 +115,7 @@ public class DnsEventListenerService extends IDnsEventListener.Stub {
}
};
- public DnsEventListenerService(Context context) {
+ public NetdEventListenerService(Context context) {
// We are started when boot is complete, so ConnectivityService should already be running.
final NetworkRequest request = new NetworkRequest.Builder()
.clearCapabilities()
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index e9b66902d491..b3d5efa65267 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -33,6 +33,7 @@ import android.content.res.Resources;
import android.hardware.usb.UsbManager;
import android.net.ConnectivityManager;
import android.net.ConnectivityManager.NetworkCallback;
+import android.net.INetworkPolicyManager;
import android.net.INetworkStatsService;
import android.net.LinkProperties;
import android.net.Network;
@@ -49,6 +50,7 @@ import android.os.INetworkManagementService;
import android.os.Looper;
import android.os.Message;
import android.os.Parcel;
+import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.SystemProperties;
import android.os.UserHandle;
@@ -122,6 +124,7 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
private final INetworkManagementService mNMService;
private final INetworkStatsService mStatsService;
+ private final INetworkPolicyManager mPolicyManager;
private final Looper mLooper;
private static class TetherState {
@@ -176,10 +179,11 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
private boolean mWifiTetherRequested;
public Tethering(Context context, INetworkManagementService nmService,
- INetworkStatsService statsService) {
+ INetworkStatsService statsService, INetworkPolicyManager policyManager) {
mContext = context;
mNMService = nmService;
mStatsService = statsService;
+ mPolicyManager = policyManager;
mPublicSync = new Object();
@@ -621,12 +625,9 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
}
public void untetherAll() {
- synchronized (mPublicSync) {
- if (DBG) Log.d(TAG, "Untethering " + mTetherStates.keySet());
- for (int i = 0; i < mTetherStates.size(); i++) {
- untether(mTetherStates.keyAt(i));
- }
- }
+ stopTethering(ConnectivityManager.TETHERING_WIFI);
+ stopTethering(ConnectivityManager.TETHERING_USB);
+ stopTethering(ConnectivityManager.TETHERING_BLUETOOTH);
}
public int getLastTetherError(String iface) {
@@ -1755,6 +1756,15 @@ public class Tethering extends BaseNetworkObserver implements IControlsTethering
" with error " + error);
}
+ try {
+ // Notify that we're tethering (or not) this interface.
+ // This is how data saver for instance knows if the user explicitly
+ // turned on tethering (thus keeping us from being in data saver mode).
+ mPolicyManager.onTetheringChanged(iface, state == IControlsTethering.STATE_TETHERED);
+ } catch (RemoteException e) {
+ // Not really very much we can do here.
+ }
+
switch (state) {
case IControlsTethering.STATE_UNAVAILABLE:
case IControlsTethering.STATE_AVAILABLE:
diff --git a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
index 50bb022ef3f0..76ad9d75bb2d 100644
--- a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
+++ b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java
@@ -136,10 +136,17 @@ public class TetherInterfaceStateMachine extends StateMachine {
if (ifcg != null) {
InetAddress addr = NetworkUtils.numericToInetAddress(ipAsString);
ifcg.setLinkAddress(new LinkAddress(addr, prefixLen));
- if (enabled) {
- ifcg.setInterfaceUp();
+ if (mInterfaceType == ConnectivityManager.TETHERING_WIFI) {
+ // The WiFi stack has ownership of the interface up/down state.
+ // It is unclear whether the bluetooth or USB stacks will manage their own
+ // state.
+ ifcg.ignoreInterfaceUpDownStatus();
} else {
- ifcg.setInterfaceDown();
+ if (enabled) {
+ ifcg.setInterfaceUp();
+ } else {
+ ifcg.setInterfaceDown();
+ }
}
ifcg.clearFlag("running");
mNMService.setInterfaceConfig(mIfaceName, ifcg);
diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java
index cc556c7e45b3..a12a92cc7a6a 100644
--- a/services/core/java/com/android/server/fingerprint/FingerprintService.java
+++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java
@@ -178,6 +178,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe
public void binderDied() {
Slog.v(TAG, "fingerprintd died");
mDaemon = null;
+ mCurrentUserId = UserHandle.USER_CURRENT;
handleError(mHalDeviceId, FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE);
}
diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java
index 72c549f7bec6..2e18b1c417fe 100644
--- a/services/core/java/com/android/server/pm/Installer.java
+++ b/services/core/java/com/android/server/pm/Installer.java
@@ -230,6 +230,11 @@ public final class Installer extends SystemService {
mInstaller.execute("move_ab", apkPath, instructionSet, outputPath);
}
+ public void deleteOdex(String apkPath, String instructionSet, String outputPath)
+ throws InstallerException {
+ mInstaller.execute("delete_odex", apkPath, instructionSet, outputPath);
+ }
+
private static void assertValidInstructionSet(String instructionSet)
throws InstallerException {
for (String abi : Build.SUPPORTED_ABIS) {
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index bff6d2d4786e..689917cd670a 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -31,7 +31,7 @@ import android.os.ServiceManager;
import android.os.storage.StorageManager;
import android.util.Log;
import android.util.Slog;
-
+import com.android.internal.logging.MetricsLogger;
import com.android.internal.os.InstallerConnection;
import com.android.internal.os.InstallerConnection.InstallerException;
@@ -40,6 +40,7 @@ import java.io.FileDescriptor;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.concurrent.TimeUnit;
/**
* A service for A/B OTA dexopting.
@@ -53,6 +54,10 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
// The synthetic library dependencies denoting "no checks."
private final static String[] NO_LIBRARIES = new String[] { "&" };
+ // The amount of "available" (free - low threshold) space necessary at the start of an OTA to
+ // not bulk-delete unused apps' odex files.
+ private final static long BULK_DELETE_THRESHOLD = 1024 * 1024 * 1024; // 1GB.
+
private final Context mContext;
private final PackageManagerService mPackageManagerService;
@@ -65,6 +70,25 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
private int completeSize;
+ // MetricsLogger properties.
+
+ // Space before and after.
+ private long availableSpaceBefore;
+ private long availableSpaceAfterBulkDelete;
+ private long availableSpaceAfterDexopt;
+
+ // Packages.
+ private int importantPackageCount;
+ private int otherPackageCount;
+
+ // Number of dexopt commands. This may be different from the count of packages.
+ private int dexoptCommandCountTotal;
+ private int dexoptCommandCountExecuted;
+
+ // For spent time.
+ private long otaDexoptTimeStart;
+
+
public OtaDexoptService(Context context, PackageManagerService packageManagerService) {
this.mContext = context;
this.mPackageManagerService = packageManagerService;
@@ -128,6 +152,18 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
generatePackageDexopts(p, PackageManagerService.REASON_FIRST_BOOT));
}
completeSize = mDexoptCommands.size();
+
+ long spaceAvailable = getAvailableSpace();
+ if (spaceAvailable < BULK_DELETE_THRESHOLD) {
+ Log.i(TAG, "Low on space, deleting oat files in an attempt to free up space: "
+ + PackageManagerServiceUtils.packagesToString(others));
+ for (PackageParser.Package pkg : others) {
+ deleteOatArtifactsOfPackage(pkg);
+ }
+ }
+ long spaceAvailableNow = getAvailableSpace();
+
+ prepareMetricsLogging(important.size(), others.size(), spaceAvailable, spaceAvailableNow);
}
@Override
@@ -136,6 +172,9 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
Log.i(TAG, "Cleaning up OTA Dexopt state.");
}
mDexoptCommands = null;
+ availableSpaceAfterDexopt = getAvailableSpace();
+
+ performMetricsLogging();
}
@Override
@@ -169,28 +208,67 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
String next = mDexoptCommands.remove(0);
- if (IsFreeSpaceAvailable()) {
+ if (getAvailableSpace() > 0) {
+ dexoptCommandCountExecuted++;
+
return next;
} else {
+ if (DEBUG_DEXOPT) {
+ Log.w(TAG, "Not enough space for OTA dexopt, stopping with "
+ + (mDexoptCommands.size() + 1) + " commands left.");
+ }
mDexoptCommands.clear();
return "(no free space)";
}
}
- /**
- * Check for low space. Returns true if there's space left.
- */
- private boolean IsFreeSpaceAvailable() {
- // TODO: If apps are not installed in the internal /data partition, we should compare
- // against that storage's free capacity.
+ private long getMainLowSpaceThreshold() {
File dataDir = Environment.getDataDirectory();
@SuppressWarnings("deprecation")
long lowThreshold = StorageManager.from(mContext).getStorageLowBytes(dataDir);
if (lowThreshold == 0) {
throw new IllegalStateException("Invalid low memory threshold");
}
+ return lowThreshold;
+ }
+
+ /**
+ * Returns the difference of free space to the low-storage-space threshold. Positive values
+ * indicate free bytes.
+ */
+ private long getAvailableSpace() {
+ // TODO: If apps are not installed in the internal /data partition, we should compare
+ // against that storage's free capacity.
+ long lowThreshold = getMainLowSpaceThreshold();
+
+ File dataDir = Environment.getDataDirectory();
long usableSpace = dataDir.getUsableSpace();
- return (usableSpace >= lowThreshold);
+
+ return usableSpace - lowThreshold;
+ }
+
+ private static String getOatDir(PackageParser.Package pkg) {
+ if (!pkg.canHaveOatDir()) {
+ return null;
+ }
+ File codePath = new File(pkg.codePath);
+ if (codePath.isDirectory()) {
+ return PackageDexOptimizer.getOatDir(codePath).getAbsolutePath();
+ }
+ return null;
+ }
+
+ private void deleteOatArtifactsOfPackage(PackageParser.Package pkg) {
+ String[] instructionSets = getAppDexInstructionSets(pkg.applicationInfo);
+ for (String codePath : pkg.getAllCodePaths()) {
+ for (String isa : instructionSets) {
+ try {
+ mPackageManagerService.mInstaller.deleteOdex(codePath, isa, getOatDir(pkg));
+ } catch (InstallerException e) {
+ Log.e(TAG, "Failed deleting oat files for " + codePath, e);
+ }
+ }
+ }
}
/**
@@ -271,6 +349,55 @@ public class OtaDexoptService extends IOtaDexopt.Stub {
}
}
+ /**
+ * Initialize logging fields.
+ */
+ private void prepareMetricsLogging(int important, int others, long spaceBegin, long spaceBulk) {
+ availableSpaceBefore = spaceBegin;
+ availableSpaceAfterBulkDelete = spaceBulk;
+ availableSpaceAfterDexopt = 0;
+
+ importantPackageCount = important;
+ otherPackageCount = others;
+
+ dexoptCommandCountTotal = mDexoptCommands.size();
+ dexoptCommandCountExecuted = 0;
+
+ otaDexoptTimeStart = System.nanoTime();
+ }
+
+ private static int inMegabytes(long value) {
+ long in_mega_bytes = value / (1024 * 1024);
+ if (in_mega_bytes > Integer.MAX_VALUE) {
+ Log.w(TAG, "Recording " + in_mega_bytes + "MB of free space, overflowing range");
+ return Integer.MAX_VALUE;
+ }
+ return (int)in_mega_bytes;
+ }
+
+ private void performMetricsLogging() {
+ long finalTime = System.nanoTime();
+
+ MetricsLogger.histogram(mContext, "ota_dexopt_available_space_before_mb",
+ inMegabytes(availableSpaceBefore));
+ MetricsLogger.histogram(mContext, "ota_dexopt_available_space_after_bulk_delete_mb",
+ inMegabytes(availableSpaceAfterBulkDelete));
+ MetricsLogger.histogram(mContext, "ota_dexopt_available_space_after_dexopt_mb",
+ inMegabytes(availableSpaceAfterDexopt));
+
+ MetricsLogger.histogram(mContext, "ota_dexopt_num_important_packages",
+ importantPackageCount);
+ MetricsLogger.histogram(mContext, "ota_dexopt_num_other_packages", otherPackageCount);
+
+ MetricsLogger.histogram(mContext, "ota_dexopt_num_commands", dexoptCommandCountTotal);
+ MetricsLogger.histogram(mContext, "ota_dexopt_num_commands_executed",
+ dexoptCommandCountExecuted);
+
+ final int elapsedTimeSeconds =
+ (int) TimeUnit.NANOSECONDS.toSeconds(finalTime - otaDexoptTimeStart);
+ MetricsLogger.histogram(mContext, "ota_dexopt_time_s", elapsedTimeSeconds);
+ }
+
private static class OTADexoptPackageDexOptimizer extends
PackageDexOptimizer.ForcedUpdatePackageDexOptimizer {
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 76d987b54e44..85cc12427cef 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -4578,6 +4578,7 @@ public class PackageManagerService extends IPackageManager.Stub {
@Override
public String[] getPackagesForUid(int uid) {
+ final int userId = UserHandle.getUserId(uid);
uid = UserHandle.getAppId(uid);
// reader
synchronized (mPackages) {
@@ -4585,9 +4586,16 @@ public class PackageManagerService extends IPackageManager.Stub {
if (obj instanceof SharedUserSetting) {
final SharedUserSetting sus = (SharedUserSetting) obj;
final int N = sus.packages.size();
- final String[] res = new String[N];
- for (int i = 0; i < N; i++) {
- res[i] = sus.packages.valueAt(i).name;
+ String[] res = new String[N];
+ final Iterator<PackageSetting> it = sus.packages.iterator();
+ int i = 0;
+ while (it.hasNext()) {
+ PackageSetting ps = it.next();
+ if (ps.getInstalled(userId)) {
+ res[i++] = ps.name;
+ } else {
+ res = ArrayUtils.removeElement(String.class, res, res[i]);
+ }
}
return res;
} else if (obj instanceof PackageSetting) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 751c5858446b..cfd0af7635e8 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -19,6 +19,7 @@ package com.android.server.pm;
import static com.android.server.pm.PackageManagerService.DEBUG_DEXOPT;
import static com.android.server.pm.PackageManagerService.TAG;
+import android.annotation.NonNull;
import android.app.AppGlobals;
import android.content.Intent;
import android.content.pm.PackageParser;
@@ -35,13 +36,9 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Set;
+import java.util.function.Predicate;
/**
* Class containing helper methods for the PackageManagerService.
@@ -67,34 +64,51 @@ public class PackageManagerServiceUtils {
return pkgNames;
}
- private static void filterRecentlyUsedApps(Collection<PackageParser.Package> pkgs,
- long estimatedPreviousSystemUseTime,
- long dexOptLRUThresholdInMills) {
- // Filter out packages that aren't recently used.
- int total = pkgs.size();
- int skipped = 0;
- for (Iterator<PackageParser.Package> i = pkgs.iterator(); i.hasNext();) {
- PackageParser.Package pkg = i.next();
- long then = pkg.getLatestForegroundPackageUseTimeInMills();
- if (then < estimatedPreviousSystemUseTime - dexOptLRUThresholdInMills) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Skipping dexopt of " + pkg.packageName +
- " last used in foreground: " +
- ((then == 0) ? "never" : new Date(then)));
- }
- i.remove();
- skipped++;
- } else {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Will dexopt " + pkg.packageName +
- " last used in foreground: " +
- ((then == 0) ? "never" : new Date(then)));
- }
+ // Sort a list of apps by their last usage, most recently used apps first. The order of
+ // packages without usage data is undefined (but they will be sorted after the packages
+ // that do have usage data).
+ public static void sortPackagesByUsageDate(List<PackageParser.Package> pkgs,
+ PackageManagerService packageManagerService) {
+ if (!packageManagerService.isHistoricalPackageUsageAvailable()) {
+ return;
+ }
+
+ Collections.sort(pkgs, (pkg1, pkg2) ->
+ Long.compare(pkg2.getLatestForegroundPackageUseTimeInMills(),
+ pkg1.getLatestForegroundPackageUseTimeInMills()));
+ }
+
+ // Apply the given {@code filter} to all packages in {@code packages}. If tested positive, the
+ // package will be removed from {@code packages} and added to {@code result} with its
+ // dependencies. If usage data is available, the positive packages will be sorted by usage
+ // data (with {@code sortTemp} as temporary storage).
+ private static void applyPackageFilter(Predicate<PackageParser.Package> filter,
+ Collection<PackageParser.Package> result,
+ Collection<PackageParser.Package> packages,
+ @NonNull List<PackageParser.Package> sortTemp,
+ PackageManagerService packageManagerService) {
+ for (PackageParser.Package pkg : packages) {
+ if (filter.test(pkg)) {
+ sortTemp.add(pkg);
}
}
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Skipped dexopt " + skipped + " of " + total);
+
+ sortPackagesByUsageDate(sortTemp, packageManagerService);
+ packages.removeAll(sortTemp);
+
+ for (PackageParser.Package pkg : sortTemp) {
+ result.add(pkg);
+
+ Collection<PackageParser.Package> deps =
+ packageManagerService.findSharedNonSystemLibraries(pkg);
+ if (!deps.isEmpty()) {
+ deps.removeAll(result);
+ result.addAll(deps);
+ packages.removeAll(deps);
+ }
}
+
+ sortTemp.clear();
}
// Sort apps by importance for dexopt ordering. Important apps are given
@@ -104,46 +118,25 @@ public class PackageManagerServiceUtils {
PackageManagerService packageManagerService) {
ArrayList<PackageParser.Package> remainingPkgs = new ArrayList<>(packages);
LinkedList<PackageParser.Package> result = new LinkedList<>();
+ ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size());
// Give priority to core apps.
- for (PackageParser.Package pkg : remainingPkgs) {
- if (pkg.coreApp) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding core app " + result.size() + ": " + pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ applyPackageFilter((pkg) -> pkg.coreApp, result, remainingPkgs, sortTemp,
+ packageManagerService);
// Give priority to system apps that listen for pre boot complete.
Intent intent = new Intent(Intent.ACTION_PRE_BOOT_COMPLETED);
- ArraySet<String> pkgNames = getPackageNamesForIntent(intent, UserHandle.USER_SYSTEM);
- for (PackageParser.Package pkg : remainingPkgs) {
- if (pkgNames.contains(pkg.packageName)) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding pre boot system app " + result.size() + ": " +
- pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ final ArraySet<String> pkgNames = getPackageNamesForIntent(intent, UserHandle.USER_SYSTEM);
+ applyPackageFilter((pkg) -> pkgNames.contains(pkg.packageName), result, remainingPkgs,
+ sortTemp, packageManagerService);
// Give priority to apps used by other apps.
- for (PackageParser.Package pkg : remainingPkgs) {
- if (PackageDexOptimizer.isUsedByOtherApps(pkg)) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding app used by other apps " + result.size() + ": " +
- pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ applyPackageFilter((pkg) -> PackageDexOptimizer.isUsedByOtherApps(pkg), result,
+ remainingPkgs, sortTemp, packageManagerService);
// Filter out packages that aren't recently used, add all remaining apps.
// TODO: add a property to control this?
+ Predicate<PackageParser.Package> remainingPredicate;
if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
if (DEBUG_DEXOPT) {
Log.i(TAG, "Looking at historical package use");
@@ -159,34 +152,24 @@ public class PackageManagerServiceUtils {
lastUsed.getLatestForegroundPackageUseTimeInMills();
// Be defensive if for some reason package usage has bogus data.
if (estimatedPreviousSystemUseTime != 0) {
- filterRecentlyUsedApps(remainingPkgs, estimatedPreviousSystemUseTime,
- SEVEN_DAYS_IN_MILLISECONDS);
+ final long cutoffTime = estimatedPreviousSystemUseTime - SEVEN_DAYS_IN_MILLISECONDS;
+ remainingPredicate =
+ (pkg) -> pkg.getLatestForegroundPackageUseTimeInMills() >= cutoffTime;
+ } else {
+ // No meaningful historical info. Take all.
+ remainingPredicate = (pkg) -> true;
}
+ sortPackagesByUsageDate(remainingPkgs, packageManagerService);
+ } else {
+ // No historical info. Take all.
+ remainingPredicate = (pkg) -> true;
}
- result.addAll(remainingPkgs);
-
- // Now go ahead and also add the libraries required for these packages.
- // TODO: Think about interleaving things.
- Set<PackageParser.Package> dependencies = new HashSet<>();
- for (PackageParser.Package p : result) {
- dependencies.addAll(packageManagerService.findSharedNonSystemLibraries(p));
- }
- if (!dependencies.isEmpty()) {
- // We might have packages already in `result` that are dependencies
- // of other packages. Make sure we don't add those to the list twice.
- dependencies.removeAll(result);
- }
- result.addAll(dependencies);
+ applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp,
+ packageManagerService);
if (DEBUG_DEXOPT) {
- StringBuilder sb = new StringBuilder();
- for (PackageParser.Package pkg : result) {
- if (sb.length() > 0) {
- sb.append(", ");
- }
- sb.append(pkg.packageName);
- }
- Log.i(TAG, "Packages to be dexopted: " + sb.toString());
+ Log.i(TAG, "Packages to be dexopted: " + packagesToString(result));
+ Log.i(TAG, "Packages skipped from dexopt: " + packagesToString(remainingPkgs));
}
return result;
@@ -203,4 +186,15 @@ public class PackageManagerServiceUtils {
throw ee.rethrowAsIOException();
}
}
+
+ public static String packagesToString(Collection<PackageParser.Package> c) {
+ StringBuilder sb = new StringBuilder();
+ for (PackageParser.Package pkg : c) {
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(pkg.packageName);
+ }
+ return sb.toString();
+ }
}
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index 5b9d139a3e0e..f7f79f324ecc 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -716,6 +716,14 @@ public final class ShutdownThread extends Thread {
}
if (!done[0]) {
Log.w(TAG, "Timed out waiting for uncrypt.");
+ final int uncryptTimeoutError = 100;
+ String timeoutMessage = String.format("uncrypt_time: %d\n" + "uncrypt_error: %d\n",
+ MAX_UNCRYPT_WAIT_TIME / 1000, uncryptTimeoutError);
+ try {
+ FileUtils.stringToFile(RecoverySystem.UNCRYPT_STATUS_FILE, timeoutMessage);
+ } catch (IOException e) {
+ Log.e(TAG, "Failed to write timeout message to uncrypt status", e);
+ }
}
}
}
diff --git a/services/core/jni/com_android_server_AlarmManagerService.cpp b/services/core/jni/com_android_server_AlarmManagerService.cpp
index 8f6f6136a49a..3a0273d8c3c8 100644
--- a/services/core/jni/com_android_server_AlarmManagerService.cpp
+++ b/services/core/jni/com_android_server_AlarmManagerService.cpp
@@ -39,39 +39,26 @@
#include <linux/ioctl.h>
#include <linux/rtc.h>
+#include <array>
#include <memory>
-//--------------------------------------------------------------------------
-// The android_alarm.h header has been deleted from the kernel headers.
-// Add only the parts still needed, this should be deleted in the future.
-#include <linux/ioctl.h>
-
-enum android_alarm_type {
- ANDROID_ALARM_RTC_WAKEUP,
- ANDROID_ALARM_RTC,
- ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,
- ANDROID_ALARM_ELAPSED_REALTIME,
- ANDROID_ALARM_SYSTEMTIME,
- ANDROID_ALARM_TYPE_COUNT,
-};
-
-enum android_alarm_return_flags {
- ANDROID_ALARM_RTC_WAKEUP_MASK = 1U << ANDROID_ALARM_RTC_WAKEUP,
- ANDROID_ALARM_RTC_MASK = 1U << ANDROID_ALARM_RTC,
- ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP_MASK = 1U << ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP,
- ANDROID_ALARM_ELAPSED_REALTIME_MASK = 1U << ANDROID_ALARM_ELAPSED_REALTIME,
- ANDROID_ALARM_SYSTEMTIME_MASK = 1U << ANDROID_ALARM_SYSTEMTIME,
- ANDROID_ALARM_TIME_CHANGE_MASK = 1U << 16
-};
-
-#define ALARM_IOW(c,type,size) _IOW('a', (c) | ((type) << 4), size)
-#define ANDROID_ALARM_WAIT _IO('a', 1)
-#define ANDROID_ALARM_SET(type) ALARM_IOW(2, type, struct timespec)
-#define ANDROID_ALARM_SET_RTC _IOW('a', 5, struct timespec)
-//--------------------------------------------------------------------------
-
namespace android {
+static constexpr int ANDROID_ALARM_TIME_CHANGE_MASK = 1 << 16;
+
+/**
+ * The AlarmManager alarm constants:
+ *
+ * RTC_WAKEUP
+ * RTC
+ * REALTIME_WAKEUP
+ * REALTIME
+ * SYSTEMTIME (only defined in old alarm driver header, possibly unused?)
+ *
+ * We also need an extra CLOCK_REALTIME fd which exists specifically to be
+ * canceled on RTC changes.
+ */
+static const size_t ANDROID_ALARM_TYPE_COUNT = 5;
static const size_t N_ANDROID_TIMERFDS = ANDROID_ALARM_TYPE_COUNT + 1;
static const clockid_t android_alarm_to_clockid[N_ANDROID_TIMERFDS] = {
CLOCK_REALTIME_ALARM,
@@ -81,98 +68,39 @@ static const clockid_t android_alarm_to_clockid[N_ANDROID_TIMERFDS] = {
CLOCK_MONOTONIC,
CLOCK_REALTIME,
};
-/* to match the legacy alarm driver implementation, we need an extra
- CLOCK_REALTIME fd which exists specifically to be canceled on RTC changes */
-
-class AlarmImpl
-{
-public:
- AlarmImpl(int *fds, size_t n_fds);
- virtual ~AlarmImpl();
-
- virtual int set(int type, struct timespec *ts) = 0;
- virtual int setTime(struct timeval *tv) = 0;
- virtual int waitForAlarm() = 0;
-
-protected:
- int *fds;
- size_t n_fds;
-};
-class AlarmImplAlarmDriver : public AlarmImpl
-{
-public:
- explicit AlarmImplAlarmDriver(int fd) : AlarmImpl(&fd, 1) { }
+typedef std::array<int, N_ANDROID_TIMERFDS> TimerFds;
- int set(int type, struct timespec *ts);
- int setTime(struct timeval *tv);
- int waitForAlarm();
-};
-
-class AlarmImplTimerFd : public AlarmImpl
+class AlarmImpl
{
public:
- AlarmImplTimerFd(int fds[N_ANDROID_TIMERFDS], int epollfd, int rtc_id) :
- AlarmImpl(fds, N_ANDROID_TIMERFDS), epollfd(epollfd), rtc_id(rtc_id) { }
- ~AlarmImplTimerFd();
+ AlarmImpl(const TimerFds &fds, int epollfd, int rtc_id) :
+ fds{fds}, epollfd{epollfd}, rtc_id{rtc_id} { }
+ ~AlarmImpl();
int set(int type, struct timespec *ts);
int setTime(struct timeval *tv);
int waitForAlarm();
private:
- int epollfd;
- int rtc_id;
+ const TimerFds fds;
+ const int epollfd;
+ const int rtc_id;
};
-AlarmImpl::AlarmImpl(int *fds_, size_t n_fds) : fds(new int[n_fds]),
- n_fds(n_fds)
-{
- memcpy(fds, fds_, n_fds * sizeof(fds[0]));
-}
-
AlarmImpl::~AlarmImpl()
{
- for (size_t i = 0; i < n_fds; i++) {
- close(fds[i]);
+ for (auto fd : fds) {
+ epoll_ctl(epollfd, EPOLL_CTL_DEL, fd, nullptr);
+ close(fd);
}
- delete [] fds;
-}
-
-int AlarmImplAlarmDriver::set(int type, struct timespec *ts)
-{
- return ioctl(fds[0], ANDROID_ALARM_SET(type), ts);
-}
-
-int AlarmImplAlarmDriver::setTime(struct timeval *tv)
-{
- struct timespec ts;
- int res;
-
- ts.tv_sec = tv->tv_sec;
- ts.tv_nsec = tv->tv_usec * 1000;
- res = ioctl(fds[0], ANDROID_ALARM_SET_RTC, &ts);
- if (res < 0)
- ALOGV("ANDROID_ALARM_SET_RTC ioctl failed: %s\n", strerror(errno));
- return res;
-}
-int AlarmImplAlarmDriver::waitForAlarm()
-{
- return ioctl(fds[0], ANDROID_ALARM_WAIT);
-}
-
-AlarmImplTimerFd::~AlarmImplTimerFd()
-{
- for (size_t i = 0; i < N_ANDROID_TIMERFDS; i++) {
- epoll_ctl(epollfd, EPOLL_CTL_DEL, fds[i], NULL);
- }
close(epollfd);
}
-int AlarmImplTimerFd::set(int type, struct timespec *ts)
+int AlarmImpl::set(int type, struct timespec *ts)
{
- if (type > ANDROID_ALARM_TYPE_COUNT) {
+ if (static_cast<size_t>(type) > ANDROID_ALARM_TYPE_COUNT) {
errno = EINVAL;
return -1;
}
@@ -190,7 +118,7 @@ int AlarmImplTimerFd::set(int type, struct timespec *ts)
return timerfd_settime(fds[type], TFD_TIMER_ABSTIME, &spec, NULL);
}
-int AlarmImplTimerFd::setTime(struct timeval *tv)
+int AlarmImpl::setTime(struct timeval *tv)
{
struct rtc_time rtc;
struct tm tm, *gmtime_res;
@@ -241,7 +169,7 @@ done:
return res;
}
-int AlarmImplTimerFd::waitForAlarm()
+int AlarmImpl::waitForAlarm()
{
epoll_event events[N_ANDROID_TIMERFDS];
@@ -311,25 +239,12 @@ static jint android_server_AlarmManagerService_setKernelTimezone(JNIEnv*, jobjec
return 0;
}
-static jlong init_alarm_driver()
-{
- int fd = open("/dev/alarm", O_RDWR);
- if (fd < 0) {
- ALOGV("opening alarm driver failed: %s", strerror(errno));
- return 0;
- }
-
- AlarmImpl *ret = new AlarmImplAlarmDriver(fd);
- return reinterpret_cast<jlong>(ret);
-}
-
static const char rtc_sysfs[] = "/sys/class/rtc";
static bool rtc_is_hctosys(unsigned int rtc_id)
{
android::String8 hctosys_path = String8::format("%s/rtc%u/hctosys",
rtc_sysfs, rtc_id);
-
FILE *file = fopen(hctosys_path.string(), "re");
if (!file) {
ALOGE("failed to open %s: %s", hctosys_path.string(), strerror(errno));
@@ -383,23 +298,48 @@ static int wall_clock_rtc()
return -1;
}
-static jlong init_timerfd()
+static void log_timerfd_create_error(clockid_t id)
+{
+ if (errno == EINVAL) {
+ switch (id) {
+ case CLOCK_REALTIME_ALARM:
+ case CLOCK_BOOTTIME_ALARM:
+ ALOGE("kernel missing required commits:");
+ ALOGE("https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=6cffe00f7d4e24679eae6b7aae4caaf915288256");
+ ALOGE("https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=11ffa9d6065f344a9bd769a2452f26f2f671e5f8");
+ LOG_ALWAYS_FATAL("kernel does not support timerfd_create() with alarm timers");
+ break;
+
+ case CLOCK_BOOTTIME:
+ ALOGE("kernel missing required commit:");
+ ALOGE("https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4a2378a943f09907fb1ae35c15de917f60289c14");
+ LOG_ALWAYS_FATAL("kernel does not support timerfd_create(CLOCK_BOOTTIME)");
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ ALOGE("timerfd_create(%u) failed: %s", id, strerror(errno));
+}
+
+static jlong android_server_AlarmManagerService_init(JNIEnv*, jobject)
{
int epollfd;
- int fds[N_ANDROID_TIMERFDS];
+ TimerFds fds;
- epollfd = epoll_create(N_ANDROID_TIMERFDS);
+ epollfd = epoll_create(fds.size());
if (epollfd < 0) {
- ALOGV("epoll_create(%zu) failed: %s", N_ANDROID_TIMERFDS,
+ ALOGE("epoll_create(%zu) failed: %s", fds.size(),
strerror(errno));
return 0;
}
- for (size_t i = 0; i < N_ANDROID_TIMERFDS; i++) {
+ for (size_t i = 0; i < fds.size(); i++) {
fds[i] = timerfd_create(android_alarm_to_clockid[i], 0);
if (fds[i] < 0) {
- ALOGV("timerfd_create(%u) failed: %s", android_alarm_to_clockid[i],
- strerror(errno));
+ log_timerfd_create_error(android_alarm_to_clockid[i]);
close(epollfd);
for (size_t j = 0; j < i; j++) {
close(fds[j]);
@@ -408,16 +348,16 @@ static jlong init_timerfd()
}
}
- AlarmImpl *ret = new AlarmImplTimerFd(fds, epollfd, wall_clock_rtc());
+ AlarmImpl *ret = new AlarmImpl(fds, epollfd, wall_clock_rtc());
- for (size_t i = 0; i < N_ANDROID_TIMERFDS; i++) {
+ for (size_t i = 0; i < fds.size(); i++) {
epoll_event event;
event.events = EPOLLIN | EPOLLWAKEUP;
event.data.u32 = i;
int err = epoll_ctl(epollfd, EPOLL_CTL_ADD, fds[i], &event);
if (err < 0) {
- ALOGV("epoll_ctl(EPOLL_CTL_ADD) failed: %s", strerror(errno));
+ ALOGE("epoll_ctl(EPOLL_CTL_ADD) failed: %s", strerror(errno));
delete ret;
return 0;
}
@@ -431,7 +371,7 @@ static jlong init_timerfd()
int err = timerfd_settime(fds[ANDROID_ALARM_TYPE_COUNT],
TFD_TIMER_ABSTIME | TFD_TIMER_CANCEL_ON_SET, &spec, NULL);
if (err < 0) {
- ALOGV("timerfd_settime() failed: %s", strerror(errno));
+ ALOGE("timerfd_settime() failed: %s", strerror(errno));
delete ret;
return 0;
}
@@ -439,16 +379,6 @@ static jlong init_timerfd()
return reinterpret_cast<jlong>(ret);
}
-static jlong android_server_AlarmManagerService_init(JNIEnv*, jobject)
-{
- jlong ret = init_alarm_driver();
- if (ret) {
- return ret;
- }
-
- return init_timerfd();
-}
-
static void android_server_AlarmManagerService_close(JNIEnv*, jobject, jlong nativeData)
{
AlarmImpl *impl = reinterpret_cast<AlarmImpl *>(nativeData);
diff --git a/services/tests/servicestests/Android.mk b/services/tests/servicestests/Android.mk
index d1bd5051cfad..8e3128c8f828 100644
--- a/services/tests/servicestests/Android.mk
+++ b/services/tests/servicestests/Android.mk
@@ -67,6 +67,7 @@ LOCAL_SRC_FILES := $(call all-cpp-files-under)
LOCAL_SHARED_LIBRARIES := \
libbinder \
+ liblog \
libcutils \
libnativehelper \
libnetdaidl
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index ff7ca6201b55..3fc945a83617 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -86,6 +86,15 @@ public class CarrierConfigManager {
KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL = "require_entitlement_checks_bool";
/**
+ * Flag indicating whether radio is to be restarted on error PDP_FAIL_REGULAR_DEACTIVATION
+ * This is false by default.
+ * @hide
+ */
+ public static final String
+ KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL =
+ "restart_radio_on_pdp_fail_regular_deactivation_bool";
+
+ /**
* If true, enable vibration (haptic feedback) for key presses in the EmergencyDialer activity.
* The pattern is set on a per-platform basis using config_virtualKeyVibePattern. To be
* consistent with the regular Dialer, this value should agree with the corresponding values
@@ -252,6 +261,17 @@ public class CarrierConfigManager {
public static final String KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL = "carrier_wfc_ims_available_bool";
/**
+ * Specifies a map from dialstrings to replacements for roaming network service numbers which
+ * cannot be replaced on the carrier side.
+ * <p>
+ * Individual entries have the format:
+ * [dialstring to replace]:[replacement]
+ * @hide
+ */
+ public static final String KEY_DIAL_STRING_REPLACE_STRING_ARRAY =
+ "dial_string_replace_string_array";
+
+ /**
* Flag specifying whether WFC over IMS supports the "wifi only" option. If false, the wifi
* calling settings will not include an option for "wifi only". If true, the wifi calling
* settings will include an option for "wifi only"
@@ -701,6 +721,15 @@ public class CarrierConfigManager {
"duration_blocking_disabled_after_emergency_int";
/**
+ * For carriers which require an empty flash to be sent before sending the normal 3-way calling
+ * flash, the duration in milliseconds of the empty flash to send. When {@code 0}, no empty
+ * flash is sent.
+ * @hide
+ */
+ public static final String KEY_CDMA_3WAYCALL_FLASH_DELAY_INT = "cdma_3waycall_flash_delay_int";
+
+
+ /**
* @hide
* The default value for preferred CDMA roaming mode (aka CDMA system select.)
* CDMA_ROAMING_MODE_RADIO_DEFAULT = the default roaming mode from the radio
@@ -768,6 +797,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_VOICE_PRIVACY_DISABLE_UI_BOOL, false);
sDefaults.putBoolean(KEY_WORLD_PHONE_BOOL, false);
sDefaults.putBoolean(KEY_REQUIRE_ENTITLEMENT_CHECKS_BOOL, true);
+ sDefaults.putBoolean(KEY_RESTART_RADIO_ON_PDP_FAIL_REGULAR_DEACTIVATION_BOOL, false);
sDefaults.putInt(KEY_VOLTE_REPLACEMENT_RAT_INT, 0);
sDefaults.putString(KEY_DEFAULT_SIM_CALL_MANAGER_STRING, "");
sDefaults.putString(KEY_VVM_DESTINATION_NUMBER_STRING, "");
@@ -803,10 +833,12 @@ public class CarrierConfigManager {
sDefaults.putStringArray(KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY, null);
sDefaults.putStringArray(KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY, null);
sDefaults.putStringArray(KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY, null);
+ sDefaults.putStringArray(KEY_DIAL_STRING_REPLACE_STRING_ARRAY, null);
sDefaults.putBoolean(KEY_FORCE_HOME_NETWORK_BOOL, false);
sDefaults.putInt(KEY_GSM_DTMF_TONE_DELAY_INT, 0);
sDefaults.putInt(KEY_IMS_DTMF_TONE_DELAY_INT, 0);
sDefaults.putInt(KEY_CDMA_DTMF_TONE_DELAY_INT, 100);
+ sDefaults.putInt(KEY_CDMA_3WAYCALL_FLASH_DELAY_INT , 0);
sDefaults.putBoolean(KEY_SUPPORT_CONFERENCE_CALL_BOOL, true);
sDefaults.putBoolean(KEY_EDITABLE_ENHANCED_4G_LTE_BOOL, true);
sDefaults.putBoolean(KEY_HIDE_IMS_APN_BOOL, false);
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 34fdf6cba3e2..cf7f0e8788ca 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -23,12 +23,8 @@
// STATUST: mingw does seem to redefine UNKNOWN_ERROR from our enum value, so a cast is necessary.
#if !defined(_WIN32)
-# define ZD "%zd"
-# define ZD_TYPE ssize_t
# define STATUST(x) x
#else
-# define ZD "%ld"
-# define ZD_TYPE long
# define STATUST(x) (status_t)x
#endif
diff --git a/tools/aapt/StringPool.cpp b/tools/aapt/StringPool.cpp
index 37a493329ade..866291a3b678 100644
--- a/tools/aapt/StringPool.cpp
+++ b/tools/aapt/StringPool.cpp
@@ -14,12 +14,8 @@
// SSIZE: mingw does not have signed size_t == ssize_t.
#if !defined(_WIN32)
-# define ZD "%zd"
-# define ZD_TYPE ssize_t
# define SSIZE(x) x
#else
-# define ZD "%ld"
-# define ZD_TYPE long
# define SSIZE(x) (signed size_t)x
#endif
diff --git a/tools/aapt/StringPool.h b/tools/aapt/StringPool.h
index 625b0bfb3832..253bcca4f507 100644
--- a/tools/aapt/StringPool.h
+++ b/tools/aapt/StringPool.h
@@ -12,7 +12,6 @@
#include <androidfw/ResourceTypes.h>
#include <utils/String16.h>
-#include <utils/TypeHelpers.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -179,13 +178,5 @@ private:
Vector<size_t> mOriginalPosToNewPos;
};
-// The entry types are trivially movable because all fields they contain, including
-// the vectors and strings, are trivially movable.
-namespace android {
- ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry);
- ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style_span);
- ANDROID_TRIVIAL_MOVE_TRAIT(StringPool::entry_style);
-};
-
#endif
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 706b29495c21..a91c9491c60a 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -97,10 +97,6 @@ interface IWifiManager
String getCountryCode();
- void setFrequencyBand(int band, boolean persist);
-
- int getFrequencyBand();
-
boolean isDualBandSupported();
boolean saveConfiguration();
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index 67cf10732b9d..465addfc1469 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -139,12 +139,6 @@ public class ScanResult implements Parcelable {
public long seen;
/**
- * If the scan result is a valid autojoin candidate
- * {@hide}
- */
- public int isAutoJoinCandidate;
-
- /**
* @hide
* Update RSSI of the scan result
* @param previousRssi
@@ -452,7 +446,6 @@ public class ScanResult implements Parcelable {
numConnection = source.numConnection;
numUsage = source.numUsage;
numIpConfigFailures = source.numIpConfigFailures;
- isAutoJoinCandidate = source.isAutoJoinCandidate;
venueName = source.venueName;
operatorFriendlyName = source.operatorFriendlyName;
flags = source.flags;
@@ -530,7 +523,6 @@ public class ScanResult implements Parcelable {
dest.writeInt(numConnection);
dest.writeInt(numUsage);
dest.writeInt(numIpConfigFailures);
- dest.writeInt(isAutoJoinCandidate);
dest.writeString((venueName != null) ? venueName.toString() : "");
dest.writeString((operatorFriendlyName != null) ? operatorFriendlyName.toString() : "");
dest.writeLong(this.flags);
@@ -600,7 +592,6 @@ public class ScanResult implements Parcelable {
sr.numConnection = in.readInt();
sr.numUsage = in.readInt();
sr.numIpConfigFailures = in.readInt();
- sr.isAutoJoinCandidate = in.readInt();
sr.venueName = in.readString();
sr.operatorFriendlyName = in.readString();
sr.flags = in.readLong();
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 955161cf538b..d04a60ecdfd2 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -1376,40 +1376,6 @@ public class WifiManager {
}
/**
- * Set the operational frequency band.
- * @param band One of
- * {@link #WIFI_FREQUENCY_BAND_AUTO},
- * {@link #WIFI_FREQUENCY_BAND_5GHZ},
- * {@link #WIFI_FREQUENCY_BAND_2GHZ},
- * @param persist {@code true} if this needs to be remembered
- * @hide
- */
- public void setFrequencyBand(int band, boolean persist) {
- try {
- mService.setFrequencyBand(band, persist);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
- * Get the operational frequency band.
- * @return One of
- * {@link #WIFI_FREQUENCY_BAND_AUTO},
- * {@link #WIFI_FREQUENCY_BAND_5GHZ},
- * {@link #WIFI_FREQUENCY_BAND_2GHZ} or
- * {@code -1} on failure.
- * @hide
- */
- public int getFrequencyBand() {
- try {
- return mService.getFrequencyBand();
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
-
- /**
* Check if the chipset supports dual frequency band (2.4 GHz and 5 GHz)
* @return {@code true} if supported, {@code false} otherwise.
* @hide
diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java
index 06e1b681fbef..5847f798712d 100644
--- a/wifi/java/android/net/wifi/WifiScanner.java
+++ b/wifi/java/android/net/wifi/WifiScanner.java
@@ -34,9 +34,10 @@ import com.android.internal.util.AsyncChannel;
import com.android.internal.util.Preconditions;
import com.android.internal.util.Protocol;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
-
/**
* This class provides a way to scan the Wifi universe around the device
* Get an instance of this class by calling
@@ -822,6 +823,22 @@ public class WifiScanner {
mAsyncChannel.sendMessage(CMD_STOP_SINGLE_SCAN, 0, key);
}
+ /**
+ * Retrieve the most recent scan results from a single scan request.
+ * {@hide}
+ */
+ public List<ScanResult> getSingleScanResults() {
+ validateChannel();
+ Message reply = mAsyncChannel.sendMessageSynchronously(CMD_GET_SINGLE_SCAN_RESULTS, 0);
+ if (reply.what == WifiScanner.CMD_OP_SUCCEEDED) {
+ return Arrays.asList(((ParcelableScanResults) reply.obj).getResults());
+ }
+ OperationResult result = (OperationResult) reply.obj;
+ Log.e(TAG, "Error retrieving SingleScan results reason: " + result.reason
+ + " description: " + result.description);
+ return new ArrayList<ScanResult>();
+ }
+
private void startPnoScan(ScanSettings scanSettings, PnoSettings pnoSettings, int key) {
// Bundle up both the settings and send it across.
Bundle pnoParams = new Bundle();
@@ -1201,6 +1218,8 @@ public class WifiScanner {
public static final int CMD_REGISTER_SCAN_LISTENER = BASE + 27;
/** @hide */
public static final int CMD_DEREGISTER_SCAN_LISTENER = BASE + 28;
+ /** @hide */
+ public static final int CMD_GET_SINGLE_SCAN_RESULTS = BASE + 29;
private Context mContext;
private IWifiScanner mService;
diff --git a/wifi/java/android/net/wifi/nan/ConfigRequest.java b/wifi/java/android/net/wifi/nan/ConfigRequest.java
index 78e40526ba5b..bcd79322e563 100644
--- a/wifi/java/android/net/wifi/nan/ConfigRequest.java
+++ b/wifi/java/android/net/wifi/nan/ConfigRequest.java
@@ -16,87 +16,65 @@
package android.net.wifi.nan;
-import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Defines a request object to configure a Wi-Fi NAN network. Built using
* {@link ConfigRequest.Builder}. Configuration is requested using
- * {@link WifiNanManager#connect(android.os.Handler, ConfigRequest, WifiNanEventCallback)}.
+ * {@link WifiNanManager#attach(android.os.Handler, WifiNanAttachCallback)}.
* Note that the actual achieved configuration may be different from the
* requested configuration - since different applications may request different
* configurations.
*
- * @hide PROPOSED_NAN_API
+ * @hide
*/
public final class ConfigRequest implements Parcelable {
/**
* Lower range of possible cluster ID.
- *
- * @hide
*/
public static final int CLUSTER_ID_MIN = 0;
/**
* Upper range of possible cluster ID.
- *
- * @hide
*/
public static final int CLUSTER_ID_MAX = 0xFFFF;
/**
* Indicates whether 5G band support is requested.
- *
- * @hide
*/
public final boolean mSupport5gBand;
/**
* Specifies the desired master preference.
- *
- * @hide
*/
public final int mMasterPreference;
/**
* Specifies the desired lower range of the cluster ID. Must be lower then
* {@link ConfigRequest#mClusterHigh}.
- *
- * @hide
*/
public final int mClusterLow;
/**
* Specifies the desired higher range of the cluster ID. Must be higher then
* {@link ConfigRequest#mClusterLow}.
- *
- * @hide
*/
public final int mClusterHigh;
- /**
- * Indicates whether we want to get callbacks when our identity is changed.
- *
- * @hide
- */
- public final boolean mEnableIdentityChangeCallback;
-
private ConfigRequest(boolean support5gBand, int masterPreference, int clusterLow,
- int clusterHigh, boolean enableIdentityChangeCallback) {
+ int clusterHigh) {
mSupport5gBand = support5gBand;
mMasterPreference = masterPreference;
mClusterLow = clusterLow;
mClusterHigh = clusterHigh;
- mEnableIdentityChangeCallback = enableIdentityChangeCallback;
}
@Override
public String toString() {
return "ConfigRequest [mSupport5gBand=" + mSupport5gBand + ", mMasterPreference="
+ mMasterPreference + ", mClusterLow=" + mClusterLow + ", mClusterHigh="
- + mClusterHigh + ", mEnableIdentityChangeCallback=" + mEnableIdentityChangeCallback
- + "]";
+ + mClusterHigh + "]";
}
@Override
@@ -110,7 +88,6 @@ public final class ConfigRequest implements Parcelable {
dest.writeInt(mMasterPreference);
dest.writeInt(mClusterLow);
dest.writeInt(mClusterHigh);
- dest.writeInt(mEnableIdentityChangeCallback ? 1 : 0);
}
public static final Creator<ConfigRequest> CREATOR = new Creator<ConfigRequest>() {
@@ -125,9 +102,7 @@ public final class ConfigRequest implements Parcelable {
int masterPreference = in.readInt();
int clusterLow = in.readInt();
int clusterHigh = in.readInt();
- boolean enableIdentityChangeCallback = in.readInt() != 0;
- return new ConfigRequest(support5gBand, masterPreference, clusterLow, clusterHigh,
- enableIdentityChangeCallback);
+ return new ConfigRequest(support5gBand, masterPreference, clusterLow, clusterHigh);
}
};
@@ -144,43 +119,15 @@ public final class ConfigRequest implements Parcelable {
ConfigRequest lhs = (ConfigRequest) o;
return mSupport5gBand == lhs.mSupport5gBand && mMasterPreference == lhs.mMasterPreference
- && mClusterLow == lhs.mClusterLow && mClusterHigh == lhs.mClusterHigh
- && mEnableIdentityChangeCallback == lhs.mEnableIdentityChangeCallback;
- }
-
- /**
- * Checks for equality of two configuration - but only considering their
- * on-the-air NAN configuration impact.
- *
- * @param o Object to compare to.
- * @return true if configuration objects have the same on-the-air
- * configuration, false otherwise.
- *
- * @hide
- */
- public boolean equalsOnTheAir(Object o) {
- if (this == o) {
- return true;
- }
-
- if (!(o instanceof ConfigRequest)) {
- return false;
- }
-
- ConfigRequest lhs = (ConfigRequest) o;
-
- return mSupport5gBand == lhs.mSupport5gBand && mMasterPreference == lhs.mMasterPreference
&& mClusterLow == lhs.mClusterLow && mClusterHigh == lhs.mClusterHigh;
}
/**
- * Checks whether the configuration's settings which impact on-air behavior are non-default.
- *
- * @return true if any of the on-air-impacting settings are non-default.
+ * Checks whether the configuration's settings are non-default.
*
- * @hide
+ * @return true if any of the settings are non-default.
*/
- public boolean isNonDefaultOnTheAir() {
+ public boolean isNonDefault() {
return mSupport5gBand || mMasterPreference != 0 || mClusterLow != CLUSTER_ID_MIN
|| mClusterHigh != CLUSTER_ID_MAX;
}
@@ -193,7 +140,6 @@ public final class ConfigRequest implements Parcelable {
result = 31 * result + mMasterPreference;
result = 31 * result + mClusterLow;
result = 31 * result + mClusterHigh;
- result = 31 * result + (mEnableIdentityChangeCallback ? 1 : 0);
return result;
}
@@ -201,8 +147,6 @@ public final class ConfigRequest implements Parcelable {
/**
* Verifies that the contents of the ConfigRequest are valid. Otherwise
* throws an IllegalArgumentException.
- *
- * @hide
*/
public void validate() throws IllegalArgumentException {
if (mMasterPreference < 0) {
@@ -239,7 +183,6 @@ public final class ConfigRequest implements Parcelable {
private int mMasterPreference = 0;
private int mClusterLow = CLUSTER_ID_MIN;
private int mClusterHigh = CLUSTER_ID_MAX;
- private boolean mEnableIdentityChangeCallback = false;
/**
* Specify whether 5G band support is required in this request. Disabled by default.
@@ -248,8 +191,6 @@ public final class ConfigRequest implements Parcelable {
*
* @return The builder to facilitate chaining
* {@code builder.setXXX(..).setXXX(..)}.
- *
- * @hide PROPOSED_NAN_SYSTEM_API
*/
public Builder setSupport5gBand(boolean support5gBand) {
mSupport5gBand = support5gBand;
@@ -264,8 +205,6 @@ public final class ConfigRequest implements Parcelable {
*
* @return The builder to facilitate chaining
* {@code builder.setXXX(..).setXXX(..)}.
- *
- * @hide PROPOSED_NAN_SYSTEM_API
*/
public Builder setMasterPreference(int masterPreference) {
if (masterPreference < 0) {
@@ -293,8 +232,6 @@ public final class ConfigRequest implements Parcelable {
*
* @return The builder to facilitate chaining
* {@code builder.setClusterLow(..).setClusterHigh(..)}.
- *
- * @hide PROPOSED_NAN_SYSTEM_API
*/
public Builder setClusterLow(int clusterLow) {
if (clusterLow < CLUSTER_ID_MIN) {
@@ -320,8 +257,6 @@ public final class ConfigRequest implements Parcelable {
*
* @return The builder to facilitate chaining
* {@code builder.setClusterLow(..).setClusterHigh(..)}.
- *
- * @hide PROPOSED_NAN_SYSTEM_API
*/
public Builder setClusterHigh(int clusterHigh) {
if (clusterHigh < CLUSTER_ID_MIN) {
@@ -336,27 +271,6 @@ public final class ConfigRequest implements Parcelable {
}
/**
- * Indicate whether or not we want to enable the
- * {@link WifiNanEventCallback#onIdentityChanged(byte[])} callback. A
- * device identity is its Discovery MAC address which is randomized at regular intervals.
- * An application may need to know the MAC address, e.g. when using OOB (out-of-band)
- * discovery together with NAN connections.
- * <p>
- * The callbacks are disabled by default since it may result in additional wake-ups
- * of the host -
- * increasing power.
- *
- * @param enableIdentityChangeCallback Enable the callback informing
- * listener when identity is changed.
- * @return The builder to facilitate chaining
- * {@code builder.setXXX(..).setXXX(..)}.
- */
- public Builder setEnableIdentityChangeCallback(boolean enableIdentityChangeCallback) {
- mEnableIdentityChangeCallback = enableIdentityChangeCallback;
- return this;
- }
-
- /**
* Build {@link ConfigRequest} given the current requests made on the
* builder.
*/
@@ -366,8 +280,7 @@ public final class ConfigRequest implements Parcelable {
"Invalid argument combination - must have Cluster Low <= Cluster High");
}
- return new ConfigRequest(mSupport5gBand, mMasterPreference, mClusterLow, mClusterHigh,
- mEnableIdentityChangeCallback);
+ return new ConfigRequest(mSupport5gBand, mMasterPreference, mClusterLow, mClusterHigh);
}
}
}
diff --git a/wifi/java/android/net/wifi/nan/IWifiNanSessionCallback.aidl b/wifi/java/android/net/wifi/nan/IWifiNanDiscoverySessionCallback.aidl
index ff2c409c1dd5..f2e371dd74f9 100644
--- a/wifi/java/android/net/wifi/nan/IWifiNanSessionCallback.aidl
+++ b/wifi/java/android/net/wifi/nan/IWifiNanDiscoverySessionCallback.aidl
@@ -21,9 +21,9 @@ package android.net.wifi.nan;
*
* {@hide}
*/
-oneway interface IWifiNanSessionCallback
+oneway interface IWifiNanDiscoverySessionCallback
{
- void onSessionStarted(int sessionId);
+ void onSessionStarted(int discoverySessionId);
void onSessionConfigSuccess();
void onSessionConfigFail(int reason);
void onSessionTerminated(int reason);
diff --git a/wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl b/wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl
index a4e590beca59..9ac7bf24e18e 100644
--- a/wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl
+++ b/wifi/java/android/net/wifi/nan/IWifiNanEventCallback.aidl
@@ -26,7 +26,7 @@ import android.net.wifi.RttManager;
*/
oneway interface IWifiNanEventCallback
{
- void onConnectSuccess();
+ void onConnectSuccess(int clientId);
void onConnectFail(int reason);
void onIdentityChanged(in byte[] mac);
diff --git a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
index 17ec1bc240e0..56baba9141aa 100644
--- a/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
+++ b/wifi/java/android/net/wifi/nan/IWifiNanManager.aidl
@@ -19,8 +19,8 @@ package android.net.wifi.nan;
import android.app.PendingIntent;
import android.net.wifi.nan.ConfigRequest;
+import android.net.wifi.nan.IWifiNanDiscoverySessionCallback;
import android.net.wifi.nan.IWifiNanEventCallback;
-import android.net.wifi.nan.IWifiNanSessionCallback;
import android.net.wifi.nan.PublishConfig;
import android.net.wifi.nan.SubscribeConfig;
import android.net.wifi.RttManager;
@@ -38,19 +38,20 @@ interface IWifiNanManager
boolean isUsageEnabled();
// client API
- int connect(in IBinder binder, in String callingPackage, in IWifiNanEventCallback callback,
- in ConfigRequest configRequest);
+ void connect(in IBinder binder, in String callingPackage, in IWifiNanEventCallback callback,
+ in ConfigRequest configRequest, boolean notifyOnIdentityChanged);
void disconnect(int clientId, in IBinder binder);
- void publish(int clientId, in PublishConfig publishConfig, in IWifiNanSessionCallback callback);
+ void publish(int clientId, in PublishConfig publishConfig,
+ in IWifiNanDiscoverySessionCallback callback);
void subscribe(int clientId, in SubscribeConfig subscribeConfig,
- in IWifiNanSessionCallback callback);
+ in IWifiNanDiscoverySessionCallback callback);
// session API
- void updatePublish(int clientId, int sessionId, in PublishConfig publishConfig);
- void updateSubscribe(int clientId, int sessionId, in SubscribeConfig subscribeConfig);
- void sendMessage(int clientId, int sessionId, int peerId, in byte[] message, int messageId,
- int retryCount);
- void terminateSession(int clientId, int sessionId);
- int startRanging(int clientId, int sessionId, in RttManager.ParcelableRttParams parms);
+ void updatePublish(int clientId, int discoverySessionId, in PublishConfig publishConfig);
+ void updateSubscribe(int clientId, int discoverySessionId, in SubscribeConfig subscribeConfig);
+ void sendMessage(int clientId, int discoverySessionId, int peerId, in byte[] message,
+ int messageId, int retryCount);
+ void terminateSession(int clientId, int discoverySessionId);
+ int startRanging(int clientId, int discoverySessionId, in RttManager.ParcelableRttParams parms);
}
diff --git a/wifi/java/android/net/wifi/nan/PublishConfig.java b/wifi/java/android/net/wifi/nan/PublishConfig.java
index 6203f9539e7c..4b67f9ac0ef9 100644
--- a/wifi/java/android/net/wifi/nan/PublishConfig.java
+++ b/wifi/java/android/net/wifi/nan/PublishConfig.java
@@ -32,8 +32,9 @@ import java.util.Arrays;
/**
* Defines the configuration of a NAN publish session. Built using
* {@link PublishConfig.Builder}. A publish session is created using
- * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} or updated using
- * {@link WifiNanPublishSession#updatePublish(PublishConfig)}.
+ * {@link WifiNanSession#publish(android.os.Handler, PublishConfig, WifiNanDiscoverySessionCallback)}
+ * or updated using
+ * {@link WifiNanPublishDiscoverySession#updatePublish(PublishConfig)}.
*
* @hide PROPOSED_NAN_API
*/
@@ -256,25 +257,6 @@ public final class PublishConfig implements Parcelable {
}
/**
- * Specify service specific information for the publish session - a simple wrapper
- * of {@link PublishConfig.Builder#setServiceSpecificInfo(byte[])}
- * obtaining the data from a String.
- * <p>
- * Optional. Empty by default.
- *
- * @param serviceSpecificInfoStr The service specific information string
- * to be included (as a byte array) in the publish
- * information.
- *
- * @return The builder to facilitate chaining
- * {@code builder.setXXX(..).setXXX(..)}.
- */
- public Builder setServiceSpecificInfo(@NonNull String serviceSpecificInfoStr) {
- mServiceSpecificInfo = serviceSpecificInfoStr.getBytes();
- return this;
- }
-
- /**
* The match filter for a publish session. Used to determine whether a service
* discovery occurred - in addition to relying on the service name.
* <p>
@@ -318,12 +300,13 @@ public final class PublishConfig implements Parcelable {
* Sets the number of times an unsolicited (configured using
* {@link PublishConfig.Builder#setPublishType(int)}) publish session
* will be broadcast. When the count is reached an event will be
- * generated for {@link WifiNanSessionCallback#onSessionTerminated(int)}
- * with {@link WifiNanSessionCallback#TERMINATE_REASON_DONE} [unless
- * {@link #setEnableTerminateNotification(boolean)} disables the callback].
+ * generated for {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)}
+ * with {@link WifiNanDiscoverySessionCallback#TERMINATE_REASON_DONE} [unless
+ * {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiNanSession#terminate()} is called.
+ * Session will be terminated when {@link WifiNanDiscoveryBaseSession#destroy()} is
+ * called.
*
* @param publishCount Number of publish packets to broadcast.
*
@@ -343,12 +326,13 @@ public final class PublishConfig implements Parcelable {
* {@link PublishConfig.Builder#setPublishType(int)}) publish session
* will be alive - broadcasting a packet. When the TTL is reached
* an event will be generated for
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} with
- * {@link WifiNanSessionCallback#TERMINATE_REASON_DONE} [unless
- * {@link #setEnableTerminateNotification(boolean)} disables the callback].
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} with
+ * {@link WifiNanDiscoverySessionCallback#TERMINATE_REASON_DONE} [unless
+ * {@link #setTerminateNotificationEnabled(boolean)} disables the callback].
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiNanSession#terminate()} is called.
+ * Session will be terminated when {@link WifiNanDiscoveryBaseSession#destroy()} is
+ * called.
*
* @param ttlSec Lifetime of a publish session in seconds.
*
@@ -365,7 +349,7 @@ public final class PublishConfig implements Parcelable {
/**
* Configure whether a publish terminate notification
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} is reported
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} is reported
* back to the callback.
*
* @param enable If true the terminate callback will be called when the
@@ -374,7 +358,7 @@ public final class PublishConfig implements Parcelable {
* @return The builder to facilitate chaining
* {@code builder.setXXX(..).setXXX(..)}.
*/
- public Builder setEnableTerminateNotification(boolean enable) {
+ public Builder setTerminateNotificationEnabled(boolean enable) {
mEnableTerminateNotification = enable;
return this;
}
diff --git a/wifi/java/android/net/wifi/nan/SubscribeConfig.java b/wifi/java/android/net/wifi/nan/SubscribeConfig.java
index 5a2c76272f78..4352fcf6a3cf 100644
--- a/wifi/java/android/net/wifi/nan/SubscribeConfig.java
+++ b/wifi/java/android/net/wifi/nan/SubscribeConfig.java
@@ -32,8 +32,9 @@ import java.util.Arrays;
/**
* Defines the configuration of a NAN subscribe session. Built using
* {@link SubscribeConfig.Builder}. Subscribe is done using
- * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} or
- * {@link WifiNanSubscribeSession#updateSubscribe(SubscribeConfig)}.
+ * {@link WifiNanSession#subscribe(android.os.Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)}
+ * or
+ * {@link WifiNanSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
*
* @hide PROPOSED_NAN_API
*/
@@ -288,25 +289,6 @@ public final class SubscribeConfig implements Parcelable {
}
/**
- * Specify service specific information for the subscribe session - a simple wrapper
- * of {@link SubscribeConfig.Builder#setServiceSpecificInfo(byte[])}
- * obtaining the data from a String.
- * <p>
- * Optional. Empty by default.
- *
- * @param serviceSpecificInfoStr The service specific information string
- * to be included (as a byte array) in the subscribe
- * information.
- *
- * @return The builder to facilitate chaining
- * {@code builder.setXXX(..).setXXX(..)}.
- */
- public Builder setServiceSpecificInfo(@NonNull String serviceSpecificInfoStr) {
- mServiceSpecificInfo = serviceSpecificInfoStr.getBytes();
- return this;
- }
-
- /**
* The match filter for a subscribe session. Used to determine whether a service
* discovery occurred - in addition to relying on the service name.
* <p>
@@ -350,11 +332,12 @@ public final class SubscribeConfig implements Parcelable {
* Sets the number of times an active (
* {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session
* will broadcast. When the count is reached an event will be
- * generated for {@link WifiNanSessionCallback#onSessionTerminated(int)}
- * with {@link WifiNanSessionCallback#TERMINATE_REASON_DONE}.
+ * generated for {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)}
+ * with {@link WifiNanDiscoverySessionCallback#TERMINATE_REASON_DONE}.
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiNanSession#terminate()} is called.
+ * Session will be terminated when {@link WifiNanDiscoveryBaseSession#destroy()} is
+ * called.
*
* @param subscribeCount Number of subscribe packets to broadcast.
*
@@ -374,11 +357,12 @@ public final class SubscribeConfig implements Parcelable {
* {@link SubscribeConfig.Builder#setSubscribeType(int)}) subscribe session
* will be alive - i.e. broadcasting a packet. When the TTL is reached
* an event will be generated for
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} with
- * {@link WifiNanSessionCallback#TERMINATE_REASON_DONE}.
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} with
+ * {@link WifiNanDiscoverySessionCallback#TERMINATE_REASON_DONE}.
* <p>
* Optional. 0 by default - indicating the session doesn't terminate on its own.
- * Session will be terminated when {@link WifiNanSession#terminate()} is called.
+ * Session will be terminated when {@link WifiNanDiscoveryBaseSession#destroy()} is
+ * called.
*
* @param ttlSec Lifetime of a subscribe session in seconds.
*
@@ -397,7 +381,7 @@ public final class SubscribeConfig implements Parcelable {
* Sets the match style of the subscription - how are matches from a
* single match session (corresponding to the same publish action on the
* peer) reported to the host (using the
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])}
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])}
* ). The options are: only report the first match and ignore the rest
* {@link SubscribeConfig#MATCH_STYLE_FIRST_ONLY} or report every single
* match {@link SubscribeConfig#MATCH_STYLE_ALL} (the default).
@@ -417,7 +401,7 @@ public final class SubscribeConfig implements Parcelable {
/**
* Configure whether a subscribe terminate notification
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} is reported
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} is reported
* back to the callback.
*
* @param enable If true the terminate callback will be called when the
@@ -426,7 +410,7 @@ public final class SubscribeConfig implements Parcelable {
* @return The builder to facilitate chaining
* {@code builder.setXXX(..).setXXX(..)}.
*/
- public Builder setEnableTerminateNotification(boolean enable) {
+ public Builder setTerminateNotificationEnabled(boolean enable) {
mEnableTerminateNotification = enable;
return this;
}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanAttachCallback.java b/wifi/java/android/net/wifi/nan/WifiNanAttachCallback.java
new file mode 100644
index 000000000000..d8c310b36452
--- /dev/null
+++ b/wifi/java/android/net/wifi/nan/WifiNanAttachCallback.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi.nan;
+
+/**
+ * Base class for NAN attach callbacks. Should be extended by applications and set when calling
+ * {@link WifiNanManager#attach(android.os.Handler, WifiNanAttachCallback)}. These are callbacks
+ * applying to the NAN connection as a whole - not to specific publish or subscribe sessions -
+ * for that see {@link WifiNanDiscoverySessionCallback}.
+ *
+ * @hide PROPOSED_NAN_API
+ */
+public class WifiNanAttachCallback {
+ /**
+ * Called when NAN attach operation
+ * {@link WifiNanManager#attach(android.os.Handler, WifiNanAttachCallback)}
+ * is completed and that we can now start discovery sessions or connections.
+ *
+ * @param session The NAN object on which we can execute further NAN operations - e.g.
+ * discovery, connections.
+ */
+ public void onAttached(WifiNanSession session) {
+ /* empty */
+ }
+
+ /**
+ * Called when NAN attach operation
+ * {@link WifiNanManager#attach(android.os.Handler, WifiNanAttachCallback)} failed.
+ */
+ public void onAttachFailed() {
+ /* empty */
+ }
+}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanDiscoveryBaseSession.java b/wifi/java/android/net/wifi/nan/WifiNanDiscoveryBaseSession.java
new file mode 100644
index 000000000000..17e974b14657
--- /dev/null
+++ b/wifi/java/android/net/wifi/nan/WifiNanDiscoveryBaseSession.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi.nan;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.SystemApi;
+import android.net.wifi.RttManager;
+import android.util.Log;
+
+import dalvik.system.CloseGuard;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * A class representing a single publish or subscribe NAN session. This object
+ * will not be created directly - only its child classes are available:
+ * {@link WifiNanPublishDiscoverySession} and {@link WifiNanSubscribeDiscoverySession}. This
+ * class provides functionality common to both publish and subscribe discovery sessions:
+ * <ul>
+ * <li>Sending messages: {@link #sendMessage(Object, int, byte[])} or
+ * {@link #sendMessage(Object, int, byte[], int)} methods.
+ * <li>Creating a network-specifier when requesting a NAN connection:
+ * {@link #createNetworkSpecifier(int, Object, byte[])}.
+ * </ul>
+ * The {@link #destroy()} method must be called to destroy discovery sessions once they are
+ * no longer needed.
+ *
+ * @hide PROPOSED_NAN_API
+ */
+public class WifiNanDiscoveryBaseSession {
+ private static final String TAG = "WifiNanDiscoveryBaseSsn";
+ private static final boolean DBG = false;
+ private static final boolean VDBG = false; // STOPSHIP if true
+
+ private static final int MAX_SEND_RETRY_COUNT = 5;
+
+ /** @hide */
+ protected WeakReference<WifiNanManager> mMgr;
+ /** @hide */
+ protected final int mClientId;
+ /** @hide */
+ protected final int mSessionId;
+ /** @hide */
+ protected boolean mTerminated = false;
+
+ private final CloseGuard mCloseGuard = CloseGuard.get();
+
+ /**
+ * Return the maximum permitted retry count when sending messages using
+ * {@link #sendMessage(Object, int, byte[], int)}.
+ *
+ * @return Maximum retry count when sending messages.
+ */
+ public static int getMaxSendRetryCount() {
+ return MAX_SEND_RETRY_COUNT;
+ }
+
+ /** @hide */
+ public WifiNanDiscoveryBaseSession(WifiNanManager manager, int clientId, int sessionId) {
+ if (VDBG) {
+ Log.v(TAG, "New discovery session created: manager=" + manager + ", clientId="
+ + clientId + ", sessionId=" + sessionId);
+ }
+
+ mMgr = new WeakReference<>(manager);
+ mClientId = clientId;
+ mSessionId = sessionId;
+
+ mCloseGuard.open("destroy");
+ }
+
+ /**
+ * Destroy the publish or subscribe session - free any resources, and stop
+ * transmitting packets on-air (for an active session) or listening for
+ * matches (for a passive session). The session may not be used for any
+ * additional operations after its destruction.
+ * <p>
+ * This operation must be done on a session which is no longer needed. Otherwise system
+ * resources will continue to be utilized until the application exits. The only
+ * exception is a session for which we received a termination callback,
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)}.
+ */
+ public void destroy() {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.w(TAG, "destroy: called post GC on WifiNanManager");
+ return;
+ }
+ mgr.terminateSession(mClientId, mSessionId);
+ mTerminated = true;
+ mMgr.clear();
+ mCloseGuard.close();
+ }
+
+ /**
+ * Sets the status of the session to terminated - i.e. an indication that
+ * already terminated rather than executing a termination.
+ *
+ * @hide
+ */
+ public void setTerminated() {
+ if (mTerminated) {
+ Log.w(TAG, "terminate: already terminated.");
+ return;
+ }
+ mTerminated = true;
+ mMgr.clear();
+ mCloseGuard.close();
+ }
+
+ /** @hide */
+ @Override
+ protected void finalize() throws Throwable {
+ try {
+ if (!mTerminated) {
+ mCloseGuard.warnIfOpen();
+ destroy();
+ }
+ } finally {
+ super.finalize();
+ }
+ }
+
+ /**
+ * Sends a message to the specified destination. NAN messages are transmitted in the context
+ * of a discovery session - executed subsequent to a publish/subscribe
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])} event.
+ * <p>
+ * NAN messages are not guaranteed delivery. Callbacks on
+ * {@link WifiNanDiscoverySessionCallback} indicate message was transmitted successfully,
+ * {@link WifiNanDiscoverySessionCallback#onMessageSent(int)}, or transmission failed
+ * (possibly after several retries) -
+ * {@link WifiNanDiscoverySessionCallback#onMessageSendFailed(int)}.
+ * <p>
+ * The peer will get a callback indicating a message was received using
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])}.
+ *
+ * @param peerHandle The peer's handle for the message. Must be a result of an
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])}
+ * or
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])} events.
+ * @param messageId An arbitrary integer used by the caller to identify the message. The same
+ * integer ID will be returned in the callbacks indicating message send success or
+ * failure. The {@code messageId} is not used internally by the NAN service - it
+ * can be arbitrary and non-unique.
+ * @param message The message to be transmitted.
+ * @param retryCount An integer specifying how many additional service-level (as opposed to PHY
+ * or MAC level) retries should be attempted if there is no ACK from the receiver
+ * (note: no retransmissions are attempted in other failure cases). A value of 0
+ * indicates no retries. Max permitted value is {@link #getMaxSendRetryCount()}.
+ */
+ public void sendMessage(@NonNull Object peerHandle, int messageId, @Nullable byte[] message,
+ int retryCount) {
+ if (mTerminated) {
+ Log.w(TAG, "sendMessage: called on terminated session");
+ return;
+ } else {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.w(TAG, "sendMessage: called post GC on WifiNanManager");
+ return;
+ }
+
+ mgr.sendMessage(mClientId, mSessionId, peerHandle, message, messageId, retryCount);
+ }
+ }
+
+ /**
+ * Sends a message to the specified destination. NAN messages are transmitted in the context
+ * of a discovery session - executed subsequent to a publish/subscribe
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])} event.
+ * <p>
+ * NAN messages are not guaranteed delivery. Callbacks on
+ * {@link WifiNanDiscoverySessionCallback} indicate message was transmitted successfully,
+ * {@link WifiNanDiscoverySessionCallback#onMessageSent(int)}, or transmission failed
+ * (possibly after several retries) -
+ * {@link WifiNanDiscoverySessionCallback#onMessageSendFailed(int)}.
+ * <p>
+ * The peer will get a callback indicating a message was received using
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])}.
+ * Equivalent to {@link #sendMessage(Object, int, byte[], int)} with a {@code retryCount} of
+ * 0.
+ *
+ * @param peerHandle The peer's handle for the message. Must be a result of an
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])}
+ * or
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])} events.
+ * @param messageId An arbitrary integer used by the caller to identify the message. The same
+ * integer ID will be returned in the callbacks indicating message send success or
+ * failure. The {@code messageId} is not used internally by the NAN service - it
+ * can be arbitrary and non-unique.
+ * @param message The message to be transmitted.
+ */
+ public void sendMessage(@NonNull Object peerHandle, int messageId, @Nullable byte[] message) {
+ sendMessage(peerHandle, messageId, message, 0);
+ }
+
+ /**
+ * Start a ranging operation with the specified peers. The peer IDs are obtained from an
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])} or
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])} operation - can
+ * only range devices which are part of an ongoing discovery session.
+ *
+ * @param params RTT parameters - each corresponding to a specific peer ID (the array sizes
+ * must be identical). The
+ * {@link android.net.wifi.RttManager.RttParams#bssid} member must be set to
+ * a peer ID - not to a MAC address.
+ * @param listener The listener to receive the results of the ranging session.
+ * @hide PROPOSED_NAN_SYSTEM_API [TODO: b/28847998 - track RTT API & visilibity]
+ */
+ public void startRanging(RttManager.RttParams[] params, RttManager.RttListener listener) {
+ if (mTerminated) {
+ Log.w(TAG, "startRanging: called on terminated session");
+ return;
+ } else {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.w(TAG, "startRanging: called post GC on WifiNanManager");
+ return;
+ }
+
+ mgr.startRanging(mClientId, mSessionId, params, listener);
+ }
+ }
+
+ /**
+ * Create a {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(String)} for a
+ * WiFi NAN connection to the specified peer. The
+ * {@link android.net.NetworkRequest.Builder#addTransportType(int)} should be set to
+ * {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_NAN}.
+ * <p>
+ * This method should be used when setting up a connection with a peer discovered through NAN
+ * discovery or communication (in such scenarios the MAC address of the peer is shielded by
+ * an opaque peer ID handle). If a NAN connection is needed to a peer discovered using other
+ * OOB (out-of-band) mechanism then use the alternative
+ * {@link WifiNanSession#createNetworkSpecifier(int, byte[], byte[])} method - which uses the
+ * peer's MAC address.
+ *
+ * @param role The role of this device:
+ * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_INITIATOR} or
+ * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_RESPONDER}
+ * @param peerHandle The peer's handle obtained through
+ * {@link WifiNanDiscoverySessionCallback#onServiceDiscovered(Object, byte[], byte[])} or
+ * {@link WifiNanDiscoverySessionCallback#onMessageReceived(Object, byte[])}. On a RESPONDER
+ * this value is used to gate the acceptance of a connection request from only
+ * that peer. A RESPONDER may specified a null - indicating that it will accept
+ * connection requests from any device.
+ * @param token An arbitrary token (message) to be used to match connection initiation request
+ * to a responder setup. A RESPONDER is set up with a {@code token} which must
+ * be matched by the token provided by the INITIATOR. A null token is permitted
+ * on the RESPONDER and matches any peer token. An empty ({@code ""}) token is
+ * not the same as a null token and requires the peer token to be empty as well.
+ *
+ * @return A string to be used to construct
+ * {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(String)} to pass to
+ * {@link android.net.ConnectivityManager#requestNetwork(android.net.NetworkRequest,android.net.ConnectivityManager.NetworkCallback)}
+ * [or other varieties of that API].
+ */
+ public String createNetworkSpecifier(@WifiNanManager.DataPathRole int role,
+ @Nullable Object peerHandle, @Nullable byte[] token) {
+ if (mTerminated) {
+ Log.w(TAG, "createNetworkSpecifier: called on terminated session");
+ return null;
+ } else {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.w(TAG, "createNetworkSpecifier: called post GC on WifiNanManager");
+ return null;
+ }
+
+ return mgr.createNetworkSpecifier(mClientId, role, mSessionId, peerHandle, token);
+ }
+ }
+}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanDiscoverySessionCallback.java b/wifi/java/android/net/wifi/nan/WifiNanDiscoverySessionCallback.java
new file mode 100644
index 000000000000..271f420272e5
--- /dev/null
+++ b/wifi/java/android/net/wifi/nan/WifiNanDiscoverySessionCallback.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi.nan;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Base class for NAN session events callbacks. Should be extended by
+ * applications wanting notifications. The callbacks are set when a
+ * publish or subscribe session is created using
+ * {@link WifiNanSession#publish(android.os.Handler, PublishConfig, WifiNanDiscoverySessionCallback)}
+ * or
+ * {@link WifiNanSession#subscribe(android.os.Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)} .
+ * <p>
+ * A single callback is set at session creation - it cannot be replaced.
+ *
+ * @hide PROPOSED_NAN_API
+ */
+public class WifiNanDiscoverySessionCallback {
+ /** @hide */
+ @IntDef({
+ TERMINATE_REASON_DONE, TERMINATE_REASON_FAIL })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface SessionTerminateCodes {
+ }
+
+ /**
+ * Indicates that publish or subscribe session is done - all the
+ * requested operations (per {@link PublishConfig} or
+ * {@link SubscribeConfig}) have been executed. Failure reason flag for
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} callback.
+ */
+ public static final int TERMINATE_REASON_DONE = 100;
+
+ /**
+ * Indicates that publish or subscribe session is terminated due to a
+ * failure.
+ * Failure reason flag for
+ * {@link WifiNanDiscoverySessionCallback#onSessionTerminated(int)} callback.
+ */
+ public static final int TERMINATE_REASON_FAIL = 101;
+
+ /**
+ * Called when a publish operation is started successfully in response to a
+ * {@link WifiNanSession#publish(android.os.Handler, PublishConfig, WifiNanDiscoverySessionCallback)}
+ * operation.
+ *
+ * @param session The {@link WifiNanPublishDiscoverySession} used to control the
+ * discovery session.
+ */
+ public void onPublishStarted(@NonNull WifiNanPublishDiscoverySession session) {
+ /* empty */
+ }
+
+ /**
+ * Called when a subscribe operation is started successfully in response to a
+ * {@link WifiNanSession#subscribe(android.os.Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)}
+ * operation.
+ *
+ * @param session The {@link WifiNanSubscribeDiscoverySession} used to control the
+ * discovery session.
+ */
+ public void onSubscribeStarted(@NonNull WifiNanSubscribeDiscoverySession session) {
+ /* empty */
+ }
+
+ /**
+ * Called when a publish or subscribe discovery session configuration update request
+ * succeeds. Called in response to
+ * {@link WifiNanPublishDiscoverySession#updatePublish(PublishConfig)} or
+ * {@link WifiNanSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
+ */
+ public void onSessionConfigUpdated() {
+ /* empty */
+ }
+
+ /**
+ * Called when a publish or subscribe discovery session cannot be created:
+ * {@link WifiNanSession#publish(android.os.Handler, PublishConfig, WifiNanDiscoverySessionCallback)}
+ * or
+ * {@link WifiNanSession#subscribe(android.os.Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)},
+ * or when a configuration update fails:
+ * {@link WifiNanPublishDiscoverySession#updatePublish(PublishConfig)} or
+ * {@link WifiNanSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
+ * <p>
+ * For discovery session updates failure leaves the session running with its previous
+ * configuration - the discovery session is not terminated.
+ */
+ public void onSessionConfigFailed() {
+ /* empty */
+ }
+
+ /**
+ * Called when a discovery session (publish or subscribe) terminates. Termination may be due
+ * to user-request (either directly through {@link WifiNanDiscoveryBaseSession#destroy()} or
+ * application-specified expiration, e.g. {@link PublishConfig.Builder#setPublishCount(int)}
+ * or {@link SubscribeConfig.Builder#setTtlSec(int)}) or due to a failure.
+ *
+ * @param reason The termination reason using
+ * {@code WifiNanDiscoverySessionCallback.TERMINATE_*} codes.
+ */
+ public void onSessionTerminated(@SessionTerminateCodes int reason) {
+ /* empty */
+ }
+
+ /**
+ * Called when a discovery (publish or subscribe) operation results in a
+ * service discovery.
+ *
+ * @param peerHandle An opaque handle to the peer matching our discovery operation.
+ * @param serviceSpecificInfo The service specific information (arbitrary
+ * byte array) provided by the peer as part of its discovery
+ * configuration.
+ * @param matchFilter The filter (Tx on advertiser and Rx on listener) which
+ * resulted in this service discovery.
+ */
+ public void onServiceDiscovered(Object peerHandle, byte[] serviceSpecificInfo,
+ byte[] matchFilter) {
+ /* empty */
+ }
+
+ /**
+ * Called in response to {@link WifiNanDiscoveryBaseSession#sendMessage(Object, int, byte[])}
+ * when a message is transmitted successfully - i.e. when it was received successfully by the
+ * peer (corresponds to an ACK being received).
+ * <p>
+ * Note that either this callback or
+ * {@link WifiNanDiscoverySessionCallback#onMessageSendFailed(int)} will be
+ * received - never both.
+ *
+ * @param messageId The arbitrary message ID specified when sending the message.
+ */
+ public void onMessageSent(@SuppressWarnings("unused") int messageId) {
+ /* empty */
+ }
+
+ /**
+ * Called when message transmission fails - when no ACK is received from the peer.
+ * Retries when ACKs are not received are done by hardware, MAC, and in the NAN stack (using
+ * the {@link WifiNanDiscoveryBaseSession#sendMessage(Object, int, byte[], int)} method) - this
+ * event is received after all retries are exhausted.
+ * <p>
+ * Note that either this callback or
+ * {@link WifiNanDiscoverySessionCallback#onMessageSent(int)} will be received
+ * - never both.
+ *
+ * @param messageId The arbitrary message ID specified when sending the message.
+ */
+ public void onMessageSendFailed(@SuppressWarnings("unused") int messageId) {
+ /* empty */
+ }
+
+ /**
+ * Called when a message is received from a discovery session peer - in response to the
+ * peer's {@link WifiNanDiscoveryBaseSession#sendMessage(Object, int, byte[])} or
+ * {@link WifiNanDiscoveryBaseSession#sendMessage(Object, int, byte[], int)}.
+ *
+ * @param peerHandle An opaque handle to the peer matching our discovery operation.
+ * @param message A byte array containing the message.
+ */
+ public void onMessageReceived(Object peerHandle, byte[] message) {
+ /* empty */
+ }
+}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanEventCallback.java b/wifi/java/android/net/wifi/nan/WifiNanEventCallback.java
deleted file mode 100644
index 029e36a41be6..000000000000
--- a/wifi/java/android/net/wifi/nan/WifiNanEventCallback.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.wifi.nan;
-
-import android.annotation.IntDef;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Base class for NAN events callbacks. Should be extended by applications and set when calling
- * {@link WifiNanManager#connect(android.os.Handler, WifiNanEventCallback)}. These are callbacks
- * applying to the NAN connection as a whole - not to specific publish or subscribe sessions -
- * for that see {@link WifiNanSessionCallback}.
- *
- * @hide PROPOSED_NAN_API
- */
-public class WifiNanEventCallback {
- /** @hide */
- @IntDef({
- REASON_INVALID_ARGS, REASON_ALREADY_CONNECTED_INCOMPAT_CONFIG, REASON_OTHER
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface EventReasonCodes {
- }
-
- /**
- * Indicates invalid argument in the requested operation. Failure reason flag for
- * {@link WifiNanEventCallback#onConnectFail(int)}.
- */
- public static final int REASON_INVALID_ARGS = 1000;
-
- /**
- * Indicates that a {@link ConfigRequest} passed in
- * {@link WifiNanManager#connect(android.os.Handler, ConfigRequest, WifiNanEventCallback)}
- * couldn't be applied since other connections already exist with an incompatible
- * configurations. Failure reason flag for {@link WifiNanEventCallback#onConnectFail(int)}.
- */
- public static final int REASON_ALREADY_CONNECTED_INCOMPAT_CONFIG = 1001;
-
- /**
- * Indicates an unspecified error occurred during the operation. Failure reason flag for
- * {@link WifiNanEventCallback#onConnectFail(int)}.
- */
- public static final int REASON_OTHER = 1002;
-
- /**
- * Called when NAN connect operation
- * {@link WifiNanManager#connect(android.os.Handler, WifiNanEventCallback)}
- * is completed and that we can now start discovery sessions or connections.
- */
- public void onConnectSuccess() {
- /* empty */
- }
-
- /**
- * Called when NAN connect operation
- * {@link WifiNanManager#connect(android.os.Handler, WifiNanEventCallback)} failed.
- *
- * @param reason Failure reason code, see
- * {@code WifiNanEventCallback.REASON_*}.
- */
- public void onConnectFail(@EventReasonCodes int reason) {
- /* empty */
- }
-
- /**
- * Called when NAN identity (the MAC address representing our NAN discovery interface) has
- * changed. Change may be due to device joining a cluster, starting a cluster, or discovery
- * interface change (addresses are randomized at regular intervals). The implication is that
- * peers you've been communicating with may no longer recognize you and you need to
- * re-establish your identity - e.g. by starting a discovery session. This actual MAC address
- * of the interface may also be useful if the application uses alternative (non-NAN)
- * discovery but needs to set up a NAN connection. The provided NAN discovery interface MAC
- * address can then be used in
- * {@link WifiNanManager#createNetworkSpecifier(int, byte[], byte[])}.
- * <p>
- * This callback is only called if the NAN connection enables it using
- * {@link ConfigRequest.Builder#setEnableIdentityChangeCallback(boolean)} in
- * {@link WifiNanManager#connect(android.os.Handler, ConfigRequest, WifiNanEventCallback)}
- * . It is disabled by default since it may result in additional wake-ups of the host -
- * increasing power.
- *
- * @param mac The MAC address of the NAN discovery interface. The application must have the
- * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} to get the actual MAC address,
- * otherwise all 0's will be provided.
- */
- public void onIdentityChanged(byte[] mac) {
- /* empty */
- }
-}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanIdentityChangedListener.java b/wifi/java/android/net/wifi/nan/WifiNanIdentityChangedListener.java
new file mode 100644
index 000000000000..7cb928fd578c
--- /dev/null
+++ b/wifi/java/android/net/wifi/nan/WifiNanIdentityChangedListener.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi.nan;
+
+/**
+ * Base class for a listener which is called with the MAC address of the NAN interface whenever
+ * it is changed. Change may be due to device joining a cluster, starting a cluster, or discovery
+ * interface change (addresses are randomized at regular intervals). The implication is that
+ * peers you've been communicating with may no longer recognize you and you need to re-establish
+ * your identity - e.g. by starting a discovery session. This actual MAC address of the
+ * interface may also be useful if the application uses alternative (non-NAN) discovery but needs
+ * to set up a NAN connection. The provided NAN discovery interface MAC address can then be used
+ * in {@link WifiNanSession#createNetworkSpecifier(int, byte[], byte[])}.
+ *
+ * @hide PROPOSED_NAN_API
+ */
+public class WifiNanIdentityChangedListener {
+ /**
+ * @param mac The MAC address of the NAN discovery interface. The application must have the
+ * {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} to get the actual MAC address,
+ * otherwise all 0's will be provided.
+ */
+ public void onIdentityChanged(byte[] mac) {
+ /* empty */
+ }
+}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanManager.java b/wifi/java/android/net/wifi/nan/WifiNanManager.java
index 24ee640a63df..bb1543418c6d 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanManager.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanManager.java
@@ -21,7 +21,6 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
-import android.annotation.SystemApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkRequest;
@@ -29,7 +28,6 @@ import android.net.wifi.RttManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.os.RemoteException;
@@ -39,8 +37,6 @@ import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
-import dalvik.system.CloseGuard;
-
import libcore.util.HexEncoding;
import org.json.JSONException;
@@ -60,48 +56,50 @@ import java.util.Arrays;
* The class provides access to:
* <ul>
* <li>Initialize a NAN cluster (peer-to-peer synchronization). Refer to
- * {@link #connect(Handler, WifiNanEventCallback)}.
- * <li>Create discovery sessions (publish or subscribe sessions).
- * Refer to {@link #publish(PublishConfig, WifiNanSessionCallback)} and
- * {@link #subscribe(SubscribeConfig, WifiNanSessionCallback)}.
+ * {@link #attach(Handler, WifiNanAttachCallback)}.
+ * <li>Create discovery sessions (publish or subscribe sessions). Refer to
+ * {@link WifiNanSession#publish(Handler, PublishConfig, WifiNanDiscoverySessionCallback)} and
+ * {@link WifiNanSession#subscribe(Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)}.
* <li>Create a NAN network specifier to be used with
* {@link ConnectivityManager#requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)}
* to set-up a NAN connection with a peer. Refer to
- * {@link WifiNanSession#createNetworkSpecifier(int, int, byte[])} and
- * {@link #createNetworkSpecifier(int, byte[], byte[])}.
+ * {@link WifiNanDiscoveryBaseSession#createNetworkSpecifier(int, Object, byte[])} and
+ * {@link WifiNanSession#createNetworkSpecifier(int, byte[], byte[])}.
* </ul>
* <p>
* NAN may not be usable when Wi-Fi is disabled (and other conditions). To validate that
- * the functionality is available use the {@link #isUsageEnabled()} function. To track
+ * the functionality is available use the {@link #isAvailable()} function. To track
* changes in NAN usability register for the {@link #ACTION_WIFI_NAN_STATE_CHANGED} broadcast.
* Note that this broadcast is not sticky - you should register for it and then check the
* above API to avoid a race condition.
* <p>
- * An application must use {@link #connect(Handler, WifiNanEventCallback)} to initialize a NAN
+ * An application must use {@link #attach(Handler, WifiNanAttachCallback)} to initialize a NAN
* cluster - before making any other NAN operation. NAN cluster membership is a device-wide
* operation - the API guarantees that the device is in a cluster or joins a NAN cluster (or
- * starts one if none can be found). Information about connection success (or failure) are
- * returned in callbacks of {@link WifiNanEventCallback}. Proceed with NAN discovery or
- * connection setup only after receiving confirmation that NAN connection succeeded -
- * {@link WifiNanEventCallback#onConnectSuccess()}.
- * When an application is finished using NAN it <b>must</b> use the {@link #disconnect()} API
- * to indicate to the NAN service that the device may disconnect from the NAN cluster. The
- * device will actually disconnect from the NAN cluster once the last application disconnects.
+ * starts one if none can be found). Information about attach success (or failure) are
+ * returned in callbacks of {@link WifiNanAttachCallback}. Proceed with NAN discovery or
+ * connection setup only after receiving confirmation that NAN attach succeeded -
+ * {@link WifiNanAttachCallback#onAttached(WifiNanSession)}. When an application is
+ * finished using NAN it <b>must</b> use the {@link WifiNanSession#destroy()} API
+ * to indicate to the NAN service that the device may detach from the NAN cluster. The
+ * device will actually disable NAN once the last application detaches.
* <p>
- * Once a NAN connection is confirmed use the
- * {@link #publish(PublishConfig, WifiNanSessionCallback)} or
- * {@link #subscribe(SubscribeConfig, WifiNanSessionCallback)} to create publish or subscribe
- * NAN discovery sessions. Events are called on the provided callback object
- * {@link WifiNanSessionCallback}. Specifically, the
- * {@link WifiNanSessionCallback#onPublishStarted(WifiNanPublishSession)} and
- * {@link WifiNanSessionCallback#onSubscribeStarted(WifiNanSubscribeSession)} return
- * {@link WifiNanPublishSession} and {@link WifiNanSubscribeSession} objects respectively on
- * which additional session operations can be performed, e.g. updating the session
- * {@link WifiNanPublishSession#updatePublish(PublishConfig)} and
- * {@link WifiNanSubscribeSession#updateSubscribe(SubscribeConfig)}. Sessions can also be
- * used to send messages using the {@link WifiNanSession#sendMessage(int, byte[], int)} APIs.
- * When an application is finished with a discovery session it <b>must</b> terminate it using
- * the {@link WifiNanSession#terminate()} API.
+ * Once a NAN attach is confirmed use the
+ * {@link WifiNanSession#publish(Handler, PublishConfig, WifiNanDiscoverySessionCallback)} or
+ * {@link WifiNanSession#subscribe(Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)}
+ * to create publish or subscribe NAN discovery sessions. Events are called on the provided
+ * callback object {@link WifiNanDiscoverySessionCallback}. Specifically, the
+ * {@link WifiNanDiscoverySessionCallback#onPublishStarted(WifiNanPublishDiscoverySession)}
+ * and
+ * {@link WifiNanDiscoverySessionCallback#onSubscribeStarted(WifiNanSubscribeDiscoverySession)}
+ * return {@link WifiNanPublishDiscoverySession} and {@link WifiNanSubscribeDiscoverySession}
+ * objects respectively on which additional session operations can be performed, e.g. updating
+ * the session {@link WifiNanPublishDiscoverySession#updatePublish(PublishConfig)} and
+ * {@link WifiNanSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}. Sessions can also
+ * be used to send messages using the
+ * {@link WifiNanDiscoveryBaseSession#sendMessage(Object, int, byte[])} APIs. When an
+ * application is finished with a discovery session it <b>must</b> terminate it using the
+ * {@link WifiNanDiscoveryBaseSession#destroy()} API.
* <p>
* Creating connections between NAN devices is managed by the standard
* {@link ConnectivityManager#requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)}.
@@ -110,8 +108,8 @@ import java.util.Arrays;
* <li>{@link NetworkRequest.Builder#addTransportType(int)} of
* {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_NAN}.
* <li>{@link NetworkRequest.Builder#setNetworkSpecifier(String)} using
- * {@link #createNetworkSpecifier(int, byte[], byte[])} or
- * {@link WifiNanSession#createNetworkSpecifier(int, int, byte[])}.
+ * {@link WifiNanSession#createNetworkSpecifier(int, byte[], byte[])} or
+ * {@link WifiNanDiscoveryBaseSession#createNetworkSpecifier(int, Object, byte[])}.
* </ul>
*
* @hide PROPOSED_NAN_API
@@ -121,8 +119,6 @@ public class WifiNanManager {
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
- private static final int INVALID_CLIENT_ID = 0;
-
/**
* Keys used to generate a Network Specifier for the NAN network request. The network specifier
* is formatted as a JSON string.
@@ -201,43 +197,17 @@ public class WifiNanManager {
public static final String NETWORK_SPECIFIER_KEY_TOKEN = "token";
/**
- * Broadcast intent action to indicate whether Wi-Fi NAN is enabled or
- * disabled. An extra {@link #EXTRA_WIFI_STATE} provides the state
- * information as int using {@link #WIFI_NAN_STATE_DISABLED} and
- * {@link #WIFI_NAN_STATE_ENABLED} constants. This broadcast is <b>not</b> sticky,
- * use the {@link #isUsageEnabled()} API after registering the broadcast to check the current
- * state of Wi-Fi NAN.
- *
- * @see #EXTRA_WIFI_STATE
+ * Broadcast intent action to indicate that the state of Wi-Fi NAN availability has changed.
+ * Use the {@link #isAvailable()} to query the current status.
+ * This broadcast is <b>not</b> sticky, use the {@link #isAvailable()} API after registering
+ * the broadcast to check the current state of Wi-Fi NAN.
+ * <p>Note: The broadcast is only delivered to registered receivers - no manifest registered
+ * components will be launched.
*/
@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
public static final String ACTION_WIFI_NAN_STATE_CHANGED =
"android.net.wifi.nan.action.WIFI_NAN_STATE_CHANGED";
- /**
- * The lookup key for an int value indicating whether Wi-Fi NAN is enabled or
- * disabled. Retrieve it with
- * {@link android.content.Intent#getIntExtra(String,int)}.
- *
- * @see #WIFI_NAN_STATE_DISABLED
- * @see #WIFI_NAN_STATE_ENABLED
- */
- public static final String EXTRA_WIFI_STATE = "android.net.wifi.nan.extra.WIFI_STATE";
-
- /**
- * Wi-Fi NAN is disabled.
- *
- * @see #ACTION_WIFI_NAN_STATE_CHANGED
- */
- public static final int WIFI_NAN_STATE_DISABLED = 1;
-
- /**
- * Wi-Fi NAN is enabled.
- *
- * @see #ACTION_WIFI_NAN_STATE_CHANGED
- */
- public static final int WIFI_NAN_STATE_ENABLED = 2;
-
/** @hide */
@IntDef({
WIFI_NAN_DATA_PATH_ROLE_INITIATOR, WIFI_NAN_DATA_PATH_ROLE_RESPONDER})
@@ -249,8 +219,8 @@ public class WifiNanManager {
* Connection creation role is that of INITIATOR. Used to create a network specifier string
* when requesting a NAN network.
*
- * @see WifiNanSession#createNetworkSpecifier(int, int, byte[])
- * @see #createNetworkSpecifier(int, byte[], byte[])
+ * @see WifiNanDiscoveryBaseSession#createNetworkSpecifier(int, Object, byte[])
+ * @see WifiNanSession#createNetworkSpecifier(int, byte[], byte[])
*/
public static final int WIFI_NAN_DATA_PATH_ROLE_INITIATOR = 0;
@@ -258,27 +228,17 @@ public class WifiNanManager {
* Connection creation role is that of RESPONDER. Used to create a network specifier string
* when requesting a NAN network.
*
- * @see WifiNanSession#createNetworkSpecifier(int, int, byte[])
- * @see #createNetworkSpecifier(int, byte[], byte[])
+ * @see WifiNanDiscoveryBaseSession#createNetworkSpecifier(int, Object, byte[])
+ * @see WifiNanSession#createNetworkSpecifier(int, byte[], byte[])
*/
public static final int WIFI_NAN_DATA_PATH_ROLE_RESPONDER = 1;
private final Context mContext;
private final IWifiNanManager mService;
- private final CloseGuard mCloseGuard = CloseGuard.get();
private final Object mLock = new Object(); // lock access to the following vars
@GuardedBy("mLock")
- private final IBinder mBinder = new Binder();
-
- @GuardedBy("mLock")
- private int mClientId = INVALID_CLIENT_ID;
-
- @GuardedBy("mLock")
- private Looper mLooper;
-
- @GuardedBy("mLock")
private SparseArray<RttManager.RttListener> mRangingListeners = new SparseArray<>();
/** @hide */
@@ -288,9 +248,9 @@ public class WifiNanManager {
}
/**
- * Enable the usage of the NAN API. Doesn't actually turn on NAN cluster formation - that only
- * happens when a connection is made. {@link #ACTION_WIFI_NAN_STATE_CHANGED} broadcast will be
- * triggered.
+ * Enable the usage of the NAN API. Doesn't actually turn on NAN cluster formation - that
+ * only happens when an attach is attempted. {@link #ACTION_WIFI_NAN_STATE_CHANGED} broadcast
+ * will be triggered.
*
* @hide
*/
@@ -303,7 +263,7 @@ public class WifiNanManager {
}
/**
- * Disable the usage of the NAN API. All attempts to connect() will be rejected. All open
+ * Disable the usage of the NAN API. All attempts to attach() will be rejected. All open
* connections and sessions will be terminated. {@link #ACTION_WIFI_NAN_STATE_CHANGED} broadcast
* will be triggered.
*
@@ -318,13 +278,13 @@ public class WifiNanManager {
}
/**
- * Returns the current status of NAN API: whether or not usage is enabled. To track changes
+ * Returns the current status of NAN API: whether or not NAN is available. To track changes
* in the state of NAN API register for the {@link #ACTION_WIFI_NAN_STATE_CHANGED} broadcast.
*
- * @return A boolean indicating whether the app can use the NAN API (true)
- * or not (false).
+ * @return A boolean indicating whether the app can use the NAN API at this time (true) or
+ * not (false).
*/
- public boolean isUsageEnabled() {
+ public boolean isAvailable() {
try {
return mService.isUsageEnabled();
} catch (RemoteException e) {
@@ -333,97 +293,89 @@ public class WifiNanManager {
}
/**
- * Connect to the Wi-Fi NAN service - enabling the application to create discovery session or
- * create connection to peers. The device will connect to an existing cluster if it can find
+ * Attach to the Wi-Fi NAN service - enabling the application to create discovery sessions or
+ * create connections to peers. The device will attach to an existing cluster if it can find
* one or create a new cluster (if it is the first to enable NAN in its vicinity). Results
- * (e.g. successful connection to a cluster) are provided to the {@code callback} object.
- * An application <b>must</b> call {@link #disconnect()} when done with the Wi-Fi NAN
- * connection.
+ * (e.g. successful attach to a cluster) are provided to the {@code attachCallback} object.
+ * An application <b>must</b> call {@link WifiNanSession#destroy()} when done with the
+ * Wi-Fi NAN object.
* <p>
- * Note: a NAN cluster is a shared resource - if the device is already connected to a cluster
- * than this function will simply indicate success immediately.
+ * Note: a NAN cluster is a shared resource - if the device is already attached to a cluster
+ * then this function will simply indicate success immediately using the same {@code
+ * attachCallback}.
*
- * @param handler The Handler on whose thread to execute all callbacks related to the
- * connection - including all sessions opened as part of this
- * connection. If a null is provided then the application's main thread will be used.
- * @param callback A callback extended from {@link WifiNanEventCallback}.
+ * @param handler The Handler on whose thread to execute the callbacks of the {@code
+ * attachCallback} object. If a null is provided then the application's main thread will be
+ * used.
+ * @param attachCallback A callback for attach events, extended from
+ * {@link WifiNanAttachCallback}.
*/
- public void connect(@Nullable Handler handler, @NonNull WifiNanEventCallback callback) {
- connect(handler, null, callback);
+ public void attach(@Nullable Handler handler, @NonNull WifiNanAttachCallback attachCallback) {
+ attach(handler, null, attachCallback, null);
}
/**
- * Connect to the Wi-Fi NAN service - enabling the application to create discovery session or
- * create connection to peers. The device will connect to an existing cluster if it can find
+ * Attach to the Wi-Fi NAN service - enabling the application to create discovery sessions or
+ * create connections to peers. The device will attach to an existing cluster if it can find
* one or create a new cluster (if it is the first to enable NAN in its vicinity). Results
- * (e.g. successful connection to a cluster) are provided to the {@code callback} object.
- * An application <b>must</b> call {@link #disconnect()} when done with the Wi-Fi NAN
- * connection. Allows requesting a specific configuration using {@link ConfigRequest}. If not
- * necessary (default configuration should usually work) use the
- * {@link #connect(Handler, WifiNanEventCallback)} method instead.
+ * (e.g. successful attach to a cluster) are provided to the {@code attachCallback} object.
+ * An application <b>must</b> call {@link WifiNanSession#destroy()} when done with the
+ * Wi-Fi NAN object.
* <p>
- * Note: a NAN cluster is a shared resource - if the device is already connected to a cluster
- * than this function will simply indicate success immediately.
+ * Note: a NAN cluster is a shared resource - if the device is already attached to a cluster
+ * then this function will simply indicate success immediately using the same {@code
+ * attachCallback}.
+ * <p>
+ * This version of the API attaches a listener to receive the MAC address of the NAN interface
+ * on startup and whenever it is updated (it is randomized at regular intervals for privacy).
+ * The application must have the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION}
+ * permission to execute this attach request. Otherwise, use the
+ * {@link #attach(Handler, WifiNanAttachCallback)} version. Note that aside from permission
+ * requirements this listener will wake up the host at regular intervals causing higher power
+ * consumption, do not use it unless the information is necessary (e.g. for OOB discovery).
*
- * @param handler The Handler on whose thread to execute all callbacks related to the
- * connection - including all sessions opened as part of this
- * connection. If a null is provided then the application's main thread will be used.
- * @param configRequest The requested NAN configuration.
- * @param callback A callback extended from {@link WifiNanEventCallback}.
+ * @param handler The Handler on whose thread to execute the callbacks of the {@code
+ * attachCallback} and {@code identityChangedListener} objects. If a null is provided then the
+ * application's main thread will be used.
+ * @param attachCallback A callback for attach events, extended from
+ * {@link WifiNanAttachCallback}.
+ * @param identityChangedListener A listener for changed identity, extended from
+ * {@link WifiNanIdentityChangedListener}.
*/
- public void connect(@Nullable Handler handler, @Nullable ConfigRequest configRequest,
- @NonNull WifiNanEventCallback callback) {
+ public void attach(@Nullable Handler handler, @NonNull WifiNanAttachCallback attachCallback,
+ @NonNull WifiNanIdentityChangedListener identityChangedListener) {
+ attach(handler, null, attachCallback, identityChangedListener);
+ }
+
+ /** @hide */
+ public void attach(Handler handler, ConfigRequest configRequest,
+ WifiNanAttachCallback attachCallback,
+ WifiNanIdentityChangedListener identityChangedListener) {
if (VDBG) {
- Log.v(TAG,
- "connect(): handler=" + handler + ", callback=" + callback + ", configRequest="
- + configRequest);
+ Log.v(TAG, "attach(): handler=" + handler + ", callback=" + attachCallback
+ + ", configRequest=" + configRequest + ", identityChangedListener="
+ + identityChangedListener);
}
synchronized (mLock) {
- mLooper = (handler == null) ? Looper.getMainLooper() : handler.getLooper();
+ Looper looper = (handler == null) ? Looper.getMainLooper() : handler.getLooper();
try {
- mClientId = mService.connect(mBinder, mContext.getOpPackageName(),
- new WifiNanEventCallbackProxy(this, mLooper, callback), configRequest);
+ Binder binder = new Binder();
+ mService.connect(binder, mContext.getOpPackageName(),
+ new WifiNanEventCallbackProxy(this, looper, binder, attachCallback,
+ identityChangedListener), configRequest,
+ identityChangedListener != null);
} catch (RemoteException e) {
- mClientId = INVALID_CLIENT_ID;
- mLooper = null;
throw e.rethrowFromSystemServer();
}
}
-
- mCloseGuard.open("disconnect");
}
- /**
- * Disconnect from the Wi-Fi NAN service and, if no other applications are connected to NAN,
- * also disconnect from the NAN cluster. This method destroys all outstanding operations -
- * i.e. all publish and subscribes are terminated, and any outstanding data-links are
- * shut-down. However, it is good practice to terminate these discovery sessions and
- * connections explicitly before a disconnect.
- * <p>
- * An application may re-connect after a disconnect using
- * {@link WifiNanManager#connect(Handler, WifiNanEventCallback)} .
- */
- public void disconnect() {
+ /** @hide */
+ public void disconnect(int clientId, Binder binder) {
if (VDBG) Log.v(TAG, "disconnect()");
- IBinder binder;
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.w(TAG, "disconnect(): called with invalid client ID - not connected first?");
- return;
- }
-
- binder = mBinder;
- clientId = mClientId;
-
- mLooper = null;
- mClientId = INVALID_CLIENT_ID;
- }
-
- mCloseGuard.close();
try {
mService.disconnect(clientId, binder);
} catch (RemoteException e) {
@@ -432,78 +384,26 @@ public class WifiNanManager {
}
/** @hide */
- @Override
- protected void finalize() throws Throwable {
- try {
- mCloseGuard.warnIfOpen();
- disconnect();
- } finally {
- super.finalize();
- }
- }
-
- /**
- * Issue a request to the NAN service to create a new NAN publish discovery session, using
- * the specified {@code publishConfig} configuration. The results of the publish operation
- * are routed to the callbacks of {@link WifiNanSessionCallback}:
- * <ul>
- * <li>{@link WifiNanSessionCallback#onPublishStarted(WifiNanPublishSession)} is called
- * when the publish session is created and provides a handle to the session. Further
- * operations on the publish session can be executed on that object.
- * <li>{@link WifiNanSessionCallback#onSessionConfigFail(int)} is called if the publish
- * operation failed.
- * </ul>
- * <p>
- * Other results of the publish session operations will also be routed to callbacks
- * on the {@code callback} object. The resulting publish session can be modified using
- * {@link WifiNanPublishSession#updatePublish(PublishConfig)}.
- * <p>
- * An application must use the {@link WifiNanSession#terminate()} to terminate the publish
- * discovery session once it isn't needed. This will free resources as well terminate
- * any on-air transmissions.
- *
- * @param publishConfig The {@link PublishConfig} specifying the
- * configuration of the requested publish session.
- * @param callback A {@link WifiNanSessionCallback} derived object to be used for session
- * event callbacks.
- */
- public void publish(@NonNull PublishConfig publishConfig,
- @NonNull WifiNanSessionCallback callback) {
- if (VDBG) Log.v(TAG, "publish(): config=" + publishConfig);
+ public void publish(int clientId, Looper looper, PublishConfig publishConfig,
+ WifiNanDiscoverySessionCallback callback) {
+ if (VDBG) Log.v(TAG, "publish(): clientId=" + clientId + ", config=" + publishConfig);
- int clientId;
- Looper looper;
- synchronized (mLock) {
- if (mLooper == null || mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG, "publish(): called with null looper or invalid client ID - "
- + "not connected first?");
- return;
- }
-
- clientId = mClientId;
- looper = mLooper;
- }
try {
mService.publish(clientId, publishConfig,
- new WifiNanSessionCallbackProxy(this, looper, true, callback));
+ new WifiNanDiscoverySessionCallbackProxy(this, looper, true, callback,
+ clientId));
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/** @hide */
- public void updatePublish(int sessionId, PublishConfig publishConfig) {
- if (VDBG) Log.v(TAG, "updatePublish(): config=" + publishConfig);
-
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG, "updatePublish(): called with invalid client ID - not connected first?");
- return;
- }
-
- clientId = mClientId;
+ public void updatePublish(int clientId, int sessionId, PublishConfig publishConfig) {
+ if (VDBG) {
+ Log.v(TAG, "updatePublish(): clientId=" + clientId + ",sessionId=" + sessionId
+ + ", config=" + publishConfig);
}
+
try {
mService.updatePublish(clientId, sessionId, publishConfig);
} catch (RemoteException e) {
@@ -511,73 +411,30 @@ public class WifiNanManager {
}
}
- /**
- * Issue a request to the NAN service to create a new NAN subscribe discovery session, using
- * the specified {@code subscribeConfig} configuration. The results of the subscribe
- * operation are routed to the callbacks of {@link WifiNanSessionCallback}:
- * <ul>
- * <li>{@link WifiNanSessionCallback#onSubscribeStarted(WifiNanSubscribeSession)} is called
- * when the subscribe session is created and provides a handle to the session. Further
- * operations on the subscribe session can be executed on that object.
- * <li>{@link WifiNanSessionCallback#onSessionConfigFail(int)} is called if the subscribe
- * operation failed.
- * </ul>
- * <p>
- * Other results of the subscribe session operations will also be routed to callbacks
- * on the {@code callback} object. The resulting subscribe session can be modified using
- * {@link WifiNanSubscribeSession#updateSubscribe(SubscribeConfig)}.
- * <p>
- * An application must use the {@link WifiNanSession#terminate()} to terminate the
- * subscribe discovery session once it isn't needed. This will free resources as well
- * terminate any on-air transmissions.
- *
- * @param subscribeConfig The {@link SubscribeConfig} specifying the
- * configuration of the requested subscribe session.
- * @param callback A {@link WifiNanSessionCallback} derived object to be used for session
- * event callbacks.
- */
- public void subscribe(@NonNull SubscribeConfig subscribeConfig,
- @NonNull WifiNanSessionCallback callback) {
+ /** @hide */
+ public void subscribe(int clientId, Looper looper, SubscribeConfig subscribeConfig,
+ WifiNanDiscoverySessionCallback callback) {
if (VDBG) {
- Log.v(TAG, "subscribe(): config=" + subscribeConfig);
- }
-
- int clientId;
- Looper looper;
- synchronized (mLock) {
- if (mLooper == null || mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG, "subscribe(): called with null looper or invalid client ID - "
- + "not connected first?");
- return;
+ if (VDBG) {
+ Log.v(TAG,
+ "subscribe(): clientId=" + clientId + ", config=" + subscribeConfig);
}
-
- clientId = mClientId;
- looper = mLooper;
}
try {
mService.subscribe(clientId, subscribeConfig,
- new WifiNanSessionCallbackProxy(this, looper, false, callback));
+ new WifiNanDiscoverySessionCallbackProxy(this, looper, false, callback,
+ clientId));
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/** @hide */
- public void updateSubscribe(int sessionId, SubscribeConfig subscribeConfig) {
+ public void updateSubscribe(int clientId, int sessionId, SubscribeConfig subscribeConfig) {
if (VDBG) {
- Log.v(TAG, "subscribe(): config=" + subscribeConfig);
- }
-
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG,
- "updateSubscribe(): called with invalid client ID - not connected first?");
- return;
- }
-
- clientId = mClientId;
+ Log.v(TAG, "updateSubscribe(): clientId=" + clientId + ",sessionId=" + sessionId
+ + ", config=" + subscribeConfig);
}
try {
@@ -588,18 +445,10 @@ public class WifiNanManager {
}
/** @hide */
- public void terminateSession(int sessionId) {
- if (DBG) Log.d(TAG, "Terminate NAN session #" + sessionId);
-
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG,
- "terminateSession(): called with invalid client ID - not connected first?");
- return;
- }
-
- clientId = mClientId;
+ public void terminateSession(int clientId, int sessionId) {
+ if (VDBG) {
+ Log.d(TAG,
+ "terminateSession(): clientId=" + clientId + ", sessionId=" + sessionId);
}
try {
@@ -610,46 +459,33 @@ public class WifiNanManager {
}
/** @hide */
- public void sendMessage(int sessionId, int peerId, byte[] message, int messageId,
- int retryCount) {
- if (VDBG) {
- Log.v(TAG, "sendMessage(): sessionId=" + sessionId + ", peerId=" + peerId
- + ", messageId=" + messageId + ", retryCount=" + retryCount);
+ public void sendMessage(int clientId, int sessionId, Object peerHandle, byte[] message,
+ int messageId, int retryCount) {
+ if (peerHandle == null) {
+ throw new IllegalArgumentException(
+ "sendMessage: invalid peerHandle - must be non-null");
}
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG, "sendMessage(): called with invalid client ID - not connected first?");
- return;
- }
-
- clientId = mClientId;
+ if (VDBG) {
+ Log.v(TAG, "sendMessage(): clientId=" + clientId + ", sessionId=" + sessionId
+ + ", peerHandle=" + ((OpaquePeerHandle) peerHandle).peerId + ", messageId="
+ + messageId + ", retryCount=" + retryCount);
}
try {
- mService.sendMessage(clientId, sessionId, peerId, message, messageId, retryCount);
+ mService.sendMessage(clientId, sessionId, ((OpaquePeerHandle) peerHandle).peerId,
+ message, messageId, retryCount);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/** @hide */
- public void startRanging(int sessionId, RttManager.RttParams[] params,
+ public void startRanging(int clientId, int sessionId, RttManager.RttParams[] params,
RttManager.RttListener listener) {
if (VDBG) {
- Log.v(TAG, "startRanging: sessionId=" + sessionId + ", " + "params="
- + Arrays.toString(params) + ", listener=" + listener);
- }
-
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG, "startRanging(): called with invalid client ID - not connected first?");
- return;
- }
-
- clientId = mClientId;
+ Log.v(TAG, "startRanging: clientId=" + clientId + ", sessionId=" + sessionId + ", "
+ + "params=" + Arrays.toString(params) + ", listener=" + listener);
}
int rangingKey = 0;
@@ -666,19 +502,20 @@ public class WifiNanManager {
}
/** @hide */
- public String createNetworkSpecifier(@DataPathRole int role, int sessionId, int peerId,
+ public String createNetworkSpecifier(int clientId, int role, int sessionId, Object peerHandle,
byte[] token) {
if (VDBG) {
Log.v(TAG, "createNetworkSpecifier: role=" + role + ", sessionId=" + sessionId
- + ", peerId=" + peerId + ", token=" + token);
+ + ", peerHandle=" + ((peerHandle == null) ? peerHandle
+ : ((OpaquePeerHandle) peerHandle).peerId) + ", token=" + token);
}
int type;
- if (token != null && peerId != 0) {
+ if (token != null && peerHandle != null) {
type = NETWORK_SPECIFIER_TYPE_1A;
- } else if (token == null && peerId != 0) {
+ } else if (token == null && peerHandle != null) {
type = NETWORK_SPECIFIER_TYPE_1B;
- } else if (token != null && peerId == 0) {
+ } else if (token != null && peerHandle == null) {
type = NETWORK_SPECIFIER_TYPE_1C;
} else {
type = NETWORK_SPECIFIER_TYPE_1D;
@@ -695,23 +532,11 @@ public class WifiNanManager {
throw new IllegalArgumentException(
"createNetworkSpecifier: Invalid null token - not permitted on INITIATOR");
}
- if (peerId == 0) {
+ if (peerHandle == null) {
throw new IllegalArgumentException(
- "createNetworkSpecifier: Invalid peer ID (value of 0) - not permitted on "
- + "INITIATOR");
- }
- }
-
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG,
- "createNetworkSpecifier: called with invalid client ID - not connected "
- + "first?");
- return null;
+ "createNetworkSpecifier: Invalid peer handle (value of null) - not "
+ + "permitted on INITIATOR");
}
-
- clientId = mClientId;
}
JSONObject json;
@@ -721,8 +546,8 @@ public class WifiNanManager {
json.put(NETWORK_SPECIFIER_KEY_ROLE, role);
json.put(NETWORK_SPECIFIER_KEY_CLIENT_ID, clientId);
json.put(NETWORK_SPECIFIER_KEY_SESSION_ID, sessionId);
- if (peerId != 0) {
- json.put(NETWORK_SPECIFIER_KEY_PEER_ID, peerId);
+ if (peerHandle != null) {
+ json.put(NETWORK_SPECIFIER_KEY_PEER_ID, ((OpaquePeerHandle) peerHandle).peerId);
}
if (token != null) {
json.put(NETWORK_SPECIFIER_KEY_TOKEN,
@@ -735,37 +560,9 @@ public class WifiNanManager {
return json.toString();
}
- /**
- * Create a {@link NetworkRequest.Builder#setNetworkSpecifier(String)} for a
- * WiFi NAN connection to the specified peer. The
- * {@link NetworkRequest.Builder#addTransportType(int)} should be set to
- * {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_NAN}.
- * <p>
- * This API is targeted for applications which can obtain the peer MAC address using OOB
- * (out-of-band) discovery. NAN discovery does not provide the MAC address of the peer -
- * when using NAN discovery use the alternative network specifier method -
- * {@link WifiNanSession#createNetworkSpecifier(int, int, byte[])}.
- *
- * @param role The role of this device:
- * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_INITIATOR} or
- * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_RESPONDER}
- * @param peer The MAC address of the peer's NAN discovery interface. On a RESPONDER this
- * value is used to gate the acceptance of a connection request from only that
- * peer. A RESPONDER may specified a null - indicating that it will accept
- * connection requests from any device.
- * @param token An arbitrary token (message) to be used to match connection initiation request
- * to a responder setup. A RESPONDER is set up with a {@code token} which must
- * be matched by the token provided by the INITIATOR. A null token is permitted
- * on the RESPONDER and matches any peer token. An empty ({@code ""}) token is
- * not the same as a null token and requires the peer token to be empty as well.
- *
- * @return A string to be used to construct
- * {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(String)} to pass to {@link
- * android.net.ConnectivityManager#requestNetwork(NetworkRequest, ConnectivityManager.NetworkCallback)}
- * [or other varieties of that API].
- */
- public String createNetworkSpecifier(@DataPathRole int role, @Nullable byte[] peer,
- @Nullable byte[] token) {
+ /** @hide */
+ public String createNetworkSpecifier(int clientId, @DataPathRole int role,
+ @Nullable byte[] peer, @Nullable byte[] token) {
if (VDBG) {
Log.v(TAG, "createNetworkSpecifier: role=" + role + ", token=" + token);
}
@@ -803,18 +600,6 @@ public class WifiNanManager {
}
}
- int clientId;
- synchronized (mLock) {
- if (mClientId == INVALID_CLIENT_ID) {
- Log.e(TAG,
- "createNetworkSpecifier: called with invalid client ID - not connected "
- + "first?");
- return null;
- }
-
- clientId = mClientId;
- }
-
JSONObject json;
try {
json = new JSONObject();
@@ -845,6 +630,8 @@ public class WifiNanManager {
private final Handler mHandler;
private final WeakReference<WifiNanManager> mNanManager;
+ private final Binder mBinder;
+ private final Looper mLooper;
RttManager.RttListener getAndRemoveRangingListener(int rangingId) {
WifiNanManager mgr = mNanManager.get();
@@ -861,14 +648,17 @@ public class WifiNanManager {
}
/**
- * Constructs a {@link WifiNanEventCallback} using the specified looper.
+ * Constructs a {@link WifiNanAttachCallback} using the specified looper.
* All callbacks will delivered on the thread of the specified looper.
*
* @param looper The looper on which to execute the callbacks.
*/
- WifiNanEventCallbackProxy(WifiNanManager mgr, Looper looper,
- final WifiNanEventCallback originalCallback) {
+ WifiNanEventCallbackProxy(WifiNanManager mgr, Looper looper, Binder binder,
+ final WifiNanAttachCallback attachCallback,
+ final WifiNanIdentityChangedListener identityChangedListener) {
mNanManager = new WeakReference<>(mgr);
+ mLooper = looper;
+ mBinder = binder;
if (VDBG) Log.v(TAG, "WifiNanEventCallbackProxy ctor: looper=" + looper);
mHandler = new Handler(looper) {
@@ -886,18 +676,15 @@ public class WifiNanManager {
switch (msg.what) {
case CALLBACK_CONNECT_SUCCESS:
- originalCallback.onConnectSuccess();
+ attachCallback.onAttached(
+ new WifiNanSession(mgr, mBinder, msg.arg1));
break;
case CALLBACK_CONNECT_FAIL:
- synchronized (mgr.mLock) {
- mgr.mLooper = null;
- mgr.mClientId = INVALID_CLIENT_ID;
- }
mNanManager.clear();
- originalCallback.onConnectFail(msg.arg1);
+ attachCallback.onAttachFailed();
break;
case CALLBACK_IDENTITY_CHANGED:
- originalCallback.onIdentityChanged((byte[]) msg.obj);
+ identityChangedListener.onIdentityChanged((byte[]) msg.obj);
break;
case CALLBACK_RANGING_SUCCESS: {
RttManager.RttListener listener = getAndRemoveRangingListener(msg.arg1);
@@ -936,16 +723,17 @@ public class WifiNanManager {
}
@Override
- public void onConnectSuccess() {
+ public void onConnectSuccess(int clientId) {
if (VDBG) Log.v(TAG, "onConnectSuccess");
Message msg = mHandler.obtainMessage(CALLBACK_CONNECT_SUCCESS);
+ msg.arg1 = clientId;
mHandler.sendMessage(msg);
}
@Override
public void onConnectFail(int reason) {
- if (VDBG) Log.v(TAG, "onConfigFailed: reason=" + reason);
+ if (VDBG) Log.v(TAG, "onConnectFail: reason=" + reason);
Message msg = mHandler.obtainMessage(CALLBACK_CONNECT_FAIL);
msg.arg1 = reason;
@@ -999,7 +787,8 @@ public class WifiNanManager {
}
}
- private static class WifiNanSessionCallbackProxy extends IWifiNanSessionCallback.Stub {
+ private static class WifiNanDiscoverySessionCallbackProxy extends
+ IWifiNanDiscoverySessionCallback.Stub {
private static final int CALLBACK_SESSION_STARTED = 0;
private static final int CALLBACK_SESSION_CONFIG_SUCCESS = 1;
private static final int CALLBACK_SESSION_CONFIG_FAIL = 2;
@@ -1014,18 +803,22 @@ public class WifiNanManager {
private final WeakReference<WifiNanManager> mNanManager;
private final boolean mIsPublish;
- private final WifiNanSessionCallback mOriginalCallback;
+ private final WifiNanDiscoverySessionCallback mOriginalCallback;
+ private final int mClientId;
private final Handler mHandler;
- private WifiNanSession mSession;
+ private WifiNanDiscoveryBaseSession mSession;
- WifiNanSessionCallbackProxy(WifiNanManager mgr, Looper looper, boolean isPublish,
- WifiNanSessionCallback originalCallback) {
+ WifiNanDiscoverySessionCallbackProxy(WifiNanManager mgr, Looper looper, boolean isPublish,
+ WifiNanDiscoverySessionCallback originalCallback, int clientId) {
mNanManager = new WeakReference<>(mgr);
mIsPublish = isPublish;
mOriginalCallback = originalCallback;
+ mClientId = clientId;
- if (VDBG) Log.v(TAG, "WifiNanSessionCallbackProxy ctor: isPublish=" + isPublish);
+ if (VDBG) {
+ Log.v(TAG, "WifiNanDiscoverySessionCallbackProxy ctor: isPublish=" + isPublish);
+ }
mHandler = new Handler(looper) {
@Override
@@ -1033,7 +826,7 @@ public class WifiNanManager {
if (DBG) Log.d(TAG, "What=" + msg.what + ", msg=" + msg);
if (mNanManager.get() == null) {
- Log.w(TAG, "WifiNanSessionCallbackProxy: handleMessage post GC");
+ Log.w(TAG, "WifiNanDiscoverySessionCallbackProxy: handleMessage post GC");
return;
}
@@ -1042,10 +835,10 @@ public class WifiNanManager {
onProxySessionStarted(msg.arg1);
break;
case CALLBACK_SESSION_CONFIG_SUCCESS:
- mOriginalCallback.onSessionConfigSuccess();
+ mOriginalCallback.onSessionConfigUpdated();
break;
case CALLBACK_SESSION_CONFIG_FAIL:
- mOriginalCallback.onSessionConfigFail(msg.arg1);
+ mOriginalCallback.onSessionConfigFailed();
if (mSession == null) {
/*
* creation failed (as opposed to update
@@ -1058,19 +851,20 @@ public class WifiNanManager {
onProxySessionTerminated(msg.arg1);
break;
case CALLBACK_MATCH:
- mOriginalCallback.onMatch(
- msg.arg1,
+ mOriginalCallback.onServiceDiscovered(
+ new OpaquePeerHandle(msg.arg1),
msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE),
msg.getData().getByteArray(MESSAGE_BUNDLE_KEY_MESSAGE2));
break;
case CALLBACK_MESSAGE_SEND_SUCCESS:
- mOriginalCallback.onMessageSendSuccess(msg.arg1);
+ mOriginalCallback.onMessageSent(msg.arg1);
break;
case CALLBACK_MESSAGE_SEND_FAIL:
- mOriginalCallback.onMessageSendFail(msg.arg1, msg.arg2);
+ mOriginalCallback.onMessageSendFailed(msg.arg1);
break;
case CALLBACK_MESSAGE_RECEIVED:
- mOriginalCallback.onMessageReceived(msg.arg1, (byte[]) msg.obj);
+ mOriginalCallback.onMessageReceived(new OpaquePeerHandle(msg.arg1),
+ (byte[]) msg.obj);
break;
}
}
@@ -1176,11 +970,13 @@ public class WifiNanManager {
}
if (mIsPublish) {
- WifiNanPublishSession session = new WifiNanPublishSession(mgr, sessionId);
+ WifiNanPublishDiscoverySession session = new WifiNanPublishDiscoverySession(mgr,
+ mClientId, sessionId);
mSession = session;
mOriginalCallback.onPublishStarted(session);
} else {
- WifiNanSubscribeSession session = new WifiNanSubscribeSession(mgr, sessionId);
+ WifiNanSubscribeDiscoverySession
+ session = new WifiNanSubscribeDiscoverySession(mgr, mClientId, sessionId);
mSession = session;
mOriginalCallback.onSubscribeStarted(session);
}
@@ -1198,4 +994,13 @@ public class WifiNanManager {
mOriginalCallback.onSessionTerminated(reason);
}
}
+
+ /** @hide */
+ public static class OpaquePeerHandle {
+ public OpaquePeerHandle(int peerId) {
+ this.peerId = peerId;
+ }
+
+ public int peerId;
+ }
}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanPublishSession.java b/wifi/java/android/net/wifi/nan/WifiNanPublishDiscoverySession.java
index ccd7faee8476..75c6cb7da183 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanPublishSession.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanPublishDiscoverySession.java
@@ -21,32 +21,33 @@ import android.util.Log;
/**
* A class representing a NAN publish session. Created when
- * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} is called and a
- * discovery session is created and returned in
- * {@link WifiNanSessionCallback#onPublishStarted(WifiNanPublishSession)}. See baseline
- * functionality of all discovery sessions in {@link WifiNanSession}. This object allows updating
- * an existing/running publish discovery session using {@link #updatePublish(PublishConfig)}.
+ * {@link WifiNanSession#publish(android.os.Handler, PublishConfig, WifiNanDiscoverySessionCallback)}
+ * is called and a discovery session is created and returned in
+ * {@link WifiNanDiscoverySessionCallback#onPublishStarted(WifiNanPublishDiscoverySession)}. See
+ * baseline functionality of all discovery sessions in {@link WifiNanDiscoveryBaseSession}. This
+ * object allows updating an existing/running publish discovery session using
+ * {@link #updatePublish(PublishConfig)}.
*
* @hide PROPOSED_NAN_API
*/
-public class WifiNanPublishSession extends WifiNanSession {
- private static final String TAG = "WifiNanPublishSession";
+public class WifiNanPublishDiscoverySession extends WifiNanDiscoveryBaseSession {
+ private static final String TAG = "WifiNanPublishDiscSsn";
/** @hide */
- public WifiNanPublishSession(WifiNanManager manager, int sessionId) {
- super(manager, sessionId);
+ public WifiNanPublishDiscoverySession(WifiNanManager manager, int clientId, int sessionId) {
+ super(manager, clientId, sessionId);
}
/**
* Re-configure the currently active publish session. The
- * {@link WifiNanSessionCallback} is not replaced - the same listener used
+ * {@link WifiNanDiscoverySessionCallback} is not replaced - the same listener used
* at creation is still used. The results of the configuration are returned using
- * {@link WifiNanSessionCallback}:
+ * {@link WifiNanDiscoverySessionCallback}:
* <ul>
- * <li>{@link WifiNanSessionCallback#onSessionConfigSuccess()}: configuration update
- * succeeded.
- * <li>{@link WifiNanSessionCallback#onSessionConfigFail(int)}: configuration update
- * failed. The publish discovery session is still running using its previous
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigUpdated()}: configuration
+ * update succeeded.
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigFailed()}: configuration
+ * update failed. The publish discovery session is still running using its previous
* configuration (i.e. update failure does not terminate the session).
* </ul>
*
@@ -63,7 +64,7 @@ public class WifiNanPublishSession extends WifiNanSession {
return;
}
- mgr.updatePublish(mSessionId, publishConfig);
+ mgr.updatePublish(mClientId, mSessionId, publishConfig);
}
}
}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanSession.java b/wifi/java/android/net/wifi/nan/WifiNanSession.java
index 005ca291cbf5..5fb2c066d9b9 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanSession.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanSession.java
@@ -16,9 +16,12 @@
package android.net.wifi.nan;
+import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.SystemApi;
-import android.net.wifi.RttManager;
+import android.net.NetworkRequest;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.Looper;
import android.util.Log;
import dalvik.system.CloseGuard;
@@ -26,18 +29,8 @@ import dalvik.system.CloseGuard;
import java.lang.ref.WeakReference;
/**
- * A class representing a single publish or subscribe NAN session. This object
- * will not be created directly - only its child classes are available:
- * {@link WifiNanPublishSession} and {@link WifiNanSubscribeSession}. This class provides
- * functionality common to both publish and subscribe discovery sessions:
- * <ul>
- * <li>Sending messages: {@link #sendMessage(int, byte[], int)} or
- * {@link #sendMessage(int, byte[], int, int)} methods.
- * <li>Creating a network-specifier when requesting a NAN connection:
- * {@link #createNetworkSpecifier(int, int, byte[])}.
- * </ul>
- * The {@link #terminate()} method must be called to terminate discovery sessions once they are
- * no longer needed.
+ * This class represents a Wi-Fi NAN session - an attachment to the Wi-Fi NAN service through
+ * which the app can execute discovery operations.
*
* @hide PROPOSED_NAN_API
*/
@@ -46,71 +39,42 @@ public class WifiNanSession {
private static final boolean DBG = false;
private static final boolean VDBG = false; // STOPSHIP if true
- private static final int MAX_SEND_RETRY_COUNT = 5;
-
- /** @hide */
- protected WeakReference<WifiNanManager> mMgr;
- /** @hide */
- protected final int mSessionId;
- /** @hide */
- protected boolean mTerminated = false;
+ private final WeakReference<WifiNanManager> mMgr;
+ private final Binder mBinder;
+ private final int mClientId;
+ private boolean mTerminated = true;
private final CloseGuard mCloseGuard = CloseGuard.get();
- /**
- * Return the maximum permitted retry count when sending messages using
- * {@link #sendMessage(int, byte[], int, int)}.
- *
- * @return Maximum retry count when sending messages.
- */
- public static int getMaxSendRetryCount() {
- return MAX_SEND_RETRY_COUNT;
- }
-
/** @hide */
- public WifiNanSession(WifiNanManager manager, int sessionId) {
- if (VDBG) Log.v(TAG, "New client created: manager=" + manager + ", sessionId=" + sessionId);
+ public WifiNanSession(WifiNanManager manager, Binder binder, int clientId) {
+ if (VDBG) Log.v(TAG, "New session created: manager=" + manager + ", clientId=" + clientId);
mMgr = new WeakReference<>(manager);
- mSessionId = sessionId;
+ mBinder = binder;
+ mClientId = clientId;
+ mTerminated = false;
- mCloseGuard.open("terminate");
+ mCloseGuard.open("destroy");
}
/**
- * Terminate the publish or subscribe session - free any resources, and stop
- * transmitting packets on-air (for an active session) or listening for
- * matches (for a passive session). The session may not be used for any
- * additional operations after termination.
+ * Destroy the Wi-Fi NAN service session and, if no other applications are attached to NAN,
+ * also disable NAN. This method destroys all outstanding operations - i.e. all publish and
+ * subscribes are terminated, and any outstanding data-links are shut-down. However, it is
+ * good practice to destroy these discovery sessions and connections explicitly before a
+ * session-wide destroy.
* <p>
- * This operation must be done on a session which is no longer needed. Otherwise system
- * resources will continue to be utilized until the application terminates. The only
- * exception is a session for which we received a termination callback,
- * {@link WifiNanSessionCallback#onSessionTerminated(int)}.
+ * An application may re-attach after a destroy using
+ * {@link WifiNanManager#attach(Handler, WifiNanAttachCallback)} .
*/
- public void terminate() {
+ public void destroy() {
WifiNanManager mgr = mMgr.get();
if (mgr == null) {
- Log.w(TAG, "terminate: called post GC on WifiNanManager");
- return;
- }
- mgr.terminateSession(mSessionId);
- mTerminated = true;
- mMgr.clear();
- mCloseGuard.close();
- }
-
- /**
- * Sets the status of the session to terminated - i.e. an indication that
- * already terminated rather than executing a termination.
- *
- * @hide
- */
- public void setTerminated() {
- if (mTerminated) {
- Log.w(TAG, "terminate: already terminated.");
+ Log.w(TAG, "destroy: called post GC on WifiNanManager");
return;
}
+ mgr.disconnect(mClientId, mBinder);
mTerminated = true;
mMgr.clear();
mCloseGuard.close();
@@ -122,7 +86,7 @@ public class WifiNanSession {
try {
if (!mTerminated) {
mCloseGuard.warnIfOpen();
- terminate();
+ destroy();
}
} finally {
super.finalize();
@@ -130,125 +94,108 @@ public class WifiNanSession {
}
/**
- * Sends a message to the specified destination. NAN messages are transmitted in the context
- * of a discovery session - executed subsequent to a publish/subscribe
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} event.
+ * Issue a request to the NAN service to create a new NAN publish discovery session, using
+ * the specified {@code publishConfig} configuration. The results of the publish operation
+ * are routed to the callbacks of {@link WifiNanDiscoverySessionCallback}:
+ * <ul>
+ * <li>
+ * {@link WifiNanDiscoverySessionCallback#onPublishStarted(WifiNanPublishDiscoverySession)}
+ * is called when the publish session is created and provides a handle to the session.
+ * Further operations on the publish session can be executed on that object.
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigFailed()} is called if the
+ * publish operation failed.
+ * </ul>
* <p>
- * NAN messages are not guaranteed delivery. Callbacks on {@link WifiNanSessionCallback}
- * indicate message was transmitted successfully,
- * {@link WifiNanSessionCallback#onMessageSendSuccess(int)}, or transmission failed
- * (possibly after several retries) -
- * {@link WifiNanSessionCallback#onMessageSendFail(int, int)}.
+ * Other results of the publish session operations will also be routed to callbacks
+ * on the {@code callback} object. The resulting publish session can be modified using
+ * {@link WifiNanPublishDiscoverySession#updatePublish(PublishConfig)}.
* <p>
- * The peer will get a callback indicating a message was received using
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])}.
+ * An application must use the {@link WifiNanDiscoveryBaseSession#destroy()} to
+ * terminate the publish discovery session once it isn't needed. This will free
+ * resources as well terminate any on-air transmissions.
*
- * @param peerId The peer's ID for the message. Must be a result of an
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} or
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])} events.
- * @param message The message to be transmitted.
- * @param messageId An arbitrary integer used by the caller to identify the message. The same
- * integer ID will be returned in the callbacks indicating message send success or
- * failure. The {@code messageId} is not used internally by the NAN service - it
- * can be arbitrary and non-unique.
- * @param retryCount An integer specifying how many additional service-level (as opposed to PHY
- * or MAC level) retries should be attempted if there is no ACK from the receiver
- * (note: no retransmissions are attempted in other failure cases). A value of 0
- * indicates no retries. Max permitted value is {@link #getMaxSendRetryCount()}.
+ * @param handler The Handler on whose thread to execute the callbacks of the {@code
+ * callback} object. If a null is provided then the application's main thread will be used.
+ * @param publishConfig The {@link PublishConfig} specifying the
+ * configuration of the requested publish session.
+ * @param callback A {@link WifiNanDiscoverySessionCallback} derived object to be used for
+ * session event callbacks.
*/
- public void sendMessage(int peerId, @Nullable byte[] message, int messageId, int retryCount) {
+ public void publish(@Nullable Handler handler, @NonNull PublishConfig publishConfig,
+ @NonNull WifiNanDiscoverySessionCallback callback) {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.e(TAG, "publish: called post GC on WifiNanManager");
+ return;
+ }
if (mTerminated) {
- Log.w(TAG, "sendMessage: called on terminated session");
+ Log.e(TAG, "publish: called after termination");
return;
- } else {
- WifiNanManager mgr = mMgr.get();
- if (mgr == null) {
- Log.w(TAG, "sendMessage: called post GC on WifiNanManager");
- return;
- }
-
- mgr.sendMessage(mSessionId, peerId, message, messageId, retryCount);
}
+ mgr.publish(mClientId, (handler == null) ? Looper.getMainLooper() : handler.getLooper(),
+ publishConfig, callback);
}
/**
- * Sends a message to the specified destination. NAN messages are transmitted in the context
- * of a discovery session - executed subsequent to a publish/subscribe
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} event.
+ * Issue a request to the NAN service to create a new NAN subscribe discovery session, using
+ * the specified {@code subscribeConfig} configuration. The results of the subscribe
+ * operation are routed to the callbacks of {@link WifiNanDiscoverySessionCallback}:
+ * <ul>
+ * <li>
+ * {@link WifiNanDiscoverySessionCallback#onSubscribeStarted(WifiNanSubscribeDiscoverySession)}
+ * is called when the subscribe session is created and provides a handle to the session.
+ * Further operations on the subscribe session can be executed on that object.
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigFailed()} is called if the
+ * subscribe operation failed.
+ * </ul>
* <p>
- * NAN messages are not guaranteed delivery. Callbacks on {@link WifiNanSessionCallback}
- * indicate message was transmitted successfully,
- * {@link WifiNanSessionCallback#onMessageSendSuccess(int)}, or transmission failed
- * (possibly after several retries) -
- * {@link WifiNanSessionCallback#onMessageSendFail(int, int)}.
+ * Other results of the subscribe session operations will also be routed to callbacks
+ * on the {@code callback} object. The resulting subscribe session can be modified using
+ * {@link WifiNanSubscribeDiscoverySession#updateSubscribe(SubscribeConfig)}.
* <p>
- * The peer will get a callback indicating a message was received using
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])}.
- * Equivalent to {@link #sendMessage(int, byte[], int, int)} with a {@code retryCount} of
- * 0.
+ * An application must use the {@link WifiNanDiscoveryBaseSession#destroy()} to
+ * terminate the subscribe discovery session once it isn't needed. This will free
+ * resources as well terminate any on-air transmissions.
*
- * @param peerId The peer's ID for the message. Must be a result of an
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} or
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])} events.
- * @param message The message to be transmitted.
- * @param messageId An arbitrary integer used by the caller to identify the message. The same
- * integer ID will be returned in the callbacks indicating message send success or
- * failure. The {@code messageId} is not used internally by the NAN service - it
- * can be arbitrary and non-unique.
+ * @param handler The Handler on whose thread to execute the callbacks of the {@code
+ * callback} object. If a null is provided then the application's main thread will be used.
+ * @param subscribeConfig The {@link SubscribeConfig} specifying the
+ * configuration of the requested subscribe session.
+ * @param callback A {@link WifiNanDiscoverySessionCallback} derived object to be used for
+ * session event callbacks.
*/
- public void sendMessage(int peerId, @Nullable byte[] message, int messageId) {
- sendMessage(peerId, message, messageId, 0);
- }
-
- /**
- * Start a ranging operation with the specified peers. The peer IDs are obtained from an
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} or
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])} operation - can only
- * range devices which are part of an ongoing discovery session.
- *
- * @param params RTT parameters - each corresponding to a specific peer ID (the array sizes
- * must be identical). The
- * {@link android.net.wifi.RttManager.RttParams#bssid} member must be set to
- * a peer ID - not to a MAC address.
- * @param listener The listener to receive the results of the ranging session.
- * @hide PROPOSED_NAN_SYSTEM_API [TODO: b/28847998 - track RTT API & visilibity]
- */
- public void startRanging(RttManager.RttParams[] params, RttManager.RttListener listener) {
+ public void subscribe(@Nullable Handler handler, @NonNull SubscribeConfig subscribeConfig,
+ @NonNull WifiNanDiscoverySessionCallback callback) {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.e(TAG, "publish: called post GC on WifiNanManager");
+ return;
+ }
if (mTerminated) {
- Log.w(TAG, "startRanging: called on terminated session");
+ Log.e(TAG, "publish: called after termination");
return;
- } else {
- WifiNanManager mgr = mMgr.get();
- if (mgr == null) {
- Log.w(TAG, "startRanging: called post GC on WifiNanManager");
- return;
- }
-
- mgr.startRanging(mSessionId, params, listener);
}
+ mgr.subscribe(mClientId, (handler == null) ? Looper.getMainLooper() : handler.getLooper(),
+ subscribeConfig, callback);
}
/**
- * Create a {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(String)} for a
+ * Create a {@link NetworkRequest.Builder#setNetworkSpecifier(String)} for a
* WiFi NAN connection to the specified peer. The
- * {@link android.net.NetworkRequest.Builder#addTransportType(int)} should be set to
+ * {@link NetworkRequest.Builder#addTransportType(int)} should be set to
* {@link android.net.NetworkCapabilities#TRANSPORT_WIFI_NAN}.
* <p>
- * This method should be used when setting up a connection with a peer discovered through NAN
- * discovery or communication (in such scenarios the MAC address of the peer is shielded by
- * an opaque peer ID handle). If a NAN connection is needed to a peer discovered using other
- * OOB (out-of-band) mechanism then use the alternative
- * {@link WifiNanManager#createNetworkSpecifier(int, byte[], byte[])} method - which uses the
- * peer's MAC address.
+ * This API is targeted for applications which can obtain the peer MAC address using OOB
+ * (out-of-band) discovery. NAN discovery does not provide the MAC address of the peer -
+ * when using NAN discovery use the alternative network specifier method -
+ * {@link WifiNanDiscoveryBaseSession#createNetworkSpecifier(int, Object, byte[])}.
*
- * @param role The role of this device:
- * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_INITIATOR} or
- * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_RESPONDER}
- * @param peerId The peer ID obtained through
- * {@link WifiNanSessionCallback#onMatch(int, byte[], byte[])} or
- * {@link WifiNanSessionCallback#onMessageReceived(int, byte[])}. On a RESPONDER this
+ * @param role The role of this device:
+ * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_INITIATOR} or
+ * {@link WifiNanManager#WIFI_NAN_DATA_PATH_ROLE_RESPONDER}
+ * @param peer The MAC address of the peer's NAN discovery interface. On a RESPONDER this
* value is used to gate the acceptance of a connection request from only that
- * peer. A RESPONDER may specified a 0 - indicating that it will accept
+ * peer. A RESPONDER may specified a null - indicating that it will accept
* connection requests from any device.
* @param token An arbitrary token (message) to be used to match connection initiation request
* to a responder setup. A RESPONDER is set up with a {@code token} which must
@@ -258,22 +205,20 @@ public class WifiNanSession {
*
* @return A string to be used to construct
* {@link android.net.NetworkRequest.Builder#setNetworkSpecifier(String)} to pass to
- * {@link android.net.ConnectivityManager#requestNetwork(android.net.NetworkRequest,android.net.ConnectivityManager.NetworkCallback)}
+ * {@link android.net.ConnectivityManager#requestNetwork(NetworkRequest, android.net.ConnectivityManager.NetworkCallback)}
* [or other varieties of that API].
*/
- public String createNetworkSpecifier(@WifiNanManager.DataPathRole int role, int peerId,
+ public String createNetworkSpecifier(@WifiNanManager.DataPathRole int role, @Nullable byte[] peer,
@Nullable byte[] token) {
+ WifiNanManager mgr = mMgr.get();
+ if (mgr == null) {
+ Log.e(TAG, "createNetworkSpecifier: called post GC on WifiNanManager");
+ return "";
+ }
if (mTerminated) {
- Log.w(TAG, "createNetworkSpecifier: called on terminated session");
- return null;
- } else {
- WifiNanManager mgr = mMgr.get();
- if (mgr == null) {
- Log.w(TAG, "createNetworkSpecifier: called post GC on WifiNanManager");
- return null;
- }
-
- return mgr.createNetworkSpecifier(role, mSessionId, peerId, token);
+ Log.e(TAG, "createNetworkSpecifier: called after termination");
+ return "";
}
+ return mgr.createNetworkSpecifier(mClientId, role, peer, token);
}
}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java b/wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java
deleted file mode 100644
index 8433b99315ce..000000000000
--- a/wifi/java/android/net/wifi/nan/WifiNanSessionCallback.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.net.wifi.nan;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * Base class for NAN session events callbacks. Should be extended by
- * applications wanting notifications. The callbacks are set when a
- * publish or subscribe session is created using
- * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} or
- * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} .
- * <p>
- * A single callback is set at session creation - it cannot be replaced.
- *
- * @hide PROPOSED_NAN_API
- */
-public class WifiNanSessionCallback {
- /** @hide */
- @IntDef({
- REASON_NO_RESOURCES, REASON_INVALID_ARGS, REASON_NO_MATCH_SESSION,
- REASON_TX_FAIL, REASON_OTHER })
- @Retention(RetentionPolicy.SOURCE)
- public @interface SessionReasonCodes {
- }
-
- /** @hide */
- @IntDef({
- TERMINATE_REASON_DONE, TERMINATE_REASON_FAIL })
- @Retention(RetentionPolicy.SOURCE)
- public @interface SessionTerminateCodes {
- }
-
- /**
- * Indicates no resources to execute the requested operation.
- * Failure reason flag for {@link WifiNanSessionCallback} callbacks.
- */
- public static final int REASON_NO_RESOURCES = 0;
-
- /**
- * Indicates invalid argument in the requested operation.
- * Failure reason flag for {@link WifiNanSessionCallback} callbacks.
- */
- public static final int REASON_INVALID_ARGS = 1;
-
- /**
- * Indicates a message is transmitted without a match (a discovery) or received message
- * from peer occurring first.
- * Failure reason flag for {@link WifiNanSessionCallback} callbacks.
- */
- public static final int REASON_NO_MATCH_SESSION = 2;
-
- /**
- * Indicates transmission failure: this may be due to local transmission
- * failure or to no ACK received - remote device didn't receive the
- * sent message. Failure reason flag for
- * {@link WifiNanSessionCallback#onMessageSendFail(int, int)} callback.
- */
- public static final int REASON_TX_FAIL = 3;
-
- /**
- * Indicates an unspecified error occurred during the operation.
- * Failure reason flag for {@link WifiNanSessionCallback} callbacks.
- */
- public static final int REASON_OTHER = 4;
-
- /**
- * Indicates that publish or subscribe session is done - all the
- * requested operations (per {@link PublishConfig} or
- * {@link SubscribeConfig}) have been executed. Failure reason flag for
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} callback.
- */
- public static final int TERMINATE_REASON_DONE = 100;
-
- /**
- * Indicates that publish or subscribe session is terminated due to a
- * failure.
- * Failure reason flag for
- * {@link WifiNanSessionCallback#onSessionTerminated(int)} callback.
- */
- public static final int TERMINATE_REASON_FAIL = 101;
-
- /**
- * Called when a publish operation is started successfully in response to a
- * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} operation.
- *
- * @param session The {@link WifiNanPublishSession} used to control the
- * discovery session.
- */
- public void onPublishStarted(@NonNull WifiNanPublishSession session) {
- /* empty */
- }
-
- /**
- * Called when a subscribe operation is started successfully in response to a
- * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} operation.
- *
- * @param session The {@link WifiNanSubscribeSession} used to control the
- * discovery session.
- */
- public void onSubscribeStarted(@NonNull WifiNanSubscribeSession session) {
- /* empty */
- }
-
- /**
- * Called when a publish or subscribe discovery session configuration is update request
- * succeeds. Called in response to {@link WifiNanPublishSession#updatePublish(PublishConfig)}
- * or {@link WifiNanSubscribeSession#updateSubscribe(SubscribeConfig)}.
- */
- public void onSessionConfigSuccess() {
- /* empty */
- }
-
- /**
- * Called when a publish or subscribe discovery session cannot be created:
- * {@link WifiNanManager#publish(PublishConfig, WifiNanSessionCallback)} or
- * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)},
- * or when a configuration update fails:
- * {@link WifiNanPublishSession#updatePublish(PublishConfig)} or
- * {@link WifiNanSubscribeSession#updateSubscribe(SubscribeConfig)}.
- * <p>
- * For discovery session updates failure leaves the session running with its previous
- * configuration - the discovery session is not terminated.
- *
- * @param reason The failure reason using
- * {@code WifiNanSessionCallback.REASON_*} codes.
- */
- public void onSessionConfigFail(@SessionReasonCodes int reason) {
- /* empty */
- }
-
- /**
- * Called when a discovery session (publish or subscribe) terminates. Termination may be due
- * to user-request (either directly through {@link WifiNanSession#terminate()} or
- * application-specified expiration, e.g. {@link PublishConfig.Builder#setPublishCount(int)}
- * or {@link SubscribeConfig.Builder#setTtlSec(int)}) or due to a failure.
- *
- * @param reason The termination reason using
- * {@code WifiNanSessionCallback.TERMINATE_*} codes.
- */
- public void onSessionTerminated(@SessionTerminateCodes int reason) {
- /* empty */
- }
-
- /**
- * Called when a discovery (publish or subscribe) operation results in a
- * match - when a peer is discovered.
- *
- * @param peerId The ID of the peer matching our discovery operation.
- * @param serviceSpecificInfo The service specific information (arbitrary
- * byte array) provided by the peer as part of its discovery
- * configuration.
- * @param matchFilter The filter (Tx on advertiser and Rx on listener) which
- * resulted in this match.
- */
- public void onMatch(int peerId, byte[] serviceSpecificInfo, byte[] matchFilter) {
- /* empty */
- }
-
- /**
- * Called in response to {@link WifiNanSession#sendMessage(int, byte[], int)} when a message
- * is transmitted successfully - when it was received successfully by the peer
- * (corresponds to an ACK being received).
- * <p>
- * Note that either this callback or
- * {@link WifiNanSessionCallback#onMessageSendFail(int, int)} will be
- * received - never both.
- *
- * @param messageId The arbitrary message ID specified when sending the message.
- */
- public void onMessageSendSuccess(@SuppressWarnings("unused") int messageId) {
- /* empty */
- }
-
- /**
- * Called when message transmission fails - when no ACK is received from the peer.
- * Retries when ACKs are not received are done by hardware, MAC, and in the NAN stack (using
- * the {@link WifiNanSession#sendMessage(int, byte[], int, int)} method) - this
- * event is received after all retries are exhausted.
- * <p>
- * Note that either this callback or
- * {@link WifiNanSessionCallback#onMessageSendSuccess(int)} will be received
- * - never both.
- *
- * @param messageId The arbitrary message ID specified when sending the message.
- * @param reason The failure reason using
- * {@code WifiNanSessionCallback.REASON_*} codes.
- */
- public void onMessageSendFail(@SuppressWarnings("unused") int messageId,
- @SessionReasonCodes int reason) {
- /* empty */
- }
-
- /**
- * Called when a message is received from a discovery session peer - in response to the
- * peer's {@link WifiNanSession#sendMessage(int, byte[], int)} or
- * {@link WifiNanSession#sendMessage(int, byte[], int, int)}.
- *
- * @param peerId The ID of the peer sending the message.
- * @param message A byte array containing the message.
- */
- public void onMessageReceived(int peerId, byte[] message) {
- /* empty */
- }
-}
diff --git a/wifi/java/android/net/wifi/nan/WifiNanSubscribeSession.java b/wifi/java/android/net/wifi/nan/WifiNanSubscribeDiscoverySession.java
index d0e56c521525..f5b4c0ce2c4c 100644
--- a/wifi/java/android/net/wifi/nan/WifiNanSubscribeSession.java
+++ b/wifi/java/android/net/wifi/nan/WifiNanSubscribeDiscoverySession.java
@@ -21,34 +21,35 @@ import android.util.Log;
/**
* A class representing a NAN subscribe session. Created when
- * {@link WifiNanManager#subscribe(SubscribeConfig, WifiNanSessionCallback)} is called and a
- * discovery session is created and returned in
- * {@link WifiNanSessionCallback#onSubscribeStarted(WifiNanSubscribeSession)}. See baseline
- * functionality of all discovery sessions in {@link WifiNanSession}. This object allows updating
- * an existing/running subscribe discovery session using {@link #updateSubscribe(SubscribeConfig)}.
+ * {@link WifiNanSession#subscribe(android.os.Handler, SubscribeConfig, WifiNanDiscoverySessionCallback)}
+ * is called and a discovery session is created and returned in
+ * {@link WifiNanDiscoverySessionCallback#onSubscribeStarted(WifiNanSubscribeDiscoverySession)}.
+ * See baseline functionality of all discovery sessions in {@link WifiNanDiscoveryBaseSession}.
+ * This object allows updating an existing/running subscribe discovery session using
+ * {@link #updateSubscribe(SubscribeConfig)}.
*
* @hide PROPOSED_NAN_API
*/
-public class WifiNanSubscribeSession extends WifiNanSession {
- private static final String TAG = "WifiNanSubscribeSession";
+public class WifiNanSubscribeDiscoverySession extends WifiNanDiscoveryBaseSession {
+ private static final String TAG = "WifiNanSubscribeDiscSsn";
/**
* {@hide}
*/
- public WifiNanSubscribeSession(WifiNanManager manager, int sessionId) {
- super(manager, sessionId);
+ public WifiNanSubscribeDiscoverySession(WifiNanManager manager, int clientId, int sessionId) {
+ super(manager, clientId, sessionId);
}
/**
* Re-configure the currently active subscribe session. The
- * {@link WifiNanSessionCallback} is not replaced - the same listener used
+ * {@link WifiNanDiscoverySessionCallback} is not replaced - the same listener used
* at creation is still used. The results of the configuration are returned using
- * {@link WifiNanSessionCallback}:
+ * {@link WifiNanDiscoverySessionCallback}:
* <ul>
- * <li>{@link WifiNanSessionCallback#onSessionConfigSuccess()}: configuration update
- * succeeded.
- * <li>{@link WifiNanSessionCallback#onSessionConfigFail(int)}: configuration update
- * failed. The subscribe discovery session is still running using its previous
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigUpdated()}: configuration
+ * update succeeded.
+ * <li>{@link WifiNanDiscoverySessionCallback#onSessionConfigFailed()}: configuration
+ * update failed. The subscribe discovery session is still running using its previous
* configuration (i.e. update failure does not terminate the session).
* </ul>
*
@@ -66,7 +67,7 @@ public class WifiNanSubscribeSession extends WifiNanSession {
return;
}
- mgr.updateSubscribe(mSessionId, subscribeConfig);
+ mgr.updateSubscribe(mClientId, mSessionId, subscribeConfig);
}
}
}
diff --git a/wifi/tests/Android.mk b/wifi/tests/Android.mk
new file mode 100644
index 000000000000..5850feee004a
--- /dev/null
+++ b/wifi/tests/Android.mk
@@ -0,0 +1,61 @@
+# Copyright (C) 2016 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+
+# Make test APK
+# ============================================================
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+# This list is generated from the java source files in this module
+# The list is a comma separated list of class names with * matching zero or more characters.
+# Example:
+# Input files: src/com/android/server/wifi/Test.java src/com/android/server/wifi/AnotherTest.java
+# Generated exclude list: com.android.server.wifi.Test*,com.android.server.wifi.AnotherTest*
+
+# Filter all src files to just java files
+local_java_files := $(filter %.java,$(LOCAL_SRC_FILES))
+# Transform java file names into full class names.
+# This only works if the class name matches the file name and the directory structure
+# matches the package.
+local_classes := $(subst /,.,$(patsubst src/%.java,%,$(local_java_files)))
+# Utility variables to allow replacing a space with a comma
+comma:= ,
+empty:=
+space:= $(empty) $(empty)
+# Convert class name list to jacoco exclude list
+# This appends a * to all classes and replace the space separators with commas.
+# These patterns will match all classes in this module and their inner classes.
+jacoco_exclude := $(subst $(space),$(comma),$(patsubst %,%*,$(local_classes)))
+
+jacoco_include := android.net.wifi.*
+
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := $(jacoco_include)
+LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := $(jacoco_exclude)
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+ android-support-test \
+ mockito-target-minus-junit4 \
+ frameworks-base-testutils \
+
+LOCAL_JAVA_LIBRARIES := \
+ android.test.runner \
+
+LOCAL_PACKAGE_NAME := FrameworksWifiApiTests
+
+include $(BUILD_PACKAGE)
diff --git a/wifi/tests/AndroidManifest.xml b/wifi/tests/AndroidManifest.xml
new file mode 100644
index 000000000000..4eaca2b98a1d
--- /dev/null
+++ b/wifi/tests/AndroidManifest.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ ~ Copyright (C) 2016 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="android.net.wifi.test">
+
+ <application>
+ <uses-library android:name="android.test.runner" />
+ <activity android:label="WifiTestDummyLabel"
+ android:name="WifiTestDummyName">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER"/>
+ </intent-filter>
+ </activity>
+ </application>
+
+ <instrumentation android:name="android.support.test.runner.AndroidJUnitRunner"
+ android:targetPackage="android.net.wifi.test"
+ android:label="Frameworks Wifi API Tests">
+ </instrumentation>
+
+</manifest>
diff --git a/wifi/tests/README.md b/wifi/tests/README.md
new file mode 100644
index 000000000000..b418abd5e46b
--- /dev/null
+++ b/wifi/tests/README.md
@@ -0,0 +1,50 @@
+# Wifi Unit Tests
+This package contains unit tests for the android wifi framework APIs based on the
+[Android Testing Support Library](http://developer.android.com/tools/testing-support-library/index.html).
+The test cases are built using the [JUnit](http://junit.org/) and [Mockito](http://mockito.org/)
+libraries.
+
+## Running Tests
+The easiest way to run tests is simply run
+
+```
+frameworks/base/wifi/tests/runtests.sh
+```
+
+`runtests.sh` will build the test project and all of its dependencies and push the APK to the
+connected device. It will then run the tests on the device.
+
+To pick up changes in framework/base, you will need to:
+1. rebuild the framework library 'make -j32'
+2. sync over the updated library to the device 'adb sync'
+3. restart framework on the device 'adb shell stop' then 'adb shell start'
+
+To enable syncing data to the device for first time after clean reflash:
+1. adb disable-verity
+2. adb reboot
+3. adb remount
+
+See below for a few example of options to limit which tests are run.
+See the
+[AndroidJUnitRunner Documentation](https://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html)
+for more details on the supported options.
+
+```
+runtests.sh -e package android.net.wifi
+runtests.sh -e class android.net.wifi.WifiScannerTest
+```
+
+If you manually build and push the test APK to the device you can run tests using
+
+```
+adb shell am instrument -w 'android.net.wifi.test/android.support.test.runner.AndroidJUnitRunner'
+```
+
+## Adding Tests
+Tests can be added by adding classes to the src directory. JUnit4 style test cases can
+be written by simply annotating test methods with `org.junit.Test`.
+
+## Debugging Tests
+If you are trying to debug why tests are not doing what you expected, you can add android log
+statements and use logcat to view them. The beginning and end of every tests is automatically logged
+with the tag `TestRunner`.
diff --git a/wifi/tests/runtests.sh b/wifi/tests/runtests.sh
new file mode 100755
index 000000000000..ebcc2a2f34a2
--- /dev/null
+++ b/wifi/tests/runtests.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+
+if [ -z $ANDROID_BUILD_TOP ]; then
+ echo "You need to source and lunch before you can use this script"
+ exit 1
+fi
+
+echo "Running tests"
+
+set -e # fail early
+
+echo "+ mmma -j32 $ANDROID_BUILD_TOP/frameworks/base/wifi/tests"
+# NOTE Don't actually run the command above since this shell doesn't inherit functions from the
+# caller.
+make -j32 -C $ANDROID_BUILD_TOP -f build/core/main.mk MODULES-IN-frameworks-base-wifi-tests
+
+set -x # print commands
+
+adb root
+adb wait-for-device
+
+adb install -r -g "$OUT/data/app/FrameworksWifiApiTests/FrameworksWifiApiTests.apk"
+
+adb shell am instrument -w "$@" 'android.net.wifi.test/android.support.test.runner.AndroidJUnitRunner'
diff --git a/wifi/tests/src/android/net/wifi/FakeKeys.java b/wifi/tests/src/android/net/wifi/FakeKeys.java
new file mode 100644
index 000000000000..0c730705b039
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/FakeKeys.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.net.wifi;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+
+/**
+ * A class containing test certificates.
+ */
+public class FakeKeys {
+ private static final String CA_CERT0_STRING = "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDKDCCAhCgAwIBAgIJAILlFdwzLVurMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV\n" +
+ "BAMTB0VBUCBDQTEwHhcNMTYwMTEyMTE1MDE1WhcNMjYwMTA5MTE1MDE1WjASMRAw\n" +
+ "DgYDVQQDEwdFQVAgQ0ExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n" +
+ "znAPUz26Msae4ws43czR41/J2QtrSIZUKmVUsVumDbYHrPNvTXKSMXAcewORDQYX\n" +
+ "RqvHvpn8CscB1+oGXZvHwxj4zV0WKoK2zeXkau3vcyl3HIKupJfq2TEACefVjj0t\n" +
+ "JW+X35PGWp9/H5zIUNVNVjS7Ums84IvKhRB8512PB9UyHagXYVX5GWpAcVpyfrlR\n" +
+ "FI9Qdhh+Pbk0uyktdbf/CdfgHOoebrTtwRljM0oDtX+2Cv6j0wBK7hD8pPvf1+uy\n" +
+ "GzczigAU/4Kw7eZqydf9B+5RupR+IZipX41xEiIrKRwqi517WWzXcjaG2cNbf451\n" +
+ "xpH5PnV3i1tq04jMGQUzFwIDAQABo4GAMH4wHQYDVR0OBBYEFIwX4vs8BiBcScod\n" +
+ "5noZHRM8E4+iMEIGA1UdIwQ7MDmAFIwX4vs8BiBcScod5noZHRM8E4+ioRakFDAS\n" +
+ "MRAwDgYDVQQDEwdFQVAgQ0ExggkAguUV3DMtW6swDAYDVR0TBAUwAwEB/zALBgNV\n" +
+ "HQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAFfQqOTA7Rv7K+luQ7pnas4BYwHE\n" +
+ "9GEP/uohv6KOy0TGQFbrRTjFoLVNB9BZ1ymMDZ0/TIwIUc7wi7a8t5mEqYH153wW\n" +
+ "aWooiSjyLLhuI4sNrNCOtisdBq2r2MFXt6h0mAQYOPv8R8K7/fgSxGFqzhyNmmVL\n" +
+ "1qBJldx34SpwsTALQVPb4hGwJzZfr1PcpEQx6xMnTl8xEWZE3Ms99uaUxbQqIwRu\n" +
+ "LgAOkNCmY2m89VhzaHJ1uV85AdM/tD+Ysmlnnjt9LRCejbBipjIGjOXrg1JP+lxV\n" +
+ "muM4vH+P/mlmxsPPz0d65b+EGmJZpoLkO/tdNNvCYzjJpTEWpEsO6NMhKYo=\n" +
+ "-----END CERTIFICATE-----\n";
+ public static final X509Certificate CA_CERT0 = loadCertificate(CA_CERT0_STRING);
+
+ private static final String CA_CERT1_STRING = "-----BEGIN CERTIFICATE-----\n" +
+ "MIIDKDCCAhCgAwIBAgIJAOM5SzKO2pzCMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNV\n" +
+ "BAMTB0VBUCBDQTAwHhcNMTYwMTEyMDAxMDQ3WhcNMjYwMTA5MDAxMDQ3WjASMRAw\n" +
+ "DgYDVQQDEwdFQVAgQ0EwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n" +
+ "89ug+IEKVQXnJGKg5g4uVHg6J/8iRUxR5k2eH5o03hrJNMfN2D+cBe/wCiZcnWbI\n" +
+ "GbGZACWm2nQth2wy9Zgm2LOd3b4ocrHYls3XLq6Qb5Dd7a0JKU7pdGufiNVEkrmF\n" +
+ "EB+N64wgwH4COTvCiN4erp5kyJwkfqAl2xLkZo0C464c9XoyQOXbmYD9A8v10wZu\n" +
+ "jyNsEo7Nr2USyw+qhjWSbFbEirP77Tvx+7pJQJwdtk1V9Tn73T2dGF2WHYejei9S\n" +
+ "mcWpdIUqsu9etYH+zDmtu7I1xlkwiaVsNr2+D+qaCJyOYqrDTKVNK5nmbBPXDWZc\n" +
+ "NoDbTOoqquX7xONpq9M6jQIDAQABo4GAMH4wHQYDVR0OBBYEFAZ3A2S4qJZZwuNY\n" +
+ "wkJ6mAdc0gVdMEIGA1UdIwQ7MDmAFAZ3A2S4qJZZwuNYwkJ6mAdc0gVdoRakFDAS\n" +
+ "MRAwDgYDVQQDEwdFQVAgQ0EwggkA4zlLMo7anMIwDAYDVR0TBAUwAwEB/zALBgNV\n" +
+ "HQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAHmdMwEhtys4d0E+t7owBmoVR+lU\n" +
+ "hMCcRtWs8YKX5WIM2kTweT0h/O1xwE1mWmRv/IbDAEb8od4BjAQLhIcolStr2JaO\n" +
+ "9ZzyxjOnNzqeErh/1DHDbb/moPpqfeJ8YiEz7nH/YU56Q8iCPO7TsgS0sNNE7PfN\n" +
+ "IUsBW0yHRgpQ4OxWmiZG2YZWiECRzAC0ecPzo59N5iH4vLQIMTMYquiDeMPQnn1e\n" +
+ "NDGxG8gCtDKIaS6tMg3a28MvWB094pr2ETou8O1C8Ji0Y4hE8QJmSdT7I4+GZjgW\n" +
+ "g94DZ5RiL7sdp3vC48CXOmeT61YBIvhGUsE1rPhXqkpqQ3Z3C4TFF0jXZZc=\n" +
+ "-----END CERTIFICATE-----\n";
+ public static final X509Certificate CA_CERT1 = loadCertificate(CA_CERT1_STRING);
+
+
+ private static X509Certificate loadCertificate(String blob) {
+ try {
+ final CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ InputStream stream = new ByteArrayInputStream(blob.getBytes(StandardCharsets.UTF_8));
+
+ return (X509Certificate) certFactory.generateCertificate(stream);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}
diff --git a/wifi/tests/src/android/net/wifi/WifiEnterpriseConfigTest.java b/wifi/tests/src/android/net/wifi/WifiEnterpriseConfigTest.java
new file mode 100644
index 000000000000..0d964b7c92d7
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/WifiEnterpriseConfigTest.java
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.net.wifi;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
+
+import android.net.wifi.WifiEnterpriseConfig.Eap;
+import android.net.wifi.WifiEnterpriseConfig.Phase2;
+import android.os.Parcel;
+import android.security.Credentials;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import java.security.cert.X509Certificate;
+
+
+/**
+ * Unit tests for {@link android.net.wifi.WifiEnterpriseConfig}.
+ */
+@SmallTest
+public class WifiEnterpriseConfigTest {
+ // Maintain a ground truth of the keystore uri prefix which is expected by wpa_supplicant.
+ public static final String KEYSTORE_URI = "keystore://";
+ public static final String CA_CERT_PREFIX = KEYSTORE_URI + Credentials.CA_CERTIFICATE;
+ public static final String KEYSTORES_URI = "keystores://";
+
+ private WifiEnterpriseConfig mEnterpriseConfig;
+
+ @Before
+ public void setUp() throws Exception {
+ mEnterpriseConfig = new WifiEnterpriseConfig();
+ }
+
+ @Test
+ public void testGetEmptyCaCertificate() {
+ // A newly-constructed WifiEnterpriseConfig object should have no CA certificate.
+ assertNull(mEnterpriseConfig.getCaCertificate());
+ assertNull(mEnterpriseConfig.getCaCertificates());
+ // Setting CA certificate to null explicitly.
+ mEnterpriseConfig.setCaCertificate(null);
+ assertNull(mEnterpriseConfig.getCaCertificate());
+ // Setting CA certificate to null using setCaCertificates().
+ mEnterpriseConfig.setCaCertificates(null);
+ assertNull(mEnterpriseConfig.getCaCertificates());
+ // Setting CA certificate to zero-length array.
+ mEnterpriseConfig.setCaCertificates(new X509Certificate[0]);
+ assertNull(mEnterpriseConfig.getCaCertificates());
+ }
+
+ @Test
+ public void testSetGetSingleCaCertificate() {
+ X509Certificate cert0 = FakeKeys.CA_CERT0;
+ mEnterpriseConfig.setCaCertificate(cert0);
+ assertEquals(mEnterpriseConfig.getCaCertificate(), cert0);
+ }
+
+ @Test
+ public void testSetGetMultipleCaCertificates() {
+ X509Certificate cert0 = FakeKeys.CA_CERT0;
+ X509Certificate cert1 = FakeKeys.CA_CERT1;
+ mEnterpriseConfig.setCaCertificates(new X509Certificate[] {cert0, cert1});
+ X509Certificate[] result = mEnterpriseConfig.getCaCertificates();
+ assertEquals(result.length, 2);
+ assertTrue(result[0] == cert0 && result[1] == cert1);
+ }
+
+ @Test
+ public void testSaveSingleCaCertificateAlias() {
+ final String alias = "single_alias 0";
+ mEnterpriseConfig.setCaCertificateAliases(new String[] {alias});
+ assertEquals(getCaCertField(), CA_CERT_PREFIX + alias);
+ }
+
+ @Test
+ public void testLoadSingleCaCertificateAlias() {
+ final String alias = "single_alias 1";
+ setCaCertField(CA_CERT_PREFIX + alias);
+ String[] aliases = mEnterpriseConfig.getCaCertificateAliases();
+ assertEquals(aliases.length, 1);
+ assertEquals(aliases[0], alias);
+ }
+
+ @Test
+ public void testSaveMultipleCaCertificates() {
+ final String alias0 = "single_alias 0";
+ final String alias1 = "single_alias 1";
+ mEnterpriseConfig.setCaCertificateAliases(new String[] {alias0, alias1});
+ assertEquals(getCaCertField(), String.format("%s%s %s",
+ KEYSTORES_URI,
+ WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias0),
+ WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias1)));
+ }
+
+ @Test
+ public void testLoadMultipleCaCertificates() {
+ final String alias0 = "single_alias 0";
+ final String alias1 = "single_alias 1";
+ setCaCertField(String.format("%s%s %s",
+ KEYSTORES_URI,
+ WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias0),
+ WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias1)));
+ String[] aliases = mEnterpriseConfig.getCaCertificateAliases();
+ assertEquals(aliases.length, 2);
+ assertEquals(aliases[0], alias0);
+ assertEquals(aliases[1], alias1);
+ }
+
+ private String getCaCertField() {
+ return mEnterpriseConfig.getFieldValue(WifiEnterpriseConfig.CA_CERT_KEY);
+ }
+
+ private void setCaCertField(String value) {
+ mEnterpriseConfig.setFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, value);
+ }
+
+ // Retrieves the value for a specific key supplied to wpa_supplicant.
+ private class SupplicantConfigExtractor implements WifiEnterpriseConfig.SupplicantSaver {
+ private String mValue = null;
+ private String mKey;
+
+ SupplicantConfigExtractor(String key) {
+ mKey = key;
+ }
+
+ @Override
+ public boolean saveValue(String key, String value) {
+ if (key.equals(mKey)) {
+ mValue = value;
+ }
+ return true;
+ }
+
+ public String getValue() {
+ return mValue;
+ }
+ }
+
+ private String getSupplicantEapMethod() {
+ SupplicantConfigExtractor entryExtractor = new SupplicantConfigExtractor(
+ WifiEnterpriseConfig.EAP_KEY);
+ mEnterpriseConfig.saveToSupplicant(entryExtractor);
+ return entryExtractor.getValue();
+ }
+
+ private String getSupplicantPhase2Method() {
+ SupplicantConfigExtractor entryExtractor = new SupplicantConfigExtractor(
+ WifiEnterpriseConfig.PHASE2_KEY);
+ mEnterpriseConfig.saveToSupplicant(entryExtractor);
+ return entryExtractor.getValue();
+ }
+
+ /** Verifies the default value for EAP outer and inner methods */
+ @Test
+ public void eapInnerDefault() {
+ assertEquals(null, getSupplicantEapMethod());
+ assertEquals(null, getSupplicantPhase2Method());
+ }
+
+ /** Verifies that the EAP inner method is reset when we switch to TLS */
+ @Test
+ public void eapPhase2MethodForTls() {
+ // Initially select an EAP method that supports an phase2.
+ mEnterpriseConfig.setEapMethod(Eap.PEAP);
+ mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
+ assertEquals("PEAP", getSupplicantEapMethod());
+ assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
+
+ // Change the EAP method to another type which supports a phase2.
+ mEnterpriseConfig.setEapMethod(Eap.TTLS);
+ assertEquals("TTLS", getSupplicantEapMethod());
+ assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
+
+ // Change the EAP method to TLS which does not support a phase2.
+ mEnterpriseConfig.setEapMethod(Eap.TLS);
+ assertEquals(null, getSupplicantPhase2Method());
+ }
+
+ /** Verfies that the EAP inner method is reset when we switch phase2 to NONE */
+ @Test
+ public void eapPhase2None() {
+ // Initially select an EAP method that supports an phase2.
+ mEnterpriseConfig.setEapMethod(Eap.PEAP);
+ mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
+ assertEquals("PEAP", getSupplicantEapMethod());
+ assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
+
+ // Change the phase2 method to NONE and ensure the value is cleared.
+ mEnterpriseConfig.setPhase2Method(Phase2.NONE);
+ assertEquals(null, getSupplicantPhase2Method());
+ }
+
+ /** Verfies that the correct "autheap" parameter is supplied for TTLS/GTC. */
+ @Test
+ public void peapGtcToTtls() {
+ mEnterpriseConfig.setEapMethod(Eap.PEAP);
+ mEnterpriseConfig.setPhase2Method(Phase2.GTC);
+ assertEquals("PEAP", getSupplicantEapMethod());
+ assertEquals("\"auth=GTC\"", getSupplicantPhase2Method());
+
+ mEnterpriseConfig.setEapMethod(Eap.TTLS);
+ assertEquals("TTLS", getSupplicantEapMethod());
+ assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
+ }
+
+ /** Verfies that the correct "auth" parameter is supplied for PEAP/GTC. */
+ @Test
+ public void ttlsGtcToPeap() {
+ mEnterpriseConfig.setEapMethod(Eap.TTLS);
+ mEnterpriseConfig.setPhase2Method(Phase2.GTC);
+ assertEquals("TTLS", getSupplicantEapMethod());
+ assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
+
+ mEnterpriseConfig.setEapMethod(Eap.PEAP);
+ assertEquals("PEAP", getSupplicantEapMethod());
+ assertEquals("\"auth=GTC\"", getSupplicantPhase2Method());
+ }
+
+ /** Verfies that the copy constructor preseves the inner method information. */
+ @Test
+ public void copyConstructor() {
+ WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
+ enterpriseConfig.setEapMethod(Eap.TTLS);
+ enterpriseConfig.setPhase2Method(Phase2.GTC);
+ mEnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
+ assertEquals("TTLS", getSupplicantEapMethod());
+ assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
+ }
+
+ /** Verfies that parceling a WifiEnterpriseConfig preseves method information. */
+ @Test
+ public void parcelConstructor() {
+ WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
+ enterpriseConfig.setEapMethod(Eap.TTLS);
+ enterpriseConfig.setPhase2Method(Phase2.GTC);
+ Parcel parcel = Parcel.obtain();
+ enterpriseConfig.writeToParcel(parcel, 0);
+ parcel.setDataPosition(0); // Allow parcel to be read from the beginning.
+ mEnterpriseConfig = WifiEnterpriseConfig.CREATOR.createFromParcel(parcel);
+ assertEquals("TTLS", getSupplicantEapMethod());
+ assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
+ }
+
+ /** Verifies proper operation of the getKeyId() method. */
+ @Test
+ public void getKeyId() {
+ assertEquals("NULL", mEnterpriseConfig.getKeyId(null));
+ WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
+ enterpriseConfig.setEapMethod(Eap.TTLS);
+ enterpriseConfig.setPhase2Method(Phase2.GTC);
+ assertEquals("TTLS_GTC", mEnterpriseConfig.getKeyId(enterpriseConfig));
+ mEnterpriseConfig.setEapMethod(Eap.PEAP);
+ mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
+ assertEquals("PEAP_MSCHAPV2", mEnterpriseConfig.getKeyId(enterpriseConfig));
+ }
+
+ /** Verifies that passwords are not displayed in toString. */
+ @Test
+ public void passwordNotInToString() {
+ String password = "supersecret";
+ mEnterpriseConfig.setPassword(password);
+ assertFalse(mEnterpriseConfig.toString().contains(password));
+ }
+}
diff --git a/wifi/tests/src/android/net/wifi/WifiScannerTest.java b/wifi/tests/src/android/net/wifi/WifiScannerTest.java
new file mode 100644
index 000000000000..a829eb933b59
--- /dev/null
+++ b/wifi/tests/src/android/net/wifi/WifiScannerTest.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net.wifi;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.validateMockitoUsage;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.net.wifi.WifiScanner.BssidInfo;
+import android.net.wifi.WifiScanner.BssidListener;
+import android.os.Handler;
+import android.os.Message;
+import android.os.test.TestLooper;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.internal.util.test.BidirectionalAsyncChannelServer;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Unit tests for {@link android.net.wifi.WifiScanner}.
+ */
+@SmallTest
+public class WifiScannerTest {
+ @Mock
+ private Context mContext;
+ @Mock
+ private IWifiScanner mService;
+ @Mock
+ private BssidListener mBssidListener;
+
+ private WifiScanner mWifiScanner;
+ private TestLooper mLooper;
+ private Handler mHandler;
+
+ /**
+ * Setup before tests.
+ */
+ @Before
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ mLooper = new TestLooper();
+ mHandler = mock(Handler.class);
+ BidirectionalAsyncChannelServer server = new BidirectionalAsyncChannelServer(
+ mContext, mLooper.getLooper(), mHandler);
+ when(mService.getMessenger()).thenReturn(server.getMessenger());
+ mWifiScanner = new WifiScanner(mContext, mService, mLooper.getLooper());
+ mLooper.dispatchAll();
+ }
+
+ /**
+ * Clean up after tests.
+ */
+ @After
+ public void cleanup() {
+ validateMockitoUsage();
+ }
+
+ private void verifySetHotlistMessage(Handler handler) {
+ ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
+ verify(handler, atLeastOnce()).handleMessage(messageCaptor.capture());
+ assertEquals("message.what is not CMD_SET_HOTLIST",
+ WifiScanner.CMD_SET_HOTLIST,
+ messageCaptor.getValue().what);
+ }
+
+ /**
+ * Test duplicate listeners for bssid tracking.
+ */
+ @Test
+ public void testStartTrackingBssidsDuplicateListeners() throws Exception {
+ BssidInfo[] bssids = new BssidInfo[] {
+ new BssidInfo()
+ };
+
+ // First start tracking succeeds.
+ mWifiScanner.startTrackingBssids(bssids, -100, mBssidListener);
+ mLooper.dispatchAll();
+ verifySetHotlistMessage(mHandler);
+
+ // Second start tracking should fail.
+ mWifiScanner.startTrackingBssids(bssids, -100, mBssidListener);
+ mLooper.dispatchAll();
+ verify(mBssidListener).onFailure(eq(WifiScanner.REASON_DUPLICATE_REQEUST), anyString());
+ }
+}