diff options
109 files changed, 6535 insertions, 2802 deletions
diff --git a/Android.mk b/Android.mk index 9d2ca0d50300..1eff5cc7a52b 100644 --- a/Android.mk +++ b/Android.mk @@ -430,7 +430,7 @@ LOCAL_INTERMEDIATE_SOURCES := \ $(framework_res_source_path)/com/android/internal/R.java LOCAL_NO_STANDARD_LIBRARIES := true -LOCAL_JAVA_LIBRARIES := core-libart conscrypt okhttp core-junit bouncycastle ext +LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt okhttp core-junit bouncycastle ext LOCAL_MODULE := framework @@ -719,6 +719,7 @@ framework_docs_LOCAL_INTERMEDIATE_SOURCES := \ $(framework_res_source_path)/com/android/internal/R.java framework_docs_LOCAL_API_CHECK_JAVA_LIBRARIES := \ + core-oj \ core-libart \ conscrypt \ bouncycastle \ @@ -742,6 +743,7 @@ framework_docs_LOCAL_DROIDDOC_HTML_DIR := docs/html # not be referenced in the documentation. framework_docs_LOCAL_DROIDDOC_OPTIONS := \ -knowntags ./frameworks/base/docs/knowntags.txt \ + -knowntags ./libcore/known_oj_tags.txt \ -hidePackage com.android.org.conscrypt \ -since $(SRC_API_DIR)/1.xml 1 \ -since $(SRC_API_DIR)/2.xml 2 \ @@ -1104,7 +1106,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(ext_src_files) LOCAL_NO_STANDARD_LIBRARIES := true -LOCAL_JAVA_LIBRARIES := core-libart +LOCAL_JAVA_LIBRARIES := core-oj core-libart LOCAL_STATIC_JAVA_LIBRARIES := libphonenumber-platform LOCAL_MODULE_TAGS := optional LOCAL_MODULE := ext diff --git a/api/current.txt b/api/current.txt index 94b2bbdf7b16..c58219d93355 100644 --- a/api/current.txt +++ b/api/current.txt @@ -2734,6 +2734,7 @@ package android.accounts { method public final android.os.IBinder getIBinder(); method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String[]) throws android.accounts.NetworkErrorException; method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle) throws android.accounts.NetworkErrorException; + method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; field public static final java.lang.String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry"; } @@ -2799,6 +2800,7 @@ package android.accounts { method public void setPassword(android.accounts.Account, java.lang.String); method public void setUserData(android.accounts.Account, java.lang.String, java.lang.String); method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); + method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator"; field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator"; @@ -4867,6 +4869,7 @@ package android.app { field public static final int PRIORITY_MAX = 2; // 0x2 field public static final int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff + field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic"; field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff @@ -25797,6 +25800,7 @@ package android.provider { field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard"; field public static final android.net.Uri CONTENT_VCARD_URI; + field public static final android.net.Uri CORP_CONTENT_FILTER_URI; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; @@ -25917,12 +25921,15 @@ package android.provider { } public static final class ContactsContract.Directory implements android.provider.BaseColumns { + method public static boolean isEnterpriseDirectoryId(long); + method public static boolean isRemoteDirectory(long); method public static void notifyDirectoryChange(android.content.ContentResolver); field public static final java.lang.String ACCOUNT_NAME = "accountName"; field public static final java.lang.String ACCOUNT_TYPE = "accountType"; field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory"; field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories"; field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri CORP_CONTENT_URI; field public static final long DEFAULT = 0L; // 0x0L field public static final java.lang.String DIRECTORY_AUTHORITY = "authority"; field public static final java.lang.String DISPLAY_NAME = "displayName"; @@ -36280,6 +36287,7 @@ package android.view { method public boolean canResolveTextDirection(); method public boolean canScrollHorizontally(int); method public boolean canScrollVertically(int); + method public final void cancelDragAndDrop(); method public void cancelLongPress(); method public final void cancelPendingInputEvents(); method public boolean checkInputConnectionProxy(android.view.View); @@ -36760,7 +36768,8 @@ package android.view { method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback); method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int); method public void startAnimation(android.view.animation.Animation); - method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); + method public final deprecated boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); + method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); method public boolean startNestedScroll(int); method public void stopNestedScroll(); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); @@ -42747,13 +42756,18 @@ package dalvik.system { package java.awt.font { public final class NumericShaper implements java.io.Serializable { - method public static java.awt.font.NumericShaper getContextualShaper(int, int); method public static java.awt.font.NumericShaper getContextualShaper(int); + method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>); + method public static java.awt.font.NumericShaper getContextualShaper(int, int); + method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range); + method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet(); method public int getRanges(); method public static java.awt.font.NumericShaper getShaper(int); + method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range); method public boolean isContextual(); - method public void shape(char[], int, int, int); method public void shape(char[], int, int); + method public void shape(char[], int, int, int); + method public void shape(char[], int, int, java.awt.font.NumericShaper.Range); field public static final int ALL_RANGES = 524287; // 0x7ffff field public static final int ARABIC = 2; // 0x2 field public static final int BENGALI = 16; // 0x10 @@ -42776,6 +42790,46 @@ package java.awt.font { field public static final int TIBETAN = 16384; // 0x4000 } + public static class NumericShaper.Range extends java.lang.Enum { + method public static java.awt.font.NumericShaper.Range valueOf(java.lang.String); + method public static final java.awt.font.NumericShaper.Range[] values(); + enum_constant public static final java.awt.font.NumericShaper.Range ARABIC; + enum_constant public static final java.awt.font.NumericShaper.Range BALINESE; + enum_constant public static final java.awt.font.NumericShaper.Range BENGALI; + enum_constant public static final java.awt.font.NumericShaper.Range CHAM; + enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI; + enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC; + enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC; + enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN; + enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI; + enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI; + enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE; + enum_constant public static final java.awt.font.NumericShaper.Range KANNADA; + enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI; + enum_constant public static final java.awt.font.NumericShaper.Range KHMER; + enum_constant public static final java.awt.font.NumericShaper.Range LAO; + enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA; + enum_constant public static final java.awt.font.NumericShaper.Range LIMBU; + enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM; + enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK; + enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN; + enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR; + enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN; + enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE; + enum_constant public static final java.awt.font.NumericShaper.Range NKO; + enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI; + enum_constant public static final java.awt.font.NumericShaper.Range ORIYA; + enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA; + enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE; + enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA; + enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM; + enum_constant public static final java.awt.font.NumericShaper.Range TAMIL; + enum_constant public static final java.awt.font.NumericShaper.Range TELUGU; + enum_constant public static final java.awt.font.NumericShaper.Range THAI; + enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN; + enum_constant public static final java.awt.font.NumericShaper.Range VAI; + } + public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute { ctor protected TextAttribute(java.lang.String); field public static final java.awt.font.TextAttribute BACKGROUND; @@ -42869,20 +42923,20 @@ package java.beans { public class PropertyChangeSupport implements java.io.Serializable { ctor public PropertyChangeSupport(java.lang.Object); - method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void fireIndexedPropertyChange(java.lang.String, int, java.lang.Object, java.lang.Object); - method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean); method public void fireIndexedPropertyChange(java.lang.String, int, int, int); + method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean); method public void firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object); - method public void firePropertyChange(java.lang.String, boolean, boolean); method public void firePropertyChange(java.lang.String, int, int); + method public void firePropertyChange(java.lang.String, boolean, boolean); method public void firePropertyChange(java.beans.PropertyChangeEvent); - method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String); method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(); + method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String); method public boolean hasListeners(java.lang.String); - method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void removePropertyChangeListener(java.beans.PropertyChangeListener); + method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); } } @@ -42907,8 +42961,8 @@ package java.io { } public class BufferedReader extends java.io.Reader { - ctor public BufferedReader(java.io.Reader); ctor public BufferedReader(java.io.Reader, int); + ctor public BufferedReader(java.io.Reader); method public void close() throws java.io.IOException; method public int read(char[], int, int) throws java.io.IOException; method public java.lang.String readLine() throws java.io.IOException; @@ -42937,10 +42991,10 @@ package java.io { ctor public ByteArrayOutputStream(); ctor public ByteArrayOutputStream(int); method public synchronized void reset(); - method public int size(); + method public synchronized int size(); method public synchronized byte[] toByteArray(); - method public deprecated java.lang.String toString(int); - method public java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException; + method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException; + method public deprecated synchronized java.lang.String toString(int); method public synchronized void write(int); method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException; field protected byte[] buf; @@ -42982,13 +43036,15 @@ package java.io { } public final class Console implements java.io.Flushable { + method public static java.io.Console console(); method public void flush(); method public java.io.Console format(java.lang.String, java.lang.Object...); + method public static synchronized java.io.Console getConsole(); method public java.io.Console printf(java.lang.String, java.lang.Object...); - method public java.lang.String readLine(); method public java.lang.String readLine(java.lang.String, java.lang.Object...); - method public char[] readPassword(); + method public java.lang.String readLine(); method public char[] readPassword(java.lang.String, java.lang.Object...); + method public char[] readPassword(); method public java.io.Reader reader(); method public java.io.PrintWriter writer(); } @@ -43034,9 +43090,9 @@ package java.io { } public abstract interface DataOutput { + method public abstract void write(int) throws java.io.IOException; method public abstract void write(byte[]) throws java.io.IOException; method public abstract void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; method public abstract void writeBoolean(boolean) throws java.io.IOException; method public abstract void writeByte(int) throws java.io.IOException; method public abstract void writeBytes(java.lang.String) throws java.io.IOException; @@ -43078,17 +43134,17 @@ package java.io { } public class File implements java.lang.Comparable java.io.Serializable { - ctor public File(java.io.File, java.lang.String); ctor public File(java.lang.String); ctor public File(java.lang.String, java.lang.String); + ctor public File(java.io.File, java.lang.String); ctor public File(java.net.URI); method public boolean canExecute(); method public boolean canRead(); method public boolean canWrite(); method public int compareTo(java.io.File); method public boolean createNewFile() throws java.io.IOException; - method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException; method public static java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) throws java.io.IOException; + method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException; method public boolean delete(); method public void deleteOnExit(); method public boolean exists(); @@ -43126,6 +43182,7 @@ package java.io { method public boolean setReadable(boolean); method public boolean setWritable(boolean, boolean); method public boolean setWritable(boolean); + method public java.nio.file.Path toPath(); method public java.net.URI toURI(); method public deprecated java.net.URL toURL() throws java.net.MalformedURLException; field public static final java.lang.String pathSeparator; @@ -43148,9 +43205,9 @@ package java.io { } public class FileInputStream extends java.io.InputStream { + ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileInputStream(java.io.FileDescriptor); - ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; method public java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public int read() throws java.io.IOException; @@ -43162,11 +43219,11 @@ package java.io { } public class FileOutputStream extends java.io.OutputStream { + ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException; + ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.FileDescriptor); - ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException; - ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException; method public java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public void write(int) throws java.io.IOException; @@ -43174,22 +43231,24 @@ package java.io { public final class FilePermission extends java.security.Permission implements java.io.Serializable { ctor public FilePermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } public class FileReader extends java.io.InputStreamReader { + ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException; ctor public FileReader(java.io.File) throws java.io.FileNotFoundException; ctor public FileReader(java.io.FileDescriptor); - ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException; } public class FileWriter extends java.io.OutputStreamWriter { + ctor public FileWriter(java.lang.String) throws java.io.IOException; + ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException; ctor public FileWriter(java.io.File) throws java.io.IOException; ctor public FileWriter(java.io.File, boolean) throws java.io.IOException; ctor public FileWriter(java.io.FileDescriptor); - ctor public FileWriter(java.lang.String) throws java.io.IOException; - ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException; } public abstract interface FilenameFilter { @@ -43242,7 +43301,7 @@ package java.io { ctor public InputStream(); method public int available() throws java.io.IOException; method public void close() throws java.io.IOException; - method public void mark(int); + method public synchronized void mark(int); method public boolean markSupported(); method public abstract int read() throws java.io.IOException; method public int read(byte[]) throws java.io.IOException; @@ -43254,8 +43313,8 @@ package java.io { public class InputStreamReader extends java.io.Reader { ctor public InputStreamReader(java.io.InputStream); ctor public InputStreamReader(java.io.InputStream, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder); ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset); + ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder); method public void close() throws java.io.IOException; method public java.lang.String getEncoding(); method public int read(char[], int, int) throws java.io.IOException; @@ -43264,6 +43323,7 @@ package java.io { public class InterruptedIOException extends java.io.IOException { ctor public InterruptedIOException(); ctor public InterruptedIOException(java.lang.String); + ctor public InterruptedIOException(java.lang.Throwable); field public int bytesTransferred; } @@ -43291,13 +43351,13 @@ package java.io { } public class NotActiveException extends java.io.ObjectStreamException { - ctor public NotActiveException(); ctor public NotActiveException(java.lang.String); + ctor public NotActiveException(); } public class NotSerializableException extends java.io.ObjectStreamException { - ctor public NotSerializableException(); ctor public NotSerializableException(java.lang.String); + ctor public NotSerializableException(); } public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput { @@ -43311,32 +43371,32 @@ package java.io { } public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants { - ctor protected ObjectInputStream() throws java.io.IOException; - ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException; - method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; - method protected boolean enableResolveObject(boolean); + ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException; + ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException; + method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException; method public int read() throws java.io.IOException; method public boolean readBoolean() throws java.io.IOException; method public byte readByte() throws java.io.IOException; method public char readChar() throws java.io.IOException; method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException; method public double readDouble() throws java.io.IOException; - method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; + method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException; method public float readFloat() throws java.io.IOException; method public void readFully(byte[]) throws java.io.IOException; method public void readFully(byte[], int, int) throws java.io.IOException; method public int readInt() throws java.io.IOException; method public deprecated java.lang.String readLine() throws java.io.IOException; method public long readLong() throws java.io.IOException; - method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; - method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; + method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException; method public short readShort() throws java.io.IOException; method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException; method public java.lang.String readUTF() throws java.io.IOException; method public java.lang.Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException; method public int readUnsignedByte() throws java.io.IOException; method public int readUnsignedShort() throws java.io.IOException; - method public synchronized void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException; + method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException; method protected java.lang.Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException; method protected java.lang.Object resolveObject(java.lang.Object) throws java.io.IOException; method protected java.lang.Class<?> resolveProxyClass(java.lang.String[]) throws java.lang.ClassNotFoundException, java.io.IOException; @@ -43345,16 +43405,16 @@ package java.io { public static abstract class ObjectInputStream.GetField { ctor public ObjectInputStream.GetField(); - method public abstract boolean defaulted(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract char get(java.lang.String, char) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract byte get(java.lang.String, byte) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract short get(java.lang.String, short) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract int get(java.lang.String, int) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract long get(java.lang.String, long) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract float get(java.lang.String, float) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract double get(java.lang.String, double) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract boolean defaulted(java.lang.String) throws java.io.IOException; + method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException; + method public abstract byte get(java.lang.String, byte) throws java.io.IOException; + method public abstract char get(java.lang.String, char) throws java.io.IOException; + method public abstract short get(java.lang.String, short) throws java.io.IOException; + method public abstract int get(java.lang.String, int) throws java.io.IOException; + method public abstract long get(java.lang.String, long) throws java.io.IOException; + method public abstract float get(java.lang.String, float) throws java.io.IOException; + method public abstract double get(java.lang.String, double) throws java.io.IOException; + method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException; method public abstract java.io.ObjectStreamClass getObjectStreamClass(); } @@ -43365,20 +43425,20 @@ package java.io { public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput { method public abstract void close() throws java.io.IOException; method public abstract void flush() throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; method public abstract void write(byte[]) throws java.io.IOException; method public abstract void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; method public abstract void writeObject(java.lang.Object) throws java.io.IOException; } public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants { - ctor protected ObjectOutputStream() throws java.io.IOException; ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException; + ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException; method protected void annotateClass(java.lang.Class<?>) throws java.io.IOException; method protected void annotateProxyClass(java.lang.Class<?>) throws java.io.IOException; method public void defaultWriteObject() throws java.io.IOException; method protected void drain() throws java.io.IOException; - method protected boolean enableReplaceObject(boolean); + method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException; method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException; method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException; method public void reset() throws java.io.IOException; @@ -43406,8 +43466,8 @@ package java.io { public static abstract class ObjectOutputStream.PutField { ctor public ObjectOutputStream.PutField(); method public abstract void put(java.lang.String, boolean); - method public abstract void put(java.lang.String, char); method public abstract void put(java.lang.String, byte); + method public abstract void put(java.lang.String, char); method public abstract void put(java.lang.String, short); method public abstract void put(java.lang.String, int); method public abstract void put(java.lang.String, long); @@ -43461,8 +43521,8 @@ package java.io { } public abstract class ObjectStreamException extends java.io.IOException { - ctor protected ObjectStreamException(); ctor protected ObjectStreamException(java.lang.String); + ctor protected ObjectStreamException(); } public class ObjectStreamField implements java.lang.Comparable { @@ -43488,14 +43548,14 @@ package java.io { ctor public OutputStream(); method public void close() throws java.io.IOException; method public void flush() throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; method public void write(byte[]) throws java.io.IOException; method public void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; } public class OutputStreamWriter extends java.io.Writer { - ctor public OutputStreamWriter(java.io.OutputStream); ctor public OutputStreamWriter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public OutputStreamWriter(java.io.OutputStream); ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset); ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder); method public void close() throws java.io.IOException; @@ -43505,10 +43565,10 @@ package java.io { } public class PipedInputStream extends java.io.InputStream { - ctor public PipedInputStream(); ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException; - ctor public PipedInputStream(int); ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException; + ctor public PipedInputStream(); + ctor public PipedInputStream(int); method public void connect(java.io.PipedOutputStream) throws java.io.IOException; method public synchronized int read() throws java.io.IOException; method protected synchronized void receive(int) throws java.io.IOException; @@ -43519,28 +43579,28 @@ package java.io { } public class PipedOutputStream extends java.io.OutputStream { - ctor public PipedOutputStream(); ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException; - method public void connect(java.io.PipedInputStream) throws java.io.IOException; + ctor public PipedOutputStream(); + method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException; method public void write(int) throws java.io.IOException; } public class PipedReader extends java.io.Reader { - ctor public PipedReader(); ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException; - ctor public PipedReader(int); ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException; - method public synchronized void close() throws java.io.IOException; + ctor public PipedReader(); + ctor public PipedReader(int); + method public void close() throws java.io.IOException; method public void connect(java.io.PipedWriter) throws java.io.IOException; method public synchronized int read(char[], int, int) throws java.io.IOException; } public class PipedWriter extends java.io.Writer { - ctor public PipedWriter(); ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException; + ctor public PipedWriter(); method public void close() throws java.io.IOException; - method public void connect(java.io.PipedReader) throws java.io.IOException; - method public void flush() throws java.io.IOException; + method public synchronized void connect(java.io.PipedReader) throws java.io.IOException; + method public synchronized void flush() throws java.io.IOException; method public void write(char[], int, int) throws java.io.IOException; } @@ -43548,111 +43608,111 @@ package java.io { ctor public PrintStream(java.io.OutputStream); ctor public PrintStream(java.io.OutputStream, boolean); ctor public PrintStream(java.io.OutputStream, boolean, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException; - ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; ctor public PrintStream(java.lang.String) throws java.io.FileNotFoundException; ctor public PrintStream(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; - method public java.io.PrintStream append(char); + ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; method public java.io.PrintStream append(java.lang.CharSequence); method public java.io.PrintStream append(java.lang.CharSequence, int, int); + method public java.io.PrintStream append(char); method public boolean checkError(); method protected void clearError(); method public java.io.PrintStream format(java.lang.String, java.lang.Object...); method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...); - method public void print(char[]); + method public void print(boolean); method public void print(char); - method public void print(double); - method public void print(float); method public void print(int); method public void print(long); + method public void print(float); + method public void print(double); + method public void print(char[]); + method public void print(java.lang.String); method public void print(java.lang.Object); - method public synchronized void print(java.lang.String); - method public void print(boolean); method public java.io.PrintStream printf(java.lang.String, java.lang.Object...); method public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...); method public void println(); - method public void println(char[]); + method public void println(boolean); method public void println(char); - method public void println(double); - method public void println(float); method public void println(int); method public void println(long); + method public void println(float); + method public void println(double); + method public void println(char[]); + method public void println(java.lang.String); method public void println(java.lang.Object); - method public synchronized void println(java.lang.String); - method public void println(boolean); method protected void setError(); } public class PrintWriter extends java.io.Writer { - ctor public PrintWriter(java.io.OutputStream); - ctor public PrintWriter(java.io.OutputStream, boolean); ctor public PrintWriter(java.io.Writer); ctor public PrintWriter(java.io.Writer, boolean); - ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException; - ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintWriter(java.io.OutputStream); + ctor public PrintWriter(java.io.OutputStream, boolean); ctor public PrintWriter(java.lang.String) throws java.io.FileNotFoundException; ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; method public boolean checkError(); method protected void clearError(); method public void close(); method public void flush(); method public java.io.PrintWriter format(java.lang.String, java.lang.Object...); method public java.io.PrintWriter format(java.util.Locale, java.lang.String, java.lang.Object...); - method public void print(char[]); + method public void print(boolean); method public void print(char); - method public void print(double); - method public void print(float); method public void print(int); method public void print(long); - method public void print(java.lang.Object); + method public void print(float); + method public void print(double); + method public void print(char[]); method public void print(java.lang.String); - method public void print(boolean); + method public void print(java.lang.Object); method public java.io.PrintWriter printf(java.lang.String, java.lang.Object...); method public java.io.PrintWriter printf(java.util.Locale, java.lang.String, java.lang.Object...); method public void println(); - method public void println(char[]); + method public void println(boolean); method public void println(char); - method public void println(double); - method public void println(float); method public void println(int); method public void println(long); - method public void println(java.lang.Object); + method public void println(float); + method public void println(double); + method public void println(char[]); method public void println(java.lang.String); - method public void println(boolean); + method public void println(java.lang.Object); method protected void setError(); method public void write(char[], int, int); field protected java.io.Writer out; } public class PushbackInputStream extends java.io.FilterInputStream { - ctor public PushbackInputStream(java.io.InputStream); ctor public PushbackInputStream(java.io.InputStream, int); - method public void unread(byte[]) throws java.io.IOException; - method public void unread(byte[], int, int) throws java.io.IOException; + ctor public PushbackInputStream(java.io.InputStream); method public void unread(int) throws java.io.IOException; + method public void unread(byte[], int, int) throws java.io.IOException; + method public void unread(byte[]) throws java.io.IOException; field protected byte[] buf; field protected int pos; } public class PushbackReader extends java.io.FilterReader { - ctor public PushbackReader(java.io.Reader); ctor public PushbackReader(java.io.Reader, int); - method public void unread(char[]) throws java.io.IOException; - method public void unread(char[], int, int) throws java.io.IOException; + ctor public PushbackReader(java.io.Reader); method public void unread(int) throws java.io.IOException; + method public void unread(char[], int, int) throws java.io.IOException; + method public void unread(char[]) throws java.io.IOException; } public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput { - ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException; ctor public RandomAccessFile(java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException; method public void close() throws java.io.IOException; - method public final synchronized java.nio.channels.FileChannel getChannel(); + method public final java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public long getFilePointer() throws java.io.IOException; method public long length() throws java.io.IOException; method public int read() throws java.io.IOException; - method public int read(byte[]) throws java.io.IOException; method public int read(byte[], int, int) throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; method public final boolean readBoolean() throws java.io.IOException; method public final byte readByte() throws java.io.IOException; method public final char readChar() throws java.io.IOException; @@ -43670,9 +43730,9 @@ package java.io { method public void seek(long) throws java.io.IOException; method public void setLength(long) throws java.io.IOException; method public int skipBytes(int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; method public void write(byte[]) throws java.io.IOException; method public void write(byte[], int, int) throws java.io.IOException; - method public void write(int) throws java.io.IOException; method public final void writeBoolean(boolean) throws java.io.IOException; method public final void writeByte(int) throws java.io.IOException; method public final void writeBytes(java.lang.String) throws java.io.IOException; @@ -43692,10 +43752,10 @@ package java.io { method public abstract void close() throws java.io.IOException; method public void mark(int) throws java.io.IOException; method public boolean markSupported(); + method public int read(java.nio.CharBuffer) throws java.io.IOException; method public int read() throws java.io.IOException; method public int read(char[]) throws java.io.IOException; method public abstract int read(char[], int, int) throws java.io.IOException; - method public int read(java.nio.CharBuffer) throws java.io.IOException; method public boolean ready() throws java.io.IOException; method public void reset() throws java.io.IOException; method public long skip(long) throws java.io.IOException; @@ -43703,8 +43763,8 @@ package java.io { } public class SequenceInputStream extends java.io.InputStream { - ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream); ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>); + ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream); method public int read() throws java.io.IOException; } @@ -43717,8 +43777,8 @@ package java.io { } public class StreamCorruptedException extends java.io.ObjectStreamException { - ctor public StreamCorruptedException(); ctor public StreamCorruptedException(java.lang.String); + ctor public StreamCorruptedException(); } public class StreamTokenizer { @@ -43793,14 +43853,14 @@ package java.io { public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable { ctor protected Writer(); ctor protected Writer(java.lang.Object); - method public java.io.Writer append(char) throws java.io.IOException; method public java.io.Writer append(java.lang.CharSequence) throws java.io.IOException; method public java.io.Writer append(java.lang.CharSequence, int, int) throws java.io.IOException; + method public java.io.Writer append(char) throws java.io.IOException; method public abstract void close() throws java.io.IOException; method public abstract void flush() throws java.io.IOException; + method public void write(int) throws java.io.IOException; method public void write(char[]) throws java.io.IOException; method public abstract void write(char[], int, int) throws java.io.IOException; - method public void write(int) throws java.io.IOException; method public void write(java.lang.String) throws java.io.IOException; method public void write(java.lang.String, int, int) throws java.io.IOException; field protected java.lang.Object lock; @@ -43815,32 +43875,63 @@ package java.lang { ctor public AbstractMethodError(java.lang.String); } - abstract class AbstractStringBuilder { + abstract class AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence { + method public java.lang.AbstractStringBuilder append(java.lang.Object); + method public java.lang.AbstractStringBuilder append(java.lang.String); + method public java.lang.AbstractStringBuilder append(java.lang.StringBuffer); + method public java.lang.AbstractStringBuilder append(java.lang.CharSequence); + method public java.lang.AbstractStringBuilder append(java.lang.CharSequence, int, int); + method public java.lang.AbstractStringBuilder append(char[]); + method public java.lang.AbstractStringBuilder append(char[], int, int); + method public java.lang.AbstractStringBuilder append(boolean); + method public java.lang.AbstractStringBuilder append(char); + method public java.lang.AbstractStringBuilder append(int); + method public java.lang.AbstractStringBuilder append(long); + method public java.lang.AbstractStringBuilder append(float); + method public java.lang.AbstractStringBuilder append(double); + method public java.lang.AbstractStringBuilder appendCodePoint(int); method public int capacity(); method public char charAt(int); method public int codePointAt(int); method public int codePointBefore(int); method public int codePointCount(int, int); + method public java.lang.AbstractStringBuilder delete(int, int); + method public java.lang.AbstractStringBuilder deleteCharAt(int); method public void ensureCapacity(int); method public void getChars(int, int, char[], int); method public int indexOf(java.lang.String); method public int indexOf(java.lang.String, int); + method public java.lang.AbstractStringBuilder insert(int, char[], int, int); + method public java.lang.AbstractStringBuilder insert(int, java.lang.Object); + method public java.lang.AbstractStringBuilder insert(int, java.lang.String); + method public java.lang.AbstractStringBuilder insert(int, char[]); + method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence); + method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence, int, int); + method public java.lang.AbstractStringBuilder insert(int, boolean); + method public java.lang.AbstractStringBuilder insert(int, char); + method public java.lang.AbstractStringBuilder insert(int, int); + method public java.lang.AbstractStringBuilder insert(int, long); + method public java.lang.AbstractStringBuilder insert(int, float); + method public java.lang.AbstractStringBuilder insert(int, double); method public int lastIndexOf(java.lang.String); method public int lastIndexOf(java.lang.String, int); method public int length(); method public int offsetByCodePoints(int, int); + method public java.lang.AbstractStringBuilder replace(int, int, java.lang.String); + method public java.lang.AbstractStringBuilder reverse(); method public void setCharAt(int, char); method public void setLength(int); method public java.lang.CharSequence subSequence(int, int); method public java.lang.String substring(int); method public java.lang.String substring(int, int); + method public abstract java.lang.String toString(); method public void trimToSize(); } public abstract interface Appendable { - method public abstract java.lang.Appendable append(char) throws java.io.IOException; method public abstract java.lang.Appendable append(java.lang.CharSequence) throws java.io.IOException; method public abstract java.lang.Appendable append(java.lang.CharSequence, int, int) throws java.io.IOException; + method public abstract java.lang.Appendable append(char) throws java.io.IOException; } public class ArithmeticException extends java.lang.RuntimeException { @@ -43861,7 +43952,6 @@ package java.lang { public class AssertionError extends java.lang.Error { ctor public AssertionError(); - ctor public AssertionError(java.lang.String, java.lang.Throwable); ctor public AssertionError(java.lang.Object); ctor public AssertionError(boolean); ctor public AssertionError(char); @@ -43869,6 +43959,7 @@ package java.lang { ctor public AssertionError(long); ctor public AssertionError(float); ctor public AssertionError(double); + ctor public AssertionError(java.lang.String, java.lang.Throwable); } public abstract interface AutoCloseable { @@ -43876,16 +43967,16 @@ package java.lang { } public final class Boolean implements java.lang.Comparable java.io.Serializable { - ctor public Boolean(java.lang.String); ctor public Boolean(boolean); + ctor public Boolean(java.lang.String); method public boolean booleanValue(); method public static int compare(boolean, boolean); method public int compareTo(java.lang.Boolean); method public static boolean getBoolean(java.lang.String); method public static boolean parseBoolean(java.lang.String); method public static java.lang.String toString(boolean); - method public static java.lang.Boolean valueOf(java.lang.String); method public static java.lang.Boolean valueOf(boolean); + method public static java.lang.Boolean valueOf(java.lang.String); field public static final java.lang.Boolean FALSE; field public static final java.lang.Boolean TRUE; field public static final java.lang.Class<java.lang.Boolean> TYPE; @@ -43901,12 +43992,13 @@ package java.lang { method public float floatValue(); method public int intValue(); method public long longValue(); - method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException; method public static byte parseByte(java.lang.String, int) throws java.lang.NumberFormatException; + method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toHexString(byte, boolean); method public static java.lang.String toString(byte); - method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException; - method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException; method public static java.lang.Byte valueOf(byte); + method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException; field public static final byte MAX_VALUE = 127; // 0x7f field public static final byte MIN_VALUE = -128; // 0xffffff80 field public static final int SIZE = 8; // 0x8 @@ -44079,7 +44171,7 @@ package java.lang { } public static final class Character.UnicodeBlock extends java.lang.Character.Subset { - method public static java.lang.Character.UnicodeBlock forName(java.lang.String); + method public static final java.lang.Character.UnicodeBlock forName(java.lang.String); method public static java.lang.Character.UnicodeBlock of(char); method public static java.lang.Character.UnicodeBlock of(int); field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS; @@ -44294,6 +44386,109 @@ package java.lang { field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES; } + public static final class Character.UnicodeScript extends java.lang.Enum { + method public static final java.lang.Character.UnicodeScript forName(java.lang.String); + method public static java.lang.Character.UnicodeScript of(int); + method public static java.lang.Character.UnicodeScript valueOf(java.lang.String); + method public static final java.lang.Character.UnicodeScript[] values(); + enum_constant public static final java.lang.Character.UnicodeScript ARABIC; + enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN; + enum_constant public static final java.lang.Character.UnicodeScript AVESTAN; + enum_constant public static final java.lang.Character.UnicodeScript BALINESE; + enum_constant public static final java.lang.Character.UnicodeScript BAMUM; + enum_constant public static final java.lang.Character.UnicodeScript BATAK; + enum_constant public static final java.lang.Character.UnicodeScript BENGALI; + enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO; + enum_constant public static final java.lang.Character.UnicodeScript BRAHMI; + enum_constant public static final java.lang.Character.UnicodeScript BRAILLE; + enum_constant public static final java.lang.Character.UnicodeScript BUGINESE; + enum_constant public static final java.lang.Character.UnicodeScript BUHID; + enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL; + enum_constant public static final java.lang.Character.UnicodeScript CARIAN; + enum_constant public static final java.lang.Character.UnicodeScript CHAM; + enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE; + enum_constant public static final java.lang.Character.UnicodeScript COMMON; + enum_constant public static final java.lang.Character.UnicodeScript COPTIC; + enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM; + enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT; + enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC; + enum_constant public static final java.lang.Character.UnicodeScript DESERET; + enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI; + enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS; + enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC; + enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN; + enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC; + enum_constant public static final java.lang.Character.UnicodeScript GOTHIC; + enum_constant public static final java.lang.Character.UnicodeScript GREEK; + enum_constant public static final java.lang.Character.UnicodeScript GUJARATI; + enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI; + enum_constant public static final java.lang.Character.UnicodeScript HAN; + enum_constant public static final java.lang.Character.UnicodeScript HANGUL; + enum_constant public static final java.lang.Character.UnicodeScript HANUNOO; + enum_constant public static final java.lang.Character.UnicodeScript HEBREW; + enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA; + enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC; + enum_constant public static final java.lang.Character.UnicodeScript INHERITED; + enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI; + enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN; + enum_constant public static final java.lang.Character.UnicodeScript JAVANESE; + enum_constant public static final java.lang.Character.UnicodeScript KAITHI; + enum_constant public static final java.lang.Character.UnicodeScript KANNADA; + enum_constant public static final java.lang.Character.UnicodeScript KATAKANA; + enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI; + enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI; + enum_constant public static final java.lang.Character.UnicodeScript KHMER; + enum_constant public static final java.lang.Character.UnicodeScript LAO; + enum_constant public static final java.lang.Character.UnicodeScript LATIN; + enum_constant public static final java.lang.Character.UnicodeScript LEPCHA; + enum_constant public static final java.lang.Character.UnicodeScript LIMBU; + enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B; + enum_constant public static final java.lang.Character.UnicodeScript LISU; + enum_constant public static final java.lang.Character.UnicodeScript LYCIAN; + enum_constant public static final java.lang.Character.UnicodeScript LYDIAN; + enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM; + enum_constant public static final java.lang.Character.UnicodeScript MANDAIC; + enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK; + enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN; + enum_constant public static final java.lang.Character.UnicodeScript MYANMAR; + enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE; + enum_constant public static final java.lang.Character.UnicodeScript NKO; + enum_constant public static final java.lang.Character.UnicodeScript OGHAM; + enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC; + enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN; + enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN; + enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC; + enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI; + enum_constant public static final java.lang.Character.UnicodeScript ORIYA; + enum_constant public static final java.lang.Character.UnicodeScript OSMANYA; + enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA; + enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN; + enum_constant public static final java.lang.Character.UnicodeScript REJANG; + enum_constant public static final java.lang.Character.UnicodeScript RUNIC; + enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN; + enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA; + enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN; + enum_constant public static final java.lang.Character.UnicodeScript SINHALA; + enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE; + enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI; + enum_constant public static final java.lang.Character.UnicodeScript SYRIAC; + enum_constant public static final java.lang.Character.UnicodeScript TAGALOG; + enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA; + enum_constant public static final java.lang.Character.UnicodeScript TAI_LE; + enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM; + enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET; + enum_constant public static final java.lang.Character.UnicodeScript TAMIL; + enum_constant public static final java.lang.Character.UnicodeScript TELUGU; + enum_constant public static final java.lang.Character.UnicodeScript THAANA; + enum_constant public static final java.lang.Character.UnicodeScript THAI; + enum_constant public static final java.lang.Character.UnicodeScript TIBETAN; + enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH; + enum_constant public static final java.lang.Character.UnicodeScript UGARITIC; + enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN; + enum_constant public static final java.lang.Character.UnicodeScript VAI; + 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>); method public T cast(java.lang.Object); @@ -44306,28 +44501,28 @@ package java.lang { 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; - method public java.lang.reflect.Constructor<?>[] getConstructors(); + 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 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; - method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors(); + method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException; method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException; method public java.lang.reflect.Field[] getDeclaredFields(); - method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException; - method public java.lang.reflect.Method[] getDeclaredMethods(); + method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException; method public java.lang.Class<?> getDeclaringClass(); method public java.lang.Class<?> getEnclosingClass(); method public java.lang.reflect.Constructor<?> getEnclosingConstructor(); method public java.lang.reflect.Method getEnclosingMethod(); method public T[] getEnumConstants(); method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException; - method public java.lang.reflect.Field[] getFields(); + method public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException; method public java.lang.reflect.Type[] getGenericInterfaces(); method public java.lang.reflect.Type getGenericSuperclass(); method public java.lang.Class<?>[] getInterfaces(); - method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException; - method public java.lang.reflect.Method[] getMethods(); + method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException; method public int getModifiers(); method public java.lang.String getName(); method public java.lang.Package getPackage(); @@ -44369,8 +44564,8 @@ package java.lang { } public abstract class ClassLoader { - ctor protected ClassLoader(); ctor protected ClassLoader(java.lang.ClassLoader); + ctor protected ClassLoader(); method public void clearAssertionStatus(); method protected final deprecated java.lang.Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError; method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int) throws java.lang.ClassFormatError; @@ -44395,6 +44590,7 @@ package java.lang { method public static java.util.Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException; method public java.lang.Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException; method protected java.lang.Class<?> loadClass(java.lang.String, boolean) throws java.lang.ClassNotFoundException; + method protected static boolean registerAsParallelCapable(); method protected final void resolveClass(java.lang.Class<?>); method public void setClassAssertionStatus(java.lang.String, boolean); method public void setDefaultAssertionStatus(boolean); @@ -44442,10 +44638,10 @@ package java.lang { method public double doubleValue(); method public float floatValue(); method public int intValue(); - method public boolean isInfinite(); method public static boolean isInfinite(double); - method public boolean isNaN(); + method public boolean isInfinite(); method public static boolean isNaN(double); + method public boolean isNaN(); method public static double longBitsToDouble(long); method public long longValue(); method public static double parseDouble(java.lang.String) throws java.lang.NumberFormatException; @@ -44489,6 +44685,7 @@ package java.lang { ctor public Error(java.lang.String); ctor public Error(java.lang.String, java.lang.Throwable); ctor public Error(java.lang.Throwable); + ctor protected Error(java.lang.String, java.lang.Throwable, boolean, boolean); } public class Exception extends java.lang.Throwable { @@ -44496,12 +44693,13 @@ package java.lang { ctor public Exception(java.lang.String); ctor public Exception(java.lang.String, java.lang.Throwable); ctor public Exception(java.lang.Throwable); + ctor protected Exception(java.lang.String, java.lang.Throwable, boolean, boolean); } public class ExceptionInInitializerError extends java.lang.LinkageError { ctor public ExceptionInInitializerError(); - ctor public ExceptionInInitializerError(java.lang.String); ctor public ExceptionInInitializerError(java.lang.Throwable); + ctor public ExceptionInInitializerError(java.lang.String); method public java.lang.Throwable getException(); } @@ -44517,10 +44715,10 @@ package java.lang { method public float floatValue(); method public static float intBitsToFloat(int); method public int intValue(); - method public boolean isInfinite(); method public static boolean isInfinite(float); - method public boolean isNaN(); + method public boolean isInfinite(); method public static boolean isNaN(float); + method public boolean isNaN(); method public long longValue(); method public static float parseFloat(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.String toHexString(float); @@ -44616,8 +44814,8 @@ package java.lang { method public static int lowestOneBit(int); method public static int numberOfLeadingZeros(int); method public static int numberOfTrailingZeros(int); - method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException; method public static int parseInt(java.lang.String, int) throws java.lang.NumberFormatException; + method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException; method public static int reverse(int); method public static int reverseBytes(int); method public static int rotateLeft(int, int); @@ -44626,10 +44824,10 @@ package java.lang { method public static java.lang.String toBinaryString(int); method public static java.lang.String toHexString(int); method public static java.lang.String toOctalString(int); - method public static java.lang.String toString(int); method public static java.lang.String toString(int, int); - method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toString(int); method public static java.lang.Integer valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Integer valueOf(int); field public static final int MAX_VALUE = 2147483647; // 0x7fffffff field public static final int MIN_VALUE = -2147483648; // 0x80000000 @@ -44675,8 +44873,8 @@ package java.lang { method public static long lowestOneBit(long); method public static int numberOfLeadingZeros(long); method public static int numberOfTrailingZeros(long); - method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException; method public static long parseLong(java.lang.String, int) throws java.lang.NumberFormatException; + method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException; method public static long reverse(long); method public static long reverseBytes(long); method public static long rotateLeft(long, int); @@ -44685,10 +44883,10 @@ package java.lang { method public static java.lang.String toBinaryString(long); method public static java.lang.String toHexString(long); method public static java.lang.String toOctalString(long); - method public static java.lang.String toString(long); method public static java.lang.String toString(long, int); - method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toString(long); method public static java.lang.Long valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Long valueOf(long); field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L @@ -44698,10 +44896,10 @@ package java.lang { public final class Math { method public static double IEEEremainder(double, double); - method public static double abs(double); - method public static float abs(float); method public static int abs(int); method public static long abs(long); + method public static float abs(float); + method public static double abs(double); method public static double acos(double); method public static double asin(double); method public static double atan(double); @@ -44721,14 +44919,14 @@ package java.lang { method public static double log(double); method public static double log10(double); method public static double log1p(double); - method public static double max(double, double); - method public static float max(float, float); method public static int max(int, int); method public static long max(long, long); - method public static double min(double, double); - method public static float min(float, float); + method public static float max(float, float); + method public static double max(double, double); method public static int min(int, int); method public static long min(long, long); + method public static float min(float, float); + method public static double min(double, double); method public static double nextAfter(double, double); method public static float nextAfter(float, double); method public static double nextUp(double); @@ -44736,8 +44934,8 @@ package java.lang { method public static double pow(double, double); method public static double random(); method public static double rint(double); - method public static long round(double); method public static int round(float); + method public static long round(double); method public static double scalb(double, int); method public static float scalb(float, int); method public static double signum(double); @@ -44815,9 +45013,9 @@ package java.lang { method public final void notify(); method public final void notifyAll(); method public java.lang.String toString(); - method public final void wait() throws java.lang.InterruptedException; method public final void wait(long) throws java.lang.InterruptedException; method public final void wait(long, int) throws java.lang.InterruptedException; + method public final void wait() throws java.lang.InterruptedException; } public class OutOfMemoryError extends java.lang.VirtualMachineError { @@ -44858,19 +45056,49 @@ package java.lang { } public final class ProcessBuilder { - ctor public ProcessBuilder(java.lang.String...); ctor public ProcessBuilder(java.util.List<java.lang.String>); - method public java.util.List<java.lang.String> command(); - method public java.lang.ProcessBuilder command(java.lang.String...); + ctor public ProcessBuilder(java.lang.String...); method public java.lang.ProcessBuilder command(java.util.List<java.lang.String>); + method public java.lang.ProcessBuilder command(java.lang.String...); + method public java.util.List<java.lang.String> command(); method public java.io.File directory(); method public java.lang.ProcessBuilder directory(java.io.File); method public java.util.Map<java.lang.String, java.lang.String> environment(); + method public java.lang.ProcessBuilder inheritIO(); + method public java.lang.ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectError(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectError(); method public boolean redirectErrorStream(); method public java.lang.ProcessBuilder redirectErrorStream(boolean); + method public java.lang.ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectInput(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectInput(); + method public java.lang.ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectOutput(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectOutput(); method public java.lang.Process start() throws java.io.IOException; } + public static abstract class ProcessBuilder.Redirect { + method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File); + method public java.io.File file(); + method public static java.lang.ProcessBuilder.Redirect from(java.io.File); + method public static java.lang.ProcessBuilder.Redirect to(java.io.File); + method public abstract java.lang.ProcessBuilder.Redirect.Type type(); + field public static final java.lang.ProcessBuilder.Redirect INHERIT; + field public static final java.lang.ProcessBuilder.Redirect PIPE; + } + + public static final class ProcessBuilder.Redirect.Type extends java.lang.Enum { + method public static java.lang.ProcessBuilder.Redirect.Type valueOf(java.lang.String); + method public static final java.lang.ProcessBuilder.Redirect.Type[] values(); + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE; + } + public abstract interface Readable { method public abstract int read(java.nio.CharBuffer) throws java.io.IOException; } @@ -44878,8 +45106,8 @@ package java.lang { public class ReflectiveOperationException extends java.lang.Exception { ctor public ReflectiveOperationException(); ctor public ReflectiveOperationException(java.lang.String); - ctor public ReflectiveOperationException(java.lang.Throwable); ctor public ReflectiveOperationException(java.lang.String, java.lang.Throwable); + ctor public ReflectiveOperationException(java.lang.Throwable); } public abstract interface Runnable { @@ -44889,12 +45117,12 @@ package java.lang { public class Runtime { method public void addShutdownHook(java.lang.Thread); method public int availableProcessors(); - method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException; - method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException; - method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException; method public java.lang.Process exec(java.lang.String) throws java.io.IOException; method public java.lang.Process exec(java.lang.String, java.lang.String[]) throws java.io.IOException; method public java.lang.Process exec(java.lang.String, java.lang.String[], java.io.File) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException; method public void exit(int); method public long freeMemory(); method public void gc(); @@ -44918,6 +45146,7 @@ package java.lang { ctor public RuntimeException(java.lang.String); ctor public RuntimeException(java.lang.String, java.lang.Throwable); ctor public RuntimeException(java.lang.Throwable); + ctor protected RuntimeException(java.lang.String, java.lang.Throwable, boolean, boolean); } public final class RuntimePermission extends java.security.BasicPermission { @@ -44982,8 +45211,8 @@ package java.lang { } public final class Short extends java.lang.Number implements java.lang.Comparable { - ctor public Short(java.lang.String) throws java.lang.NumberFormatException; ctor public Short(short); + ctor public Short(java.lang.String) throws java.lang.NumberFormatException; method public static int compare(short, short); method public int compareTo(java.lang.Short); method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException; @@ -44991,12 +45220,12 @@ package java.lang { method public float floatValue(); method public int intValue(); method public long longValue(); - method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException; method public static short parseShort(java.lang.String, int) throws java.lang.NumberFormatException; + method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException; method public static short reverseBytes(short); method public static java.lang.String toString(short); - method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Short valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Short valueOf(short); field public static final short MAX_VALUE = 32767; // 0x7fff field public static final short MIN_VALUE = -32768; // 0xffff8000 @@ -45020,10 +45249,10 @@ package java.lang { public final class StrictMath { method public static double IEEEremainder(double, double); - method public static double abs(double); - method public static float abs(float); method public static int abs(int); method public static long abs(long); + method public static float abs(float); + method public static double abs(double); method public static double acos(double); method public static double asin(double); method public static double atan(double); @@ -45043,14 +45272,14 @@ package java.lang { method public static double log(double); method public static double log10(double); method public static double log1p(double); - method public static double max(double, double); - method public static float max(float, float); method public static int max(int, int); method public static long max(long, long); - method public static double min(double, double); - method public static float min(float, float); + method public static float max(float, float); + method public static double max(double, double); method public static int min(int, int); method public static long min(long, long); + method public static float min(float, float); + method public static double min(double, double); method public static double nextAfter(double, double); method public static float nextAfter(float, double); method public static double nextUp(double); @@ -45058,8 +45287,8 @@ package java.lang { method public static double pow(double, double); method public static double random(); method public static double rint(double); - method public static long round(double); method public static int round(float); + method public static long round(double); method public static double scalb(double, int); method public static float scalb(float, int); method public static double signum(double); @@ -45079,19 +45308,19 @@ package java.lang { public final class String implements java.lang.CharSequence java.lang.Comparable java.io.Serializable { ctor public String(); - ctor public String(byte[]); - ctor public deprecated String(byte[], int); - ctor public String(byte[], int, int); + ctor public String(java.lang.String); + ctor public String(char[]); + ctor public String(char[], int, int); + ctor public String(int[], int, int); ctor public deprecated String(byte[], int, int, int); + ctor public deprecated String(byte[], int); ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; ctor public String(byte[], int, int, java.nio.charset.Charset); + ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; ctor public String(byte[], java.nio.charset.Charset); - ctor public String(char[]); - ctor public String(char[], int, int); - ctor public String(java.lang.String); + ctor public String(byte[], int, int); + ctor public String(byte[]); ctor public String(java.lang.StringBuffer); - ctor public String(int[], int, int); ctor public String(java.lang.StringBuilder); method public char charAt(int); method public int codePointAt(int); @@ -45103,16 +45332,16 @@ package java.lang { method public boolean contains(java.lang.CharSequence); method public boolean contentEquals(java.lang.StringBuffer); method public boolean contentEquals(java.lang.CharSequence); - method public static java.lang.String copyValueOf(char[]); method public static java.lang.String copyValueOf(char[], int, int); + method public static java.lang.String copyValueOf(char[]); method public boolean endsWith(java.lang.String); method public boolean equalsIgnoreCase(java.lang.String); method public static java.lang.String format(java.lang.String, java.lang.Object...); method public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...); method public deprecated void getBytes(int, int, byte[], int); - method public byte[] getBytes(); method public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException; method public byte[] getBytes(java.nio.charset.Charset); + method public byte[] getBytes(); method public void getChars(int, int, char[], int); method public int indexOf(int); method public int indexOf(int, int); @@ -45133,109 +45362,51 @@ package java.lang { method public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence); method public java.lang.String replaceAll(java.lang.String, java.lang.String); method public java.lang.String replaceFirst(java.lang.String, java.lang.String); - method public java.lang.String[] split(java.lang.String); method public java.lang.String[] split(java.lang.String, int); - method public boolean startsWith(java.lang.String); + method public java.lang.String[] split(java.lang.String); method public boolean startsWith(java.lang.String, int); + method public boolean startsWith(java.lang.String); method public java.lang.CharSequence subSequence(int, int); method public java.lang.String substring(int); method public java.lang.String substring(int, int); method public char[] toCharArray(); - method public java.lang.String toLowerCase(); method public java.lang.String toLowerCase(java.util.Locale); - method public java.lang.String toUpperCase(); + method public java.lang.String toLowerCase(); method public java.lang.String toUpperCase(java.util.Locale); + method public java.lang.String toUpperCase(); method public java.lang.String trim(); + method public static java.lang.String valueOf(java.lang.Object); method public static java.lang.String valueOf(char[]); method public static java.lang.String valueOf(char[], int, int); + method public static java.lang.String valueOf(boolean); method public static java.lang.String valueOf(char); - method public static java.lang.String valueOf(double); - method public static java.lang.String valueOf(float); method public static java.lang.String valueOf(int); method public static java.lang.String valueOf(long); - method public static java.lang.String valueOf(java.lang.Object); - method public static java.lang.String valueOf(boolean); + method public static java.lang.String valueOf(float); + method public static java.lang.String valueOf(double); field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER; } - public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable { ctor public StringBuffer(); ctor public StringBuffer(int); ctor public StringBuffer(java.lang.String); ctor public StringBuffer(java.lang.CharSequence); - method public java.lang.StringBuffer append(boolean); - method public synchronized java.lang.StringBuffer append(char); - method public java.lang.StringBuffer append(double); - method public java.lang.StringBuffer append(float); - method public java.lang.StringBuffer append(int); - method public java.lang.StringBuffer append(long); - method public synchronized java.lang.StringBuffer append(java.lang.Object); - method public synchronized java.lang.StringBuffer append(java.lang.String); - method public synchronized java.lang.StringBuffer append(java.lang.StringBuffer); - method public synchronized java.lang.StringBuffer append(char[]); - method public synchronized java.lang.StringBuffer append(char[], int, int); - method public synchronized java.lang.StringBuffer append(java.lang.CharSequence); - method public synchronized java.lang.StringBuffer append(java.lang.CharSequence, int, int); - method public java.lang.StringBuffer appendCodePoint(int); - method public synchronized java.lang.StringBuffer delete(int, int); - method public synchronized java.lang.StringBuffer deleteCharAt(int); - method public synchronized java.lang.StringBuffer insert(int, char); - method public java.lang.StringBuffer insert(int, boolean); - method public java.lang.StringBuffer insert(int, int); - method public java.lang.StringBuffer insert(int, long); - method public java.lang.StringBuffer insert(int, double); - method public java.lang.StringBuffer insert(int, float); - method public java.lang.StringBuffer insert(int, java.lang.Object); - method public synchronized java.lang.StringBuffer insert(int, java.lang.String); - method public synchronized java.lang.StringBuffer insert(int, char[]); - method public synchronized java.lang.StringBuffer insert(int, char[], int, int); - method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence); - method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence, int, int); - method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String); - method public synchronized java.lang.StringBuffer reverse(); - } - - public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + method public synchronized java.lang.String toString(); + } + + public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable { ctor public StringBuilder(); ctor public StringBuilder(int); - ctor public StringBuilder(java.lang.CharSequence); ctor public StringBuilder(java.lang.String); - method public java.lang.StringBuilder append(boolean); - method public java.lang.StringBuilder append(char); - method public java.lang.StringBuilder append(int); - method public java.lang.StringBuilder append(long); - method public java.lang.StringBuilder append(float); - method public java.lang.StringBuilder append(double); - method public java.lang.StringBuilder append(java.lang.Object); - method public java.lang.StringBuilder append(java.lang.String); - method public java.lang.StringBuilder append(java.lang.StringBuffer); - method public java.lang.StringBuilder append(char[]); - method public java.lang.StringBuilder append(char[], int, int); - method public java.lang.StringBuilder append(java.lang.CharSequence); - method public java.lang.StringBuilder append(java.lang.CharSequence, int, int); - method public java.lang.StringBuilder appendCodePoint(int); - method public java.lang.StringBuilder delete(int, int); - method public java.lang.StringBuilder deleteCharAt(int); - method public java.lang.StringBuilder insert(int, boolean); - method public java.lang.StringBuilder insert(int, char); - method public java.lang.StringBuilder insert(int, int); - method public java.lang.StringBuilder insert(int, long); - method public java.lang.StringBuilder insert(int, float); - method public java.lang.StringBuilder insert(int, double); - method public java.lang.StringBuilder insert(int, java.lang.Object); - method public java.lang.StringBuilder insert(int, java.lang.String); - method public java.lang.StringBuilder insert(int, char[]); - method public java.lang.StringBuilder insert(int, char[], int, int); - method public java.lang.StringBuilder insert(int, java.lang.CharSequence); - method public java.lang.StringBuilder insert(int, java.lang.CharSequence, int, int); - method public java.lang.StringBuilder replace(int, int, java.lang.String); - method public java.lang.StringBuilder reverse(); + ctor public StringBuilder(java.lang.CharSequence); + method public java.lang.String toString(); } public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException { ctor public StringIndexOutOfBoundsException(); - ctor public StringIndexOutOfBoundsException(int); ctor public StringIndexOutOfBoundsException(java.lang.String); + ctor public StringIndexOutOfBoundsException(int); } public abstract class SuppressWarnings implements java.lang.annotation.Annotation { @@ -45277,11 +45448,11 @@ package java.lang { public class Thread implements java.lang.Runnable { ctor public Thread(); ctor public Thread(java.lang.Runnable); - ctor public Thread(java.lang.Runnable, java.lang.String); - ctor public Thread(java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable); - ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.String); + ctor public Thread(java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long); method public static int activeCount(); method public final void checkAccess(); @@ -45306,9 +45477,9 @@ package java.lang { method public final boolean isAlive(); method public final boolean isDaemon(); method public boolean isInterrupted(); - method public final void join() throws java.lang.InterruptedException; method public final void join(long) throws java.lang.InterruptedException; method public final void join(long, int) throws java.lang.InterruptedException; + method public final void join() throws java.lang.InterruptedException; method public final deprecated void resume(); method public void run(); method public void setContextClassLoader(java.lang.ClassLoader); @@ -45321,7 +45492,7 @@ package java.lang { method public static void sleep(long, int) throws java.lang.InterruptedException; method public synchronized void start(); method public final deprecated void stop(); - method public final deprecated synchronized void stop(java.lang.Throwable); + method public final deprecated void stop(java.lang.Throwable); method public final deprecated void suspend(); method public static void yield(); field public static final int MAX_PRIORITY = 10; // 0xa @@ -45390,14 +45561,14 @@ package java.lang { ctor public Throwable(java.lang.String, java.lang.Throwable); ctor public Throwable(java.lang.Throwable); ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean); - method public final void addSuppressed(java.lang.Throwable); - method public java.lang.Throwable fillInStackTrace(); - method public java.lang.Throwable getCause(); + method public final synchronized void addSuppressed(java.lang.Throwable); + method public synchronized java.lang.Throwable fillInStackTrace(); + method public synchronized java.lang.Throwable getCause(); method public java.lang.String getLocalizedMessage(); method public java.lang.String getMessage(); method public java.lang.StackTraceElement[] getStackTrace(); - method public final java.lang.Throwable[] getSuppressed(); - method public java.lang.Throwable initCause(java.lang.Throwable); + method public final synchronized java.lang.Throwable[] getSuppressed(); + method public synchronized java.lang.Throwable initCause(java.lang.Throwable); method public void printStackTrace(); method public void printStackTrace(java.io.PrintStream); method public void printStackTrace(java.io.PrintWriter); @@ -45518,15 +45689,16 @@ package java.lang.ref { public abstract class Reference { method public void clear(); method public boolean enqueue(); + method public final synchronized boolean enqueueInternal(); method public T get(); method public boolean isEnqueued(); } public class ReferenceQueue { ctor public ReferenceQueue(); - method public synchronized java.lang.ref.Reference<? extends T> poll(); + 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; - method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.InterruptedException; } public class SoftReference extends java.lang.ref.Reference { @@ -45550,8 +45722,8 @@ package java.lang.reflect { method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public boolean isAccessible(); method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>); - method public void setAccessible(boolean); - method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean); + method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException; + method public void setAccessible(boolean) throws java.lang.SecurityException; } public abstract interface AnnotatedElement { @@ -45572,8 +45744,9 @@ package java.lang.reflect { method public static int getLength(java.lang.Object); method public static long getLong(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; method public static short getShort(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; - method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException; + method public static java.lang.Object newArray(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException; method public static java.lang.Object newInstance(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException; + method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException; method public static void set(java.lang.Object, int, java.lang.Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; method public static void setBoolean(java.lang.Object, int, boolean); method public static void setByte(java.lang.Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; @@ -45588,7 +45761,6 @@ package java.lang.reflect { public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { method public boolean equals(java.lang.Object); method public A getAnnotation(java.lang.Class<A>); - method public java.lang.annotation.Annotation[] getAnnotations(); method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public java.lang.Class<T> getDeclaringClass(); method public java.lang.Class<?>[] getExceptionTypes(); @@ -45675,7 +45847,6 @@ package java.lang.reflect { public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { method public boolean equals(java.lang.Object); method public A getAnnotation(java.lang.Class<A>); - method public java.lang.annotation.Annotation[] getAnnotations(); method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public java.lang.Class<?> getDeclaringClass(); method public java.lang.Object getDefaultValue(); @@ -45956,10 +46127,10 @@ package java.net { method protected final java.net.InetAddress getRequestingSite(); method protected java.net.URL getRequestingURL(); method protected java.net.Authenticator.RequestorType getRequestorType(); - method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); - method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator.RequestorType); - method public static void setDefault(java.net.Authenticator); + method public static synchronized void setDefault(java.net.Authenticator); } public static final class Authenticator.RequestorType extends java.lang.Enum { @@ -45970,8 +46141,9 @@ package java.net { } public class BindException extends java.net.SocketException { - ctor public BindException(); ctor public BindException(java.lang.String); + ctor public BindException(); + ctor public BindException(java.lang.String, java.lang.Throwable); } public abstract class CacheRequest { @@ -45987,8 +46159,9 @@ package java.net { } public class ConnectException extends java.net.SocketException { - ctor public ConnectException(); ctor public ConnectException(java.lang.String); + ctor public ConnectException(); + ctor public ConnectException(java.lang.String, java.lang.Throwable); } public abstract class ContentHandler { @@ -46004,9 +46177,9 @@ package java.net { public abstract class CookieHandler { ctor public CookieHandler(); method public abstract java.util.Map<java.lang.String, java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static java.net.CookieHandler getDefault(); + method public static synchronized java.net.CookieHandler getDefault(); method public abstract void put(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static void setDefault(java.net.CookieHandler); + method public static synchronized void setDefault(java.net.CookieHandler); } public class CookieManager extends java.net.CookieHandler { @@ -46035,12 +46208,12 @@ package java.net { } public final class DatagramPacket { - ctor public DatagramPacket(byte[], int); ctor public DatagramPacket(byte[], int, int); + ctor public DatagramPacket(byte[], int); ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int); + ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException; ctor public DatagramPacket(byte[], int, java.net.InetAddress, int); ctor public DatagramPacket(byte[], int, java.net.SocketAddress) throws java.net.SocketException; - ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException; method public synchronized java.net.InetAddress getAddress(); method public synchronized byte[] getData(); method public synchronized int getLength(); @@ -46057,17 +46230,18 @@ package java.net { public class DatagramSocket implements java.io.Closeable { ctor public DatagramSocket() throws java.net.SocketException; - ctor public DatagramSocket(int) throws java.net.SocketException; - ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; ctor protected DatagramSocket(java.net.DatagramSocketImpl); ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException; - method public void bind(java.net.SocketAddress) throws java.net.SocketException; + ctor public DatagramSocket(int) throws java.net.SocketException; + ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; + method public synchronized void bind(java.net.SocketAddress) throws java.net.SocketException; method public void close(); - method public void connect(java.net.SocketAddress) throws java.net.SocketException; method public void connect(java.net.InetAddress, int); + method public void connect(java.net.SocketAddress) throws java.net.SocketException; method public void disconnect(); - method public boolean getBroadcast() throws java.net.SocketException; + method public synchronized boolean getBroadcast() throws java.net.SocketException; method public java.nio.channels.DatagramChannel getChannel(); + method public final java.io.FileDescriptor getFileDescriptor$(); method public java.net.InetAddress getInetAddress(); method public java.net.InetAddress getLocalAddress(); method public int getLocalPort(); @@ -46075,22 +46249,22 @@ package java.net { method public int getPort(); method public synchronized int getReceiveBufferSize() throws java.net.SocketException; method public java.net.SocketAddress getRemoteSocketAddress(); - method public boolean getReuseAddress() throws java.net.SocketException; + method public synchronized boolean getReuseAddress() throws java.net.SocketException; method public synchronized int getSendBufferSize() throws java.net.SocketException; method public synchronized int getSoTimeout() throws java.net.SocketException; - method public int getTrafficClass() throws java.net.SocketException; + method public synchronized int getTrafficClass() throws java.net.SocketException; method public boolean isBound(); method public boolean isClosed(); method public boolean isConnected(); method public synchronized void receive(java.net.DatagramPacket) throws java.io.IOException; method public void send(java.net.DatagramPacket) throws java.io.IOException; - method public void setBroadcast(boolean) throws java.net.SocketException; + method public synchronized void setBroadcast(boolean) throws java.net.SocketException; method public static synchronized void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException; method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; - method public void setReuseAddress(boolean) throws java.net.SocketException; + method public synchronized void setReuseAddress(boolean) throws java.net.SocketException; method public synchronized void setSendBufferSize(int) throws java.net.SocketException; method public synchronized void setSoTimeout(int) throws java.net.SocketException; - method public void setTrafficClass(int) throws java.net.SocketException; + method public synchronized void setTrafficClass(int) throws java.net.SocketException; } public abstract class DatagramSocketImpl implements java.net.SocketOptions { @@ -46142,11 +46316,14 @@ package java.net { method public java.lang.String getValue(); method public int getVersion(); method public boolean hasExpired(); + method public boolean isHttpOnly(); method public static java.util.List<java.net.HttpCookie> parse(java.lang.String); + method public static java.util.List<java.net.HttpCookie> parse(java.lang.String, boolean); method public void setComment(java.lang.String); method public void setCommentURL(java.lang.String); method public void setDiscard(boolean); method public void setDomain(java.lang.String); + method public void setHttpOnly(boolean); method public void setMaxAge(long); method public void setPath(java.lang.String); method public void setPortlist(java.lang.String); @@ -46173,8 +46350,8 @@ package java.net { method public int getResponseCode() throws java.io.IOException; method public java.lang.String getResponseMessage() throws java.io.IOException; method public void setChunkedStreamingMode(int); - method public void setFixedLengthStreamingMode(long); method public void setFixedLengthStreamingMode(int); + method public void setFixedLengthStreamingMode(long); method public static void setFollowRedirects(boolean); method public void setInstanceFollowRedirects(boolean); method public void setRequestMethod(java.lang.String) throws java.net.ProtocolException; @@ -46234,21 +46411,27 @@ package java.net { } public final class Inet4Address extends java.net.InetAddress { + field public static final java.net.InetAddress ALL; + field public static final java.net.InetAddress ANY; + field public static final java.net.InetAddress LOOPBACK; } public final class Inet6Address extends java.net.InetAddress { - method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException; method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException; + method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException; method public int getScopeId(); method public java.net.NetworkInterface getScopedInterface(); method public boolean isIPv4CompatibleAddress(); + field public static final java.net.InetAddress ANY; + field public static final java.net.InetAddress LOOPBACK; } public class InetAddress implements java.io.Serializable { method public byte[] getAddress(); + method public byte[] getAddressInternal(); method public static java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; - method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException; method public static java.net.InetAddress getByAddress(java.lang.String, byte[]) throws java.net.UnknownHostException; + method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException; method public static java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException; method public java.lang.String getCanonicalHostName(); method public java.lang.String getHostAddress(); @@ -46355,8 +46538,8 @@ package java.net { } public class NoRouteToHostException extends java.net.SocketException { - ctor public NoRouteToHostException(); ctor public NoRouteToHostException(java.lang.String); + ctor public NoRouteToHostException(); } public final class PasswordAuthentication { @@ -46366,13 +46549,19 @@ package java.net { } public class PortUnreachableException extends java.net.SocketException { - ctor public PortUnreachableException(); ctor public PortUnreachableException(java.lang.String); + ctor public PortUnreachableException(); + ctor public PortUnreachableException(java.lang.String, java.lang.Throwable); } public class ProtocolException extends java.io.IOException { - ctor public ProtocolException(); ctor public ProtocolException(java.lang.String); + ctor public ProtocolException(); + ctor public ProtocolException(java.lang.String, java.lang.Throwable); + } + + public abstract interface ProtocolFamily { + method public abstract java.lang.String name(); } public class Proxy { @@ -46403,9 +46592,9 @@ package java.net { public abstract class ResponseCache { ctor public ResponseCache(); method public abstract java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static java.net.ResponseCache getDefault(); + method public static synchronized java.net.ResponseCache getDefault(); method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; - method public static void setDefault(java.net.ResponseCache); + method public static synchronized void setDefault(java.net.ResponseCache); } public abstract class SecureCacheResponse extends java.net.CacheResponse { @@ -46430,14 +46619,14 @@ package java.net { method public java.net.InetAddress getInetAddress(); method public int getLocalPort(); method public java.net.SocketAddress getLocalSocketAddress(); - method public int getReceiveBufferSize() throws java.net.SocketException; + method public synchronized int getReceiveBufferSize() throws java.net.SocketException; method public boolean getReuseAddress() throws java.net.SocketException; method public synchronized int getSoTimeout() throws java.io.IOException; method protected final void implAccept(java.net.Socket) throws java.io.IOException; method public boolean isBound(); method public boolean isClosed(); method public void setPerformancePreferences(int, int, int); - method public void setReceiveBufferSize(int) throws java.net.SocketException; + method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; method public void setReuseAddress(boolean) throws java.net.SocketException; method public synchronized void setSoTimeout(int) throws java.net.SocketException; method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException; @@ -46446,13 +46635,13 @@ package java.net { public class Socket implements java.io.Closeable { ctor public Socket(); ctor public Socket(java.net.Proxy); + ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException; ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; - ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; - ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException; ctor public Socket(java.net.InetAddress, int) throws java.io.IOException; + ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException; ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException; - ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException; method public void bind(java.net.SocketAddress) throws java.io.IOException; method public synchronized void close() throws java.io.IOException; method public void connect(java.net.SocketAddress) throws java.io.IOException; @@ -46501,8 +46690,10 @@ package java.net { } public class SocketException extends java.io.IOException { - ctor public SocketException(); ctor public SocketException(java.lang.String); + ctor public SocketException(); + ctor public SocketException(java.lang.Throwable); + ctor public SocketException(java.lang.String, java.lang.Throwable); } public abstract class SocketImpl implements java.net.SocketOptions { @@ -46515,7 +46706,7 @@ package java.net { method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException; method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException; method protected abstract void create(boolean) throws java.io.IOException; - method protected java.io.FileDescriptor getFileDescriptor(); + method public java.io.FileDescriptor getFileDescriptor(); method protected java.net.InetAddress getInetAddress(); method protected abstract java.io.InputStream getInputStream() throws java.io.IOException; method protected int getLocalPort(); @@ -46537,6 +46728,11 @@ package java.net { method public abstract java.net.SocketImpl createSocketImpl(); } + public abstract interface SocketOption { + method public abstract java.lang.String name(); + method public abstract java.lang.Class<T> type(); + } + public abstract interface SocketOptions { method public abstract java.lang.Object getOption(int) throws java.net.SocketException; method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException; @@ -46558,21 +46754,46 @@ package java.net { public final class SocketPermission extends java.security.Permission implements java.io.Serializable { ctor public SocketPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } public class SocketTimeoutException extends java.io.InterruptedIOException { - ctor public SocketTimeoutException(); ctor public SocketTimeoutException(java.lang.String); + ctor public SocketTimeoutException(); + ctor public SocketTimeoutException(java.lang.Throwable); + ctor public SocketTimeoutException(java.lang.String, java.lang.Throwable); + } + + public final class StandardProtocolFamily extends java.lang.Enum implements java.net.ProtocolFamily { + method public static java.net.StandardProtocolFamily valueOf(java.lang.String); + method public static final java.net.StandardProtocolFamily[] values(); + enum_constant public static final java.net.StandardProtocolFamily INET; + enum_constant public static final java.net.StandardProtocolFamily INET6; + } + + public final class StandardSocketOptions { + field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF; + field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP; + field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL; + field public static final java.net.SocketOption<java.lang.Integer> IP_TOS; + field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST; + field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE; + field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER; + field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF; + field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR; + field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF; + field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY; } public final class URI implements java.lang.Comparable java.io.Serializable { ctor public URI(java.lang.String) throws java.net.URISyntaxException; - ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; ctor public URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; - ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; method public int compareTo(java.net.URI); method public static java.net.URI create(java.lang.String); method public java.lang.String getAuthority(); @@ -46610,12 +46831,12 @@ package java.net { } public final class URL implements java.io.Serializable { + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; ctor public URL(java.lang.String) throws java.net.MalformedURLException; ctor public URL(java.net.URL, java.lang.String) throws java.net.MalformedURLException; ctor public URL(java.net.URL, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; method public java.lang.String getAuthority(); method public final java.lang.Object getContent() throws java.io.IOException; method public final java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; @@ -46634,22 +46855,24 @@ package java.net { method public boolean sameFile(java.net.URL); method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); - method public static synchronized void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory); + method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory); method public java.lang.String toExternalForm(); method public java.net.URI toURI() throws java.net.URISyntaxException; + method public java.net.URI toURILenient() throws java.net.URISyntaxException; } - public class URLClassLoader extends java.security.SecureClassLoader { - ctor public URLClassLoader(java.net.URL[]); + public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable { ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader); + ctor public URLClassLoader(java.net.URL[]); ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader, java.net.URLStreamHandlerFactory); method protected void addURL(java.net.URL); + method public void close() throws java.io.IOException; method protected java.lang.Package definePackage(java.lang.String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException; method public java.net.URL findResource(java.lang.String); method public java.util.Enumeration<java.net.URL> findResources(java.lang.String) throws java.io.IOException; method public java.net.URL[] getURLs(); - method public static java.net.URLClassLoader newInstance(java.net.URL[]); method public static java.net.URLClassLoader newInstance(java.net.URL[], java.lang.ClassLoader); + method public static java.net.URLClassLoader newInstance(java.net.URL[]); } public abstract class URLConnection { @@ -46662,6 +46885,7 @@ package java.net { method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; method public java.lang.String getContentEncoding(); method public int getContentLength(); + method public long getContentLengthLong(); method public java.lang.String getContentType(); method public long getDate(); method public static boolean getDefaultAllowUserInteraction(); @@ -46670,12 +46894,13 @@ package java.net { method public boolean getDoInput(); method public boolean getDoOutput(); method public long getExpiration(); - method public static java.net.FileNameMap getFileNameMap(); - method public java.lang.String getHeaderField(int); + method public static synchronized java.net.FileNameMap getFileNameMap(); method public java.lang.String getHeaderField(java.lang.String); + method public java.lang.String getHeaderField(int); method public long getHeaderFieldDate(java.lang.String, long); method public int getHeaderFieldInt(java.lang.String, int); method public java.lang.String getHeaderFieldKey(int); + method public long getHeaderFieldLong(java.lang.String, long); method public java.util.Map<java.lang.String, java.util.List<java.lang.String>> getHeaderFields(); method public long getIfModifiedSince(); method public java.io.InputStream getInputStream() throws java.io.IOException; @@ -46726,15 +46951,15 @@ package java.net { ctor public URLStreamHandler(); method protected boolean equals(java.net.URL, java.net.URL); method protected int getDefaultPort(); - method protected java.net.InetAddress getHostAddress(java.net.URL); + method protected synchronized java.net.InetAddress getHostAddress(java.net.URL); method protected int hashCode(java.net.URL); method protected boolean hostsEqual(java.net.URL, java.net.URL); method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException; method protected void parseURL(java.net.URL, java.lang.String, int, int); method protected boolean sameFile(java.net.URL, java.net.URL); - method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected java.lang.String toExternalForm(java.net.URL); } @@ -46743,8 +46968,8 @@ package java.net { } public class UnknownHostException extends java.io.IOException { - ctor public UnknownHostException(); ctor public UnknownHostException(java.lang.String); + ctor public UnknownHostException(); } public class UnknownServiceException extends java.io.IOException { @@ -46800,9 +47025,9 @@ package java.nio { method public int compareTo(java.nio.ByteBuffer); method public abstract java.nio.ByteBuffer duplicate(); method public abstract byte get(); - method public java.nio.ByteBuffer get(byte[]); - method public java.nio.ByteBuffer get(byte[], int, int); method public abstract byte get(int); + method public java.nio.ByteBuffer get(byte[], int, int); + method public java.nio.ByteBuffer get(byte[]); method public abstract char getChar(); method public abstract char getChar(int); method public abstract double getDouble(); @@ -46820,10 +47045,10 @@ package java.nio { method public final java.nio.ByteOrder order(); method public final java.nio.ByteBuffer order(java.nio.ByteOrder); method public abstract java.nio.ByteBuffer put(byte); - method public final java.nio.ByteBuffer put(byte[]); - method public java.nio.ByteBuffer put(byte[], int, int); - method public java.nio.ByteBuffer put(java.nio.ByteBuffer); method public abstract java.nio.ByteBuffer put(int, byte); + method public java.nio.ByteBuffer put(java.nio.ByteBuffer); + method public java.nio.ByteBuffer put(byte[], int, int); + method public final java.nio.ByteBuffer put(byte[]); method public abstract java.nio.ByteBuffer putChar(char); method public abstract java.nio.ByteBuffer putChar(int, char); method public abstract java.nio.ByteBuffer putDouble(double); @@ -46837,8 +47062,8 @@ package java.nio { method public abstract java.nio.ByteBuffer putShort(short); method public abstract java.nio.ByteBuffer putShort(int, short); method public abstract java.nio.ByteBuffer slice(); - method public static java.nio.ByteBuffer wrap(byte[]); method public static java.nio.ByteBuffer wrap(byte[], int, int); + method public static java.nio.ByteBuffer wrap(byte[]); } public final class ByteOrder { @@ -46849,9 +47074,9 @@ package java.nio { public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable java.lang.Readable { method public static java.nio.CharBuffer allocate(int); - method public java.nio.CharBuffer append(char); method public java.nio.CharBuffer append(java.lang.CharSequence); method public java.nio.CharBuffer append(java.lang.CharSequence, int, int); + method public java.nio.CharBuffer append(char); method public final char[] array(); method public final int arrayOffset(); method public abstract java.nio.CharBuffer asReadOnlyBuffer(); @@ -46860,27 +47085,27 @@ package java.nio { method public int compareTo(java.nio.CharBuffer); method public abstract java.nio.CharBuffer duplicate(); method public abstract char get(); - method public java.nio.CharBuffer get(char[]); - method public java.nio.CharBuffer get(char[], int, int); method public abstract char get(int); + method public java.nio.CharBuffer get(char[], int, int); + method public java.nio.CharBuffer get(char[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public final int length(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.CharBuffer put(char); - method public final java.nio.CharBuffer put(char[]); - method public java.nio.CharBuffer put(char[], int, int); - method public java.nio.CharBuffer put(java.nio.CharBuffer); method public abstract java.nio.CharBuffer put(int, char); - method public final java.nio.CharBuffer put(java.lang.String); + method public java.nio.CharBuffer put(java.nio.CharBuffer); + method public java.nio.CharBuffer put(char[], int, int); + method public final java.nio.CharBuffer put(char[]); method public java.nio.CharBuffer put(java.lang.String, int, int); + method public final java.nio.CharBuffer put(java.lang.String); method public int read(java.nio.CharBuffer) throws java.io.IOException; method public abstract java.nio.CharBuffer slice(); method public abstract java.nio.CharBuffer subSequence(int, int); - method public static java.nio.CharBuffer wrap(char[]); method public static java.nio.CharBuffer wrap(char[], int, int); - method public static java.nio.CharBuffer wrap(java.lang.CharSequence); + method public static java.nio.CharBuffer wrap(char[]); method public static java.nio.CharBuffer wrap(java.lang.CharSequence, int, int); + method public static java.nio.CharBuffer wrap(java.lang.CharSequence); } public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -46892,20 +47117,20 @@ package java.nio { method public int compareTo(java.nio.DoubleBuffer); method public abstract java.nio.DoubleBuffer duplicate(); method public abstract double get(); - method public java.nio.DoubleBuffer get(double[]); - method public java.nio.DoubleBuffer get(double[], int, int); method public abstract double get(int); + method public java.nio.DoubleBuffer get(double[], int, int); + method public java.nio.DoubleBuffer get(double[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.DoubleBuffer put(double); - method public final java.nio.DoubleBuffer put(double[]); - method public java.nio.DoubleBuffer put(double[], int, int); - method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer); method public abstract java.nio.DoubleBuffer put(int, double); + method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer); + method public java.nio.DoubleBuffer put(double[], int, int); + method public final java.nio.DoubleBuffer put(double[]); method public abstract java.nio.DoubleBuffer slice(); - method public static java.nio.DoubleBuffer wrap(double[]); method public static java.nio.DoubleBuffer wrap(double[], int, int); + method public static java.nio.DoubleBuffer wrap(double[]); } public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -46917,20 +47142,20 @@ package java.nio { method public int compareTo(java.nio.FloatBuffer); method public abstract java.nio.FloatBuffer duplicate(); method public abstract float get(); - method public java.nio.FloatBuffer get(float[]); - method public java.nio.FloatBuffer get(float[], int, int); method public abstract float get(int); + method public java.nio.FloatBuffer get(float[], int, int); + method public java.nio.FloatBuffer get(float[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.FloatBuffer put(float); - method public final java.nio.FloatBuffer put(float[]); - method public java.nio.FloatBuffer put(float[], int, int); - method public java.nio.FloatBuffer put(java.nio.FloatBuffer); method public abstract java.nio.FloatBuffer put(int, float); + method public java.nio.FloatBuffer put(java.nio.FloatBuffer); + method public java.nio.FloatBuffer put(float[], int, int); + method public final java.nio.FloatBuffer put(float[]); method public abstract java.nio.FloatBuffer slice(); - method public static java.nio.FloatBuffer wrap(float[]); method public static java.nio.FloatBuffer wrap(float[], int, int); + method public static java.nio.FloatBuffer wrap(float[]); } public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -46942,20 +47167,20 @@ package java.nio { method public int compareTo(java.nio.IntBuffer); method public abstract java.nio.IntBuffer duplicate(); method public abstract int get(); - method public java.nio.IntBuffer get(int[]); - method public java.nio.IntBuffer get(int[], int, int); method public abstract int get(int); + method public java.nio.IntBuffer get(int[], int, int); + method public java.nio.IntBuffer get(int[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.IntBuffer put(int); - method public final java.nio.IntBuffer put(int[]); - method public java.nio.IntBuffer put(int[], int, int); - method public java.nio.IntBuffer put(java.nio.IntBuffer); method public abstract java.nio.IntBuffer put(int, int); + method public java.nio.IntBuffer put(java.nio.IntBuffer); + method public java.nio.IntBuffer put(int[], int, int); + method public final java.nio.IntBuffer put(int[]); method public abstract java.nio.IntBuffer slice(); - method public static java.nio.IntBuffer wrap(int[]); method public static java.nio.IntBuffer wrap(int[], int, int); + method public static java.nio.IntBuffer wrap(int[]); } public class InvalidMarkException extends java.lang.IllegalStateException { @@ -46971,20 +47196,20 @@ package java.nio { method public int compareTo(java.nio.LongBuffer); method public abstract java.nio.LongBuffer duplicate(); method public abstract long get(); - method public java.nio.LongBuffer get(long[]); - method public java.nio.LongBuffer get(long[], int, int); method public abstract long get(int); + method public java.nio.LongBuffer get(long[], int, int); + method public java.nio.LongBuffer get(long[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.LongBuffer put(long); - method public final java.nio.LongBuffer put(long[]); - method public java.nio.LongBuffer put(long[], int, int); - method public java.nio.LongBuffer put(java.nio.LongBuffer); method public abstract java.nio.LongBuffer put(int, long); + method public java.nio.LongBuffer put(java.nio.LongBuffer); + method public java.nio.LongBuffer put(long[], int, int); + method public final java.nio.LongBuffer put(long[]); method public abstract java.nio.LongBuffer slice(); - method public static java.nio.LongBuffer wrap(long[]); method public static java.nio.LongBuffer wrap(long[], int, int); + method public static java.nio.LongBuffer wrap(long[]); } public abstract class MappedByteBuffer extends java.nio.ByteBuffer { @@ -47006,34 +47231,119 @@ package java.nio { method public int compareTo(java.nio.ShortBuffer); method public abstract java.nio.ShortBuffer duplicate(); method public abstract short get(); - method public java.nio.ShortBuffer get(short[]); - method public java.nio.ShortBuffer get(short[], int, int); method public abstract short get(int); + method public java.nio.ShortBuffer get(short[], int, int); + method public java.nio.ShortBuffer get(short[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.ShortBuffer put(short); - method public final java.nio.ShortBuffer put(short[]); - method public java.nio.ShortBuffer put(short[], int, int); - method public java.nio.ShortBuffer put(java.nio.ShortBuffer); method public abstract java.nio.ShortBuffer put(int, short); + method public java.nio.ShortBuffer put(java.nio.ShortBuffer); + method public java.nio.ShortBuffer put(short[], int, int); + method public final java.nio.ShortBuffer put(short[]); method public abstract java.nio.ShortBuffer slice(); - method public static java.nio.ShortBuffer wrap(short[]); method public static java.nio.ShortBuffer wrap(short[], int, int); + method public static java.nio.ShortBuffer wrap(short[]); } } package java.nio.channels { + public class AcceptPendingException extends java.lang.IllegalStateException { + ctor public AcceptPendingException(); + } + + public class AlreadyBoundException extends java.lang.IllegalStateException { + ctor public AlreadyBoundException(); + } + public class AlreadyConnectedException extends java.lang.IllegalStateException { ctor public AlreadyConnectedException(); } + 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 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 java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer); + } + + public abstract interface AsynchronousChannel implements java.nio.channels.Channel { + method public abstract void close() throws java.io.IOException; + } + + public abstract class AsynchronousChannelGroup { + ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider); + method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract boolean isShutdown(); + method public abstract boolean isTerminated(); + method public final java.nio.channels.spi.AsynchronousChannelProvider provider(); + method public abstract void shutdown(); + method public abstract void shutdownNow() throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException; + } + public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException { ctor public AsynchronousCloseException(); } + 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 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 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 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 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; + 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; + } + + 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 java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress); + 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 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 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 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>); + } + public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel { } @@ -47050,7 +47360,9 @@ package java.nio.channels { method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream); method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream); method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel); + method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel); method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel); + method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel); method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int); method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.lang.String); method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int); @@ -47069,50 +47381,61 @@ package java.nio.channels { ctor public ClosedSelectorException(); } + public abstract interface CompletionHandler { + method public abstract void completed(V, A); + method public abstract void failed(java.lang.Throwable, A); + } + public class ConnectionPendingException extends java.lang.IllegalStateException { ctor public ConnectionPendingException(); } - public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel { ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException; + method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException; method public abstract boolean isConnected(); method public static java.nio.channels.DatagramChannel open() throws java.io.IOException; + method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException; 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 synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException; + 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 java.net.DatagramSocket socket(); method public final int validOps(); method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; - method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; } - public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel { ctor protected FileChannel(); method public abstract void force(boolean) throws java.io.IOException; - method public final java.nio.channels.FileLock lock() throws java.io.IOException; method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException; + method public final java.nio.channels.FileLock lock() throws java.io.IOException; method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException; + method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; method public abstract long position() throws java.io.IOException; method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException; method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; - method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException; - method public final long 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 int read(java.nio.ByteBuffer, long) throws java.io.IOException; method public abstract long size() throws java.io.IOException; method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException; method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException; method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException; - method public final java.nio.channels.FileLock tryLock() 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 int write(java.nio.ByteBuffer) throws java.io.IOException; - method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException; - method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException; } public static class FileChannel.MapMode { @@ -47123,6 +47446,8 @@ package java.nio.channels { public abstract class FileLock implements java.lang.AutoCloseable { ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean); + ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean); + method public java.nio.channels.Channel acquiredBy(); method public final java.nio.channels.FileChannel channel(); method public final void close() throws java.io.IOException; method public final boolean isShared(); @@ -47139,22 +47464,56 @@ package java.nio.channels { } public abstract interface GatheringByteChannel implements java.nio.channels.WritableByteChannel { - method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException; } public class IllegalBlockingModeException extends java.lang.IllegalStateException { ctor public IllegalBlockingModeException(); } + public class IllegalChannelGroupException extends java.lang.IllegalArgumentException { + ctor public IllegalChannelGroupException(); + } + public class IllegalSelectorException extends java.lang.IllegalArgumentException { ctor public IllegalSelectorException(); } + public class InterruptedByTimeoutException extends java.io.IOException { + ctor public InterruptedByTimeoutException(); + } + public abstract interface InterruptibleChannel implements java.nio.channels.Channel { method public abstract void close() throws java.io.IOException; } + public abstract class MembershipKey { + ctor protected MembershipKey(); + method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException; + method public abstract java.nio.channels.MulticastChannel channel(); + method public abstract void drop(); + method public abstract java.net.InetAddress group(); + method public abstract boolean isValid(); + method public abstract java.net.NetworkInterface networkInterface(); + method public abstract java.net.InetAddress sourceAddress(); + method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress); + } + + public abstract interface MulticastChannel implements java.nio.channels.NetworkChannel { + method public abstract void close() throws java.io.IOException; + method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException; + method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException; + } + + 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 java.util.Set<java.net.SocketOption<?>> supportedOptions(); + } + public class NoConnectionPendingException extends java.lang.IllegalStateException { ctor public NoConnectionPendingException(); } @@ -47196,13 +47555,26 @@ package java.nio.channels { method public final int validOps(); } + public class ReadPendingException extends java.lang.IllegalStateException { + ctor public ReadPendingException(); + } + public abstract interface ReadableByteChannel implements java.nio.channels.Channel { method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; } public abstract interface ScatteringByteChannel implements java.nio.channels.ReadableByteChannel { - method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException; + } + + public abstract interface SeekableByteChannel implements java.nio.channels.ByteChannel { + method public abstract long position() throws java.io.IOException; + method public abstract java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long size() throws java.io.IOException; + method public abstract java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; } public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel { @@ -47213,8 +47585,8 @@ package java.nio.channels { method public abstract boolean isRegistered(); method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); method public abstract java.nio.channels.spi.SelectorProvider provider(); - method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException; method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; + method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException; method public abstract int validOps(); } @@ -47246,37 +47618,49 @@ package java.nio.channels { method public abstract java.util.Set<java.nio.channels.SelectionKey> keys(); method public static java.nio.channels.Selector open() throws java.io.IOException; method public abstract java.nio.channels.spi.SelectorProvider provider(); - method public abstract int select() throws java.io.IOException; method public abstract int select(long) throws java.io.IOException; + method public abstract int select() throws java.io.IOException; method public abstract int selectNow() throws java.io.IOException; method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys(); method public abstract java.nio.channels.Selector wakeup(); } - public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel { + public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel { ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider); method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException; + method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException; + method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException; method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException; + method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException; method public abstract java.net.ServerSocket socket(); method public final int validOps(); } - public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public class ShutdownChannelGroupException extends java.lang.IllegalStateException { + ctor public ShutdownChannelGroupException(); + } + + public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel { ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException; method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException; method public abstract boolean finishConnect() throws java.io.IOException; + method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException; method public abstract boolean isConnected(); method public abstract boolean isConnectionPending(); method public static java.nio.channels.SocketChannel open() throws java.io.IOException; method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException; 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 synchronized long read(java.nio.ByteBuffer[]) 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 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(); method public final int validOps(); method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; - method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; } public class UnresolvedAddressException extends java.lang.IllegalArgumentException { @@ -47291,6 +47675,10 @@ package java.nio.channels { method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; } + public class WritePendingException extends java.lang.IllegalStateException { + ctor public WritePendingException(); + } + } package java.nio.channels.spi { @@ -47301,19 +47689,19 @@ package java.nio.channels.spi { method public final void close() throws java.io.IOException; method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException; method protected abstract void implCloseChannel() throws java.io.IOException; - method public final synchronized boolean isOpen(); + method public final boolean isOpen(); } public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel { ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider); method public final java.lang.Object blockingLock(); method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException; - method protected final synchronized void implCloseChannel() throws java.io.IOException; + method protected final void implCloseChannel() throws java.io.IOException; method protected abstract void implCloseSelectableChannel() throws java.io.IOException; method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException; method public final boolean isBlocking(); - method public final synchronized boolean isRegistered(); - method public final synchronized java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); + method public final boolean isRegistered(); + method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); method public final java.nio.channels.spi.SelectorProvider provider(); method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; } @@ -47337,15 +47725,25 @@ package java.nio.channels.spi { method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, java.lang.Object); } + public abstract class AsynchronousChannelProvider { + ctor protected AsynchronousChannelProvider(); + method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException; + method public static java.nio.channels.spi.AsynchronousChannelProvider provider(); + } + public abstract class SelectorProvider { ctor protected SelectorProvider(); method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException; + method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException; method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException; method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException; method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException; method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException; - method public static synchronized java.nio.channels.spi.SelectorProvider provider(); + method public static java.nio.channels.spi.SelectorProvider provider(); } } @@ -47384,8 +47782,8 @@ package java.nio.charset { ctor protected CharsetDecoder(java.nio.charset.Charset, float, float); method public final float averageCharsPerByte(); method public final java.nio.charset.Charset charset(); - method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException; method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean); + method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException; method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer); method public java.nio.charset.Charset detectedCharset(); method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer); @@ -47407,14 +47805,14 @@ package java.nio.charset { } public abstract class CharsetEncoder { - ctor protected CharsetEncoder(java.nio.charset.Charset, float, float); ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]); + ctor protected CharsetEncoder(java.nio.charset.Charset, float, float); method public final float averageBytesPerChar(); method public boolean canEncode(char); method public boolean canEncode(java.lang.CharSequence); method public final java.nio.charset.Charset charset(); - method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException; method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean); + method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException; method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer); method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer); method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer); @@ -47443,10 +47841,10 @@ package java.nio.charset { method public boolean isOverflow(); method public boolean isUnderflow(); method public boolean isUnmappable(); - method public int length() throws java.lang.UnsupportedOperationException; - method public static synchronized java.nio.charset.CoderResult malformedForLength(int) throws java.lang.IllegalArgumentException; - method public void throwException() throws java.nio.BufferOverflowException, java.nio.BufferUnderflowException, java.nio.charset.CharacterCodingException, java.nio.charset.MalformedInputException, java.nio.charset.UnmappableCharacterException; - method public static synchronized java.nio.charset.CoderResult unmappableForLength(int) throws java.lang.IllegalArgumentException; + method public int length(); + method public static java.nio.charset.CoderResult malformedForLength(int); + method public void throwException() throws java.nio.charset.CharacterCodingException; + method public static java.nio.charset.CoderResult unmappableForLength(int); field public static final java.nio.charset.CoderResult OVERFLOW; field public static final java.nio.charset.CoderResult UNDERFLOW; } @@ -47498,11 +47896,597 @@ package java.nio.charset.spi { } +package java.nio.file { + + public class AccessDeniedException extends java.nio.file.FileSystemException { + ctor public AccessDeniedException(java.lang.String); + ctor public AccessDeniedException(java.lang.String, java.lang.String, java.lang.String); + } + + public final class AccessMode extends java.lang.Enum { + method public static java.nio.file.AccessMode valueOf(java.lang.String); + method public static final java.nio.file.AccessMode[] values(); + enum_constant public static final java.nio.file.AccessMode EXECUTE; + enum_constant public static final java.nio.file.AccessMode READ; + enum_constant public static final java.nio.file.AccessMode WRITE; + } + + public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException { + ctor public AtomicMoveNotSupportedException(java.lang.String, java.lang.String, java.lang.String); + } + + public class ClosedDirectoryStreamException extends java.lang.IllegalStateException { + ctor public ClosedDirectoryStreamException(); + } + + public class ClosedFileSystemException extends java.lang.IllegalStateException { + ctor public ClosedFileSystemException(); + } + + public class ClosedWatchServiceException extends java.lang.IllegalStateException { + ctor public ClosedWatchServiceException(); + } + + public abstract interface CopyOption { + } + + public final class DirectoryIteratorException extends java.util.ConcurrentModificationException { + ctor public DirectoryIteratorException(java.io.IOException); + } + + public class DirectoryNotEmptyException extends java.nio.file.FileSystemException { + ctor public DirectoryNotEmptyException(java.lang.String); + } + + public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable { + method public abstract java.util.Iterator<T> iterator(); + } + + public static abstract interface DirectoryStream.Filter { + method public abstract boolean accept(T) throws java.io.IOException; + } + + public class FileAlreadyExistsException extends java.nio.file.FileSystemException { + ctor public FileAlreadyExistsException(java.lang.String); + ctor public FileAlreadyExistsException(java.lang.String, java.lang.String, java.lang.String); + } + + 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 long getTotalSpace() throws java.io.IOException; + method public abstract long getUnallocatedSpace() throws java.io.IOException; + method public abstract long getUsableSpace() throws java.io.IOException; + method public abstract boolean isReadOnly(); + method public abstract java.lang.String name(); + method public abstract boolean supportsFileAttributeView(java.lang.Class<? extends java.nio.file.attribute.FileAttributeView>); + method public abstract boolean supportsFileAttributeView(java.lang.String); + method public abstract java.lang.String type(); + } + + public abstract class FileSystem implements java.io.Closeable { + ctor protected FileSystem(); + method public abstract void close() throws java.io.IOException; + method public abstract java.lang.Iterable<java.nio.file.FileStore> getFileStores(); + method public abstract java.nio.file.Path getPath(java.lang.String, java.lang.String...); + method public abstract java.nio.file.PathMatcher getPathMatcher(java.lang.String); + method public abstract java.lang.Iterable<java.nio.file.Path> getRootDirectories(); + method public abstract java.lang.String getSeparator(); + method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService(); + method public abstract boolean isOpen(); + method public abstract boolean isReadOnly(); + method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException; + method public abstract java.nio.file.spi.FileSystemProvider provider(); + method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews(); + } + + public class FileSystemAlreadyExistsException extends java.lang.RuntimeException { + ctor public FileSystemAlreadyExistsException(); + ctor public FileSystemAlreadyExistsException(java.lang.String); + } + + public class FileSystemException extends java.io.IOException { + ctor public FileSystemException(java.lang.String); + ctor public FileSystemException(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getFile(); + method public java.lang.String getOtherFile(); + method public java.lang.String getReason(); + } + + public class FileSystemLoopException extends java.nio.file.FileSystemException { + ctor public FileSystemLoopException(java.lang.String); + } + + public class FileSystemNotFoundException extends java.lang.RuntimeException { + ctor public FileSystemNotFoundException(); + ctor public FileSystemNotFoundException(java.lang.String); + } + + public final class FileSystems { + method public static java.nio.file.FileSystem getDefault(); + method public static java.nio.file.FileSystem getFileSystem(java.net.URI); + method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException; + method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>, java.lang.ClassLoader) throws java.io.IOException; + method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.lang.ClassLoader) throws java.io.IOException; + } + + public final class FileVisitOption extends java.lang.Enum { + method public static java.nio.file.FileVisitOption valueOf(java.lang.String); + method public static final java.nio.file.FileVisitOption[] values(); + enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS; + } + + public final class FileVisitResult extends java.lang.Enum { + method public static java.nio.file.FileVisitResult valueOf(java.lang.String); + method public static final java.nio.file.FileVisitResult[] values(); + enum_constant public static final java.nio.file.FileVisitResult CONTINUE; + enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS; + enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE; + enum_constant public static final java.nio.file.FileVisitResult TERMINATE; + } + + public abstract interface FileVisitor { + 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; + method public abstract java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException; + } + + public final class Files { + method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException; + method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static void delete(java.nio.file.Path) throws java.io.IOException; + method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException; + method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...); + 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 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; + method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException; + method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...); + method public static boolean isExecutable(java.nio.file.Path); + method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException; + method public static boolean isReadable(java.nio.file.Path); + method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...); + method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public static boolean isSymbolicLink(java.nio.file.Path); + method public static boolean isWritable(java.nio.file.Path); + method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException; + method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.lang.String) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...); + method public static java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException; + 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 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; + method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException; + method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException; + method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException; + method public static long size(java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException; + } + + public class InvalidPathException extends java.lang.IllegalArgumentException { + ctor public InvalidPathException(java.lang.String, java.lang.String, int); + ctor public InvalidPathException(java.lang.String, java.lang.String); + method public int getIndex(); + method public java.lang.String getInput(); + method public java.lang.String getReason(); + } + + public final class LinkOption extends java.lang.Enum implements java.nio.file.CopyOption java.nio.file.OpenOption { + method public static java.nio.file.LinkOption valueOf(java.lang.String); + method public static final java.nio.file.LinkOption[] values(); + enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS; + } + + public final class LinkPermission extends java.security.BasicPermission { + ctor public LinkPermission(java.lang.String); + ctor public LinkPermission(java.lang.String, java.lang.String); + } + + public class NoSuchFileException extends java.nio.file.FileSystemException { + ctor public NoSuchFileException(java.lang.String); + ctor public NoSuchFileException(java.lang.String, java.lang.String, java.lang.String); + } + + public class NotDirectoryException extends java.nio.file.FileSystemException { + ctor public NotDirectoryException(java.lang.String); + } + + public class NotLinkException extends java.nio.file.FileSystemException { + ctor public NotLinkException(java.lang.String); + ctor public NotLinkException(java.lang.String, java.lang.String, java.lang.String); + } + + public abstract interface OpenOption { + } + + public abstract interface Path implements java.lang.Comparable java.lang.Iterable java.nio.file.Watchable { + method public abstract int compareTo(java.nio.file.Path); + method public abstract boolean endsWith(java.nio.file.Path); + method public abstract boolean endsWith(java.lang.String); + method public abstract boolean equals(java.lang.Object); + method public abstract java.nio.file.Path getFileName(); + method public abstract java.nio.file.FileSystem getFileSystem(); + method public abstract java.nio.file.Path getName(int); + method public abstract int getNameCount(); + method public abstract java.nio.file.Path getParent(); + method public abstract java.nio.file.Path getRoot(); + method public abstract int hashCode(); + method public abstract boolean isAbsolute(); + method public abstract java.util.Iterator<java.nio.file.Path> iterator(); + method public abstract java.nio.file.Path normalize(); + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException; + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException; + method public abstract java.nio.file.Path relativize(java.nio.file.Path); + method public abstract java.nio.file.Path resolve(java.nio.file.Path); + method public abstract java.nio.file.Path resolve(java.lang.String); + method public abstract java.nio.file.Path resolveSibling(java.nio.file.Path); + method public abstract java.nio.file.Path resolveSibling(java.lang.String); + method public abstract boolean startsWith(java.nio.file.Path); + method public abstract boolean startsWith(java.lang.String); + method public abstract java.nio.file.Path subpath(int, int); + method public abstract java.nio.file.Path toAbsolutePath(); + method public abstract java.io.File toFile(); + method public abstract java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException; + method public abstract java.lang.String toString(); + method public abstract java.net.URI toUri(); + } + + public abstract interface PathMatcher { + method public abstract boolean matches(java.nio.file.Path); + } + + public final class Paths { + method public static java.nio.file.Path get(java.lang.String, java.lang.String...); + method public static java.nio.file.Path get(java.net.URI); + } + + public class ProviderMismatchException extends java.lang.IllegalArgumentException { + ctor public ProviderMismatchException(); + ctor public ProviderMismatchException(java.lang.String); + } + + public class ProviderNotFoundException extends java.lang.RuntimeException { + ctor public ProviderNotFoundException(); + ctor public ProviderNotFoundException(java.lang.String); + } + + public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException { + ctor public ReadOnlyFileSystemException(); + } + + public abstract interface SecureDirectoryStream 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 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 final class StandardCopyOption extends java.lang.Enum implements java.nio.file.CopyOption { + method public static java.nio.file.StandardCopyOption valueOf(java.lang.String); + method public static final java.nio.file.StandardCopyOption[] values(); + enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE; + enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES; + enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING; + } + + public final class StandardOpenOption extends java.lang.Enum implements java.nio.file.OpenOption { + method public static java.nio.file.StandardOpenOption valueOf(java.lang.String); + method public static final java.nio.file.StandardOpenOption[] values(); + enum_constant public static final java.nio.file.StandardOpenOption APPEND; + enum_constant public static final java.nio.file.StandardOpenOption CREATE; + enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW; + enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE; + enum_constant public static final java.nio.file.StandardOpenOption DSYNC; + enum_constant public static final java.nio.file.StandardOpenOption READ; + enum_constant public static final java.nio.file.StandardOpenOption SPARSE; + enum_constant public static final java.nio.file.StandardOpenOption SYNC; + enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING; + enum_constant public static final java.nio.file.StandardOpenOption WRITE; + } + + public final class StandardWatchEventKinds { + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE; + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE; + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY; + field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW; + } + + public abstract interface WatchEvent { + 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 { + method public abstract java.lang.String name(); + method public abstract java.lang.Class<T> type(); + } + + public static abstract interface WatchEvent.Modifier { + method public abstract java.lang.String name(); + } + + public abstract interface WatchKey { + method public abstract void cancel(); + method public abstract boolean isValid(); + method public abstract java.util.List<java.nio.file.WatchEvent<?>> pollEvents(); + method public abstract boolean reset(); + method public abstract java.nio.file.Watchable watchable(); + } + + public abstract interface WatchService implements java.io.Closeable { + method public abstract void close() throws java.io.IOException; + method public abstract java.nio.file.WatchKey poll(); + method public abstract java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract java.nio.file.WatchKey take() throws java.lang.InterruptedException; + } + + public abstract interface Watchable { + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException; + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException; + } + +} + +package java.nio.file.attribute { + + public final class AclEntry { + method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags(); + method public static java.nio.file.attribute.AclEntry.Builder newBuilder(); + method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry); + method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions(); + method public java.nio.file.attribute.UserPrincipal principal(); + method public java.nio.file.attribute.AclEntryType type(); + } + + public static final class AclEntry.Builder { + method public java.nio.file.attribute.AclEntry build(); + method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>); + method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...); + method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>); + method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...); + method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal); + method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType); + } + + public final class AclEntryFlag extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryFlag valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryFlag[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT; + enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT; + enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY; + enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT; + } + + public final class AclEntryPermission extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryPermission valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryPermission[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD; + enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS; + enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER; + field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE; + field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY; + field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY; + } + + public final class AclEntryType extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryType valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryType[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryType ALARM; + enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW; + enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT; + enum_constant public static final java.nio.file.attribute.AclEntryType DENY; + } + + public abstract interface AclFileAttributeView implements java.nio.file.attribute.FileOwnerAttributeView { + method public abstract java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException; + method public abstract java.lang.String name(); + method public abstract void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException; + } + + public abstract interface AttributeView { + method public abstract java.lang.String name(); + } + + public abstract interface BasicFileAttributeView implements java.nio.file.attribute.FileAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException; + } + + public abstract interface BasicFileAttributes { + method public abstract java.nio.file.attribute.FileTime creationTime(); + method public abstract java.lang.Object fileKey(); + method public abstract boolean isDirectory(); + method public abstract boolean isOther(); + method public abstract boolean isRegularFile(); + method public abstract boolean isSymbolicLink(); + method public abstract java.nio.file.attribute.FileTime lastAccessTime(); + method public abstract java.nio.file.attribute.FileTime lastModifiedTime(); + method public abstract long size(); + } + + public abstract interface DosFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setArchive(boolean) throws java.io.IOException; + method public abstract void setHidden(boolean) throws java.io.IOException; + method public abstract void setReadOnly(boolean) throws java.io.IOException; + method public abstract void setSystem(boolean) throws java.io.IOException; + } + + public abstract interface DosFileAttributes implements java.nio.file.attribute.BasicFileAttributes { + method public abstract boolean isArchive(); + method public abstract boolean isHidden(); + method public abstract boolean isReadOnly(); + method public abstract boolean isSystem(); + } + + public abstract interface FileAttribute { + method public abstract java.lang.String name(); + method public abstract T value(); + } + + public abstract interface FileAttributeView implements java.nio.file.attribute.AttributeView { + } + + public abstract interface FileOwnerAttributeView implements java.nio.file.attribute.FileAttributeView { + method public abstract java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException; + method public abstract java.lang.String name(); + method public abstract void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException; + } + + public abstract interface FileStoreAttributeView implements java.nio.file.attribute.AttributeView { + } + + public final class FileTime implements java.lang.Comparable { + method public int compareTo(java.nio.file.attribute.FileTime); + method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit); + method public static java.nio.file.attribute.FileTime fromMillis(long); + method public long to(java.util.concurrent.TimeUnit); + method public long toMillis(); + } + + public abstract interface GroupPrincipal implements java.nio.file.attribute.UserPrincipal { + } + + public abstract interface PosixFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException; + method public abstract void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException; + } + + public abstract interface PosixFileAttributes implements java.nio.file.attribute.BasicFileAttributes { + method public abstract java.nio.file.attribute.GroupPrincipal group(); + method public abstract java.nio.file.attribute.UserPrincipal owner(); + method public abstract java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions(); + } + + public final class PosixFilePermission extends java.lang.Enum { + method public static java.nio.file.attribute.PosixFilePermission valueOf(java.lang.String); + method public static final java.nio.file.attribute.PosixFilePermission[] values(); + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE; + } + + public final class PosixFilePermissions { + method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>); + method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(java.lang.String); + method public static java.lang.String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>); + } + + public abstract interface UserPrincipal implements java.security.Principal { + } + + public abstract class UserPrincipalLookupService { + ctor protected UserPrincipalLookupService(); + method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(java.lang.String) throws java.io.IOException; + method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(java.lang.String) throws java.io.IOException; + } + + public class UserPrincipalNotFoundException extends java.io.IOException { + ctor public UserPrincipalNotFoundException(java.lang.String); + method public java.lang.String getName(); + } + +} + +package java.nio.file.spi { + + public abstract class FileSystemProvider { + ctor protected FileSystemProvider(); + method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException; + method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + 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 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); + method public abstract java.lang.String getScheme(); + method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders(); + method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException; + method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(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 abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException; + method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException; + 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 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; + } + + public abstract class FileTypeDetector { + ctor protected FileTypeDetector(); + method public abstract java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException; + } + +} + package java.security { public final class AccessControlContext { - ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner); ctor public AccessControlContext(java.security.ProtectionDomain[]); + ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner); method public void checkPermission(java.security.Permission) throws java.security.AccessControlException; method public java.security.DomainCombiner getDomainCombiner(); } @@ -47524,6 +48508,12 @@ package java.security { method public static java.security.AccessControlContext getContext(); } + public abstract interface AlgorithmConstraints { + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.AlgorithmParameters); + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key); + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.Key, java.security.AlgorithmParameters); + } + public class AlgorithmParameterGenerator { ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, java.lang.String); method public final java.security.AlgorithmParameters generateParameters(); @@ -47573,9 +48563,11 @@ package java.security { } public final class AllPermission extends java.security.Permission { - ctor public AllPermission(java.lang.String, java.lang.String); ctor public AllPermission(); + ctor public AllPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -47589,7 +48581,9 @@ package java.security { public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable { ctor public BasicPermission(java.lang.String); ctor public BasicPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -47618,9 +48612,24 @@ package java.security { method public boolean implies(java.security.CodeSource); } + public final class CryptoPrimitive extends java.lang.Enum { + method public static java.security.CryptoPrimitive valueOf(java.lang.String); + method public static final java.security.CryptoPrimitive[] values(); + enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER; + enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT; + enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION; + enum_constant public static final java.security.CryptoPrimitive KEY_WRAP; + enum_constant public static final java.security.CryptoPrimitive MAC; + enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST; + enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION; + enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM; + enum_constant public static final java.security.CryptoPrimitive SIGNATURE; + enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER; + } + public class DigestException extends java.security.GeneralSecurityException { - ctor public DigestException(java.lang.String); ctor public DigestException(); + ctor public DigestException(java.lang.String); ctor public DigestException(java.lang.String, java.lang.Throwable); ctor public DigestException(java.lang.Throwable); } @@ -47646,8 +48655,8 @@ package java.security { } public class GeneralSecurityException extends java.lang.Exception { - ctor public GeneralSecurityException(java.lang.String); ctor public GeneralSecurityException(); + ctor public GeneralSecurityException(java.lang.String); ctor public GeneralSecurityException(java.lang.String, java.lang.Throwable); ctor public GeneralSecurityException(java.lang.Throwable); } @@ -47663,8 +48672,8 @@ package java.security { public abstract deprecated class Identity implements java.security.Principal java.io.Serializable { ctor protected Identity(); - ctor public Identity(java.lang.String); ctor public Identity(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException; + ctor public Identity(java.lang.String); method public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException; method public java.security.Certificate[] certificates(); method public final boolean equals(java.lang.Object); @@ -47695,22 +48704,22 @@ package java.security { } public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException { - ctor public InvalidAlgorithmParameterException(java.lang.String); ctor public InvalidAlgorithmParameterException(); + ctor public InvalidAlgorithmParameterException(java.lang.String); ctor public InvalidAlgorithmParameterException(java.lang.String, java.lang.Throwable); ctor public InvalidAlgorithmParameterException(java.lang.Throwable); } public class InvalidKeyException extends java.security.KeyException { - ctor public InvalidKeyException(java.lang.String); ctor public InvalidKeyException(); + ctor public InvalidKeyException(java.lang.String); ctor public InvalidKeyException(java.lang.String, java.lang.Throwable); ctor public InvalidKeyException(java.lang.Throwable); } public class InvalidParameterException extends java.lang.IllegalArgumentException { - ctor public InvalidParameterException(java.lang.String); ctor public InvalidParameterException(); + ctor public InvalidParameterException(java.lang.String); } public abstract interface Key implements java.io.Serializable { @@ -47721,8 +48730,8 @@ package java.security { } public class KeyException extends java.security.GeneralSecurityException { - ctor public KeyException(java.lang.String); ctor public KeyException(); + ctor public KeyException(java.lang.String); ctor public KeyException(java.lang.String, java.lang.Throwable); ctor public KeyException(java.lang.Throwable); } @@ -47749,8 +48758,8 @@ package java.security { } public class KeyManagementException extends java.security.KeyException { - ctor public KeyManagementException(java.lang.String); ctor public KeyManagementException(); + ctor public KeyManagementException(java.lang.String); ctor public KeyManagementException(java.lang.String, java.lang.Throwable); ctor public KeyManagementException(java.lang.Throwable); } @@ -47771,8 +48780,8 @@ package java.security { method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final java.security.Provider getProvider(); method public void initialize(int); - method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; method public void initialize(int, java.security.SecureRandom); + method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; } public abstract class KeyPairGeneratorSpi { @@ -47875,8 +48884,8 @@ package java.security { } public class KeyStoreException extends java.security.GeneralSecurityException { - ctor public KeyStoreException(java.lang.String); ctor public KeyStoreException(); + ctor public KeyStoreException(java.lang.String); ctor public KeyStoreException(java.lang.String, java.lang.Throwable); ctor public KeyStoreException(java.lang.Throwable); } @@ -47938,22 +48947,24 @@ package java.security { } public class NoSuchAlgorithmException extends java.security.GeneralSecurityException { - ctor public NoSuchAlgorithmException(java.lang.String); ctor public NoSuchAlgorithmException(); + ctor public NoSuchAlgorithmException(java.lang.String); ctor public NoSuchAlgorithmException(java.lang.String, java.lang.Throwable); ctor public NoSuchAlgorithmException(java.lang.Throwable); } public class NoSuchProviderException extends java.security.GeneralSecurityException { - ctor public NoSuchProviderException(java.lang.String); ctor public NoSuchProviderException(); + ctor public NoSuchProviderException(java.lang.String); } public abstract class Permission implements java.security.Guard java.io.Serializable { ctor public Permission(java.lang.String); method public void checkGuard(java.lang.Object) throws java.lang.SecurityException; + method public abstract boolean equals(java.lang.Object); method public abstract java.lang.String getActions(); method public final java.lang.String getName(); + method public abstract int hashCode(); method public abstract boolean implies(java.security.Permission); method public java.security.PermissionCollection newPermissionCollection(); } @@ -48061,8 +49072,8 @@ package java.security { } public class ProviderException extends java.lang.RuntimeException { - ctor public ProviderException(java.lang.String); ctor public ProviderException(); + ctor public ProviderException(java.lang.String); ctor public ProviderException(java.lang.String, java.lang.Throwable); ctor public ProviderException(java.lang.Throwable); } @@ -48072,8 +49083,8 @@ package java.security { } public class SecureClassLoader extends java.lang.ClassLoader { - ctor protected SecureClassLoader(); ctor protected SecureClassLoader(java.lang.ClassLoader); + ctor protected SecureClassLoader(); method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int, java.security.CodeSource); method protected final java.lang.Class<?> defineClass(java.lang.String, java.nio.ByteBuffer, java.security.CodeSource); method protected java.security.PermissionCollection getPermissions(java.security.CodeSource); @@ -48106,10 +49117,10 @@ package java.security { method public static deprecated java.lang.String getAlgorithmProperty(java.lang.String, java.lang.String); method public static java.util.Set<java.lang.String> getAlgorithms(java.lang.String); method public static java.lang.String getProperty(java.lang.String); - method public static synchronized java.security.Provider getProvider(java.lang.String); - method public static synchronized java.security.Provider[] getProviders(); + method public static java.security.Provider getProvider(java.lang.String); + method public static java.security.Provider[] getProviders(); method public static java.security.Provider[] getProviders(java.lang.String); - method public static synchronized java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>); + method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>); method public static synchronized int insertProviderAt(java.security.Provider, int); method public static synchronized void removeProvider(java.lang.String); method public static void setProperty(java.lang.String, java.lang.String); @@ -48123,6 +49134,7 @@ package java.security { public abstract class Signature extends java.security.SignatureSpi { ctor protected Signature(java.lang.String); method public final java.lang.String getAlgorithm(); + method public java.security.SignatureSpi getCurrentSpi(); method public static java.security.Signature getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; method public static java.security.Signature getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; method public static java.security.Signature getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; @@ -48150,8 +49162,8 @@ package java.security { } public class SignatureException extends java.security.GeneralSecurityException { - ctor public SignatureException(java.lang.String); ctor public SignatureException(); + ctor public SignatureException(java.lang.String); ctor public SignatureException(java.lang.String, java.lang.Throwable); ctor public SignatureException(java.lang.Throwable); } @@ -48204,17 +49216,19 @@ package java.security { } public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException { - ctor public UnrecoverableKeyException(java.lang.String); ctor public UnrecoverableKeyException(); + ctor public UnrecoverableKeyException(java.lang.String); } public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable { ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); method public java.lang.String getUnresolvedActions(); method public java.security.cert.Certificate[] getUnresolvedCerts(); method public java.lang.String getUnresolvedName(); method public java.lang.String getUnresolvedType(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -48288,12 +49302,28 @@ package java.security.cert { } public class CRLException extends java.security.GeneralSecurityException { - ctor public CRLException(java.lang.String); ctor public CRLException(); + ctor public CRLException(java.lang.String); ctor public CRLException(java.lang.String, java.lang.Throwable); ctor public CRLException(java.lang.Throwable); } + public final class CRLReason extends java.lang.Enum { + method public static java.security.cert.CRLReason valueOf(java.lang.String); + method public static final java.security.cert.CRLReason[] values(); + enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED; + enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD; + enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION; + enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN; + enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL; + enum_constant public static final java.security.cert.CRLReason SUPERSEDED; + enum_constant public static final java.security.cert.CRLReason UNSPECIFIED; + enum_constant public static final java.security.cert.CRLReason UNUSED; + } + public abstract interface CRLSelector implements java.lang.Cloneable { method public abstract java.lang.Object clone(); method public abstract boolean match(java.security.cert.CRL); @@ -48326,10 +49356,10 @@ package java.security.cert { } public class CertPathBuilderException extends java.security.GeneralSecurityException { - ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable); - ctor public CertPathBuilderException(java.lang.Throwable); - ctor public CertPathBuilderException(java.lang.String); ctor public CertPathBuilderException(); + ctor public CertPathBuilderException(java.lang.String); + ctor public CertPathBuilderException(java.lang.Throwable); + ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable); } public abstract interface CertPathBuilderResult implements java.lang.Cloneable { @@ -48358,13 +49388,30 @@ package java.security.cert { } public class CertPathValidatorException extends java.security.GeneralSecurityException { - ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int); - ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable); - ctor public CertPathValidatorException(java.lang.Throwable); - ctor public CertPathValidatorException(java.lang.String); ctor public CertPathValidatorException(); + ctor public CertPathValidatorException(java.lang.String); + ctor public CertPathValidatorException(java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason); method public java.security.cert.CertPath getCertPath(); method public int getIndex(); + method public java.security.cert.CertPathValidatorException.Reason getReason(); + } + + public static final class CertPathValidatorException.BasicReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason { + method public static java.security.cert.CertPathValidatorException.BasicReason valueOf(java.lang.String); + method public static final java.security.cert.CertPathValidatorException.BasicReason[] values(); + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED; + } + + public static abstract interface CertPathValidatorException.Reason implements java.io.Serializable { } public abstract interface CertPathValidatorResult implements java.lang.Cloneable { @@ -48395,10 +49442,10 @@ package java.security.cert { } public class CertStoreException extends java.security.GeneralSecurityException { - ctor public CertStoreException(java.lang.String, java.lang.Throwable); - ctor public CertStoreException(java.lang.Throwable); - ctor public CertStoreException(java.lang.String); ctor public CertStoreException(); + ctor public CertStoreException(java.lang.String); + ctor public CertStoreException(java.lang.Throwable); + ctor public CertStoreException(java.lang.String, java.lang.Throwable); } public abstract interface CertStoreParameters implements java.lang.Cloneable { @@ -48428,22 +49475,22 @@ package java.security.cert { } public class CertificateEncodingException extends java.security.cert.CertificateException { - ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(); + ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(java.lang.String, java.lang.Throwable); ctor public CertificateEncodingException(java.lang.Throwable); } public class CertificateException extends java.security.GeneralSecurityException { - ctor public CertificateException(java.lang.String); ctor public CertificateException(); + ctor public CertificateException(java.lang.String); ctor public CertificateException(java.lang.String, java.lang.Throwable); ctor public CertificateException(java.lang.Throwable); } public class CertificateExpiredException extends java.security.cert.CertificateException { - ctor public CertificateExpiredException(java.lang.String); ctor public CertificateExpiredException(); + ctor public CertificateExpiredException(java.lang.String); } public class CertificateFactory { @@ -48476,28 +49523,44 @@ package java.security.cert { } public class CertificateNotYetValidException extends java.security.cert.CertificateException { - ctor public CertificateNotYetValidException(java.lang.String); ctor public CertificateNotYetValidException(); + ctor public CertificateNotYetValidException(java.lang.String); } public class CertificateParsingException extends java.security.cert.CertificateException { - ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(); + ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(java.lang.String, java.lang.Throwable); ctor public CertificateParsingException(java.lang.Throwable); } + public class CertificateRevokedException extends java.security.cert.CertificateException { + ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String, java.security.cert.Extension>); + method public javax.security.auth.x500.X500Principal getAuthorityName(); + method public java.util.Map<java.lang.String, java.security.cert.Extension> getExtensions(); + method public java.util.Date getInvalidityDate(); + method public java.util.Date getRevocationDate(); + method public java.security.cert.CRLReason getRevocationReason(); + } + public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters { - ctor public CollectionCertStoreParameters(); ctor public CollectionCertStoreParameters(java.util.Collection<?>); + ctor public CollectionCertStoreParameters(); method public java.lang.Object clone(); method public java.util.Collection<?> getCollection(); } + public abstract interface Extension { + method public abstract void encode(java.io.OutputStream) throws java.io.IOException; + method public abstract java.lang.String getId(); + method public abstract byte[] getValue(); + method public abstract boolean isCritical(); + } + public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters { ctor public LDAPCertStoreParameters(java.lang.String, int); - ctor public LDAPCertStoreParameters(); ctor public LDAPCertStoreParameters(java.lang.String); + ctor public LDAPCertStoreParameters(); method public java.lang.Object clone(); method public int getPort(); method public java.lang.String getServerName(); @@ -48564,6 +49627,19 @@ package java.security.cert { method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException; } + public final class PKIXReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason { + method public static java.security.cert.PKIXReason valueOf(java.lang.String); + method public static final java.security.cert.PKIXReason[] values(); + enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE; + enum_constant public static final java.security.cert.PKIXReason INVALID_NAME; + enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY; + enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING; + enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT; + enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR; + enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG; + enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT; + } + public abstract interface PolicyNode { method public abstract java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren(); method public abstract int getDepth(); @@ -48583,8 +49659,8 @@ package java.security.cert { public class TrustAnchor { ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]); - ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]); ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]); + ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]); method public final javax.security.auth.x500.X500Principal getCA(); method public final java.lang.String getCAName(); method public final java.security.PublicKey getCAPublicKey(); @@ -48617,6 +49693,7 @@ package java.security.cert { method public javax.security.auth.x500.X500Principal getCertificateIssuer(); method public abstract byte[] getEncoded() throws java.security.cert.CRLException; method public abstract java.util.Date getRevocationDate(); + method public java.security.cert.CRLReason getRevocationReason(); method public abstract java.math.BigInteger getSerialNumber(); method public abstract boolean hasExtensions(); method public abstract java.lang.String toString(); @@ -48892,8 +49969,8 @@ package java.security.spec { } public class EllipticCurve { - ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]); ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger); + ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]); method public java.math.BigInteger getA(); method public java.math.BigInteger getB(); method public java.security.spec.ECField getField(); @@ -48907,15 +49984,15 @@ package java.security.spec { } public class InvalidKeySpecException extends java.security.GeneralSecurityException { - ctor public InvalidKeySpecException(java.lang.String); ctor public InvalidKeySpecException(); + ctor public InvalidKeySpecException(java.lang.String); ctor public InvalidKeySpecException(java.lang.String, java.lang.Throwable); ctor public InvalidKeySpecException(java.lang.Throwable); } public class InvalidParameterSpecException extends java.security.GeneralSecurityException { - ctor public InvalidParameterSpecException(java.lang.String); ctor public InvalidParameterSpecException(); + ctor public InvalidParameterSpecException(java.lang.String); } public abstract interface KeySpec { @@ -48936,8 +50013,8 @@ package java.security.spec { } public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec { - ctor public PSSParameterSpec(int); ctor public PSSParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, int, int); + ctor public PSSParameterSpec(int); method public java.lang.String getDigestAlgorithm(); method public java.lang.String getMGFAlgorithm(); method public java.security.spec.AlgorithmParameterSpec getMGFParameters(); @@ -49006,28 +50083,28 @@ package java.sql { public abstract interface Array { method public abstract void free() throws java.sql.SQLException; method public abstract java.lang.Object getArray() throws java.sql.SQLException; + method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getArray(long, int) throws java.sql.SQLException; method public abstract java.lang.Object getArray(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; - method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract int getBaseType() throws java.sql.SQLException; method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; - method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; } - public class BatchUpdateException extends java.sql.SQLException implements java.io.Serializable { + public class BatchUpdateException extends java.sql.SQLException { + ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]); + ctor public BatchUpdateException(java.lang.String, int[]); + ctor public BatchUpdateException(int[]); ctor public BatchUpdateException(); ctor public BatchUpdateException(java.lang.Throwable); ctor public BatchUpdateException(int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, java.lang.String, int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[], java.lang.Throwable); - ctor public BatchUpdateException(int[]); - ctor public BatchUpdateException(java.lang.String, int[]); - ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]); - ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]); method public int[] getUpdateCounts(); } @@ -49037,8 +50114,8 @@ package java.sql { method public abstract java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException; method public abstract byte[] getBytes(long, int) throws java.sql.SQLException; method public abstract long length() throws java.sql.SQLException; - method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException; method public abstract long position(byte[], long) throws java.sql.SQLException; + method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException; method public abstract java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException; method public abstract int setBytes(long, byte[]) throws java.sql.SQLException; method public abstract int setBytes(long, byte[], int, int) throws java.sql.SQLException; @@ -49048,8 +50125,8 @@ package java.sql { public abstract interface CallableStatement implements java.sql.PreparedStatement { method public abstract java.sql.Array getArray(int) throws java.sql.SQLException; method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException; @@ -49144,9 +50221,9 @@ package java.sql { method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException; method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException; method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException; @@ -49175,8 +50252,8 @@ package java.sql { method public abstract java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException; method public abstract java.lang.String getSubString(long, int) throws java.sql.SQLException; method public abstract long length() throws java.sql.SQLException; - method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException; method public abstract long position(java.lang.String, long) throws java.sql.SQLException; + method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException; method public abstract java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException; method public abstract java.io.Writer setCharacterStream(long) throws java.sql.SQLException; method public abstract int setString(long, java.lang.String) throws java.sql.SQLException; @@ -49214,10 +50291,10 @@ package java.sql { method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int) throws java.sql.SQLException; method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int, int) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String) throws java.sql.SQLException; - method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException; - method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws java.sql.SQLException; method public abstract void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException; method public abstract void rollback() throws java.sql.SQLException; @@ -49239,7 +50316,7 @@ package java.sql { field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8 } - public class DataTruncation extends java.sql.SQLWarning implements java.io.Serializable { + public class DataTruncation extends java.sql.SQLWarning { ctor public DataTruncation(int, boolean, boolean, int, int); ctor public DataTruncation(int, boolean, boolean, int, int, java.lang.Throwable); method public int getDataSize(); @@ -49501,17 +50578,17 @@ package java.sql { } public class DriverManager { - method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException; - method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException; + method public static synchronized void deregisterDriver(java.sql.Driver) throws java.sql.SQLException; method public static java.sql.Connection getConnection(java.lang.String, java.util.Properties) throws java.sql.SQLException; method public static java.sql.Connection getConnection(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException; method public static java.sql.Driver getDriver(java.lang.String) throws java.sql.SQLException; method public static java.util.Enumeration<java.sql.Driver> getDrivers(); method public static deprecated java.io.PrintStream getLogStream(); method public static java.io.PrintWriter getLogWriter(); method public static int getLoginTimeout(); method public static void println(java.lang.String); - method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException; + method public static synchronized void registerDriver(java.sql.Driver) throws java.sql.SQLException; method public static deprecated void setLogStream(java.io.PrintStream); method public static void setLogWriter(java.io.PrintWriter); method public static void setLoginTimeout(int); @@ -49590,8 +50667,8 @@ package java.sql { method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(int, int) throws java.sql.SQLException; method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException; method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException; @@ -49608,8 +50685,8 @@ package java.sql { public abstract interface Ref { method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; - method public abstract java.lang.Object getObject() throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; + method public abstract java.lang.Object getObject() throws java.sql.SQLException; method public abstract void setObject(java.lang.Object) throws java.sql.SQLException; } @@ -49627,10 +50704,10 @@ package java.sql { method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; method public abstract java.io.InputStream getAsciiStream(int) throws java.sql.SQLException; method public abstract java.io.InputStream getAsciiStream(java.lang.String) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract java.io.InputStream getBinaryStream(int) throws java.sql.SQLException; method public abstract java.io.InputStream getBinaryStream(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; @@ -49648,8 +50725,8 @@ package java.sql { method public abstract int getConcurrency() throws java.sql.SQLException; method public abstract java.lang.String getCursorName() throws java.sql.SQLException; method public abstract java.sql.Date getDate(int) throws java.sql.SQLException; - method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract double getDouble(int) throws java.sql.SQLException; method public abstract double getDouble(java.lang.String) throws java.sql.SQLException; @@ -49670,8 +50747,8 @@ package java.sql { method public abstract java.lang.String getNString(int) throws java.sql.SQLException; method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException; method public abstract java.lang.Object getObject(int) throws java.sql.SQLException; - method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.lang.String, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException; method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException; @@ -49686,12 +50763,12 @@ package java.sql { method public abstract java.lang.String getString(int) throws java.sql.SQLException; method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Time getTime(int) throws java.sql.SQLException; - method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException; - method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract int getType() throws java.sql.SQLException; method public abstract java.net.URL getURL(int) throws java.sql.SQLException; @@ -49781,10 +50858,10 @@ package java.sql { method public abstract void updateNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void updateNull(int) throws java.sql.SQLException; method public abstract void updateNull(java.lang.String) throws java.sql.SQLException; - method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void updateObject(int, java.lang.Object, int) throws java.sql.SQLException; - method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void updateObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; method public abstract void updateRef(int, java.sql.Ref) throws java.sql.SQLException; method public abstract void updateRef(java.lang.String, java.sql.Ref) throws java.sql.SQLException; method public abstract void updateRow() throws java.sql.SQLException; @@ -49863,10 +50940,10 @@ package java.sql { ctor public SQLClientInfoException(java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); - ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); - ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); method public java.util.Map<java.lang.String, java.sql.ClientInfoStatus> getFailedProperties(); } @@ -49887,11 +50964,11 @@ package java.sql { ctor public SQLDataException(java.lang.String, java.lang.String, int, java.lang.Throwable); } - public class SQLException extends java.lang.Exception implements java.lang.Iterable java.io.Serializable { - ctor public SQLException(); - ctor public SQLException(java.lang.String); - ctor public SQLException(java.lang.String, java.lang.String); + public class SQLException extends java.lang.Exception implements java.lang.Iterable { ctor public SQLException(java.lang.String, java.lang.String, int); + ctor public SQLException(java.lang.String, java.lang.String); + ctor public SQLException(java.lang.String); + ctor public SQLException(); ctor public SQLException(java.lang.Throwable); ctor public SQLException(java.lang.String, java.lang.Throwable); ctor public SQLException(java.lang.String, java.lang.String, java.lang.Throwable); @@ -50018,7 +51095,7 @@ package java.sql { method public abstract void writeURL(java.net.URL) throws java.sql.SQLException; } - public final class SQLPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { + public final class SQLPermission extends java.security.BasicPermission { ctor public SQLPermission(java.lang.String); ctor public SQLPermission(java.lang.String, java.lang.String); } @@ -50089,11 +51166,11 @@ package java.sql { ctor public SQLTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable); } - public class SQLWarning extends java.sql.SQLException implements java.io.Serializable { - ctor public SQLWarning(); - ctor public SQLWarning(java.lang.String); - ctor public SQLWarning(java.lang.String, java.lang.String); + public class SQLWarning extends java.sql.SQLException { ctor public SQLWarning(java.lang.String, java.lang.String, int); + ctor public SQLWarning(java.lang.String, java.lang.String); + ctor public SQLWarning(java.lang.String); + ctor public SQLWarning(); ctor public SQLWarning(java.lang.Throwable); ctor public SQLWarning(java.lang.String, java.lang.Throwable); ctor public SQLWarning(java.lang.String, java.lang.String, java.lang.Throwable); @@ -50182,15 +51259,15 @@ package java.sql { } public class Timestamp extends java.util.Date { - ctor public deprecated Timestamp(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException; + ctor public deprecated Timestamp(int, int, int, int, int, int, int); ctor public Timestamp(long); method public boolean after(java.sql.Timestamp); method public boolean before(java.sql.Timestamp); method public int compareTo(java.sql.Timestamp); method public boolean equals(java.sql.Timestamp); method public int getNanos(); - method public void setNanos(int) throws java.lang.IllegalArgumentException; - method public static java.sql.Timestamp valueOf(java.lang.String) throws java.lang.IllegalArgumentException; + method public void setNanos(int); + method public static java.sql.Timestamp valueOf(java.lang.String); } public class Types { @@ -50270,11 +51347,11 @@ package java.text { } public class AttributedString { + ctor public AttributedString(java.lang.String); + ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>); ctor public AttributedString(java.text.AttributedCharacterIterator); ctor public AttributedString(java.text.AttributedCharacterIterator, int, int); ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]); - ctor public AttributedString(java.lang.String); - ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>); method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object); method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object, int, int); method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>, int, int); @@ -50284,9 +51361,9 @@ package java.text { } public final class Bidi { + ctor public Bidi(java.lang.String, int); ctor public Bidi(java.text.AttributedCharacterIterator); ctor public Bidi(char[], int, byte[], int, int, int); - ctor public Bidi(java.lang.String, int); method public boolean baseIsLeftToRight(); method public java.text.Bidi createLineBidi(int, int); method public int getBaseLevel(); @@ -50313,7 +51390,7 @@ package java.text { method public abstract int current(); method public abstract int first(); method public abstract int following(int); - method public static java.util.Locale[] getAvailableLocales(); + method public static synchronized java.util.Locale[] getAvailableLocales(); method public static java.text.BreakIterator getCharacterInstance(); method public static java.text.BreakIterator getCharacterInstance(java.util.Locale); method public static java.text.BreakIterator getLineInstance(); @@ -50325,8 +51402,8 @@ package java.text { method public static java.text.BreakIterator getWordInstance(java.util.Locale); method public boolean isBoundary(int); method public abstract int last(); - method public abstract int next(); method public abstract int next(int); + method public abstract int next(); method public int preceding(int); method public abstract int previous(); method public void setText(java.lang.String); @@ -50349,11 +51426,11 @@ package java.text { } public class ChoiceFormat extends java.text.NumberFormat { - ctor public ChoiceFormat(double[], java.lang.String[]); ctor public ChoiceFormat(java.lang.String); + ctor public ChoiceFormat(double[], java.lang.String[]); method public void applyPattern(java.lang.String); - method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.Object[] getFormats(); method public double[] getLimits(); method public static final double nextDouble(double); @@ -50373,8 +51450,8 @@ package java.text { method public void reset(); method public static final short secondaryOrder(int); method public void setOffset(int); - method public void setText(java.text.CharacterIterator); method public void setText(java.lang.String); + method public void setText(java.text.CharacterIterator); method public static final short tertiaryOrder(int); field public static final int NULLORDER = -1; // 0xffffffff } @@ -50389,18 +51466,18 @@ package java.text { public abstract class Collator implements java.lang.Cloneable java.util.Comparator { ctor protected Collator(); method public java.lang.Object clone(); - method public int compare(java.lang.Object, java.lang.Object); method public abstract int compare(java.lang.String, java.lang.String); + method public int compare(java.lang.Object, java.lang.Object); method public boolean equals(java.lang.String, java.lang.String); - method public static java.util.Locale[] getAvailableLocales(); + method public static synchronized java.util.Locale[] getAvailableLocales(); method public abstract java.text.CollationKey getCollationKey(java.lang.String); - method public int getDecomposition(); - method public static java.text.Collator getInstance(); - method public static java.text.Collator getInstance(java.util.Locale); - method public int getStrength(); + method public synchronized int getDecomposition(); + method public static synchronized java.text.Collator getInstance(); + method public static synchronized java.text.Collator getInstance(java.util.Locale); + method public synchronized int getStrength(); method public abstract int hashCode(); - method public void setDecomposition(int); - method public void setStrength(int); + method public synchronized void setDecomposition(int); + method public synchronized void setStrength(int); field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1 field public static final int FULL_DECOMPOSITION = 2; // 0x2 field public static final int IDENTICAL = 3; // 0x3 @@ -50413,8 +51490,8 @@ package java.text { public abstract class DateFormat extends java.text.Format { ctor protected DateFormat(); method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.String format(java.util.Date); method public abstract java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.String format(java.util.Date); method public static java.util.Locale[] getAvailableLocales(); method public java.util.Calendar getCalendar(); method public static final java.text.DateFormat getDateInstance(); @@ -50519,9 +51596,9 @@ package java.text { ctor public DecimalFormat(java.lang.String, java.text.DecimalFormatSymbols); method public void applyLocalizedPattern(java.lang.String); method public void applyPattern(java.lang.String); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.DecimalFormatSymbols getDecimalFormatSymbols(); method public int getGroupingSize(); method public int getMultiplier(); @@ -50557,15 +51634,17 @@ package java.text { method public java.lang.String getExponentSeparator(); method public char getGroupingSeparator(); method public java.lang.String getInfinity(); - method public static java.text.DecimalFormatSymbols getInstance(); - method public static java.text.DecimalFormatSymbols getInstance(java.util.Locale); + method public static final java.text.DecimalFormatSymbols getInstance(); + method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale); method public java.lang.String getInternationalCurrencySymbol(); method public char getMinusSign(); + method public java.lang.String getMinusSignString(); method public char getMonetaryDecimalSeparator(); method public java.lang.String getNaN(); method public char getPatternSeparator(); method public char getPerMill(); method public char getPercent(); + method public java.lang.String getPercentString(); method public char getZeroDigit(); method public void setCurrency(java.util.Currency); method public void setCurrencySymbol(java.lang.String); @@ -50602,8 +51681,8 @@ package java.text { method public final java.lang.String format(java.lang.Object); method public abstract java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object); - method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException; method public abstract java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException; } public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute { @@ -50611,17 +51690,17 @@ package java.text { } public class MessageFormat extends java.text.Format { - ctor public MessageFormat(java.lang.String, java.util.Locale); ctor public MessageFormat(java.lang.String); + ctor public MessageFormat(java.lang.String, java.util.Locale); method public void applyPattern(java.lang.String); method public final java.lang.StringBuffer format(java.lang.Object[], java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public static java.lang.String format(java.lang.String, java.lang.Object...); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.Format[] getFormats(); method public java.text.Format[] getFormatsByArgumentIndex(); method public java.util.Locale getLocale(); - method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException; method public java.lang.Object[] parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException; method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); method public void setFormat(int, java.text.Format); method public void setFormatByArgumentIndex(int, java.text.Format); @@ -50652,11 +51731,11 @@ package java.text { public abstract class NumberFormat extends java.text.Format { ctor protected NumberFormat(); + method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public final java.lang.String format(double); - method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public final java.lang.String format(long); + method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); - method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public static java.util.Locale[] getAvailableLocales(); method public java.util.Currency getCurrency(); method public static final java.text.NumberFormat getCurrencyInstance(); @@ -50676,8 +51755,8 @@ package java.text { method public java.math.RoundingMode getRoundingMode(); method public boolean isGroupingUsed(); method public boolean isParseIntegerOnly(); - method public java.lang.Number parse(java.lang.String) throws java.text.ParseException; method public abstract java.lang.Number parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Number parse(java.lang.String) throws java.text.ParseException; method public final java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); method public void setCurrency(java.util.Currency); method public void setGroupingUsed(boolean); @@ -50721,10 +51800,10 @@ package java.text { public class RuleBasedCollator extends java.text.Collator { ctor public RuleBasedCollator(java.lang.String) throws java.text.ParseException; - method public int compare(java.lang.String, java.lang.String); - method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator); + method public synchronized int compare(java.lang.String, java.lang.String); method public java.text.CollationElementIterator getCollationElementIterator(java.lang.String); - method public java.text.CollationKey getCollationKey(java.lang.String); + method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator); + method public synchronized java.text.CollationKey getCollationKey(java.lang.String); method public java.lang.String getRules(); method public int hashCode(); } @@ -50732,8 +51811,8 @@ package java.text { public class SimpleDateFormat extends java.text.DateFormat { ctor public SimpleDateFormat(); ctor public SimpleDateFormat(java.lang.String); - ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols); ctor public SimpleDateFormat(java.lang.String, java.util.Locale); + ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols); method public void applyLocalizedPattern(java.lang.String); method public void applyPattern(java.lang.String); method public java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); @@ -50880,7 +51959,7 @@ package java.util { method public int size(); } - public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.RandomAccess java.io.Serializable { + public class ArrayList 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>); @@ -50893,109 +51972,109 @@ package java.util { public class Arrays { method public static java.util.List<T> asList(T...); - method public static int binarySearch(byte[], byte); - method public static int binarySearch(byte[], int, int, byte); + method public static int binarySearch(long[], long); + method public static int binarySearch(long[], int, int, long); + method public static int binarySearch(int[], int); + method public static int binarySearch(int[], int, int, int); + method public static int binarySearch(short[], short); + method public static int binarySearch(short[], int, int, short); method public static int binarySearch(char[], char); method public static int binarySearch(char[], int, int, char); + method public static int binarySearch(byte[], byte); + method public static int binarySearch(byte[], int, int, byte); method public static int binarySearch(double[], double); method public static int binarySearch(double[], int, int, double); method public static int binarySearch(float[], float); method public static int binarySearch(float[], int, int, float); - method public static int binarySearch(int[], int); - method public static int binarySearch(int[], int, int, int); - method public static int binarySearch(long[], long); - method public static int binarySearch(long[], int, int, long); 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 int binarySearch(short[], short); - method public static int binarySearch(short[], int, int, short); - method public static boolean[] copyOf(boolean[], int); + method public static T[] copyOf(T[], int); + method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>); method public static byte[] copyOf(byte[], int); - method public static char[] copyOf(char[], int); - method public static double[] copyOf(double[], int); - method public static float[] copyOf(float[], int); + method public static short[] copyOf(short[], int); method public static int[] copyOf(int[], int); method public static long[] copyOf(long[], int); - method public static short[] copyOf(short[], int); - method public static T[] copyOf(T[], int); - method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>); - method public static boolean[] copyOfRange(boolean[], int, int); + method public static char[] copyOf(char[], int); + 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 byte[] copyOfRange(byte[], int, int); - method public static char[] copyOfRange(char[], int, int); - method public static double[] copyOfRange(double[], int, int); - method public static float[] copyOfRange(float[], int, int); + method public static short[] copyOfRange(short[], int, int); method public static int[] copyOfRange(int[], int, int); method public static long[] copyOfRange(long[], int, int); - method public static short[] copyOfRange(short[], int, 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 char[] copyOfRange(char[], int, int); + method public static float[] copyOfRange(float[], int, int); + method public static double[] copyOfRange(double[], int, int); + method public static boolean[] copyOfRange(boolean[], int, int); method public static boolean deepEquals(java.lang.Object[], java.lang.Object[]); method public static int deepHashCode(java.lang.Object[]); method public static java.lang.String deepToString(java.lang.Object[]); - method public static boolean equals(byte[], byte[]); + method public static boolean equals(long[], long[]); + method public static boolean equals(int[], int[]); method public static boolean equals(short[], short[]); method public static boolean equals(char[], char[]); - method public static boolean equals(int[], int[]); - method public static boolean equals(long[], long[]); - method public static boolean equals(float[], float[]); - method public static boolean equals(double[], double[]); + method public static boolean equals(byte[], byte[]); method public static boolean equals(boolean[], boolean[]); + method public static boolean equals(double[], double[]); + method public static boolean equals(float[], float[]); method public static boolean equals(java.lang.Object[], java.lang.Object[]); - method public static void fill(byte[], byte); - method public static void fill(byte[], int, int, byte); + method public static void fill(long[], long); + method public static void fill(long[], int, int, long); + method public static void fill(int[], int); + method public static void fill(int[], int, int, int); method public static void fill(short[], short); method public static void fill(short[], int, int, short); method public static void fill(char[], char); method public static void fill(char[], int, int, char); - method public static void fill(int[], int); - method public static void fill(int[], int, int, int); - method public static void fill(long[], long); - method public static void fill(long[], int, int, long); - method public static void fill(float[], float); - method public static void fill(float[], int, int, float); - method public static void fill(double[], double); - method public static void fill(double[], int, int, double); + method public static void fill(byte[], byte); + method public static void fill(byte[], int, int, byte); method public static void fill(boolean[], boolean); method public static void fill(boolean[], int, int, boolean); + method public static void fill(double[], double); + method public static void fill(double[], int, int, double); + method public static void fill(float[], float); + method public static void fill(float[], int, int, float); method public static void fill(java.lang.Object[], java.lang.Object); method public static void fill(java.lang.Object[], int, int, java.lang.Object); - method public static int hashCode(boolean[]); + method public static int hashCode(long[]); method public static int hashCode(int[]); method public static int hashCode(short[]); method public static int hashCode(char[]); method public static int hashCode(byte[]); - method public static int hashCode(long[]); + method public static int hashCode(boolean[]); method public static int hashCode(float[]); method public static int hashCode(double[]); method public static int hashCode(java.lang.Object[]); - method public static void sort(byte[]); - method public static void sort(byte[], int, int); - method public static void sort(char[]); - method public static void sort(char[], int, int); - method public static void sort(double[]); - method public static void sort(double[], int, int); - method public static void sort(float[]); - method public static void sort(float[], int, int); method public static void sort(int[]); method public static void sort(int[], int, int); method public static void sort(long[]); method public static void sort(long[], int, int); method public static void sort(short[]); method public static void sort(short[], int, int); + method public static void sort(char[]); + method public static void sort(char[], int, int); + method public static void sort(byte[]); + method public static void sort(byte[], int, int); + method public static void sort(float[]); + method public static void sort(float[], int, int); + method public static void sort(double[]); + 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[], int, int, java.util.Comparator<? super T>); method public static void sort(T[], java.util.Comparator<? super T>); - method public static java.lang.String toString(boolean[]); - method public static java.lang.String toString(byte[]); - method public static java.lang.String toString(char[]); - method public static java.lang.String toString(double[]); - method public static java.lang.String toString(float[]); - method public static java.lang.String toString(int[]); + method public static void sort(T[], int, int, java.util.Comparator<? super T>); method public static java.lang.String toString(long[]); + method public static java.lang.String toString(int[]); method public static java.lang.String toString(short[]); + method public static java.lang.String toString(char[]); + method public static java.lang.String toString(byte[]); + method public static java.lang.String toString(boolean[]); + method public static java.lang.String toString(float[]); + method public static java.lang.String toString(double[]); method public static java.lang.String toString(java.lang.Object[]); } @@ -51006,8 +52085,8 @@ package java.util { method public void andNot(java.util.BitSet); method public int cardinality(); method public void clear(int); - method public void clear(); method public void clear(int, int); + method public void clear(); method public java.lang.Object clone(); method public void flip(int); method public void flip(int, int); @@ -51023,8 +52102,8 @@ package java.util { method public int previousSetBit(int); method public void set(int); method public void set(int, boolean); - method public void set(int, int, boolean); method public void set(int, int); + method public void set(int, int, boolean); method public int size(); method public byte[] toByteArray(); method public long[] toLongArray(); @@ -51056,10 +52135,10 @@ package java.util { method public java.util.Map<java.lang.String, java.lang.Integer> getDisplayNames(int, int, java.util.Locale); method public int getFirstDayOfWeek(); method public abstract int getGreatestMinimum(int); - method public static synchronized java.util.Calendar getInstance(); - method public static synchronized java.util.Calendar getInstance(java.util.Locale); - method public static synchronized java.util.Calendar getInstance(java.util.TimeZone); - method public static synchronized java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale); + method public static java.util.Calendar getInstance(); + method public static java.util.Calendar getInstance(java.util.TimeZone); + method public static java.util.Calendar getInstance(java.util.Locale); + method public static java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale); method public abstract int getLeastMaximum(int); method public abstract int getMaximum(int); method public int getMinimalDaysInFirstWeek(); @@ -51067,11 +52146,14 @@ package java.util { method public final java.util.Date getTime(); method public long getTimeInMillis(); method public java.util.TimeZone getTimeZone(); + method public int getWeekYear(); + method public int getWeeksInWeekYear(); method protected final int internalGet(int); method public boolean isLenient(); method public final boolean isSet(int); - method public void roll(int, int); + method public boolean isWeekDateSupported(); method public abstract void roll(int, boolean); + method public void roll(int, int); method public void set(int, int); method public final void set(int, int, int); method public final void set(int, int, int, int, int); @@ -51082,6 +52164,7 @@ package java.util { method public final void setTime(java.util.Date); method public void setTimeInMillis(long); method public void setTimeZone(java.util.TimeZone); + method public void setWeekDate(int, int, int); field public static final int ALL_STYLES = 0; // 0x0 field public static final int AM = 0; // 0x0 field public static final int AM_PM = 9; // 0x9 @@ -51198,15 +52281,15 @@ package java.util { 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<E> synchronizedSet(java.util.Set<E>); + 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<E> synchronizedSortedSet(java.util.SortedSet<E>); - method public static java.util.Collection<E> unmodifiableCollection(java.util.Collection<? extends E>); - method public static java.util.List<E> unmodifiableList(java.util.List<? extends E>); + 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<E> unmodifiableSet(java.util.Set<? extends E>); + 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<E> unmodifiableSortedSet(java.util.SortedSet<E>); + method public static 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; @@ -51220,8 +52303,8 @@ package java.util { public class ConcurrentModificationException extends java.lang.RuntimeException { ctor public ConcurrentModificationException(); ctor public ConcurrentModificationException(java.lang.String); - ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); ctor public ConcurrentModificationException(java.lang.Throwable); + ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); } public final class Currency implements java.io.Serializable { @@ -51232,16 +52315,17 @@ package java.util { method public java.lang.String getDisplayName(java.util.Locale); method public static java.util.Currency getInstance(java.lang.String); method public static java.util.Currency getInstance(java.util.Locale); + method public int getNumericCode(); method public java.lang.String getSymbol(); method public java.lang.String getSymbol(java.util.Locale); } public class Date implements java.lang.Cloneable java.lang.Comparable java.io.Serializable { ctor public Date(); + ctor public Date(long); ctor public deprecated Date(int, int, int); ctor public deprecated Date(int, int, int, int, int); ctor public deprecated Date(int, int, int, int, int, int); - ctor public Date(long); ctor public deprecated Date(java.lang.String); method public static deprecated long UTC(int, int, int, int, int, int); method public boolean after(java.util.Date); @@ -51319,7 +52403,7 @@ package java.util { ctor public EmptyStackException(); } - public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { + public class EnumMap 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>); @@ -51352,8 +52436,8 @@ package java.util { } public abstract class EventListenerProxy implements java.util.EventListener { - ctor public EventListenerProxy(java.util.EventListener); - method public java.util.EventListener getListener(); + ctor public EventListenerProxy(T); + method public T getListener(); } public class EventObject implements java.io.Serializable { @@ -51362,14 +52446,14 @@ package java.util { field protected transient java.lang.Object source; } - public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException implements java.io.Serializable { + public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException { ctor public FormatFlagsConversionMismatchException(java.lang.String, char); method public char getConversion(); method public java.lang.String getFlags(); } public abstract interface Formattable { - method public abstract void formatTo(java.util.Formatter, int, int, int) throws java.util.IllegalFormatException; + method public abstract void formatTo(java.util.Formatter, int, int, int); } public class FormattableFlags { @@ -51389,10 +52473,10 @@ package java.util { ctor public Formatter(java.io.File) throws java.io.FileNotFoundException; ctor public Formatter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; ctor public Formatter(java.io.File, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.PrintStream); ctor public Formatter(java.io.OutputStream); ctor public Formatter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; ctor public Formatter(java.io.OutputStream, java.lang.String, java.util.Locale) throws java.io.UnsupportedEncodingException; - ctor public Formatter(java.io.PrintStream); method public void close(); method public void flush(); method public java.util.Formatter format(java.lang.String, java.lang.Object...); @@ -51409,18 +52493,18 @@ package java.util { enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC; } - public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable { + public class FormatterClosedException extends java.lang.IllegalStateException { ctor public FormatterClosedException(); } public class GregorianCalendar extends java.util.Calendar { ctor public GregorianCalendar(); + ctor public GregorianCalendar(java.util.TimeZone); + ctor public GregorianCalendar(java.util.Locale); + ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale); ctor public GregorianCalendar(int, int, int); ctor public GregorianCalendar(int, int, int, int, int); ctor public GregorianCalendar(int, int, int, int, int, int); - ctor public GregorianCalendar(java.util.Locale); - ctor public GregorianCalendar(java.util.TimeZone); - ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale); method public void add(int, int); method protected void computeFields(); method protected void computeTime(); @@ -51430,16 +52514,17 @@ package java.util { method public int getMaximum(int); method public int getMinimum(int); method public boolean isLeapYear(int); + method public final boolean isWeekDateSupported(); method public void roll(int, boolean); method public void setGregorianChange(java.util.Date); field public static final int AD = 1; // 0x1 field public static final int BC = 0; // 0x0 } - public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable { - ctor public HashMap(); - ctor public HashMap(int); + public class HashMap 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(); ctor public HashMap(java.util.Map<? extends K, ? extends V>); method public java.lang.Object clone(); method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); @@ -51447,36 +52532,36 @@ package java.util { public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { ctor public HashSet(); - ctor public HashSet(int); - ctor public HashSet(int, float); ctor public HashSet(java.util.Collection<? extends E>); + ctor public HashSet(int, float); + ctor public HashSet(int); method public java.lang.Object clone(); method public java.util.Iterator<E> iterator(); method public int size(); } public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable { - ctor public Hashtable(); - ctor public Hashtable(int); ctor public Hashtable(int, float); + ctor public Hashtable(int); + ctor public Hashtable(); ctor public Hashtable(java.util.Map<? extends K, ? extends V>); method public synchronized void clear(); method public synchronized java.lang.Object clone(); - method public boolean contains(java.lang.Object); + method public synchronized boolean contains(java.lang.Object); method public synchronized boolean containsKey(java.lang.Object); - method public synchronized boolean containsValue(java.lang.Object); + method public boolean containsValue(java.lang.Object); method public synchronized java.util.Enumeration<V> elements(); - method public synchronized java.util.Set<java.util.Map.Entry<K, V>> entrySet(); + method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); method public synchronized V get(java.lang.Object); method public synchronized boolean isEmpty(); - method public synchronized java.util.Set<K> keySet(); + method public java.util.Set<K> keySet(); method public synchronized java.util.Enumeration<K> keys(); method public synchronized V put(K, V); method public synchronized void putAll(java.util.Map<? extends K, ? extends V>); method protected void rehash(); method public synchronized V remove(java.lang.Object); method public synchronized int size(); - method public synchronized java.util.Collection<V> values(); + method public java.util.Collection<V> values(); } public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { @@ -51487,21 +52572,21 @@ package java.util { method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); } - public class IllegalFormatCodePointException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatCodePointException extends java.util.IllegalFormatException { ctor public IllegalFormatCodePointException(int); method public int getCodePoint(); } - public class IllegalFormatConversionException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatConversionException extends java.util.IllegalFormatException { ctor public IllegalFormatConversionException(char, java.lang.Class<?>); method public java.lang.Class<?> getArgumentClass(); method public char getConversion(); } - public class IllegalFormatException extends java.lang.IllegalArgumentException implements java.io.Serializable { + public class IllegalFormatException extends java.lang.IllegalArgumentException { } - public class IllegalFormatFlagsException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatFlagsException extends java.util.IllegalFormatException { ctor public IllegalFormatFlagsException(java.lang.String); method public java.lang.String getFlags(); } @@ -51523,14 +52608,14 @@ package java.util { method public int getErrorIndex(); } - public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable { + public class InputMismatchException extends java.util.NoSuchElementException { ctor public InputMismatchException(); ctor public InputMismatchException(java.lang.String); } public class InvalidPropertiesFormatException extends java.io.IOException { - ctor public InvalidPropertiesFormatException(java.lang.String); ctor public InvalidPropertiesFormatException(java.lang.Throwable); + ctor public InvalidPropertiesFormatException(java.lang.String); } public abstract interface Iterator { @@ -51539,23 +52624,23 @@ package java.util { method public abstract void remove(); } - public class LinkedHashMap extends java.util.HashMap { - ctor public LinkedHashMap(); - ctor public LinkedHashMap(int); + public class LinkedHashMap extends java.util.HashMap implements java.util.Map { ctor public LinkedHashMap(int, float); - ctor public LinkedHashMap(int, float, boolean); + ctor public LinkedHashMap(int); + ctor public LinkedHashMap(); ctor public LinkedHashMap(java.util.Map<? extends K, ? extends V>); + ctor public LinkedHashMap(int, float, boolean); 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 { - ctor public LinkedHashSet(); - ctor public LinkedHashSet(int); 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.util.Queue java.io.Serializable { + public class LinkedList 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); @@ -51586,10 +52671,10 @@ package java.util { } public abstract interface List implements java.util.Collection { - method public abstract void add(int, E); method public abstract boolean add(E); - method public abstract boolean addAll(int, java.util.Collection<? extends E>); + method public abstract void add(int, E); method public abstract boolean addAll(java.util.Collection<? extends E>); + method public abstract boolean addAll(int, java.util.Collection<? extends E>); method public abstract void clear(); method public abstract boolean contains(java.lang.Object); method public abstract boolean containsAll(java.util.Collection<?>); @@ -51602,8 +52687,8 @@ package java.util { method public abstract int lastIndexOf(java.lang.Object); method public abstract java.util.ListIterator<E> listIterator(); method public abstract java.util.ListIterator<E> listIterator(int); - method public abstract E remove(int); method public abstract boolean remove(java.lang.Object); + method public abstract E remove(int); method public abstract boolean removeAll(java.util.Collection<?>); method public abstract boolean retainAll(java.util.Collection<?>); method public abstract E set(int, E); @@ -51633,14 +52718,15 @@ package java.util { } public final class Locale implements java.lang.Cloneable java.io.Serializable { - ctor public Locale(java.lang.String); - ctor public Locale(java.lang.String, java.lang.String); ctor public Locale(java.lang.String, java.lang.String, java.lang.String); + ctor public Locale(java.lang.String, java.lang.String); + ctor public Locale(java.lang.String); method public java.lang.Object clone(); method public static java.util.Locale forLanguageTag(java.lang.String); method public static java.util.Locale[] getAvailableLocales(); method public java.lang.String getCountry(); method public static java.util.Locale getDefault(); + method public static java.util.Locale getDefault(java.util.Locale.Category); method public final java.lang.String getDisplayCountry(); method public java.lang.String getDisplayCountry(java.util.Locale); method public final java.lang.String getDisplayLanguage(); @@ -51653,8 +52739,8 @@ package java.util { method public java.lang.String getDisplayVariant(java.util.Locale); method public java.lang.String getExtension(char); method public java.util.Set<java.lang.Character> getExtensionKeys(); - method public java.lang.String getISO3Country(); - method public java.lang.String getISO3Language(); + method public java.lang.String getISO3Country() throws java.util.MissingResourceException; + method public java.lang.String getISO3Language() throws java.util.MissingResourceException; method public static java.lang.String[] getISOCountries(); method public static java.lang.String[] getISOLanguages(); method public java.lang.String getLanguage(); @@ -51664,6 +52750,7 @@ package java.util { method public java.lang.String getUnicodeLocaleType(java.lang.String); method public java.lang.String getVariant(); 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.lang.String toLanguageTag(); method public final java.lang.String toString(); field public static final java.util.Locale CANADA; @@ -51709,6 +52796,13 @@ package java.util { method public java.util.Locale.Builder setVariant(java.lang.String); } + public static final class Locale.Category extends java.lang.Enum { + method public static java.util.Locale.Category valueOf(java.lang.String); + method public static final java.util.Locale.Category[] values(); + enum_constant public static final java.util.Locale.Category DISPLAY; + enum_constant public static final java.util.Locale.Category FORMAT; + } + public abstract interface Map { method public abstract void clear(); method public abstract boolean containsKey(java.lang.Object); @@ -51811,15 +52905,15 @@ package java.util { public class Observable { ctor public Observable(); - method public void addObserver(java.util.Observer); - method protected void clearChanged(); - method public int countObservers(); + method public synchronized void addObserver(java.util.Observer); + method protected synchronized void clearChanged(); + method public synchronized int countObservers(); method public synchronized void deleteObserver(java.util.Observer); method public synchronized void deleteObservers(); - method public boolean hasChanged(); + method public synchronized boolean hasChanged(); method public void notifyObservers(); method public void notifyObservers(java.lang.Object); - method protected void setChanged(); + method protected synchronized void setChanged(); } public abstract interface Observer { @@ -51848,16 +52942,16 @@ package java.util { method public java.lang.String getProperty(java.lang.String, java.lang.String); method public void list(java.io.PrintStream); method public void list(java.io.PrintWriter); - method public synchronized void load(java.io.InputStream) throws java.io.IOException; method public synchronized void load(java.io.Reader) throws java.io.IOException; + method public synchronized void load(java.io.InputStream) throws java.io.IOException; method public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException; method public java.util.Enumeration<?> propertyNames(); method public deprecated void save(java.io.OutputStream, java.lang.String); - method public java.lang.Object setProperty(java.lang.String, java.lang.String); - method public synchronized void store(java.io.OutputStream, java.lang.String) throws java.io.IOException; - method public synchronized void store(java.io.Writer, java.lang.String) throws java.io.IOException; + method public synchronized java.lang.Object setProperty(java.lang.String, java.lang.String); + method public void store(java.io.Writer, java.lang.String) throws java.io.IOException; + method public void store(java.io.OutputStream, java.lang.String) throws java.io.IOException; method public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException; - method public synchronized void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException; + method public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException; method public java.util.Set<java.lang.String> stringPropertyNames(); field protected java.util.Properties defaults; } @@ -51885,7 +52979,7 @@ package java.util { public class Random implements java.io.Serializable { ctor public Random(); ctor public Random(long); - method protected synchronized int next(int); + method protected int next(int); method public boolean nextBoolean(); method public void nextBytes(byte[]); method public double nextDouble(); @@ -51902,14 +52996,14 @@ package java.util { public abstract class ResourceBundle { ctor public ResourceBundle(); - method public static void clearCache(); - method public static void clearCache(java.lang.ClassLoader); + method public static final void clearCache(); + method public static final void clearCache(java.lang.ClassLoader); method public boolean containsKey(java.lang.String); - method public static java.util.ResourceBundle getBundle(java.lang.String) throws java.util.MissingResourceException; - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale); - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) throws java.util.MissingResourceException; - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control); - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control); + 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); + method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control); + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader); method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control); method public abstract java.util.Enumeration<java.lang.String> getKeys(); method public java.util.Locale getLocale(); @@ -51926,10 +53020,10 @@ package java.util { public static class ResourceBundle.Control { ctor protected ResourceBundle.Control(); method public java.util.List<java.util.Locale> getCandidateLocales(java.lang.String, java.util.Locale); - method public static java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>); + method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>); method public java.util.Locale getFallbackLocale(java.lang.String, java.util.Locale); method public java.util.List<java.lang.String> getFormats(java.lang.String); - method public static java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>); + method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>); method public long getTimeToLive(java.lang.String, java.util.Locale); method public boolean needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long); method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException; @@ -51943,23 +53037,25 @@ package java.util { } public final class Scanner implements java.io.Closeable java.util.Iterator { + ctor public Scanner(java.lang.Readable); + ctor public Scanner(java.io.InputStream); + ctor public Scanner(java.io.InputStream, java.lang.String); ctor public Scanner(java.io.File) throws java.io.FileNotFoundException; ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException; + ctor public Scanner(java.nio.file.Path) throws java.io.IOException; + ctor public Scanner(java.nio.file.Path, java.lang.String) throws java.io.IOException; ctor public Scanner(java.lang.String); - ctor public Scanner(java.io.InputStream); - ctor public Scanner(java.io.InputStream, java.lang.String); - ctor public Scanner(java.lang.Readable); ctor public Scanner(java.nio.channels.ReadableByteChannel); ctor public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String); method public void close(); method public java.util.regex.Pattern delimiter(); - method public java.lang.String findInLine(java.util.regex.Pattern); method public java.lang.String findInLine(java.lang.String); - method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int); + method public java.lang.String findInLine(java.util.regex.Pattern); method public java.lang.String findWithinHorizon(java.lang.String, int); + method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int); method public boolean hasNext(); - method public boolean hasNext(java.util.regex.Pattern); method public boolean hasNext(java.lang.String); + method public boolean hasNext(java.util.regex.Pattern); method public boolean hasNextBigDecimal(); method public boolean hasNextBigInteger(); method public boolean hasNextBigInteger(int); @@ -51979,8 +53075,8 @@ package java.util { method public java.util.Locale locale(); method public java.util.regex.MatchResult match(); method public java.lang.String next(); - method public java.lang.String next(java.util.regex.Pattern); method public java.lang.String next(java.lang.String); + method public java.lang.String next(java.util.regex.Pattern); method public java.math.BigDecimal nextBigDecimal(); method public java.math.BigInteger nextBigInteger(); method public java.math.BigInteger nextBigInteger(int); @@ -52047,12 +53143,12 @@ package java.util { method public int getRawOffset(); method public boolean inDaylightTime(java.util.Date); method public void setDSTSavings(int); - method public void setEndRule(int, int, int); method public void setEndRule(int, int, int, int); + method public void setEndRule(int, int, int); method public void setEndRule(int, int, int, int, boolean); method public void setRawOffset(int); - method public void setStartRule(int, int, int); method public void setStartRule(int, int, int, int); + method public void setStartRule(int, int, int); method public void setStartRule(int, int, int, int, boolean); method public void setStartYear(int); method public boolean useDaylightTime(); @@ -52063,11 +53159,14 @@ package java.util { public abstract interface SortedMap 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(); method public abstract java.util.SortedMap<K, V> headMap(K); + method public abstract java.util.Set<K> keySet(); method public abstract K lastKey(); method public abstract java.util.SortedMap<K, V> subMap(K, K); method public abstract java.util.SortedMap<K, V> tailMap(K); + method public abstract java.util.Collection<V> values(); } public abstract interface SortedSet implements java.util.Set { @@ -52089,9 +53188,9 @@ package java.util { } public class StringTokenizer implements java.util.Enumeration { - ctor public StringTokenizer(java.lang.String); - ctor public StringTokenizer(java.lang.String, java.lang.String); ctor public StringTokenizer(java.lang.String, java.lang.String, boolean); + ctor public StringTokenizer(java.lang.String, java.lang.String); + ctor public StringTokenizer(java.lang.String); method public int countTokens(); method public boolean hasMoreElements(); method public boolean hasMoreTokens(); @@ -52103,21 +53202,22 @@ package java.util { public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable { ctor public TimeZone(); method public java.lang.Object clone(); - method public static synchronized java.lang.String[] getAvailableIDs(); method public static synchronized java.lang.String[] getAvailableIDs(int); + method public static synchronized java.lang.String[] getAvailableIDs(); method public int getDSTSavings(); - method public static synchronized java.util.TimeZone getDefault(); + method public static java.util.TimeZone getDefault(); method public final java.lang.String getDisplayName(); method public final java.lang.String getDisplayName(java.util.Locale); method public final java.lang.String getDisplayName(boolean, int); method public java.lang.String getDisplayName(boolean, int, java.util.Locale); method public java.lang.String getID(); - method public int getOffset(long); method public abstract int getOffset(int, int, int, int, int, int); + method public int getOffset(long); method public abstract int getRawOffset(); method public static synchronized java.util.TimeZone getTimeZone(java.lang.String); method public boolean hasSameRules(java.util.TimeZone); method public abstract boolean inDaylightTime(java.util.Date); + method public boolean observesDaylightTime(); method public static synchronized void setDefault(java.util.TimeZone); method public void setID(java.lang.String); method public abstract void setRawOffset(int); @@ -52127,14 +53227,14 @@ package java.util { } public class Timer { - ctor public Timer(java.lang.String, boolean); - ctor public Timer(java.lang.String); - ctor public Timer(boolean); ctor public Timer(); + ctor public Timer(boolean); + ctor public Timer(java.lang.String); + ctor public Timer(java.lang.String, boolean); method public void cancel(); method public int purge(); - method public void schedule(java.util.TimerTask, java.util.Date); method public void schedule(java.util.TimerTask, long); + method public void schedule(java.util.TimerTask, java.util.Date); method public void schedule(java.util.TimerTask, long, long); method public void schedule(java.util.TimerTask, java.util.Date, long); method public void scheduleAtFixedRate(java.util.TimerTask, long, long); @@ -52153,10 +53253,10 @@ 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 java.util.SortedMap { + public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable { ctor public TreeMap(); - ctor public TreeMap(java.util.Map<? extends K, ? extends V>); ctor public TreeMap(java.util.Comparator<? super K>); + ctor public TreeMap(java.util.Map<? extends K, ? extends V>); ctor public TreeMap(java.util.SortedMap<K, ? extends V>); method public java.util.Map.Entry<K, V> ceilingEntry(K); method public K ceilingKey(K); @@ -52188,8 +53288,8 @@ package java.util { public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable { ctor public TreeSet(); - ctor public TreeSet(java.util.Collection<? extends E>); ctor public TreeSet(java.util.Comparator<? super E>); + ctor public TreeSet(java.util.Collection<? extends E>); ctor public TreeSet(java.util.SortedSet<E>); method public E ceiling(E); method public java.lang.Object clone(); @@ -52239,9 +53339,9 @@ package java.util { } public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable { - ctor public Vector(); - ctor public Vector(int); ctor public Vector(int, int); + ctor public Vector(int); + ctor public Vector(); ctor public Vector(java.util.Collection<? extends E>); method public synchronized void addElement(E); method public synchronized int capacity(); @@ -52251,7 +53351,7 @@ package java.util { method public java.util.Enumeration<E> elements(); method public synchronized void ensureCapacity(int); method public synchronized E firstElement(); - method public E get(int); + method public synchronized E get(int); method public synchronized int indexOf(java.lang.Object, int); method public synchronized void insertElementAt(E, int); method public synchronized E lastElement(); @@ -52269,9 +53369,9 @@ package java.util { } public class WeakHashMap extends java.util.AbstractMap implements java.util.Map { - ctor public WeakHashMap(); - ctor public WeakHashMap(int); ctor public WeakHashMap(int, float); + ctor public WeakHashMap(int); + ctor public WeakHashMap(); ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>); method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); } @@ -53509,16 +54609,16 @@ package java.util.jar { public class Attributes implements java.lang.Cloneable java.util.Map { ctor public Attributes(); - ctor public Attributes(java.util.jar.Attributes); ctor public Attributes(int); + ctor public Attributes(java.util.jar.Attributes); method public void clear(); method public java.lang.Object clone(); method public boolean containsKey(java.lang.Object); method public boolean containsValue(java.lang.Object); method public java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet(); method public java.lang.Object get(java.lang.Object); - method public java.lang.String getValue(java.util.jar.Attributes.Name); method public java.lang.String getValue(java.lang.String); + method public java.lang.String getValue(java.util.jar.Attributes.Name); method public boolean isEmpty(); method public java.util.Set<java.lang.Object> keySet(); method public java.lang.Object put(java.lang.Object, java.lang.Object); @@ -53566,19 +54666,20 @@ package java.util.jar { } public class JarFile extends java.util.zip.ZipFile { + ctor public JarFile(java.lang.String) throws java.io.IOException; + ctor public JarFile(java.lang.String, boolean) throws java.io.IOException; ctor public JarFile(java.io.File) throws java.io.IOException; ctor public JarFile(java.io.File, boolean) throws java.io.IOException; ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException; - ctor public JarFile(java.lang.String) throws java.io.IOException; - ctor public JarFile(java.lang.String, boolean) throws java.io.IOException; method public java.util.jar.JarEntry getJarEntry(java.lang.String); method public java.util.jar.Manifest getManifest() throws java.io.IOException; + method public boolean hasClassPathAttribute() throws java.io.IOException; field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF"; } public class JarInputStream extends java.util.zip.ZipInputStream { - ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException; ctor public JarInputStream(java.io.InputStream) throws java.io.IOException; + ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException; method public java.util.jar.Manifest getManifest(); method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException; } @@ -53602,7 +54703,7 @@ package java.util.jar { } public abstract class Pack200 { - method public static java.util.jar.Pack200.Packer newPacker(); + method public static synchronized java.util.jar.Pack200.Packer newPacker(); method public static java.util.jar.Pack200.Unpacker newUnpacker(); } @@ -53656,7 +54757,7 @@ package java.util.logging { public class ErrorManager { ctor public ErrorManager(); - method public void error(java.lang.String, java.lang.Exception, int); + method public synchronized void error(java.lang.String, java.lang.Exception, int); field public static final int CLOSE_FAILURE = 3; // 0x3 field public static final int FLUSH_FAILURE = 2; // 0x2 field public static final int FORMAT_FAILURE = 5; // 0x5 @@ -53666,11 +54767,11 @@ package java.util.logging { } public class FileHandler extends java.util.logging.StreamHandler { - ctor public FileHandler() throws java.io.IOException; - ctor public FileHandler(java.lang.String) throws java.io.IOException; - ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException; - ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException; - ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException; + ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException; } public abstract interface Filter { @@ -53680,28 +54781,28 @@ package java.util.logging { public abstract class Formatter { ctor protected Formatter(); method public abstract java.lang.String format(java.util.logging.LogRecord); - method public java.lang.String formatMessage(java.util.logging.LogRecord); + method public synchronized java.lang.String formatMessage(java.util.logging.LogRecord); method public java.lang.String getHead(java.util.logging.Handler); method public java.lang.String getTail(java.util.logging.Handler); } public abstract class Handler { ctor protected Handler(); - method public abstract void close(); + method public abstract void close() throws java.lang.SecurityException; method public abstract void flush(); method public java.lang.String getEncoding(); method public java.util.logging.ErrorManager getErrorManager(); method public java.util.logging.Filter getFilter(); method public java.util.logging.Formatter getFormatter(); - method public java.util.logging.Level getLevel(); + method public synchronized java.util.logging.Level getLevel(); method public boolean isLoggable(java.util.logging.LogRecord); method public abstract void publish(java.util.logging.LogRecord); method protected void reportError(java.lang.String, java.lang.Exception, int); - method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException; + method public void setEncoding(java.lang.String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException; method public void setErrorManager(java.util.logging.ErrorManager); - method public void setFilter(java.util.logging.Filter); - method public void setFormatter(java.util.logging.Formatter); - method public void setLevel(java.util.logging.Level); + method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException; + method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException; + method public synchronized void setLevel(java.util.logging.Level) throws java.lang.SecurityException; } public class Level implements java.io.Serializable { @@ -53711,7 +54812,7 @@ package java.util.logging { method public java.lang.String getName(); method public java.lang.String getResourceBundleName(); method public final int intValue(); - method public static java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException; + method public static synchronized java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException; method public final java.lang.String toString(); field public static final java.util.logging.Level ALL; field public static final java.util.logging.Level CONFIG; @@ -53726,18 +54827,18 @@ package java.util.logging { public class LogManager { ctor protected LogManager(); - method public synchronized boolean addLogger(java.util.logging.Logger); - method public void addPropertyChangeListener(java.beans.PropertyChangeListener); - method public void checkAccess(); + method public boolean addLogger(java.util.logging.Logger); + method public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException; + method public void checkAccess() throws java.lang.SecurityException; method public static java.util.logging.LogManager getLogManager(); - method public synchronized java.util.logging.Logger getLogger(java.lang.String); - method public synchronized java.util.Enumeration<java.lang.String> getLoggerNames(); - method public static java.util.logging.LoggingMXBean getLoggingMXBean(); + method public java.util.logging.Logger getLogger(java.lang.String); + method public java.util.Enumeration<java.lang.String> getLoggerNames(); + method public static synchronized java.util.logging.LoggingMXBean getLoggingMXBean(); method public java.lang.String getProperty(java.lang.String); - method public void readConfiguration() throws java.io.IOException; - method public void readConfiguration(java.io.InputStream) throws java.io.IOException; - method public void removePropertyChangeListener(java.beans.PropertyChangeListener); - method public synchronized void reset(); + method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException; + method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException; + method public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException; + method public void reset() throws java.lang.SecurityException; field public static final java.lang.String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging"; } @@ -53771,7 +54872,7 @@ package java.util.logging { public class Logger { ctor protected Logger(java.lang.String, java.lang.String); - method public void addHandler(java.util.logging.Handler); + method public void addHandler(java.util.logging.Handler) throws java.lang.SecurityException; method public void config(java.lang.String); method public void entering(java.lang.String, java.lang.String); method public void entering(java.lang.String, java.lang.String, java.lang.Object); @@ -53784,7 +54885,7 @@ package java.util.logging { method public static java.util.logging.Logger getAnonymousLogger(); method public static java.util.logging.Logger getAnonymousLogger(java.lang.String); method public java.util.logging.Filter getFilter(); - method public static java.util.logging.Logger getGlobal(); + method public static final java.util.logging.Logger getGlobal(); method public java.util.logging.Handler[] getHandlers(); method public java.util.logging.Level getLevel(); method public static java.util.logging.Logger getLogger(java.lang.String); @@ -53796,11 +54897,11 @@ package java.util.logging { method public boolean getUseParentHandlers(); method public void info(java.lang.String); method public boolean isLoggable(java.util.logging.Level); + method public void log(java.util.logging.LogRecord); method public void log(java.util.logging.Level, java.lang.String); method public void log(java.util.logging.Level, java.lang.String, java.lang.Object); method public void log(java.util.logging.Level, java.lang.String, java.lang.Object[]); method public void log(java.util.logging.Level, java.lang.String, java.lang.Throwable); - method public void log(java.util.logging.LogRecord); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); @@ -53809,9 +54910,9 @@ package java.util.logging { method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable); - method public void removeHandler(java.util.logging.Handler); - method public void setFilter(java.util.logging.Filter); - method public void setLevel(java.util.logging.Level); + method public void removeHandler(java.util.logging.Handler) throws java.lang.SecurityException; + method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException; + method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException; method public void setParent(java.util.logging.Logger); method public void setUseParentHandlers(boolean); method public void severe(java.lang.String); @@ -53828,24 +54929,24 @@ package java.util.logging { method public abstract void setLoggerLevel(java.lang.String, java.lang.String); } - public final class LoggingPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { - ctor public LoggingPermission(java.lang.String, java.lang.String); + public final class LoggingPermission extends java.security.BasicPermission { + ctor public LoggingPermission(java.lang.String, java.lang.String) throws java.lang.IllegalArgumentException; } public class MemoryHandler extends java.util.logging.Handler { ctor public MemoryHandler(); ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level); - method public void close(); + method public void close() throws java.lang.SecurityException; method public void flush(); - method public java.util.logging.Level getPushLevel(); + method public synchronized java.util.logging.Level getPushLevel(); method public synchronized void publish(java.util.logging.LogRecord); - method public void push(); - method public void setPushLevel(java.util.logging.Level); + method public synchronized void push(); + method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException; } public class SimpleFormatter extends java.util.logging.Formatter { ctor public SimpleFormatter(); - method public java.lang.String format(java.util.logging.LogRecord); + method public synchronized java.lang.String format(java.util.logging.LogRecord); } public class SocketHandler extends java.util.logging.StreamHandler { @@ -53856,10 +54957,10 @@ package java.util.logging { public class StreamHandler extends java.util.logging.Handler { ctor public StreamHandler(); ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter); - method public void close(); - method public void flush(); + method public synchronized void close() throws java.lang.SecurityException; + method public synchronized void flush(); method public synchronized void publish(java.util.logging.LogRecord); - method protected void setOutputStream(java.io.OutputStream); + method protected synchronized void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException; } public class XMLFormatter extends java.util.logging.Formatter { @@ -53929,12 +55030,12 @@ package java.util.prefs { } public class InvalidPreferencesFormatException extends java.lang.Exception { + ctor public InvalidPreferencesFormatException(java.lang.Throwable); ctor public InvalidPreferencesFormatException(java.lang.String); ctor public InvalidPreferencesFormatException(java.lang.String, java.lang.Throwable); - ctor public InvalidPreferencesFormatException(java.lang.Throwable); } - public class NodeChangeEvent extends java.util.EventObject implements java.io.Serializable { + public class NodeChangeEvent extends java.util.EventObject { ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences); method public java.util.prefs.Preferences getChild(); method public java.util.prefs.Preferences getParent(); @@ -53945,7 +55046,7 @@ package java.util.prefs { method public abstract void childRemoved(java.util.prefs.NodeChangeEvent); } - public class PreferenceChangeEvent extends java.util.EventObject implements java.io.Serializable { + public class PreferenceChangeEvent extends java.util.EventObject { ctor public PreferenceChangeEvent(java.util.prefs.Preferences, java.lang.String, java.lang.String); method public java.lang.String getKey(); method public java.lang.String getNewValue(); @@ -54090,8 +55191,8 @@ package java.util.zip { method public long getValue(); method public void reset(); method public void update(int); - method public void update(byte[]); method public void update(byte[], int, int); + method public void update(byte[]); } public class CRC32 implements java.util.zip.Checksum { @@ -54099,8 +55200,8 @@ package java.util.zip { method public long getValue(); method public void reset(); method public void update(int); - method public void update(byte[]); method public void update(byte[], int, int); + method public void update(byte[]); } public class CheckedInputStream extends java.io.FilterInputStream { @@ -54116,8 +55217,8 @@ package java.util.zip { public abstract interface Checksum { method public abstract long getValue(); method public abstract void reset(); - method public abstract void update(byte[], int, int); method public abstract void update(int); + method public abstract void update(byte[], int, int); } public class DataFormatException extends java.lang.Exception { @@ -54126,28 +55227,28 @@ package java.util.zip { } public class Deflater { - ctor public Deflater(); - ctor public Deflater(int); ctor public Deflater(int, boolean); + ctor public Deflater(int); + ctor public Deflater(); + method public int deflate(byte[], int, int); method public int deflate(byte[]); - method public synchronized int deflate(byte[], int, int); - method public synchronized int deflate(byte[], int, int, int); - method public synchronized void end(); - method public synchronized void finish(); - method public synchronized boolean finished(); - method public synchronized int getAdler(); - method public synchronized long getBytesRead(); - method public synchronized long getBytesWritten(); - method public synchronized int getTotalIn(); - method public synchronized int getTotalOut(); - method public synchronized boolean needsInput(); - method public synchronized void reset(); + method public int deflate(byte[], int, int, int); + method public void end(); + method public void finish(); + method public boolean finished(); + method public int getAdler(); + method public long getBytesRead(); + method public long getBytesWritten(); + method public int getTotalIn(); + method public int getTotalOut(); + method public boolean needsInput(); + method public void reset(); + method public void setDictionary(byte[], int, int); method public void setDictionary(byte[]); - method public synchronized void setDictionary(byte[], int, int); + method public void setInput(byte[], int, int); method public void setInput(byte[]); - method public synchronized void setInput(byte[], int, int); - method public synchronized void setLevel(int); - method public synchronized void setStrategy(int); + method public void setLevel(int); + method public void setStrategy(int); field public static final int BEST_COMPRESSION = 9; // 0x9 field public static final int BEST_SPEED = 1; // 0x1 field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff @@ -54170,12 +55271,12 @@ package java.util.zip { } public class DeflaterOutputStream extends java.io.FilterOutputStream { - ctor public DeflaterOutputStream(java.io.OutputStream); - ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int); - ctor public DeflaterOutputStream(java.io.OutputStream, boolean); ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean); - ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); + ctor public DeflaterOutputStream(java.io.OutputStream, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream); method protected void deflate() throws java.io.IOException; method public void finish() throws java.io.IOException; field protected byte[] buf; @@ -54183,49 +55284,50 @@ package java.util.zip { } public class GZIPInputStream extends java.util.zip.InflaterInputStream { - ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException; ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException; + ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException; field public static final int GZIP_MAGIC = 35615; // 0x8b1f field protected java.util.zip.CRC32 crc; field protected boolean eos; } public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream { - ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException; - ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException; ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException; ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException; field protected java.util.zip.CRC32 crc; } public class Inflater { - ctor public Inflater(); ctor public Inflater(boolean); - method public synchronized void end(); - method public synchronized boolean finished(); - method public synchronized int getAdler(); - method public synchronized long getBytesRead(); - method public synchronized long getBytesWritten(); - method public synchronized int getRemaining(); - method public synchronized int getTotalIn(); - method public synchronized int getTotalOut(); + ctor public Inflater(); + method public void end(); + method public boolean finished(); + method public int getAdler(); + method public long getBytesRead(); + method public long getBytesWritten(); + method public int getRemaining(); + method public int getTotalIn(); + method public int getTotalOut(); + method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException; method public int inflate(byte[]) throws java.util.zip.DataFormatException; - method public synchronized int inflate(byte[], int, int) throws java.util.zip.DataFormatException; - method public synchronized boolean needsDictionary(); - method public synchronized boolean needsInput(); - method public synchronized void reset(); - method public synchronized void setDictionary(byte[]); - method public synchronized void setDictionary(byte[], int, int); - method public synchronized void setInput(byte[]); - method public synchronized void setInput(byte[], int, int); + method public boolean needsDictionary(); + method public boolean needsInput(); + method public void reset(); + method public void setDictionary(byte[], int, int); + method public void setDictionary(byte[]); + method public void setInput(byte[], int, int); + method public void setInput(byte[]); } public class InflaterInputStream extends java.io.FilterInputStream { - ctor public InflaterInputStream(java.io.InputStream); - ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater); ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int); + ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater); + ctor public InflaterInputStream(java.io.InputStream); method protected void fill() throws java.io.IOException; field protected byte[] buf; + field protected boolean closed; field protected java.util.zip.Inflater inf; field protected int len; } @@ -54313,9 +55415,12 @@ package java.util.zip { } public class ZipFile implements java.io.Closeable { - ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; ctor public ZipFile(java.lang.String) throws java.io.IOException; ctor public ZipFile(java.io.File, int) throws java.io.IOException; + ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; + ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException; + ctor public ZipFile(java.lang.String, java.nio.charset.Charset) throws java.io.IOException; + ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException; method public void close() throws java.io.IOException; method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries(); method public java.lang.String getComment(); @@ -54369,6 +55474,7 @@ package java.util.zip { public class ZipInputStream extends java.util.zip.InflaterInputStream { ctor public ZipInputStream(java.io.InputStream); + ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset); method public void closeEntry() throws java.io.IOException; method protected java.util.zip.ZipEntry createZipEntry(java.lang.String); method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException; @@ -54416,6 +55522,7 @@ package java.util.zip { public class ZipOutputStream extends java.util.zip.DeflaterOutputStream { ctor public ZipOutputStream(java.io.OutputStream); + ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset); method public void closeEntry() throws java.io.IOException; method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException; method public void setComment(java.lang.String); @@ -54475,8 +55582,8 @@ package javax.crypto { } public class BadPaddingException extends java.security.GeneralSecurityException { - ctor public BadPaddingException(java.lang.String); ctor public BadPaddingException(); + ctor public BadPaddingException(java.lang.String); } public class Cipher { @@ -54587,14 +55694,14 @@ package javax.crypto { method public final int getOutputSize(int) throws java.lang.IllegalStateException; method public final java.security.Provider getProvider(); method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; - method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException; } public class ExemptionMechanismException extends java.security.GeneralSecurityException { - ctor public ExemptionMechanismException(java.lang.String); ctor public ExemptionMechanismException(); + ctor public ExemptionMechanismException(java.lang.String); } public abstract class ExemptionMechanismSpi { @@ -54603,13 +55710,13 @@ package javax.crypto { method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException; method protected abstract int engineGetOutputSize(int); method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; - method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; } public class IllegalBlockSizeException extends java.security.GeneralSecurityException { - ctor public IllegalBlockSizeException(java.lang.String); ctor public IllegalBlockSizeException(); + ctor public IllegalBlockSizeException(java.lang.String); } public class KeyAgreement { @@ -54647,19 +55754,19 @@ package javax.crypto { method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final java.security.Provider getProvider(); + method public final void init(java.security.SecureRandom); method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; method public final void init(int); method public final void init(int, java.security.SecureRandom); - method public final void init(java.security.SecureRandom); } public abstract class KeyGeneratorSpi { ctor public KeyGeneratorSpi(); method protected abstract javax.crypto.SecretKey engineGenerateKey(); + method protected abstract void engineInit(java.security.SecureRandom); method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; method protected abstract void engineInit(int, java.security.SecureRandom); - method protected abstract void engineInit(java.security.SecureRandom); } public class Mac implements java.lang.Cloneable { @@ -54674,12 +55781,12 @@ package javax.crypto { method public static final javax.crypto.Mac getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final int getMacLength(); method public final java.security.Provider getProvider(); - method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void init(java.security.Key) throws java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void reset(); method public final void update(byte) throws java.lang.IllegalStateException; - method public final void update(byte[], int, int) throws java.lang.IllegalStateException; method public final void update(byte[]) throws java.lang.IllegalStateException; + method public final void update(byte[], int, int) throws java.lang.IllegalStateException; method public final void update(java.nio.ByteBuffer); } @@ -54696,8 +55803,8 @@ package javax.crypto { } public class NoSuchPaddingException extends java.security.GeneralSecurityException { - ctor public NoSuchPaddingException(java.lang.String); ctor public NoSuchPaddingException(); + ctor public NoSuchPaddingException(java.lang.String); } public class NullCipher extends javax.crypto.Cipher { @@ -54738,8 +55845,8 @@ package javax.crypto { } public class ShortBufferException extends java.security.GeneralSecurityException { - ctor public ShortBufferException(java.lang.String); ctor public ShortBufferException(); + ctor public ShortBufferException(java.lang.String); } } @@ -54884,7 +55991,7 @@ package javax.crypto.spec { method public int getWordSize(); } - public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey java.io.Serializable { + public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey { ctor public SecretKeySpec(byte[], java.lang.String); ctor public SecretKeySpec(byte[], int, int, java.lang.String); method public java.lang.String getAlgorithm(); @@ -55779,7 +56886,7 @@ package javax.net { method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException; method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException; method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException; - method public static synchronized javax.net.ServerSocketFactory getDefault(); + method public static javax.net.ServerSocketFactory getDefault(); } public abstract class SocketFactory { @@ -55789,7 +56896,7 @@ package javax.net { method public abstract java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException; method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException; method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; - method public static synchronized javax.net.SocketFactory getDefault(); + method public static javax.net.SocketFactory getDefault(); } } @@ -55801,6 +56908,12 @@ package javax.net.ssl { method public java.security.cert.CertPathParameters getParameters(); } + public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession { + ctor public ExtendedSSLSession(); + method public abstract java.lang.String[] getLocalSupportedSignatureAlgorithms(); + method public abstract java.lang.String[] getPeerSupportedSignatureAlgorithms(); + } + public class HandshakeCompletedEvent extends java.util.EventObject { ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession); method public java.lang.String getCipherSuite(); @@ -55876,7 +56989,7 @@ package javax.net.ssl { method public final javax.net.ssl.SSLEngine createSSLEngine(); method public final javax.net.ssl.SSLEngine createSSLEngine(java.lang.String, int); method public final javax.net.ssl.SSLSessionContext getClientSessionContext(); - method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException; + method public static synchronized javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException; method public final javax.net.ssl.SSLParameters getDefaultSSLParameters(); method public static javax.net.ssl.SSLContext getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; @@ -55888,13 +57001,13 @@ package javax.net.ssl { method public final javax.net.ssl.SSLSocketFactory getSocketFactory(); method public final javax.net.ssl.SSLParameters getSupportedSSLParameters(); method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException; - method public static void setDefault(javax.net.ssl.SSLContext); + method public static synchronized void setDefault(javax.net.ssl.SSLContext); } public abstract class SSLContextSpi { ctor public SSLContextSpi(); - method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int); method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(); + method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int); method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext(); method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters(); method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext(); @@ -55914,6 +57027,7 @@ package javax.net.ssl { method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus(); method public abstract boolean getNeedClientAuth(); method public java.lang.String getPeerHost(); @@ -55933,12 +57047,12 @@ package javax.net.ssl { method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); method public abstract void setWantClientAuth(boolean); - method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException; - method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; - method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; } public class SSLEngineResult { @@ -55986,11 +57100,15 @@ package javax.net.ssl { ctor public SSLParameters(); ctor public SSLParameters(java.lang.String[]); ctor public SSLParameters(java.lang.String[], java.lang.String[]); + method public java.security.AlgorithmConstraints getAlgorithmConstraints(); method public java.lang.String[] getCipherSuites(); + method public java.lang.String getEndpointIdentificationAlgorithm(); method public boolean getNeedClientAuth(); method public java.lang.String[] getProtocols(); method public boolean getWantClientAuth(); + method public void setAlgorithmConstraints(java.security.AlgorithmConstraints); method public void setCipherSuites(java.lang.String[]); + method public void setEndpointIdentificationAlgorithm(java.lang.String); method public void setNeedClientAuth(boolean); method public void setProtocols(java.lang.String[]); method public void setWantClientAuth(boolean); @@ -56018,6 +57136,7 @@ package javax.net.ssl { method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); method public abstract boolean getNeedClientAuth(); + method public javax.net.ssl.SSLParameters getSSLParameters(); method public abstract java.lang.String[] getSupportedCipherSuites(); method public abstract java.lang.String[] getSupportedProtocols(); method public abstract boolean getUseClientMode(); @@ -56026,6 +57145,7 @@ package javax.net.ssl { method public abstract void setEnabledCipherSuites(java.lang.String[]); method public abstract void setEnabledProtocols(java.lang.String[]); method public abstract void setNeedClientAuth(boolean); + method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); method public abstract void setWantClientAuth(boolean); } @@ -56091,6 +57211,7 @@ package javax.net.ssl { method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract boolean getNeedClientAuth(); method public javax.net.ssl.SSLParameters getSSLParameters(); method public abstract javax.net.ssl.SSLSession getSession(); @@ -56146,6 +57267,14 @@ package javax.net.ssl { method public java.lang.String chooseEngineServerAlias(java.lang.String, java.security.Principal[], javax.net.ssl.SSLEngine); } + public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager { + ctor public X509ExtendedTrustManager(); + method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException; + method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException; + method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException; + method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException; + } + public abstract interface X509KeyManager implements javax.net.ssl.KeyManager { method public abstract java.lang.String chooseClientAlias(java.lang.String[], java.security.Principal[], java.net.Socket); method public abstract java.lang.String chooseServerAlias(java.lang.String, java.security.Principal[], java.net.Socket); @@ -56180,11 +57309,21 @@ package javax.security.auth { method public abstract boolean isDestroyed(); } + public abstract deprecated class Policy { + ctor protected Policy(); + method public abstract java.security.PermissionCollection getPermissions(javax.security.auth.Subject, java.security.CodeSource); + method public static javax.security.auth.Policy getPolicy(); + method public abstract void refresh(); + method public static void setPolicy(javax.security.auth.Policy); + } + public final class PrivateCredentialPermission extends java.security.Permission { ctor public PrivateCredentialPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); method public java.lang.String getCredentialClass(); method public java.lang.String[][] getPrincipals(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -56242,6 +57381,43 @@ package javax.security.auth.callback { package javax.security.auth.login { + public class AppConfigurationEntry { + ctor public AppConfigurationEntry(java.lang.String, javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag, java.util.Map<java.lang.String, ?>); + method public javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag getControlFlag(); + method public java.lang.String getLoginModuleName(); + method public java.util.Map<java.lang.String, ?> getOptions(); + } + + public static class AppConfigurationEntry.LoginModuleControlFlag { + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag OPTIONAL; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUIRED; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUISITE; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag SUFFICIENT; + } + + public abstract class Configuration { + ctor protected Configuration(); + method public abstract javax.security.auth.login.AppConfigurationEntry[] getAppConfigurationEntry(java.lang.String); + method public static javax.security.auth.login.Configuration getConfiguration(); + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters) throws java.security.NoSuchAlgorithmException; + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public javax.security.auth.login.Configuration.Parameters getParameters(); + method public java.security.Provider getProvider(); + method public java.lang.String getType(); + method public void refresh(); + method public static void setConfiguration(javax.security.auth.login.Configuration); + } + + public static abstract interface Configuration.Parameters { + } + + public abstract class ConfigurationSpi { + ctor public ConfigurationSpi(); + method protected abstract javax.security.auth.login.AppConfigurationEntry[] engineGetAppConfigurationEntry(java.lang.String); + method protected void engineRefresh(); + } + public class LoginException extends java.security.GeneralSecurityException { ctor public LoginException(); ctor public LoginException(java.lang.String); @@ -56252,10 +57428,10 @@ package javax.security.auth.login { package javax.security.auth.x500 { public final class X500Principal implements java.security.Principal java.io.Serializable { - ctor public X500Principal(byte[]); - ctor public X500Principal(java.io.InputStream); ctor public X500Principal(java.lang.String); ctor public X500Principal(java.lang.String, java.util.Map<java.lang.String, java.lang.String>); + ctor public X500Principal(byte[]); + ctor public X500Principal(java.io.InputStream); method public byte[] getEncoded(); method public java.lang.String getName(); method public java.lang.String getName(java.lang.String); @@ -56279,28 +57455,28 @@ package javax.security.cert { } public class CertificateEncodingException extends javax.security.cert.CertificateException { - ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(); + ctor public CertificateEncodingException(java.lang.String); } public class CertificateException extends java.lang.Exception { - ctor public CertificateException(java.lang.String); ctor public CertificateException(); + ctor public CertificateException(java.lang.String); } public class CertificateExpiredException extends javax.security.cert.CertificateException { - ctor public CertificateExpiredException(java.lang.String); ctor public CertificateExpiredException(); + ctor public CertificateExpiredException(java.lang.String); } public class CertificateNotYetValidException extends javax.security.cert.CertificateException { - ctor public CertificateNotYetValidException(java.lang.String); ctor public CertificateNotYetValidException(); + ctor public CertificateNotYetValidException(java.lang.String); } public class CertificateParsingException extends javax.security.cert.CertificateException { - ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(); + ctor public CertificateParsingException(java.lang.String); } public abstract class X509Certificate extends javax.security.cert.Certificate { @@ -56327,11 +57503,12 @@ package javax.sql { public abstract interface CommonDataSource { method public abstract java.io.PrintWriter getLogWriter() throws java.sql.SQLException; method public abstract int getLoginTimeout() throws java.sql.SQLException; + method public abstract java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException; method public abstract void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException; method public abstract void setLoginTimeout(int) throws java.sql.SQLException; } - public class ConnectionEvent extends java.util.EventObject implements java.io.Serializable { + public class ConnectionEvent extends java.util.EventObject { ctor public ConnectionEvent(javax.sql.PooledConnection); ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException); method public java.sql.SQLException getSQLException(); @@ -56380,21 +57557,21 @@ package javax.sql { method public abstract void removeRowSetListener(javax.sql.RowSetListener); method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException; method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; - method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException; method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException; method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; - method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException; - method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException; - method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBoolean(int, boolean) throws java.sql.SQLException; method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException; method public abstract void setByte(int, byte) throws java.sql.SQLException; @@ -56402,15 +57579,15 @@ package javax.sql { method public abstract void setBytes(int, byte[]) throws java.sql.SQLException; method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException; method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; - method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException; - method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException; method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; - method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; method public abstract void setCommand(java.lang.String) throws java.sql.SQLException; method public abstract void setConcurrency(int) throws java.sql.SQLException; method public abstract void setDataSourceName(java.lang.String) throws java.sql.SQLException; @@ -56431,26 +57608,26 @@ package javax.sql { method public abstract void setMaxRows(int) throws java.sql.SQLException; method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; - method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; - method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; - method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; - method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException; - method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(int, int) throws java.sql.SQLException; - method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setPassword(java.lang.String) throws java.sql.SQLException; method public abstract void setQueryTimeout(int) throws java.sql.SQLException; method public abstract void setReadOnly(boolean) throws java.sql.SQLException; @@ -56468,8 +57645,8 @@ package javax.sql { method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException; method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException; - method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTransactionIsolation(int) throws java.sql.SQLException; method public abstract void setType(int) throws java.sql.SQLException; @@ -56479,7 +57656,7 @@ package javax.sql { method public abstract void setUsername(java.lang.String) throws java.sql.SQLException; } - public class RowSetEvent extends java.util.EventObject implements java.io.Serializable { + public class RowSetEvent extends java.util.EventObject { ctor public RowSetEvent(javax.sql.RowSet); } @@ -56526,8 +57703,8 @@ package javax.sql { } public class StatementEvent extends java.util.EventObject { - ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException); ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement); + ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException); method public java.sql.SQLException getSQLException(); method public java.sql.PreparedStatement getStatement(); } diff --git a/api/system-current.txt b/api/system-current.txt index 316371d09c17..5b976a90e280 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -2833,6 +2833,7 @@ package android.accounts { method public final android.os.IBinder getIBinder(); method public abstract android.os.Bundle hasFeatures(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String[]) throws android.accounts.NetworkErrorException; method public android.os.Bundle startAddAccountSession(android.accounts.AccountAuthenticatorResponse, java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle) throws android.accounts.NetworkErrorException; + method public android.os.Bundle startUpdateCredentialsSession(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; method public abstract android.os.Bundle updateCredentials(android.accounts.AccountAuthenticatorResponse, android.accounts.Account, java.lang.String, android.os.Bundle) throws android.accounts.NetworkErrorException; field public static final java.lang.String KEY_CUSTOM_TOKEN_EXPIRY = "android.accounts.expiry"; } @@ -2898,6 +2899,7 @@ package android.accounts { method public void setPassword(android.accounts.Account, java.lang.String); method public void setUserData(android.accounts.Account, java.lang.String, java.lang.String); method public android.accounts.AccountManagerFuture<android.os.Bundle> startAddAccountSession(java.lang.String, java.lang.String, java.lang.String[], android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); + method public android.accounts.AccountManagerFuture<android.os.Bundle> startUpdateCredentialsSession(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); method public android.accounts.AccountManagerFuture<android.os.Bundle> updateCredentials(android.accounts.Account, java.lang.String, android.os.Bundle, android.app.Activity, android.accounts.AccountManagerCallback<android.os.Bundle>, android.os.Handler); field public static final java.lang.String ACTION_AUTHENTICATOR_INTENT = "android.accounts.AccountAuthenticator"; field public static final java.lang.String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator"; @@ -4985,6 +4987,7 @@ package android.app { field public static final int PRIORITY_MAX = 2; // 0x2 field public static final int PRIORITY_MIN = -2; // 0xfffffffe field public static final deprecated int STREAM_DEFAULT = -1; // 0xffffffff + field public static final java.lang.String TOPIC_DEFAULT = "system_default_topic"; field public static final int VISIBILITY_PRIVATE = 0; // 0x0 field public static final int VISIBILITY_PUBLIC = 1; // 0x1 field public static final int VISIBILITY_SECRET = -1; // 0xffffffff @@ -27780,6 +27783,7 @@ package android.provider { field public static final android.net.Uri CONTENT_URI; field public static final java.lang.String CONTENT_VCARD_TYPE = "text/x-vcard"; field public static final android.net.Uri CONTENT_VCARD_URI; + field public static final android.net.Uri CORP_CONTENT_FILTER_URI; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX = "android.provider.extra.ADDRESS_BOOK_INDEX"; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_COUNTS = "android.provider.extra.ADDRESS_BOOK_INDEX_COUNTS"; field public static final java.lang.String EXTRA_ADDRESS_BOOK_INDEX_TITLES = "android.provider.extra.ADDRESS_BOOK_INDEX_TITLES"; @@ -27900,12 +27904,15 @@ package android.provider { } public static final class ContactsContract.Directory implements android.provider.BaseColumns { + method public static boolean isEnterpriseDirectoryId(long); + method public static boolean isRemoteDirectory(long); method public static void notifyDirectoryChange(android.content.ContentResolver); field public static final java.lang.String ACCOUNT_NAME = "accountName"; field public static final java.lang.String ACCOUNT_TYPE = "accountType"; field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact_directory"; field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact_directories"; field public static final android.net.Uri CONTENT_URI; + field public static final android.net.Uri CORP_CONTENT_URI; field public static final long DEFAULT = 0L; // 0x0L field public static final java.lang.String DIRECTORY_AUTHORITY = "authority"; field public static final java.lang.String DISPLAY_NAME = "displayName"; @@ -38603,6 +38610,7 @@ package android.view { method public boolean canResolveTextDirection(); method public boolean canScrollHorizontally(int); method public boolean canScrollVertically(int); + method public final void cancelDragAndDrop(); method public void cancelLongPress(); method public final void cancelPendingInputEvents(); method public boolean checkInputConnectionProxy(android.view.View); @@ -39083,7 +39091,8 @@ package android.view { method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback); method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback, int); method public void startAnimation(android.view.animation.Animation); - method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); + method public final deprecated boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); + method public final boolean startDragAndDrop(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int); method public boolean startNestedScroll(int); method public void stopNestedScroll(); method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable); @@ -45386,13 +45395,18 @@ package dalvik.system { package java.awt.font { public final class NumericShaper implements java.io.Serializable { - method public static java.awt.font.NumericShaper getContextualShaper(int, int); method public static java.awt.font.NumericShaper getContextualShaper(int); + method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>); + method public static java.awt.font.NumericShaper getContextualShaper(int, int); + method public static java.awt.font.NumericShaper getContextualShaper(java.util.Set<java.awt.font.NumericShaper.Range>, java.awt.font.NumericShaper.Range); + method public java.util.Set<java.awt.font.NumericShaper.Range> getRangeSet(); method public int getRanges(); method public static java.awt.font.NumericShaper getShaper(int); + method public static java.awt.font.NumericShaper getShaper(java.awt.font.NumericShaper.Range); method public boolean isContextual(); - method public void shape(char[], int, int, int); method public void shape(char[], int, int); + method public void shape(char[], int, int, int); + method public void shape(char[], int, int, java.awt.font.NumericShaper.Range); field public static final int ALL_RANGES = 524287; // 0x7ffff field public static final int ARABIC = 2; // 0x2 field public static final int BENGALI = 16; // 0x10 @@ -45415,6 +45429,46 @@ package java.awt.font { field public static final int TIBETAN = 16384; // 0x4000 } + public static class NumericShaper.Range extends java.lang.Enum { + method public static java.awt.font.NumericShaper.Range valueOf(java.lang.String); + method public static final java.awt.font.NumericShaper.Range[] values(); + enum_constant public static final java.awt.font.NumericShaper.Range ARABIC; + enum_constant public static final java.awt.font.NumericShaper.Range BALINESE; + enum_constant public static final java.awt.font.NumericShaper.Range BENGALI; + enum_constant public static final java.awt.font.NumericShaper.Range CHAM; + enum_constant public static final java.awt.font.NumericShaper.Range DEVANAGARI; + enum_constant public static final java.awt.font.NumericShaper.Range EASTERN_ARABIC; + enum_constant public static final java.awt.font.NumericShaper.Range ETHIOPIC; + enum_constant public static final java.awt.font.NumericShaper.Range EUROPEAN; + enum_constant public static final java.awt.font.NumericShaper.Range GUJARATI; + enum_constant public static final java.awt.font.NumericShaper.Range GURMUKHI; + enum_constant public static final java.awt.font.NumericShaper.Range JAVANESE; + enum_constant public static final java.awt.font.NumericShaper.Range KANNADA; + enum_constant public static final java.awt.font.NumericShaper.Range KAYAH_LI; + enum_constant public static final java.awt.font.NumericShaper.Range KHMER; + enum_constant public static final java.awt.font.NumericShaper.Range LAO; + enum_constant public static final java.awt.font.NumericShaper.Range LEPCHA; + enum_constant public static final java.awt.font.NumericShaper.Range LIMBU; + enum_constant public static final java.awt.font.NumericShaper.Range MALAYALAM; + enum_constant public static final java.awt.font.NumericShaper.Range MEETEI_MAYEK; + enum_constant public static final java.awt.font.NumericShaper.Range MONGOLIAN; + enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR; + enum_constant public static final java.awt.font.NumericShaper.Range MYANMAR_SHAN; + enum_constant public static final java.awt.font.NumericShaper.Range NEW_TAI_LUE; + enum_constant public static final java.awt.font.NumericShaper.Range NKO; + enum_constant public static final java.awt.font.NumericShaper.Range OL_CHIKI; + enum_constant public static final java.awt.font.NumericShaper.Range ORIYA; + enum_constant public static final java.awt.font.NumericShaper.Range SAURASHTRA; + enum_constant public static final java.awt.font.NumericShaper.Range SUNDANESE; + enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_HORA; + enum_constant public static final java.awt.font.NumericShaper.Range TAI_THAM_THAM; + enum_constant public static final java.awt.font.NumericShaper.Range TAMIL; + enum_constant public static final java.awt.font.NumericShaper.Range TELUGU; + enum_constant public static final java.awt.font.NumericShaper.Range THAI; + enum_constant public static final java.awt.font.NumericShaper.Range TIBETAN; + enum_constant public static final java.awt.font.NumericShaper.Range VAI; + } + public final class TextAttribute extends java.text.AttributedCharacterIterator.Attribute { ctor protected TextAttribute(java.lang.String); field public static final java.awt.font.TextAttribute BACKGROUND; @@ -45508,20 +45562,20 @@ package java.beans { public class PropertyChangeSupport implements java.io.Serializable { ctor public PropertyChangeSupport(java.lang.Object); - method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void addPropertyChangeListener(java.beans.PropertyChangeListener); + method public void addPropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void fireIndexedPropertyChange(java.lang.String, int, java.lang.Object, java.lang.Object); - method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean); method public void fireIndexedPropertyChange(java.lang.String, int, int, int); + method public void fireIndexedPropertyChange(java.lang.String, int, boolean, boolean); method public void firePropertyChange(java.lang.String, java.lang.Object, java.lang.Object); - method public void firePropertyChange(java.lang.String, boolean, boolean); method public void firePropertyChange(java.lang.String, int, int); + method public void firePropertyChange(java.lang.String, boolean, boolean); method public void firePropertyChange(java.beans.PropertyChangeEvent); - method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String); method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(); + method public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String); method public boolean hasListeners(java.lang.String); - method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); method public void removePropertyChangeListener(java.beans.PropertyChangeListener); + method public void removePropertyChangeListener(java.lang.String, java.beans.PropertyChangeListener); } } @@ -45546,8 +45600,8 @@ package java.io { } public class BufferedReader extends java.io.Reader { - ctor public BufferedReader(java.io.Reader); ctor public BufferedReader(java.io.Reader, int); + ctor public BufferedReader(java.io.Reader); method public void close() throws java.io.IOException; method public int read(char[], int, int) throws java.io.IOException; method public java.lang.String readLine() throws java.io.IOException; @@ -45576,10 +45630,10 @@ package java.io { ctor public ByteArrayOutputStream(); ctor public ByteArrayOutputStream(int); method public synchronized void reset(); - method public int size(); + method public synchronized int size(); method public synchronized byte[] toByteArray(); - method public deprecated java.lang.String toString(int); - method public java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException; + method public synchronized java.lang.String toString(java.lang.String) throws java.io.UnsupportedEncodingException; + method public deprecated synchronized java.lang.String toString(int); method public synchronized void write(int); method public synchronized void writeTo(java.io.OutputStream) throws java.io.IOException; field protected byte[] buf; @@ -45621,13 +45675,15 @@ package java.io { } public final class Console implements java.io.Flushable { + method public static java.io.Console console(); method public void flush(); method public java.io.Console format(java.lang.String, java.lang.Object...); + method public static synchronized java.io.Console getConsole(); method public java.io.Console printf(java.lang.String, java.lang.Object...); - method public java.lang.String readLine(); method public java.lang.String readLine(java.lang.String, java.lang.Object...); - method public char[] readPassword(); + method public java.lang.String readLine(); method public char[] readPassword(java.lang.String, java.lang.Object...); + method public char[] readPassword(); method public java.io.Reader reader(); method public java.io.PrintWriter writer(); } @@ -45673,9 +45729,9 @@ package java.io { } public abstract interface DataOutput { + method public abstract void write(int) throws java.io.IOException; method public abstract void write(byte[]) throws java.io.IOException; method public abstract void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; method public abstract void writeBoolean(boolean) throws java.io.IOException; method public abstract void writeByte(int) throws java.io.IOException; method public abstract void writeBytes(java.lang.String) throws java.io.IOException; @@ -45717,17 +45773,17 @@ package java.io { } public class File implements java.lang.Comparable java.io.Serializable { - ctor public File(java.io.File, java.lang.String); ctor public File(java.lang.String); ctor public File(java.lang.String, java.lang.String); + ctor public File(java.io.File, java.lang.String); ctor public File(java.net.URI); method public boolean canExecute(); method public boolean canRead(); method public boolean canWrite(); method public int compareTo(java.io.File); method public boolean createNewFile() throws java.io.IOException; - method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException; method public static java.io.File createTempFile(java.lang.String, java.lang.String, java.io.File) throws java.io.IOException; + method public static java.io.File createTempFile(java.lang.String, java.lang.String) throws java.io.IOException; method public boolean delete(); method public void deleteOnExit(); method public boolean exists(); @@ -45765,6 +45821,7 @@ package java.io { method public boolean setReadable(boolean); method public boolean setWritable(boolean, boolean); method public boolean setWritable(boolean); + method public java.nio.file.Path toPath(); method public java.net.URI toURI(); method public deprecated java.net.URL toURL() throws java.net.MalformedURLException; field public static final java.lang.String pathSeparator; @@ -45787,9 +45844,9 @@ package java.io { } public class FileInputStream extends java.io.InputStream { + ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; ctor public FileInputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileInputStream(java.io.FileDescriptor); - ctor public FileInputStream(java.lang.String) throws java.io.FileNotFoundException; method public java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public int read() throws java.io.IOException; @@ -45801,11 +45858,11 @@ package java.io { } public class FileOutputStream extends java.io.OutputStream { + ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException; + ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.File) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.File, boolean) throws java.io.FileNotFoundException; ctor public FileOutputStream(java.io.FileDescriptor); - ctor public FileOutputStream(java.lang.String) throws java.io.FileNotFoundException; - ctor public FileOutputStream(java.lang.String, boolean) throws java.io.FileNotFoundException; method public java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public void write(int) throws java.io.IOException; @@ -45813,22 +45870,24 @@ package java.io { public final class FilePermission extends java.security.Permission implements java.io.Serializable { ctor public FilePermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } public class FileReader extends java.io.InputStreamReader { + ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException; ctor public FileReader(java.io.File) throws java.io.FileNotFoundException; ctor public FileReader(java.io.FileDescriptor); - ctor public FileReader(java.lang.String) throws java.io.FileNotFoundException; } public class FileWriter extends java.io.OutputStreamWriter { + ctor public FileWriter(java.lang.String) throws java.io.IOException; + ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException; ctor public FileWriter(java.io.File) throws java.io.IOException; ctor public FileWriter(java.io.File, boolean) throws java.io.IOException; ctor public FileWriter(java.io.FileDescriptor); - ctor public FileWriter(java.lang.String) throws java.io.IOException; - ctor public FileWriter(java.lang.String, boolean) throws java.io.IOException; } public abstract interface FilenameFilter { @@ -45881,7 +45940,7 @@ package java.io { ctor public InputStream(); method public int available() throws java.io.IOException; method public void close() throws java.io.IOException; - method public void mark(int); + method public synchronized void mark(int); method public boolean markSupported(); method public abstract int read() throws java.io.IOException; method public int read(byte[]) throws java.io.IOException; @@ -45893,8 +45952,8 @@ package java.io { public class InputStreamReader extends java.io.Reader { ctor public InputStreamReader(java.io.InputStream); ctor public InputStreamReader(java.io.InputStream, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder); ctor public InputStreamReader(java.io.InputStream, java.nio.charset.Charset); + ctor public InputStreamReader(java.io.InputStream, java.nio.charset.CharsetDecoder); method public void close() throws java.io.IOException; method public java.lang.String getEncoding(); method public int read(char[], int, int) throws java.io.IOException; @@ -45903,6 +45962,7 @@ package java.io { public class InterruptedIOException extends java.io.IOException { ctor public InterruptedIOException(); ctor public InterruptedIOException(java.lang.String); + ctor public InterruptedIOException(java.lang.Throwable); field public int bytesTransferred; } @@ -45930,13 +45990,13 @@ package java.io { } public class NotActiveException extends java.io.ObjectStreamException { - ctor public NotActiveException(); ctor public NotActiveException(java.lang.String); + ctor public NotActiveException(); } public class NotSerializableException extends java.io.ObjectStreamException { - ctor public NotSerializableException(); ctor public NotSerializableException(java.lang.String); + ctor public NotSerializableException(); } public abstract interface ObjectInput implements java.lang.AutoCloseable java.io.DataInput { @@ -45950,32 +46010,32 @@ package java.io { } public class ObjectInputStream extends java.io.InputStream implements java.io.ObjectInput java.io.ObjectStreamConstants { - ctor protected ObjectInputStream() throws java.io.IOException; - ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException, java.io.StreamCorruptedException; - method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; - method protected boolean enableResolveObject(boolean); + ctor public ObjectInputStream(java.io.InputStream) throws java.io.IOException; + ctor protected ObjectInputStream() throws java.io.IOException, java.lang.SecurityException; + method public void defaultReadObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method protected boolean enableResolveObject(boolean) throws java.lang.SecurityException; method public int read() throws java.io.IOException; method public boolean readBoolean() throws java.io.IOException; method public byte readByte() throws java.io.IOException; method public char readChar() throws java.io.IOException; method protected java.io.ObjectStreamClass readClassDescriptor() throws java.lang.ClassNotFoundException, java.io.IOException; method public double readDouble() throws java.io.IOException; - method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.NotActiveException; + method public java.io.ObjectInputStream.GetField readFields() throws java.lang.ClassNotFoundException, java.io.IOException; method public float readFloat() throws java.io.IOException; method public void readFully(byte[]) throws java.io.IOException; method public void readFully(byte[], int, int) throws java.io.IOException; method public int readInt() throws java.io.IOException; method public deprecated java.lang.String readLine() throws java.io.IOException; method public long readLong() throws java.io.IOException; - method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; - method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException, java.io.OptionalDataException; + method public final java.lang.Object readObject() throws java.lang.ClassNotFoundException, java.io.IOException; + method protected java.lang.Object readObjectOverride() throws java.lang.ClassNotFoundException, java.io.IOException; method public short readShort() throws java.io.IOException; method protected void readStreamHeader() throws java.io.IOException, java.io.StreamCorruptedException; method public java.lang.String readUTF() throws java.io.IOException; method public java.lang.Object readUnshared() throws java.lang.ClassNotFoundException, java.io.IOException; method public int readUnsignedByte() throws java.io.IOException; method public int readUnsignedShort() throws java.io.IOException; - method public synchronized void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException; + method public void registerValidation(java.io.ObjectInputValidation, int) throws java.io.InvalidObjectException, java.io.NotActiveException; method protected java.lang.Class<?> resolveClass(java.io.ObjectStreamClass) throws java.lang.ClassNotFoundException, java.io.IOException; method protected java.lang.Object resolveObject(java.lang.Object) throws java.io.IOException; method protected java.lang.Class<?> resolveProxyClass(java.lang.String[]) throws java.lang.ClassNotFoundException, java.io.IOException; @@ -45984,16 +46044,16 @@ package java.io { public static abstract class ObjectInputStream.GetField { ctor public ObjectInputStream.GetField(); - method public abstract boolean defaulted(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract char get(java.lang.String, char) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract byte get(java.lang.String, byte) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract short get(java.lang.String, short) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract int get(java.lang.String, int) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract long get(java.lang.String, long) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract float get(java.lang.String, float) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract double get(java.lang.String, double) throws java.io.IOException, java.lang.IllegalArgumentException; - method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException, java.lang.IllegalArgumentException; + method public abstract boolean defaulted(java.lang.String) throws java.io.IOException; + method public abstract boolean get(java.lang.String, boolean) throws java.io.IOException; + method public abstract byte get(java.lang.String, byte) throws java.io.IOException; + method public abstract char get(java.lang.String, char) throws java.io.IOException; + method public abstract short get(java.lang.String, short) throws java.io.IOException; + method public abstract int get(java.lang.String, int) throws java.io.IOException; + method public abstract long get(java.lang.String, long) throws java.io.IOException; + method public abstract float get(java.lang.String, float) throws java.io.IOException; + method public abstract double get(java.lang.String, double) throws java.io.IOException; + method public abstract java.lang.Object get(java.lang.String, java.lang.Object) throws java.io.IOException; method public abstract java.io.ObjectStreamClass getObjectStreamClass(); } @@ -46004,20 +46064,20 @@ package java.io { public abstract interface ObjectOutput implements java.lang.AutoCloseable java.io.DataOutput { method public abstract void close() throws java.io.IOException; method public abstract void flush() throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; method public abstract void write(byte[]) throws java.io.IOException; method public abstract void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; method public abstract void writeObject(java.lang.Object) throws java.io.IOException; } public class ObjectOutputStream extends java.io.OutputStream implements java.io.ObjectOutput java.io.ObjectStreamConstants { - ctor protected ObjectOutputStream() throws java.io.IOException; ctor public ObjectOutputStream(java.io.OutputStream) throws java.io.IOException; + ctor protected ObjectOutputStream() throws java.io.IOException, java.lang.SecurityException; method protected void annotateClass(java.lang.Class<?>) throws java.io.IOException; method protected void annotateProxyClass(java.lang.Class<?>) throws java.io.IOException; method public void defaultWriteObject() throws java.io.IOException; method protected void drain() throws java.io.IOException; - method protected boolean enableReplaceObject(boolean); + method protected boolean enableReplaceObject(boolean) throws java.lang.SecurityException; method public java.io.ObjectOutputStream.PutField putFields() throws java.io.IOException; method protected java.lang.Object replaceObject(java.lang.Object) throws java.io.IOException; method public void reset() throws java.io.IOException; @@ -46045,8 +46105,8 @@ package java.io { public static abstract class ObjectOutputStream.PutField { ctor public ObjectOutputStream.PutField(); method public abstract void put(java.lang.String, boolean); - method public abstract void put(java.lang.String, char); method public abstract void put(java.lang.String, byte); + method public abstract void put(java.lang.String, char); method public abstract void put(java.lang.String, short); method public abstract void put(java.lang.String, int); method public abstract void put(java.lang.String, long); @@ -46100,8 +46160,8 @@ package java.io { } public abstract class ObjectStreamException extends java.io.IOException { - ctor protected ObjectStreamException(); ctor protected ObjectStreamException(java.lang.String); + ctor protected ObjectStreamException(); } public class ObjectStreamField implements java.lang.Comparable { @@ -46127,14 +46187,14 @@ package java.io { ctor public OutputStream(); method public void close() throws java.io.IOException; method public void flush() throws java.io.IOException; + method public abstract void write(int) throws java.io.IOException; method public void write(byte[]) throws java.io.IOException; method public void write(byte[], int, int) throws java.io.IOException; - method public abstract void write(int) throws java.io.IOException; } public class OutputStreamWriter extends java.io.Writer { - ctor public OutputStreamWriter(java.io.OutputStream); ctor public OutputStreamWriter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; + ctor public OutputStreamWriter(java.io.OutputStream); ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.Charset); ctor public OutputStreamWriter(java.io.OutputStream, java.nio.charset.CharsetEncoder); method public void close() throws java.io.IOException; @@ -46144,10 +46204,10 @@ package java.io { } public class PipedInputStream extends java.io.InputStream { - ctor public PipedInputStream(); ctor public PipedInputStream(java.io.PipedOutputStream) throws java.io.IOException; - ctor public PipedInputStream(int); ctor public PipedInputStream(java.io.PipedOutputStream, int) throws java.io.IOException; + ctor public PipedInputStream(); + ctor public PipedInputStream(int); method public void connect(java.io.PipedOutputStream) throws java.io.IOException; method public synchronized int read() throws java.io.IOException; method protected synchronized void receive(int) throws java.io.IOException; @@ -46158,28 +46218,28 @@ package java.io { } public class PipedOutputStream extends java.io.OutputStream { - ctor public PipedOutputStream(); ctor public PipedOutputStream(java.io.PipedInputStream) throws java.io.IOException; - method public void connect(java.io.PipedInputStream) throws java.io.IOException; + ctor public PipedOutputStream(); + method public synchronized void connect(java.io.PipedInputStream) throws java.io.IOException; method public void write(int) throws java.io.IOException; } public class PipedReader extends java.io.Reader { - ctor public PipedReader(); ctor public PipedReader(java.io.PipedWriter) throws java.io.IOException; - ctor public PipedReader(int); ctor public PipedReader(java.io.PipedWriter, int) throws java.io.IOException; - method public synchronized void close() throws java.io.IOException; + ctor public PipedReader(); + ctor public PipedReader(int); + method public void close() throws java.io.IOException; method public void connect(java.io.PipedWriter) throws java.io.IOException; method public synchronized int read(char[], int, int) throws java.io.IOException; } public class PipedWriter extends java.io.Writer { - ctor public PipedWriter(); ctor public PipedWriter(java.io.PipedReader) throws java.io.IOException; + ctor public PipedWriter(); method public void close() throws java.io.IOException; - method public void connect(java.io.PipedReader) throws java.io.IOException; - method public void flush() throws java.io.IOException; + method public synchronized void connect(java.io.PipedReader) throws java.io.IOException; + method public synchronized void flush() throws java.io.IOException; method public void write(char[], int, int) throws java.io.IOException; } @@ -46187,111 +46247,111 @@ package java.io { ctor public PrintStream(java.io.OutputStream); ctor public PrintStream(java.io.OutputStream, boolean); ctor public PrintStream(java.io.OutputStream, boolean, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException; - ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; ctor public PrintStream(java.lang.String) throws java.io.FileNotFoundException; ctor public PrintStream(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; - method public java.io.PrintStream append(char); + ctor public PrintStream(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintStream(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; method public java.io.PrintStream append(java.lang.CharSequence); method public java.io.PrintStream append(java.lang.CharSequence, int, int); + method public java.io.PrintStream append(char); method public boolean checkError(); method protected void clearError(); method public java.io.PrintStream format(java.lang.String, java.lang.Object...); method public java.io.PrintStream format(java.util.Locale, java.lang.String, java.lang.Object...); - method public void print(char[]); + method public void print(boolean); method public void print(char); - method public void print(double); - method public void print(float); method public void print(int); method public void print(long); + method public void print(float); + method public void print(double); + method public void print(char[]); + method public void print(java.lang.String); method public void print(java.lang.Object); - method public synchronized void print(java.lang.String); - method public void print(boolean); method public java.io.PrintStream printf(java.lang.String, java.lang.Object...); method public java.io.PrintStream printf(java.util.Locale, java.lang.String, java.lang.Object...); method public void println(); - method public void println(char[]); + method public void println(boolean); method public void println(char); - method public void println(double); - method public void println(float); method public void println(int); method public void println(long); + method public void println(float); + method public void println(double); + method public void println(char[]); + method public void println(java.lang.String); method public void println(java.lang.Object); - method public synchronized void println(java.lang.String); - method public void println(boolean); method protected void setError(); } public class PrintWriter extends java.io.Writer { - ctor public PrintWriter(java.io.OutputStream); - ctor public PrintWriter(java.io.OutputStream, boolean); ctor public PrintWriter(java.io.Writer); ctor public PrintWriter(java.io.Writer, boolean); - ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException; - ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintWriter(java.io.OutputStream); + ctor public PrintWriter(java.io.OutputStream, boolean); ctor public PrintWriter(java.lang.String) throws java.io.FileNotFoundException; ctor public PrintWriter(java.lang.String, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public PrintWriter(java.io.File) throws java.io.FileNotFoundException; + ctor public PrintWriter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; method public boolean checkError(); method protected void clearError(); method public void close(); method public void flush(); method public java.io.PrintWriter format(java.lang.String, java.lang.Object...); method public java.io.PrintWriter format(java.util.Locale, java.lang.String, java.lang.Object...); - method public void print(char[]); + method public void print(boolean); method public void print(char); - method public void print(double); - method public void print(float); method public void print(int); method public void print(long); - method public void print(java.lang.Object); + method public void print(float); + method public void print(double); + method public void print(char[]); method public void print(java.lang.String); - method public void print(boolean); + method public void print(java.lang.Object); method public java.io.PrintWriter printf(java.lang.String, java.lang.Object...); method public java.io.PrintWriter printf(java.util.Locale, java.lang.String, java.lang.Object...); method public void println(); - method public void println(char[]); + method public void println(boolean); method public void println(char); - method public void println(double); - method public void println(float); method public void println(int); method public void println(long); - method public void println(java.lang.Object); + method public void println(float); + method public void println(double); + method public void println(char[]); method public void println(java.lang.String); - method public void println(boolean); + method public void println(java.lang.Object); method protected void setError(); method public void write(char[], int, int); field protected java.io.Writer out; } public class PushbackInputStream extends java.io.FilterInputStream { - ctor public PushbackInputStream(java.io.InputStream); ctor public PushbackInputStream(java.io.InputStream, int); - method public void unread(byte[]) throws java.io.IOException; - method public void unread(byte[], int, int) throws java.io.IOException; + ctor public PushbackInputStream(java.io.InputStream); method public void unread(int) throws java.io.IOException; + method public void unread(byte[], int, int) throws java.io.IOException; + method public void unread(byte[]) throws java.io.IOException; field protected byte[] buf; field protected int pos; } public class PushbackReader extends java.io.FilterReader { - ctor public PushbackReader(java.io.Reader); ctor public PushbackReader(java.io.Reader, int); - method public void unread(char[]) throws java.io.IOException; - method public void unread(char[], int, int) throws java.io.IOException; + ctor public PushbackReader(java.io.Reader); method public void unread(int) throws java.io.IOException; + method public void unread(char[], int, int) throws java.io.IOException; + method public void unread(char[]) throws java.io.IOException; } public class RandomAccessFile implements java.io.Closeable java.io.DataInput java.io.DataOutput { - ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException; ctor public RandomAccessFile(java.lang.String, java.lang.String) throws java.io.FileNotFoundException; + ctor public RandomAccessFile(java.io.File, java.lang.String) throws java.io.FileNotFoundException; method public void close() throws java.io.IOException; - method public final synchronized java.nio.channels.FileChannel getChannel(); + method public final java.nio.channels.FileChannel getChannel(); method public final java.io.FileDescriptor getFD() throws java.io.IOException; method public long getFilePointer() throws java.io.IOException; method public long length() throws java.io.IOException; method public int read() throws java.io.IOException; - method public int read(byte[]) throws java.io.IOException; method public int read(byte[], int, int) throws java.io.IOException; + method public int read(byte[]) throws java.io.IOException; method public final boolean readBoolean() throws java.io.IOException; method public final byte readByte() throws java.io.IOException; method public final char readChar() throws java.io.IOException; @@ -46309,9 +46369,9 @@ package java.io { method public void seek(long) throws java.io.IOException; method public void setLength(long) throws java.io.IOException; method public int skipBytes(int) throws java.io.IOException; + method public void write(int) throws java.io.IOException; method public void write(byte[]) throws java.io.IOException; method public void write(byte[], int, int) throws java.io.IOException; - method public void write(int) throws java.io.IOException; method public final void writeBoolean(boolean) throws java.io.IOException; method public final void writeByte(int) throws java.io.IOException; method public final void writeBytes(java.lang.String) throws java.io.IOException; @@ -46331,10 +46391,10 @@ package java.io { method public abstract void close() throws java.io.IOException; method public void mark(int) throws java.io.IOException; method public boolean markSupported(); + method public int read(java.nio.CharBuffer) throws java.io.IOException; method public int read() throws java.io.IOException; method public int read(char[]) throws java.io.IOException; method public abstract int read(char[], int, int) throws java.io.IOException; - method public int read(java.nio.CharBuffer) throws java.io.IOException; method public boolean ready() throws java.io.IOException; method public void reset() throws java.io.IOException; method public long skip(long) throws java.io.IOException; @@ -46342,8 +46402,8 @@ package java.io { } public class SequenceInputStream extends java.io.InputStream { - ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream); ctor public SequenceInputStream(java.util.Enumeration<? extends java.io.InputStream>); + ctor public SequenceInputStream(java.io.InputStream, java.io.InputStream); method public int read() throws java.io.IOException; } @@ -46356,8 +46416,8 @@ package java.io { } public class StreamCorruptedException extends java.io.ObjectStreamException { - ctor public StreamCorruptedException(); ctor public StreamCorruptedException(java.lang.String); + ctor public StreamCorruptedException(); } public class StreamTokenizer { @@ -46432,14 +46492,14 @@ package java.io { public abstract class Writer implements java.lang.Appendable java.io.Closeable java.io.Flushable { ctor protected Writer(); ctor protected Writer(java.lang.Object); - method public java.io.Writer append(char) throws java.io.IOException; method public java.io.Writer append(java.lang.CharSequence) throws java.io.IOException; method public java.io.Writer append(java.lang.CharSequence, int, int) throws java.io.IOException; + method public java.io.Writer append(char) throws java.io.IOException; method public abstract void close() throws java.io.IOException; method public abstract void flush() throws java.io.IOException; + method public void write(int) throws java.io.IOException; method public void write(char[]) throws java.io.IOException; method public abstract void write(char[], int, int) throws java.io.IOException; - method public void write(int) throws java.io.IOException; method public void write(java.lang.String) throws java.io.IOException; method public void write(java.lang.String, int, int) throws java.io.IOException; field protected java.lang.Object lock; @@ -46454,32 +46514,63 @@ package java.lang { ctor public AbstractMethodError(java.lang.String); } - abstract class AbstractStringBuilder { + abstract class AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence { + method public java.lang.AbstractStringBuilder append(java.lang.Object); + method public java.lang.AbstractStringBuilder append(java.lang.String); + method public java.lang.AbstractStringBuilder append(java.lang.StringBuffer); + method public java.lang.AbstractStringBuilder append(java.lang.CharSequence); + method public java.lang.AbstractStringBuilder append(java.lang.CharSequence, int, int); + method public java.lang.AbstractStringBuilder append(char[]); + method public java.lang.AbstractStringBuilder append(char[], int, int); + method public java.lang.AbstractStringBuilder append(boolean); + method public java.lang.AbstractStringBuilder append(char); + method public java.lang.AbstractStringBuilder append(int); + method public java.lang.AbstractStringBuilder append(long); + method public java.lang.AbstractStringBuilder append(float); + method public java.lang.AbstractStringBuilder append(double); + method public java.lang.AbstractStringBuilder appendCodePoint(int); method public int capacity(); method public char charAt(int); method public int codePointAt(int); method public int codePointBefore(int); method public int codePointCount(int, int); + method public java.lang.AbstractStringBuilder delete(int, int); + method public java.lang.AbstractStringBuilder deleteCharAt(int); method public void ensureCapacity(int); method public void getChars(int, int, char[], int); method public int indexOf(java.lang.String); method public int indexOf(java.lang.String, int); + method public java.lang.AbstractStringBuilder insert(int, char[], int, int); + method public java.lang.AbstractStringBuilder insert(int, java.lang.Object); + method public java.lang.AbstractStringBuilder insert(int, java.lang.String); + method public java.lang.AbstractStringBuilder insert(int, char[]); + method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence); + method public java.lang.AbstractStringBuilder insert(int, java.lang.CharSequence, int, int); + method public java.lang.AbstractStringBuilder insert(int, boolean); + method public java.lang.AbstractStringBuilder insert(int, char); + method public java.lang.AbstractStringBuilder insert(int, int); + method public java.lang.AbstractStringBuilder insert(int, long); + method public java.lang.AbstractStringBuilder insert(int, float); + method public java.lang.AbstractStringBuilder insert(int, double); method public int lastIndexOf(java.lang.String); method public int lastIndexOf(java.lang.String, int); method public int length(); method public int offsetByCodePoints(int, int); + method public java.lang.AbstractStringBuilder replace(int, int, java.lang.String); + method public java.lang.AbstractStringBuilder reverse(); method public void setCharAt(int, char); method public void setLength(int); method public java.lang.CharSequence subSequence(int, int); method public java.lang.String substring(int); method public java.lang.String substring(int, int); + method public abstract java.lang.String toString(); method public void trimToSize(); } public abstract interface Appendable { - method public abstract java.lang.Appendable append(char) throws java.io.IOException; method public abstract java.lang.Appendable append(java.lang.CharSequence) throws java.io.IOException; method public abstract java.lang.Appendable append(java.lang.CharSequence, int, int) throws java.io.IOException; + method public abstract java.lang.Appendable append(char) throws java.io.IOException; } public class ArithmeticException extends java.lang.RuntimeException { @@ -46500,7 +46591,6 @@ package java.lang { public class AssertionError extends java.lang.Error { ctor public AssertionError(); - ctor public AssertionError(java.lang.String, java.lang.Throwable); ctor public AssertionError(java.lang.Object); ctor public AssertionError(boolean); ctor public AssertionError(char); @@ -46508,6 +46598,7 @@ package java.lang { ctor public AssertionError(long); ctor public AssertionError(float); ctor public AssertionError(double); + ctor public AssertionError(java.lang.String, java.lang.Throwable); } public abstract interface AutoCloseable { @@ -46515,16 +46606,16 @@ package java.lang { } public final class Boolean implements java.lang.Comparable java.io.Serializable { - ctor public Boolean(java.lang.String); ctor public Boolean(boolean); + ctor public Boolean(java.lang.String); method public boolean booleanValue(); method public static int compare(boolean, boolean); method public int compareTo(java.lang.Boolean); method public static boolean getBoolean(java.lang.String); method public static boolean parseBoolean(java.lang.String); method public static java.lang.String toString(boolean); - method public static java.lang.Boolean valueOf(java.lang.String); method public static java.lang.Boolean valueOf(boolean); + method public static java.lang.Boolean valueOf(java.lang.String); field public static final java.lang.Boolean FALSE; field public static final java.lang.Boolean TRUE; field public static final java.lang.Class<java.lang.Boolean> TYPE; @@ -46540,12 +46631,13 @@ package java.lang { method public float floatValue(); method public int intValue(); method public long longValue(); - method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException; method public static byte parseByte(java.lang.String, int) throws java.lang.NumberFormatException; + method public static byte parseByte(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toHexString(byte, boolean); method public static java.lang.String toString(byte); - method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException; - method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException; method public static java.lang.Byte valueOf(byte); + method public static java.lang.Byte valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Byte valueOf(java.lang.String) throws java.lang.NumberFormatException; field public static final byte MAX_VALUE = 127; // 0x7f field public static final byte MIN_VALUE = -128; // 0xffffff80 field public static final int SIZE = 8; // 0x8 @@ -46718,7 +46810,7 @@ package java.lang { } public static final class Character.UnicodeBlock extends java.lang.Character.Subset { - method public static java.lang.Character.UnicodeBlock forName(java.lang.String); + method public static final java.lang.Character.UnicodeBlock forName(java.lang.String); method public static java.lang.Character.UnicodeBlock of(char); method public static java.lang.Character.UnicodeBlock of(int); field public static final java.lang.Character.UnicodeBlock AEGEAN_NUMBERS; @@ -46933,6 +47025,109 @@ package java.lang { field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES; } + public static final class Character.UnicodeScript extends java.lang.Enum { + method public static final java.lang.Character.UnicodeScript forName(java.lang.String); + method public static java.lang.Character.UnicodeScript of(int); + method public static java.lang.Character.UnicodeScript valueOf(java.lang.String); + method public static final java.lang.Character.UnicodeScript[] values(); + enum_constant public static final java.lang.Character.UnicodeScript ARABIC; + enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN; + enum_constant public static final java.lang.Character.UnicodeScript AVESTAN; + enum_constant public static final java.lang.Character.UnicodeScript BALINESE; + enum_constant public static final java.lang.Character.UnicodeScript BAMUM; + enum_constant public static final java.lang.Character.UnicodeScript BATAK; + enum_constant public static final java.lang.Character.UnicodeScript BENGALI; + enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO; + enum_constant public static final java.lang.Character.UnicodeScript BRAHMI; + enum_constant public static final java.lang.Character.UnicodeScript BRAILLE; + enum_constant public static final java.lang.Character.UnicodeScript BUGINESE; + enum_constant public static final java.lang.Character.UnicodeScript BUHID; + enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL; + enum_constant public static final java.lang.Character.UnicodeScript CARIAN; + enum_constant public static final java.lang.Character.UnicodeScript CHAM; + enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE; + enum_constant public static final java.lang.Character.UnicodeScript COMMON; + enum_constant public static final java.lang.Character.UnicodeScript COPTIC; + enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM; + enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT; + enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC; + enum_constant public static final java.lang.Character.UnicodeScript DESERET; + enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI; + enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS; + enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC; + enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN; + enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC; + enum_constant public static final java.lang.Character.UnicodeScript GOTHIC; + enum_constant public static final java.lang.Character.UnicodeScript GREEK; + enum_constant public static final java.lang.Character.UnicodeScript GUJARATI; + enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI; + enum_constant public static final java.lang.Character.UnicodeScript HAN; + enum_constant public static final java.lang.Character.UnicodeScript HANGUL; + enum_constant public static final java.lang.Character.UnicodeScript HANUNOO; + enum_constant public static final java.lang.Character.UnicodeScript HEBREW; + enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA; + enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC; + enum_constant public static final java.lang.Character.UnicodeScript INHERITED; + enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI; + enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN; + enum_constant public static final java.lang.Character.UnicodeScript JAVANESE; + enum_constant public static final java.lang.Character.UnicodeScript KAITHI; + enum_constant public static final java.lang.Character.UnicodeScript KANNADA; + enum_constant public static final java.lang.Character.UnicodeScript KATAKANA; + enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI; + enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI; + enum_constant public static final java.lang.Character.UnicodeScript KHMER; + enum_constant public static final java.lang.Character.UnicodeScript LAO; + enum_constant public static final java.lang.Character.UnicodeScript LATIN; + enum_constant public static final java.lang.Character.UnicodeScript LEPCHA; + enum_constant public static final java.lang.Character.UnicodeScript LIMBU; + enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B; + enum_constant public static final java.lang.Character.UnicodeScript LISU; + enum_constant public static final java.lang.Character.UnicodeScript LYCIAN; + enum_constant public static final java.lang.Character.UnicodeScript LYDIAN; + enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM; + enum_constant public static final java.lang.Character.UnicodeScript MANDAIC; + enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK; + enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN; + enum_constant public static final java.lang.Character.UnicodeScript MYANMAR; + enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE; + enum_constant public static final java.lang.Character.UnicodeScript NKO; + enum_constant public static final java.lang.Character.UnicodeScript OGHAM; + enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC; + enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN; + enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN; + enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC; + enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI; + enum_constant public static final java.lang.Character.UnicodeScript ORIYA; + enum_constant public static final java.lang.Character.UnicodeScript OSMANYA; + enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA; + enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN; + enum_constant public static final java.lang.Character.UnicodeScript REJANG; + enum_constant public static final java.lang.Character.UnicodeScript RUNIC; + enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN; + enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA; + enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN; + enum_constant public static final java.lang.Character.UnicodeScript SINHALA; + enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE; + enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI; + enum_constant public static final java.lang.Character.UnicodeScript SYRIAC; + enum_constant public static final java.lang.Character.UnicodeScript TAGALOG; + enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA; + enum_constant public static final java.lang.Character.UnicodeScript TAI_LE; + enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM; + enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET; + enum_constant public static final java.lang.Character.UnicodeScript TAMIL; + enum_constant public static final java.lang.Character.UnicodeScript TELUGU; + enum_constant public static final java.lang.Character.UnicodeScript THAANA; + enum_constant public static final java.lang.Character.UnicodeScript THAI; + enum_constant public static final java.lang.Character.UnicodeScript TIBETAN; + enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH; + enum_constant public static final java.lang.Character.UnicodeScript UGARITIC; + enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN; + enum_constant public static final java.lang.Character.UnicodeScript VAI; + 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>); method public T cast(java.lang.Object); @@ -46945,28 +47140,28 @@ package java.lang { 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; - method public java.lang.reflect.Constructor<?>[] getConstructors(); + 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 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; - method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors(); + method public java.lang.reflect.Constructor<T> getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Constructor<?>[] getDeclaredConstructors() throws java.lang.SecurityException; method public java.lang.reflect.Field getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException; method public java.lang.reflect.Field[] getDeclaredFields(); - method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException; - method public java.lang.reflect.Method[] getDeclaredMethods(); + method public java.lang.reflect.Method getDeclaredMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Method[] getDeclaredMethods() throws java.lang.SecurityException; method public java.lang.Class<?> getDeclaringClass(); method public java.lang.Class<?> getEnclosingClass(); method public java.lang.reflect.Constructor<?> getEnclosingConstructor(); method public java.lang.reflect.Method getEnclosingMethod(); method public T[] getEnumConstants(); method public java.lang.reflect.Field getField(java.lang.String) throws java.lang.NoSuchFieldException; - method public java.lang.reflect.Field[] getFields(); + method public java.lang.reflect.Field[] getFields() throws java.lang.SecurityException; method public java.lang.reflect.Type[] getGenericInterfaces(); method public java.lang.reflect.Type getGenericSuperclass(); method public java.lang.Class<?>[] getInterfaces(); - method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException; - method public java.lang.reflect.Method[] getMethods(); + method public java.lang.reflect.Method getMethod(java.lang.String, java.lang.Class<?>...) throws java.lang.NoSuchMethodException, java.lang.SecurityException; + method public java.lang.reflect.Method[] getMethods() throws java.lang.SecurityException; method public int getModifiers(); method public java.lang.String getName(); method public java.lang.Package getPackage(); @@ -47008,8 +47203,8 @@ package java.lang { } public abstract class ClassLoader { - ctor protected ClassLoader(); ctor protected ClassLoader(java.lang.ClassLoader); + ctor protected ClassLoader(); method public void clearAssertionStatus(); method protected final deprecated java.lang.Class<?> defineClass(byte[], int, int) throws java.lang.ClassFormatError; method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int) throws java.lang.ClassFormatError; @@ -47034,6 +47229,7 @@ package java.lang { method public static java.util.Enumeration<java.net.URL> getSystemResources(java.lang.String) throws java.io.IOException; method public java.lang.Class<?> loadClass(java.lang.String) throws java.lang.ClassNotFoundException; method protected java.lang.Class<?> loadClass(java.lang.String, boolean) throws java.lang.ClassNotFoundException; + method protected static boolean registerAsParallelCapable(); method protected final void resolveClass(java.lang.Class<?>); method public void setClassAssertionStatus(java.lang.String, boolean); method public void setDefaultAssertionStatus(boolean); @@ -47081,10 +47277,10 @@ package java.lang { method public double doubleValue(); method public float floatValue(); method public int intValue(); - method public boolean isInfinite(); method public static boolean isInfinite(double); - method public boolean isNaN(); + method public boolean isInfinite(); method public static boolean isNaN(double); + method public boolean isNaN(); method public static double longBitsToDouble(long); method public long longValue(); method public static double parseDouble(java.lang.String) throws java.lang.NumberFormatException; @@ -47128,6 +47324,7 @@ package java.lang { ctor public Error(java.lang.String); ctor public Error(java.lang.String, java.lang.Throwable); ctor public Error(java.lang.Throwable); + ctor protected Error(java.lang.String, java.lang.Throwable, boolean, boolean); } public class Exception extends java.lang.Throwable { @@ -47135,12 +47332,13 @@ package java.lang { ctor public Exception(java.lang.String); ctor public Exception(java.lang.String, java.lang.Throwable); ctor public Exception(java.lang.Throwable); + ctor protected Exception(java.lang.String, java.lang.Throwable, boolean, boolean); } public class ExceptionInInitializerError extends java.lang.LinkageError { ctor public ExceptionInInitializerError(); - ctor public ExceptionInInitializerError(java.lang.String); ctor public ExceptionInInitializerError(java.lang.Throwable); + ctor public ExceptionInInitializerError(java.lang.String); method public java.lang.Throwable getException(); } @@ -47156,10 +47354,10 @@ package java.lang { method public float floatValue(); method public static float intBitsToFloat(int); method public int intValue(); - method public boolean isInfinite(); method public static boolean isInfinite(float); - method public boolean isNaN(); + method public boolean isInfinite(); method public static boolean isNaN(float); + method public boolean isNaN(); method public long longValue(); method public static float parseFloat(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.String toHexString(float); @@ -47255,8 +47453,8 @@ package java.lang { method public static int lowestOneBit(int); method public static int numberOfLeadingZeros(int); method public static int numberOfTrailingZeros(int); - method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException; method public static int parseInt(java.lang.String, int) throws java.lang.NumberFormatException; + method public static int parseInt(java.lang.String) throws java.lang.NumberFormatException; method public static int reverse(int); method public static int reverseBytes(int); method public static int rotateLeft(int, int); @@ -47265,10 +47463,10 @@ package java.lang { method public static java.lang.String toBinaryString(int); method public static java.lang.String toHexString(int); method public static java.lang.String toOctalString(int); - method public static java.lang.String toString(int); method public static java.lang.String toString(int, int); - method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toString(int); method public static java.lang.Integer valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Integer valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Integer valueOf(int); field public static final int MAX_VALUE = 2147483647; // 0x7fffffff field public static final int MIN_VALUE = -2147483648; // 0x80000000 @@ -47314,8 +47512,8 @@ package java.lang { method public static long lowestOneBit(long); method public static int numberOfLeadingZeros(long); method public static int numberOfTrailingZeros(long); - method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException; method public static long parseLong(java.lang.String, int) throws java.lang.NumberFormatException; + method public static long parseLong(java.lang.String) throws java.lang.NumberFormatException; method public static long reverse(long); method public static long reverseBytes(long); method public static long rotateLeft(long, int); @@ -47324,10 +47522,10 @@ package java.lang { method public static java.lang.String toBinaryString(long); method public static java.lang.String toHexString(long); method public static java.lang.String toOctalString(long); - method public static java.lang.String toString(long); method public static java.lang.String toString(long, int); - method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException; + method public static java.lang.String toString(long); method public static java.lang.Long valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Long valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Long valueOf(long); field public static final long MAX_VALUE = 9223372036854775807L; // 0x7fffffffffffffffL field public static final long MIN_VALUE = -9223372036854775808L; // 0x8000000000000000L @@ -47337,10 +47535,10 @@ package java.lang { public final class Math { method public static double IEEEremainder(double, double); - method public static double abs(double); - method public static float abs(float); method public static int abs(int); method public static long abs(long); + method public static float abs(float); + method public static double abs(double); method public static double acos(double); method public static double asin(double); method public static double atan(double); @@ -47360,14 +47558,14 @@ package java.lang { method public static double log(double); method public static double log10(double); method public static double log1p(double); - method public static double max(double, double); - method public static float max(float, float); method public static int max(int, int); method public static long max(long, long); - method public static double min(double, double); - method public static float min(float, float); + method public static float max(float, float); + method public static double max(double, double); method public static int min(int, int); method public static long min(long, long); + method public static float min(float, float); + method public static double min(double, double); method public static double nextAfter(double, double); method public static float nextAfter(float, double); method public static double nextUp(double); @@ -47375,8 +47573,8 @@ package java.lang { method public static double pow(double, double); method public static double random(); method public static double rint(double); - method public static long round(double); method public static int round(float); + method public static long round(double); method public static double scalb(double, int); method public static float scalb(float, int); method public static double signum(double); @@ -47454,9 +47652,9 @@ package java.lang { method public final void notify(); method public final void notifyAll(); method public java.lang.String toString(); - method public final void wait() throws java.lang.InterruptedException; method public final void wait(long) throws java.lang.InterruptedException; method public final void wait(long, int) throws java.lang.InterruptedException; + method public final void wait() throws java.lang.InterruptedException; } public class OutOfMemoryError extends java.lang.VirtualMachineError { @@ -47497,19 +47695,49 @@ package java.lang { } public final class ProcessBuilder { - ctor public ProcessBuilder(java.lang.String...); ctor public ProcessBuilder(java.util.List<java.lang.String>); - method public java.util.List<java.lang.String> command(); - method public java.lang.ProcessBuilder command(java.lang.String...); + ctor public ProcessBuilder(java.lang.String...); method public java.lang.ProcessBuilder command(java.util.List<java.lang.String>); + method public java.lang.ProcessBuilder command(java.lang.String...); + method public java.util.List<java.lang.String> command(); method public java.io.File directory(); method public java.lang.ProcessBuilder directory(java.io.File); method public java.util.Map<java.lang.String, java.lang.String> environment(); + method public java.lang.ProcessBuilder inheritIO(); + method public java.lang.ProcessBuilder redirectError(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectError(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectError(); method public boolean redirectErrorStream(); method public java.lang.ProcessBuilder redirectErrorStream(boolean); + method public java.lang.ProcessBuilder redirectInput(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectInput(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectInput(); + method public java.lang.ProcessBuilder redirectOutput(java.lang.ProcessBuilder.Redirect); + method public java.lang.ProcessBuilder redirectOutput(java.io.File); + method public java.lang.ProcessBuilder.Redirect redirectOutput(); method public java.lang.Process start() throws java.io.IOException; } + public static abstract class ProcessBuilder.Redirect { + method public static java.lang.ProcessBuilder.Redirect appendTo(java.io.File); + method public java.io.File file(); + method public static java.lang.ProcessBuilder.Redirect from(java.io.File); + method public static java.lang.ProcessBuilder.Redirect to(java.io.File); + method public abstract java.lang.ProcessBuilder.Redirect.Type type(); + field public static final java.lang.ProcessBuilder.Redirect INHERIT; + field public static final java.lang.ProcessBuilder.Redirect PIPE; + } + + public static final class ProcessBuilder.Redirect.Type extends java.lang.Enum { + method public static java.lang.ProcessBuilder.Redirect.Type valueOf(java.lang.String); + method public static final java.lang.ProcessBuilder.Redirect.Type[] values(); + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type APPEND; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type INHERIT; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type PIPE; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type READ; + enum_constant public static final java.lang.ProcessBuilder.Redirect.Type WRITE; + } + public abstract interface Readable { method public abstract int read(java.nio.CharBuffer) throws java.io.IOException; } @@ -47517,8 +47745,8 @@ package java.lang { public class ReflectiveOperationException extends java.lang.Exception { ctor public ReflectiveOperationException(); ctor public ReflectiveOperationException(java.lang.String); - ctor public ReflectiveOperationException(java.lang.Throwable); ctor public ReflectiveOperationException(java.lang.String, java.lang.Throwable); + ctor public ReflectiveOperationException(java.lang.Throwable); } public abstract interface Runnable { @@ -47528,12 +47756,12 @@ package java.lang { public class Runtime { method public void addShutdownHook(java.lang.Thread); method public int availableProcessors(); - method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException; - method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException; - method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException; method public java.lang.Process exec(java.lang.String) throws java.io.IOException; method public java.lang.Process exec(java.lang.String, java.lang.String[]) throws java.io.IOException; method public java.lang.Process exec(java.lang.String, java.lang.String[], java.io.File) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[]) throws java.io.IOException; + method public java.lang.Process exec(java.lang.String[], java.lang.String[], java.io.File) throws java.io.IOException; method public void exit(int); method public long freeMemory(); method public void gc(); @@ -47557,6 +47785,7 @@ package java.lang { ctor public RuntimeException(java.lang.String); ctor public RuntimeException(java.lang.String, java.lang.Throwable); ctor public RuntimeException(java.lang.Throwable); + ctor protected RuntimeException(java.lang.String, java.lang.Throwable, boolean, boolean); } public final class RuntimePermission extends java.security.BasicPermission { @@ -47621,8 +47850,8 @@ package java.lang { } public final class Short extends java.lang.Number implements java.lang.Comparable { - ctor public Short(java.lang.String) throws java.lang.NumberFormatException; ctor public Short(short); + ctor public Short(java.lang.String) throws java.lang.NumberFormatException; method public static int compare(short, short); method public int compareTo(java.lang.Short); method public static java.lang.Short decode(java.lang.String) throws java.lang.NumberFormatException; @@ -47630,12 +47859,12 @@ package java.lang { method public float floatValue(); method public int intValue(); method public long longValue(); - method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException; method public static short parseShort(java.lang.String, int) throws java.lang.NumberFormatException; + method public static short parseShort(java.lang.String) throws java.lang.NumberFormatException; method public static short reverseBytes(short); method public static java.lang.String toString(short); - method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Short valueOf(java.lang.String, int) throws java.lang.NumberFormatException; + method public static java.lang.Short valueOf(java.lang.String) throws java.lang.NumberFormatException; method public static java.lang.Short valueOf(short); field public static final short MAX_VALUE = 32767; // 0x7fff field public static final short MIN_VALUE = -32768; // 0xffff8000 @@ -47659,10 +47888,10 @@ package java.lang { public final class StrictMath { method public static double IEEEremainder(double, double); - method public static double abs(double); - method public static float abs(float); method public static int abs(int); method public static long abs(long); + method public static float abs(float); + method public static double abs(double); method public static double acos(double); method public static double asin(double); method public static double atan(double); @@ -47682,14 +47911,14 @@ package java.lang { method public static double log(double); method public static double log10(double); method public static double log1p(double); - method public static double max(double, double); - method public static float max(float, float); method public static int max(int, int); method public static long max(long, long); - method public static double min(double, double); - method public static float min(float, float); + method public static float max(float, float); + method public static double max(double, double); method public static int min(int, int); method public static long min(long, long); + method public static float min(float, float); + method public static double min(double, double); method public static double nextAfter(double, double); method public static float nextAfter(float, double); method public static double nextUp(double); @@ -47697,8 +47926,8 @@ package java.lang { method public static double pow(double, double); method public static double random(); method public static double rint(double); - method public static long round(double); method public static int round(float); + method public static long round(double); method public static double scalb(double, int); method public static float scalb(float, int); method public static double signum(double); @@ -47718,19 +47947,19 @@ package java.lang { public final class String implements java.lang.CharSequence java.lang.Comparable java.io.Serializable { ctor public String(); - ctor public String(byte[]); - ctor public deprecated String(byte[], int); - ctor public String(byte[], int, int); + ctor public String(java.lang.String); + ctor public String(char[]); + ctor public String(char[], int, int); + ctor public String(int[], int, int); ctor public deprecated String(byte[], int, int, int); + ctor public deprecated String(byte[], int); ctor public String(byte[], int, int, java.lang.String) throws java.io.UnsupportedEncodingException; - ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; ctor public String(byte[], int, int, java.nio.charset.Charset); + ctor public String(byte[], java.lang.String) throws java.io.UnsupportedEncodingException; ctor public String(byte[], java.nio.charset.Charset); - ctor public String(char[]); - ctor public String(char[], int, int); - ctor public String(java.lang.String); + ctor public String(byte[], int, int); + ctor public String(byte[]); ctor public String(java.lang.StringBuffer); - ctor public String(int[], int, int); ctor public String(java.lang.StringBuilder); method public char charAt(int); method public int codePointAt(int); @@ -47742,16 +47971,16 @@ package java.lang { method public boolean contains(java.lang.CharSequence); method public boolean contentEquals(java.lang.StringBuffer); method public boolean contentEquals(java.lang.CharSequence); - method public static java.lang.String copyValueOf(char[]); method public static java.lang.String copyValueOf(char[], int, int); + method public static java.lang.String copyValueOf(char[]); method public boolean endsWith(java.lang.String); method public boolean equalsIgnoreCase(java.lang.String); method public static java.lang.String format(java.lang.String, java.lang.Object...); method public static java.lang.String format(java.util.Locale, java.lang.String, java.lang.Object...); method public deprecated void getBytes(int, int, byte[], int); - method public byte[] getBytes(); method public byte[] getBytes(java.lang.String) throws java.io.UnsupportedEncodingException; method public byte[] getBytes(java.nio.charset.Charset); + method public byte[] getBytes(); method public void getChars(int, int, char[], int); method public int indexOf(int); method public int indexOf(int, int); @@ -47772,109 +48001,51 @@ package java.lang { method public java.lang.String replace(java.lang.CharSequence, java.lang.CharSequence); method public java.lang.String replaceAll(java.lang.String, java.lang.String); method public java.lang.String replaceFirst(java.lang.String, java.lang.String); - method public java.lang.String[] split(java.lang.String); method public java.lang.String[] split(java.lang.String, int); - method public boolean startsWith(java.lang.String); + method public java.lang.String[] split(java.lang.String); method public boolean startsWith(java.lang.String, int); + method public boolean startsWith(java.lang.String); method public java.lang.CharSequence subSequence(int, int); method public java.lang.String substring(int); method public java.lang.String substring(int, int); method public char[] toCharArray(); - method public java.lang.String toLowerCase(); method public java.lang.String toLowerCase(java.util.Locale); - method public java.lang.String toUpperCase(); + method public java.lang.String toLowerCase(); method public java.lang.String toUpperCase(java.util.Locale); + method public java.lang.String toUpperCase(); method public java.lang.String trim(); + method public static java.lang.String valueOf(java.lang.Object); method public static java.lang.String valueOf(char[]); method public static java.lang.String valueOf(char[], int, int); + method public static java.lang.String valueOf(boolean); method public static java.lang.String valueOf(char); - method public static java.lang.String valueOf(double); - method public static java.lang.String valueOf(float); method public static java.lang.String valueOf(int); method public static java.lang.String valueOf(long); - method public static java.lang.String valueOf(java.lang.Object); - method public static java.lang.String valueOf(boolean); + method public static java.lang.String valueOf(float); + method public static java.lang.String valueOf(double); field public static final java.util.Comparator<java.lang.String> CASE_INSENSITIVE_ORDER; } - public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + public final class StringBuffer extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable { ctor public StringBuffer(); ctor public StringBuffer(int); ctor public StringBuffer(java.lang.String); ctor public StringBuffer(java.lang.CharSequence); - method public java.lang.StringBuffer append(boolean); - method public synchronized java.lang.StringBuffer append(char); - method public java.lang.StringBuffer append(double); - method public java.lang.StringBuffer append(float); - method public java.lang.StringBuffer append(int); - method public java.lang.StringBuffer append(long); - method public synchronized java.lang.StringBuffer append(java.lang.Object); - method public synchronized java.lang.StringBuffer append(java.lang.String); - method public synchronized java.lang.StringBuffer append(java.lang.StringBuffer); - method public synchronized java.lang.StringBuffer append(char[]); - method public synchronized java.lang.StringBuffer append(char[], int, int); - method public synchronized java.lang.StringBuffer append(java.lang.CharSequence); - method public synchronized java.lang.StringBuffer append(java.lang.CharSequence, int, int); - method public java.lang.StringBuffer appendCodePoint(int); - method public synchronized java.lang.StringBuffer delete(int, int); - method public synchronized java.lang.StringBuffer deleteCharAt(int); - method public synchronized java.lang.StringBuffer insert(int, char); - method public java.lang.StringBuffer insert(int, boolean); - method public java.lang.StringBuffer insert(int, int); - method public java.lang.StringBuffer insert(int, long); - method public java.lang.StringBuffer insert(int, double); - method public java.lang.StringBuffer insert(int, float); - method public java.lang.StringBuffer insert(int, java.lang.Object); - method public synchronized java.lang.StringBuffer insert(int, java.lang.String); - method public synchronized java.lang.StringBuffer insert(int, char[]); - method public synchronized java.lang.StringBuffer insert(int, char[], int, int); - method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence); - method public synchronized java.lang.StringBuffer insert(int, java.lang.CharSequence, int, int); - method public synchronized java.lang.StringBuffer replace(int, int, java.lang.String); - method public synchronized java.lang.StringBuffer reverse(); - } - - public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.Appendable java.lang.CharSequence java.io.Serializable { + method public synchronized java.lang.String toString(); + } + + public final class StringBuilder extends java.lang.AbstractStringBuilder implements java.lang.CharSequence java.io.Serializable { ctor public StringBuilder(); ctor public StringBuilder(int); - ctor public StringBuilder(java.lang.CharSequence); ctor public StringBuilder(java.lang.String); - method public java.lang.StringBuilder append(boolean); - method public java.lang.StringBuilder append(char); - method public java.lang.StringBuilder append(int); - method public java.lang.StringBuilder append(long); - method public java.lang.StringBuilder append(float); - method public java.lang.StringBuilder append(double); - method public java.lang.StringBuilder append(java.lang.Object); - method public java.lang.StringBuilder append(java.lang.String); - method public java.lang.StringBuilder append(java.lang.StringBuffer); - method public java.lang.StringBuilder append(char[]); - method public java.lang.StringBuilder append(char[], int, int); - method public java.lang.StringBuilder append(java.lang.CharSequence); - method public java.lang.StringBuilder append(java.lang.CharSequence, int, int); - method public java.lang.StringBuilder appendCodePoint(int); - method public java.lang.StringBuilder delete(int, int); - method public java.lang.StringBuilder deleteCharAt(int); - method public java.lang.StringBuilder insert(int, boolean); - method public java.lang.StringBuilder insert(int, char); - method public java.lang.StringBuilder insert(int, int); - method public java.lang.StringBuilder insert(int, long); - method public java.lang.StringBuilder insert(int, float); - method public java.lang.StringBuilder insert(int, double); - method public java.lang.StringBuilder insert(int, java.lang.Object); - method public java.lang.StringBuilder insert(int, java.lang.String); - method public java.lang.StringBuilder insert(int, char[]); - method public java.lang.StringBuilder insert(int, char[], int, int); - method public java.lang.StringBuilder insert(int, java.lang.CharSequence); - method public java.lang.StringBuilder insert(int, java.lang.CharSequence, int, int); - method public java.lang.StringBuilder replace(int, int, java.lang.String); - method public java.lang.StringBuilder reverse(); + ctor public StringBuilder(java.lang.CharSequence); + method public java.lang.String toString(); } public class StringIndexOutOfBoundsException extends java.lang.IndexOutOfBoundsException { ctor public StringIndexOutOfBoundsException(); - ctor public StringIndexOutOfBoundsException(int); ctor public StringIndexOutOfBoundsException(java.lang.String); + ctor public StringIndexOutOfBoundsException(int); } public abstract class SuppressWarnings implements java.lang.annotation.Annotation { @@ -47916,11 +48087,11 @@ package java.lang { public class Thread implements java.lang.Runnable { ctor public Thread(); ctor public Thread(java.lang.Runnable); - ctor public Thread(java.lang.Runnable, java.lang.String); - ctor public Thread(java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable); - ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.String); + ctor public Thread(java.lang.Runnable, java.lang.String); + ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String); ctor public Thread(java.lang.ThreadGroup, java.lang.Runnable, java.lang.String, long); method public static int activeCount(); method public final void checkAccess(); @@ -47945,9 +48116,9 @@ package java.lang { method public final boolean isAlive(); method public final boolean isDaemon(); method public boolean isInterrupted(); - method public final void join() throws java.lang.InterruptedException; method public final void join(long) throws java.lang.InterruptedException; method public final void join(long, int) throws java.lang.InterruptedException; + method public final void join() throws java.lang.InterruptedException; method public final deprecated void resume(); method public void run(); method public void setContextClassLoader(java.lang.ClassLoader); @@ -47960,7 +48131,7 @@ package java.lang { method public static void sleep(long, int) throws java.lang.InterruptedException; method public synchronized void start(); method public final deprecated void stop(); - method public final deprecated synchronized void stop(java.lang.Throwable); + method public final deprecated void stop(java.lang.Throwable); method public final deprecated void suspend(); method public static void yield(); field public static final int MAX_PRIORITY = 10; // 0xa @@ -48029,14 +48200,14 @@ package java.lang { ctor public Throwable(java.lang.String, java.lang.Throwable); ctor public Throwable(java.lang.Throwable); ctor protected Throwable(java.lang.String, java.lang.Throwable, boolean, boolean); - method public final void addSuppressed(java.lang.Throwable); - method public java.lang.Throwable fillInStackTrace(); - method public java.lang.Throwable getCause(); + method public final synchronized void addSuppressed(java.lang.Throwable); + method public synchronized java.lang.Throwable fillInStackTrace(); + method public synchronized java.lang.Throwable getCause(); method public java.lang.String getLocalizedMessage(); method public java.lang.String getMessage(); method public java.lang.StackTraceElement[] getStackTrace(); - method public final java.lang.Throwable[] getSuppressed(); - method public java.lang.Throwable initCause(java.lang.Throwable); + method public final synchronized java.lang.Throwable[] getSuppressed(); + method public synchronized java.lang.Throwable initCause(java.lang.Throwable); method public void printStackTrace(); method public void printStackTrace(java.io.PrintStream); method public void printStackTrace(java.io.PrintWriter); @@ -48157,15 +48328,16 @@ package java.lang.ref { public abstract class Reference { method public void clear(); method public boolean enqueue(); + method public final synchronized boolean enqueueInternal(); method public T get(); method public boolean isEnqueued(); } public class ReferenceQueue { ctor public ReferenceQueue(); - method public synchronized java.lang.ref.Reference<? extends T> poll(); + 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; - method public synchronized java.lang.ref.Reference<? extends T> remove(long) throws java.lang.InterruptedException; } public class SoftReference extends java.lang.ref.Reference { @@ -48189,8 +48361,8 @@ package java.lang.reflect { method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public boolean isAccessible(); method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>); - method public void setAccessible(boolean); - method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean); + method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean) throws java.lang.SecurityException; + method public void setAccessible(boolean) throws java.lang.SecurityException; } public abstract interface AnnotatedElement { @@ -48211,8 +48383,9 @@ package java.lang.reflect { method public static int getLength(java.lang.Object); method public static long getLong(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; method public static short getShort(java.lang.Object, int) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; - method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException; + method public static java.lang.Object newArray(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException; method public static java.lang.Object newInstance(java.lang.Class<?>, int) throws java.lang.NegativeArraySizeException; + method public static java.lang.Object newInstance(java.lang.Class<?>, int...) throws java.lang.IllegalArgumentException, java.lang.NegativeArraySizeException; method public static void set(java.lang.Object, int, java.lang.Object) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; method public static void setBoolean(java.lang.Object, int, boolean); method public static void setByte(java.lang.Object, int, byte) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException; @@ -48227,7 +48400,6 @@ package java.lang.reflect { public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { method public boolean equals(java.lang.Object); method public A getAnnotation(java.lang.Class<A>); - method public java.lang.annotation.Annotation[] getAnnotations(); method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public java.lang.Class<T> getDeclaringClass(); method public java.lang.Class<?>[] getExceptionTypes(); @@ -48314,7 +48486,6 @@ package java.lang.reflect { public final class Method extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member { method public boolean equals(java.lang.Object); method public A getAnnotation(java.lang.Class<A>); - method public java.lang.annotation.Annotation[] getAnnotations(); method public java.lang.annotation.Annotation[] getDeclaredAnnotations(); method public java.lang.Class<?> getDeclaringClass(); method public java.lang.Object getDefaultValue(); @@ -48595,10 +48766,10 @@ package java.net { method protected final java.net.InetAddress getRequestingSite(); method protected java.net.URL getRequestingURL(); method protected java.net.Authenticator.RequestorType getRequestorType(); - method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); - method public static synchronized java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); + method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String); method public static java.net.PasswordAuthentication requestPasswordAuthentication(java.lang.String, java.net.InetAddress, int, java.lang.String, java.lang.String, java.lang.String, java.net.URL, java.net.Authenticator.RequestorType); - method public static void setDefault(java.net.Authenticator); + method public static synchronized void setDefault(java.net.Authenticator); } public static final class Authenticator.RequestorType extends java.lang.Enum { @@ -48609,8 +48780,9 @@ package java.net { } public class BindException extends java.net.SocketException { - ctor public BindException(); ctor public BindException(java.lang.String); + ctor public BindException(); + ctor public BindException(java.lang.String, java.lang.Throwable); } public abstract class CacheRequest { @@ -48626,8 +48798,9 @@ package java.net { } public class ConnectException extends java.net.SocketException { - ctor public ConnectException(); ctor public ConnectException(java.lang.String); + ctor public ConnectException(); + ctor public ConnectException(java.lang.String, java.lang.Throwable); } public abstract class ContentHandler { @@ -48643,9 +48816,9 @@ package java.net { public abstract class CookieHandler { ctor public CookieHandler(); method public abstract java.util.Map<java.lang.String, java.util.List<java.lang.String>> get(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static java.net.CookieHandler getDefault(); + method public static synchronized java.net.CookieHandler getDefault(); method public abstract void put(java.net.URI, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static void setDefault(java.net.CookieHandler); + method public static synchronized void setDefault(java.net.CookieHandler); } public class CookieManager extends java.net.CookieHandler { @@ -48674,12 +48847,12 @@ package java.net { } public final class DatagramPacket { - ctor public DatagramPacket(byte[], int); ctor public DatagramPacket(byte[], int, int); + ctor public DatagramPacket(byte[], int); ctor public DatagramPacket(byte[], int, int, java.net.InetAddress, int); + ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException; ctor public DatagramPacket(byte[], int, java.net.InetAddress, int); ctor public DatagramPacket(byte[], int, java.net.SocketAddress) throws java.net.SocketException; - ctor public DatagramPacket(byte[], int, int, java.net.SocketAddress) throws java.net.SocketException; method public synchronized java.net.InetAddress getAddress(); method public synchronized byte[] getData(); method public synchronized int getLength(); @@ -48696,17 +48869,18 @@ package java.net { public class DatagramSocket implements java.io.Closeable { ctor public DatagramSocket() throws java.net.SocketException; - ctor public DatagramSocket(int) throws java.net.SocketException; - ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; ctor protected DatagramSocket(java.net.DatagramSocketImpl); ctor public DatagramSocket(java.net.SocketAddress) throws java.net.SocketException; - method public void bind(java.net.SocketAddress) throws java.net.SocketException; + ctor public DatagramSocket(int) throws java.net.SocketException; + ctor public DatagramSocket(int, java.net.InetAddress) throws java.net.SocketException; + method public synchronized void bind(java.net.SocketAddress) throws java.net.SocketException; method public void close(); - method public void connect(java.net.SocketAddress) throws java.net.SocketException; method public void connect(java.net.InetAddress, int); + method public void connect(java.net.SocketAddress) throws java.net.SocketException; method public void disconnect(); - method public boolean getBroadcast() throws java.net.SocketException; + method public synchronized boolean getBroadcast() throws java.net.SocketException; method public java.nio.channels.DatagramChannel getChannel(); + method public final java.io.FileDescriptor getFileDescriptor$(); method public java.net.InetAddress getInetAddress(); method public java.net.InetAddress getLocalAddress(); method public int getLocalPort(); @@ -48714,22 +48888,22 @@ package java.net { method public int getPort(); method public synchronized int getReceiveBufferSize() throws java.net.SocketException; method public java.net.SocketAddress getRemoteSocketAddress(); - method public boolean getReuseAddress() throws java.net.SocketException; + method public synchronized boolean getReuseAddress() throws java.net.SocketException; method public synchronized int getSendBufferSize() throws java.net.SocketException; method public synchronized int getSoTimeout() throws java.net.SocketException; - method public int getTrafficClass() throws java.net.SocketException; + method public synchronized int getTrafficClass() throws java.net.SocketException; method public boolean isBound(); method public boolean isClosed(); method public boolean isConnected(); method public synchronized void receive(java.net.DatagramPacket) throws java.io.IOException; method public void send(java.net.DatagramPacket) throws java.io.IOException; - method public void setBroadcast(boolean) throws java.net.SocketException; + method public synchronized void setBroadcast(boolean) throws java.net.SocketException; method public static synchronized void setDatagramSocketImplFactory(java.net.DatagramSocketImplFactory) throws java.io.IOException; method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; - method public void setReuseAddress(boolean) throws java.net.SocketException; + method public synchronized void setReuseAddress(boolean) throws java.net.SocketException; method public synchronized void setSendBufferSize(int) throws java.net.SocketException; method public synchronized void setSoTimeout(int) throws java.net.SocketException; - method public void setTrafficClass(int) throws java.net.SocketException; + method public synchronized void setTrafficClass(int) throws java.net.SocketException; } public abstract class DatagramSocketImpl implements java.net.SocketOptions { @@ -48781,11 +48955,14 @@ package java.net { method public java.lang.String getValue(); method public int getVersion(); method public boolean hasExpired(); + method public boolean isHttpOnly(); method public static java.util.List<java.net.HttpCookie> parse(java.lang.String); + method public static java.util.List<java.net.HttpCookie> parse(java.lang.String, boolean); method public void setComment(java.lang.String); method public void setCommentURL(java.lang.String); method public void setDiscard(boolean); method public void setDomain(java.lang.String); + method public void setHttpOnly(boolean); method public void setMaxAge(long); method public void setPath(java.lang.String); method public void setPortlist(java.lang.String); @@ -48812,8 +48989,8 @@ package java.net { method public int getResponseCode() throws java.io.IOException; method public java.lang.String getResponseMessage() throws java.io.IOException; method public void setChunkedStreamingMode(int); - method public void setFixedLengthStreamingMode(long); method public void setFixedLengthStreamingMode(int); + method public void setFixedLengthStreamingMode(long); method public static void setFollowRedirects(boolean); method public void setInstanceFollowRedirects(boolean); method public void setRequestMethod(java.lang.String) throws java.net.ProtocolException; @@ -48873,21 +49050,27 @@ package java.net { } public final class Inet4Address extends java.net.InetAddress { + field public static final java.net.InetAddress ALL; + field public static final java.net.InetAddress ANY; + field public static final java.net.InetAddress LOOPBACK; } public final class Inet6Address extends java.net.InetAddress { - method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException; method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], java.net.NetworkInterface) throws java.net.UnknownHostException; + method public static java.net.Inet6Address getByAddress(java.lang.String, byte[], int) throws java.net.UnknownHostException; method public int getScopeId(); method public java.net.NetworkInterface getScopedInterface(); method public boolean isIPv4CompatibleAddress(); + field public static final java.net.InetAddress ANY; + field public static final java.net.InetAddress LOOPBACK; } public class InetAddress implements java.io.Serializable { method public byte[] getAddress(); + method public byte[] getAddressInternal(); method public static java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; - method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException; method public static java.net.InetAddress getByAddress(java.lang.String, byte[]) throws java.net.UnknownHostException; + method public static java.net.InetAddress getByAddress(byte[]) throws java.net.UnknownHostException; method public static java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException; method public java.lang.String getCanonicalHostName(); method public java.lang.String getHostAddress(); @@ -48994,8 +49177,8 @@ package java.net { } public class NoRouteToHostException extends java.net.SocketException { - ctor public NoRouteToHostException(); ctor public NoRouteToHostException(java.lang.String); + ctor public NoRouteToHostException(); } public final class PasswordAuthentication { @@ -49005,13 +49188,19 @@ package java.net { } public class PortUnreachableException extends java.net.SocketException { - ctor public PortUnreachableException(); ctor public PortUnreachableException(java.lang.String); + ctor public PortUnreachableException(); + ctor public PortUnreachableException(java.lang.String, java.lang.Throwable); } public class ProtocolException extends java.io.IOException { - ctor public ProtocolException(); ctor public ProtocolException(java.lang.String); + ctor public ProtocolException(); + ctor public ProtocolException(java.lang.String, java.lang.Throwable); + } + + public abstract interface ProtocolFamily { + method public abstract java.lang.String name(); } public class Proxy { @@ -49042,9 +49231,9 @@ package java.net { public abstract class ResponseCache { ctor public ResponseCache(); method public abstract java.net.CacheResponse get(java.net.URI, java.lang.String, java.util.Map<java.lang.String, java.util.List<java.lang.String>>) throws java.io.IOException; - method public static java.net.ResponseCache getDefault(); + method public static synchronized java.net.ResponseCache getDefault(); method public abstract java.net.CacheRequest put(java.net.URI, java.net.URLConnection) throws java.io.IOException; - method public static void setDefault(java.net.ResponseCache); + method public static synchronized void setDefault(java.net.ResponseCache); } public abstract class SecureCacheResponse extends java.net.CacheResponse { @@ -49069,14 +49258,14 @@ package java.net { method public java.net.InetAddress getInetAddress(); method public int getLocalPort(); method public java.net.SocketAddress getLocalSocketAddress(); - method public int getReceiveBufferSize() throws java.net.SocketException; + method public synchronized int getReceiveBufferSize() throws java.net.SocketException; method public boolean getReuseAddress() throws java.net.SocketException; method public synchronized int getSoTimeout() throws java.io.IOException; method protected final void implAccept(java.net.Socket) throws java.io.IOException; method public boolean isBound(); method public boolean isClosed(); method public void setPerformancePreferences(int, int, int); - method public void setReceiveBufferSize(int) throws java.net.SocketException; + method public synchronized void setReceiveBufferSize(int) throws java.net.SocketException; method public void setReuseAddress(boolean) throws java.net.SocketException; method public synchronized void setSoTimeout(int) throws java.net.SocketException; method public static synchronized void setSocketFactory(java.net.SocketImplFactory) throws java.io.IOException; @@ -49085,13 +49274,13 @@ package java.net { public class Socket implements java.io.Closeable { ctor public Socket(); ctor public Socket(java.net.Proxy); + ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException; ctor public Socket(java.lang.String, int) throws java.io.IOException, java.net.UnknownHostException; - ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; - ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException; ctor public Socket(java.net.InetAddress, int) throws java.io.IOException; + ctor public Socket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException; ctor public Socket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; + ctor public deprecated Socket(java.lang.String, int, boolean) throws java.io.IOException; ctor public deprecated Socket(java.net.InetAddress, int, boolean) throws java.io.IOException; - ctor protected Socket(java.net.SocketImpl) throws java.net.SocketException; method public void bind(java.net.SocketAddress) throws java.io.IOException; method public synchronized void close() throws java.io.IOException; method public void connect(java.net.SocketAddress) throws java.io.IOException; @@ -49140,8 +49329,10 @@ package java.net { } public class SocketException extends java.io.IOException { - ctor public SocketException(); ctor public SocketException(java.lang.String); + ctor public SocketException(); + ctor public SocketException(java.lang.Throwable); + ctor public SocketException(java.lang.String, java.lang.Throwable); } public abstract class SocketImpl implements java.net.SocketOptions { @@ -49154,7 +49345,7 @@ package java.net { method protected abstract void connect(java.net.InetAddress, int) throws java.io.IOException; method protected abstract void connect(java.net.SocketAddress, int) throws java.io.IOException; method protected abstract void create(boolean) throws java.io.IOException; - method protected java.io.FileDescriptor getFileDescriptor(); + method public java.io.FileDescriptor getFileDescriptor(); method protected java.net.InetAddress getInetAddress(); method protected abstract java.io.InputStream getInputStream() throws java.io.IOException; method protected int getLocalPort(); @@ -49176,6 +49367,11 @@ package java.net { method public abstract java.net.SocketImpl createSocketImpl(); } + public abstract interface SocketOption { + method public abstract java.lang.String name(); + method public abstract java.lang.Class<T> type(); + } + public abstract interface SocketOptions { method public abstract java.lang.Object getOption(int) throws java.net.SocketException; method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException; @@ -49197,21 +49393,46 @@ package java.net { public final class SocketPermission extends java.security.Permission implements java.io.Serializable { ctor public SocketPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } public class SocketTimeoutException extends java.io.InterruptedIOException { - ctor public SocketTimeoutException(); ctor public SocketTimeoutException(java.lang.String); + ctor public SocketTimeoutException(); + ctor public SocketTimeoutException(java.lang.Throwable); + ctor public SocketTimeoutException(java.lang.String, java.lang.Throwable); + } + + public final class StandardProtocolFamily extends java.lang.Enum implements java.net.ProtocolFamily { + method public static java.net.StandardProtocolFamily valueOf(java.lang.String); + method public static final java.net.StandardProtocolFamily[] values(); + enum_constant public static final java.net.StandardProtocolFamily INET; + enum_constant public static final java.net.StandardProtocolFamily INET6; + } + + public final class StandardSocketOptions { + field public static final java.net.SocketOption<java.net.NetworkInterface> IP_MULTICAST_IF; + field public static final java.net.SocketOption<java.lang.Boolean> IP_MULTICAST_LOOP; + field public static final java.net.SocketOption<java.lang.Integer> IP_MULTICAST_TTL; + field public static final java.net.SocketOption<java.lang.Integer> IP_TOS; + field public static final java.net.SocketOption<java.lang.Boolean> SO_BROADCAST; + field public static final java.net.SocketOption<java.lang.Boolean> SO_KEEPALIVE; + field public static final java.net.SocketOption<java.lang.Integer> SO_LINGER; + field public static final java.net.SocketOption<java.lang.Integer> SO_RCVBUF; + field public static final java.net.SocketOption<java.lang.Boolean> SO_REUSEADDR; + field public static final java.net.SocketOption<java.lang.Integer> SO_SNDBUF; + field public static final java.net.SocketOption<java.lang.Boolean> TCP_NODELAY; } public final class URI implements java.lang.Comparable java.io.Serializable { ctor public URI(java.lang.String) throws java.net.URISyntaxException; - ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; ctor public URI(java.lang.String, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; - ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; + ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException; method public int compareTo(java.net.URI); method public static java.net.URI create(java.lang.String); method public java.lang.String getAuthority(); @@ -49249,12 +49470,12 @@ package java.net { } public final class URL implements java.io.Serializable { + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException; + ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; ctor public URL(java.lang.String) throws java.net.MalformedURLException; ctor public URL(java.net.URL, java.lang.String) throws java.net.MalformedURLException; ctor public URL(java.net.URL, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, java.lang.String) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, int, java.lang.String) throws java.net.MalformedURLException; - ctor public URL(java.lang.String, java.lang.String, int, java.lang.String, java.net.URLStreamHandler) throws java.net.MalformedURLException; method public java.lang.String getAuthority(); method public final java.lang.Object getContent() throws java.io.IOException; method public final java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; @@ -49273,22 +49494,24 @@ package java.net { method public boolean sameFile(java.net.URL); method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected void set(java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); - method public static synchronized void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory); + method public static void setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory); method public java.lang.String toExternalForm(); method public java.net.URI toURI() throws java.net.URISyntaxException; + method public java.net.URI toURILenient() throws java.net.URISyntaxException; } - public class URLClassLoader extends java.security.SecureClassLoader { - ctor public URLClassLoader(java.net.URL[]); + public class URLClassLoader extends java.security.SecureClassLoader implements java.io.Closeable { ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader); + ctor public URLClassLoader(java.net.URL[]); ctor public URLClassLoader(java.net.URL[], java.lang.ClassLoader, java.net.URLStreamHandlerFactory); method protected void addURL(java.net.URL); + method public void close() throws java.io.IOException; method protected java.lang.Package definePackage(java.lang.String, java.util.jar.Manifest, java.net.URL) throws java.lang.IllegalArgumentException; method public java.net.URL findResource(java.lang.String); method public java.util.Enumeration<java.net.URL> findResources(java.lang.String) throws java.io.IOException; method public java.net.URL[] getURLs(); - method public static java.net.URLClassLoader newInstance(java.net.URL[]); method public static java.net.URLClassLoader newInstance(java.net.URL[], java.lang.ClassLoader); + method public static java.net.URLClassLoader newInstance(java.net.URL[]); } public abstract class URLConnection { @@ -49301,6 +49524,7 @@ package java.net { method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException; method public java.lang.String getContentEncoding(); method public int getContentLength(); + method public long getContentLengthLong(); method public java.lang.String getContentType(); method public long getDate(); method public static boolean getDefaultAllowUserInteraction(); @@ -49309,12 +49533,13 @@ package java.net { method public boolean getDoInput(); method public boolean getDoOutput(); method public long getExpiration(); - method public static java.net.FileNameMap getFileNameMap(); - method public java.lang.String getHeaderField(int); + method public static synchronized java.net.FileNameMap getFileNameMap(); method public java.lang.String getHeaderField(java.lang.String); + method public java.lang.String getHeaderField(int); method public long getHeaderFieldDate(java.lang.String, long); method public int getHeaderFieldInt(java.lang.String, int); method public java.lang.String getHeaderFieldKey(int); + method public long getHeaderFieldLong(java.lang.String, long); method public java.util.Map<java.lang.String, java.util.List<java.lang.String>> getHeaderFields(); method public long getIfModifiedSince(); method public java.io.InputStream getInputStream() throws java.io.IOException; @@ -49365,15 +49590,15 @@ package java.net { ctor public URLStreamHandler(); method protected boolean equals(java.net.URL, java.net.URL); method protected int getDefaultPort(); - method protected java.net.InetAddress getHostAddress(java.net.URL); + method protected synchronized java.net.InetAddress getHostAddress(java.net.URL); method protected int hashCode(java.net.URL); method protected boolean hostsEqual(java.net.URL, java.net.URL); method protected abstract java.net.URLConnection openConnection(java.net.URL) throws java.io.IOException; method protected java.net.URLConnection openConnection(java.net.URL, java.net.Proxy) throws java.io.IOException; method protected void parseURL(java.net.URL, java.lang.String, int, int); method protected boolean sameFile(java.net.URL, java.net.URL); - method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String); + method protected deprecated void setURL(java.net.URL, java.lang.String, java.lang.String, int, java.lang.String, java.lang.String); method protected java.lang.String toExternalForm(java.net.URL); } @@ -49382,8 +49607,8 @@ package java.net { } public class UnknownHostException extends java.io.IOException { - ctor public UnknownHostException(); ctor public UnknownHostException(java.lang.String); + ctor public UnknownHostException(); } public class UnknownServiceException extends java.io.IOException { @@ -49439,9 +49664,9 @@ package java.nio { method public int compareTo(java.nio.ByteBuffer); method public abstract java.nio.ByteBuffer duplicate(); method public abstract byte get(); - method public java.nio.ByteBuffer get(byte[]); - method public java.nio.ByteBuffer get(byte[], int, int); method public abstract byte get(int); + method public java.nio.ByteBuffer get(byte[], int, int); + method public java.nio.ByteBuffer get(byte[]); method public abstract char getChar(); method public abstract char getChar(int); method public abstract double getDouble(); @@ -49459,10 +49684,10 @@ package java.nio { method public final java.nio.ByteOrder order(); method public final java.nio.ByteBuffer order(java.nio.ByteOrder); method public abstract java.nio.ByteBuffer put(byte); - method public final java.nio.ByteBuffer put(byte[]); - method public java.nio.ByteBuffer put(byte[], int, int); - method public java.nio.ByteBuffer put(java.nio.ByteBuffer); method public abstract java.nio.ByteBuffer put(int, byte); + method public java.nio.ByteBuffer put(java.nio.ByteBuffer); + method public java.nio.ByteBuffer put(byte[], int, int); + method public final java.nio.ByteBuffer put(byte[]); method public abstract java.nio.ByteBuffer putChar(char); method public abstract java.nio.ByteBuffer putChar(int, char); method public abstract java.nio.ByteBuffer putDouble(double); @@ -49476,8 +49701,8 @@ package java.nio { method public abstract java.nio.ByteBuffer putShort(short); method public abstract java.nio.ByteBuffer putShort(int, short); method public abstract java.nio.ByteBuffer slice(); - method public static java.nio.ByteBuffer wrap(byte[]); method public static java.nio.ByteBuffer wrap(byte[], int, int); + method public static java.nio.ByteBuffer wrap(byte[]); } public final class ByteOrder { @@ -49488,9 +49713,9 @@ package java.nio { public abstract class CharBuffer extends java.nio.Buffer implements java.lang.Appendable java.lang.CharSequence java.lang.Comparable java.lang.Readable { method public static java.nio.CharBuffer allocate(int); - method public java.nio.CharBuffer append(char); method public java.nio.CharBuffer append(java.lang.CharSequence); method public java.nio.CharBuffer append(java.lang.CharSequence, int, int); + method public java.nio.CharBuffer append(char); method public final char[] array(); method public final int arrayOffset(); method public abstract java.nio.CharBuffer asReadOnlyBuffer(); @@ -49499,27 +49724,27 @@ package java.nio { method public int compareTo(java.nio.CharBuffer); method public abstract java.nio.CharBuffer duplicate(); method public abstract char get(); - method public java.nio.CharBuffer get(char[]); - method public java.nio.CharBuffer get(char[], int, int); method public abstract char get(int); + method public java.nio.CharBuffer get(char[], int, int); + method public java.nio.CharBuffer get(char[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public final int length(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.CharBuffer put(char); - method public final java.nio.CharBuffer put(char[]); - method public java.nio.CharBuffer put(char[], int, int); - method public java.nio.CharBuffer put(java.nio.CharBuffer); method public abstract java.nio.CharBuffer put(int, char); - method public final java.nio.CharBuffer put(java.lang.String); + method public java.nio.CharBuffer put(java.nio.CharBuffer); + method public java.nio.CharBuffer put(char[], int, int); + method public final java.nio.CharBuffer put(char[]); method public java.nio.CharBuffer put(java.lang.String, int, int); + method public final java.nio.CharBuffer put(java.lang.String); method public int read(java.nio.CharBuffer) throws java.io.IOException; method public abstract java.nio.CharBuffer slice(); method public abstract java.nio.CharBuffer subSequence(int, int); - method public static java.nio.CharBuffer wrap(char[]); method public static java.nio.CharBuffer wrap(char[], int, int); - method public static java.nio.CharBuffer wrap(java.lang.CharSequence); + method public static java.nio.CharBuffer wrap(char[]); method public static java.nio.CharBuffer wrap(java.lang.CharSequence, int, int); + method public static java.nio.CharBuffer wrap(java.lang.CharSequence); } public abstract class DoubleBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -49531,20 +49756,20 @@ package java.nio { method public int compareTo(java.nio.DoubleBuffer); method public abstract java.nio.DoubleBuffer duplicate(); method public abstract double get(); - method public java.nio.DoubleBuffer get(double[]); - method public java.nio.DoubleBuffer get(double[], int, int); method public abstract double get(int); + method public java.nio.DoubleBuffer get(double[], int, int); + method public java.nio.DoubleBuffer get(double[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.DoubleBuffer put(double); - method public final java.nio.DoubleBuffer put(double[]); - method public java.nio.DoubleBuffer put(double[], int, int); - method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer); method public abstract java.nio.DoubleBuffer put(int, double); + method public java.nio.DoubleBuffer put(java.nio.DoubleBuffer); + method public java.nio.DoubleBuffer put(double[], int, int); + method public final java.nio.DoubleBuffer put(double[]); method public abstract java.nio.DoubleBuffer slice(); - method public static java.nio.DoubleBuffer wrap(double[]); method public static java.nio.DoubleBuffer wrap(double[], int, int); + method public static java.nio.DoubleBuffer wrap(double[]); } public abstract class FloatBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -49556,20 +49781,20 @@ package java.nio { method public int compareTo(java.nio.FloatBuffer); method public abstract java.nio.FloatBuffer duplicate(); method public abstract float get(); - method public java.nio.FloatBuffer get(float[]); - method public java.nio.FloatBuffer get(float[], int, int); method public abstract float get(int); + method public java.nio.FloatBuffer get(float[], int, int); + method public java.nio.FloatBuffer get(float[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.FloatBuffer put(float); - method public final java.nio.FloatBuffer put(float[]); - method public java.nio.FloatBuffer put(float[], int, int); - method public java.nio.FloatBuffer put(java.nio.FloatBuffer); method public abstract java.nio.FloatBuffer put(int, float); + method public java.nio.FloatBuffer put(java.nio.FloatBuffer); + method public java.nio.FloatBuffer put(float[], int, int); + method public final java.nio.FloatBuffer put(float[]); method public abstract java.nio.FloatBuffer slice(); - method public static java.nio.FloatBuffer wrap(float[]); method public static java.nio.FloatBuffer wrap(float[], int, int); + method public static java.nio.FloatBuffer wrap(float[]); } public abstract class IntBuffer extends java.nio.Buffer implements java.lang.Comparable { @@ -49581,20 +49806,20 @@ package java.nio { method public int compareTo(java.nio.IntBuffer); method public abstract java.nio.IntBuffer duplicate(); method public abstract int get(); - method public java.nio.IntBuffer get(int[]); - method public java.nio.IntBuffer get(int[], int, int); method public abstract int get(int); + method public java.nio.IntBuffer get(int[], int, int); + method public java.nio.IntBuffer get(int[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.IntBuffer put(int); - method public final java.nio.IntBuffer put(int[]); - method public java.nio.IntBuffer put(int[], int, int); - method public java.nio.IntBuffer put(java.nio.IntBuffer); method public abstract java.nio.IntBuffer put(int, int); + method public java.nio.IntBuffer put(java.nio.IntBuffer); + method public java.nio.IntBuffer put(int[], int, int); + method public final java.nio.IntBuffer put(int[]); method public abstract java.nio.IntBuffer slice(); - method public static java.nio.IntBuffer wrap(int[]); method public static java.nio.IntBuffer wrap(int[], int, int); + method public static java.nio.IntBuffer wrap(int[]); } public class InvalidMarkException extends java.lang.IllegalStateException { @@ -49610,20 +49835,20 @@ package java.nio { method public int compareTo(java.nio.LongBuffer); method public abstract java.nio.LongBuffer duplicate(); method public abstract long get(); - method public java.nio.LongBuffer get(long[]); - method public java.nio.LongBuffer get(long[], int, int); method public abstract long get(int); + method public java.nio.LongBuffer get(long[], int, int); + method public java.nio.LongBuffer get(long[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.LongBuffer put(long); - method public final java.nio.LongBuffer put(long[]); - method public java.nio.LongBuffer put(long[], int, int); - method public java.nio.LongBuffer put(java.nio.LongBuffer); method public abstract java.nio.LongBuffer put(int, long); + method public java.nio.LongBuffer put(java.nio.LongBuffer); + method public java.nio.LongBuffer put(long[], int, int); + method public final java.nio.LongBuffer put(long[]); method public abstract java.nio.LongBuffer slice(); - method public static java.nio.LongBuffer wrap(long[]); method public static java.nio.LongBuffer wrap(long[], int, int); + method public static java.nio.LongBuffer wrap(long[]); } public abstract class MappedByteBuffer extends java.nio.ByteBuffer { @@ -49645,34 +49870,119 @@ package java.nio { method public int compareTo(java.nio.ShortBuffer); method public abstract java.nio.ShortBuffer duplicate(); method public abstract short get(); - method public java.nio.ShortBuffer get(short[]); - method public java.nio.ShortBuffer get(short[], int, int); method public abstract short get(int); + method public java.nio.ShortBuffer get(short[], int, int); + method public java.nio.ShortBuffer get(short[]); method public final boolean hasArray(); method public abstract boolean isDirect(); method public abstract java.nio.ByteOrder order(); method public abstract java.nio.ShortBuffer put(short); - method public final java.nio.ShortBuffer put(short[]); - method public java.nio.ShortBuffer put(short[], int, int); - method public java.nio.ShortBuffer put(java.nio.ShortBuffer); method public abstract java.nio.ShortBuffer put(int, short); + method public java.nio.ShortBuffer put(java.nio.ShortBuffer); + method public java.nio.ShortBuffer put(short[], int, int); + method public final java.nio.ShortBuffer put(short[]); method public abstract java.nio.ShortBuffer slice(); - method public static java.nio.ShortBuffer wrap(short[]); method public static java.nio.ShortBuffer wrap(short[], int, int); + method public static java.nio.ShortBuffer wrap(short[]); } } package java.nio.channels { + public class AcceptPendingException extends java.lang.IllegalStateException { + ctor public AcceptPendingException(); + } + + public class AlreadyBoundException extends java.lang.IllegalStateException { + ctor public AlreadyBoundException(); + } + public class AlreadyConnectedException extends java.lang.IllegalStateException { ctor public AlreadyConnectedException(); } + 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 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 java.util.concurrent.Future<java.lang.Integer> write(java.nio.ByteBuffer); + } + + public abstract interface AsynchronousChannel implements java.nio.channels.Channel { + method public abstract void close() throws java.io.IOException; + } + + public abstract class AsynchronousChannelGroup { + ctor protected AsynchronousChannelGroup(java.nio.channels.spi.AsynchronousChannelProvider); + method public abstract boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract boolean isShutdown(); + method public abstract boolean isTerminated(); + method public final java.nio.channels.spi.AsynchronousChannelProvider provider(); + method public abstract void shutdown(); + method public abstract void shutdownNow() throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withCachedThreadPool(java.util.concurrent.ExecutorService, int) throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withFixedThreadPool(int, java.util.concurrent.ThreadFactory) throws java.io.IOException; + method public static java.nio.channels.AsynchronousChannelGroup withThreadPool(java.util.concurrent.ExecutorService) throws java.io.IOException; + } + public class AsynchronousCloseException extends java.nio.channels.ClosedChannelException { ctor public AsynchronousCloseException(); } + 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 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 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 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 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; + 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; + } + + 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 java.util.concurrent.Future<java.lang.Void> connect(java.net.SocketAddress); + 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 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 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 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>); + } + public abstract interface ByteChannel implements java.nio.channels.ReadableByteChannel java.nio.channels.WritableByteChannel { } @@ -49689,7 +49999,9 @@ package java.nio.channels { method public static java.nio.channels.ReadableByteChannel newChannel(java.io.InputStream); method public static java.nio.channels.WritableByteChannel newChannel(java.io.OutputStream); method public static java.io.InputStream newInputStream(java.nio.channels.ReadableByteChannel); + method public static java.io.InputStream newInputStream(java.nio.channels.AsynchronousByteChannel); method public static java.io.OutputStream newOutputStream(java.nio.channels.WritableByteChannel); + method public static java.io.OutputStream newOutputStream(java.nio.channels.AsynchronousByteChannel); method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.nio.charset.CharsetDecoder, int); method public static java.io.Reader newReader(java.nio.channels.ReadableByteChannel, java.lang.String); method public static java.io.Writer newWriter(java.nio.channels.WritableByteChannel, java.nio.charset.CharsetEncoder, int); @@ -49708,50 +50020,61 @@ package java.nio.channels { ctor public ClosedSelectorException(); } + public abstract interface CompletionHandler { + method public abstract void completed(V, A); + method public abstract void failed(java.lang.Throwable, A); + } + public class ConnectionPendingException extends java.lang.IllegalStateException { ctor public ConnectionPendingException(); } - public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.MulticastChannel java.nio.channels.ScatteringByteChannel { ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException; + method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException; method public abstract boolean isConnected(); method public static java.nio.channels.DatagramChannel open() throws java.io.IOException; + method public static java.nio.channels.DatagramChannel open(java.net.ProtocolFamily) throws java.io.IOException; 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 synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException; + 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 java.net.DatagramSocket socket(); method public final int validOps(); method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; - method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; } - public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel { ctor protected FileChannel(); method public abstract void force(boolean) throws java.io.IOException; - method public final java.nio.channels.FileLock lock() throws java.io.IOException; method public abstract java.nio.channels.FileLock lock(long, long, boolean) throws java.io.IOException; + method public final java.nio.channels.FileLock lock() throws java.io.IOException; method public abstract java.nio.MappedByteBuffer map(java.nio.channels.FileChannel.MapMode, long, long) throws java.io.IOException; + method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.channels.FileChannel open(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; method public abstract long position() throws java.io.IOException; method public abstract java.nio.channels.FileChannel position(long) throws java.io.IOException; method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; - method public abstract int read(java.nio.ByteBuffer, long) throws java.io.IOException; - method public final long 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 int read(java.nio.ByteBuffer, long) throws java.io.IOException; method public abstract long size() throws java.io.IOException; method public abstract long transferFrom(java.nio.channels.ReadableByteChannel, long, long) throws java.io.IOException; method public abstract long transferTo(long, long, java.nio.channels.WritableByteChannel) throws java.io.IOException; method public abstract java.nio.channels.FileChannel truncate(long) throws java.io.IOException; - method public final java.nio.channels.FileLock tryLock() 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 int write(java.nio.ByteBuffer) throws java.io.IOException; - method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException; - method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer, long) throws java.io.IOException; } public static class FileChannel.MapMode { @@ -49762,6 +50085,8 @@ package java.nio.channels { public abstract class FileLock implements java.lang.AutoCloseable { ctor protected FileLock(java.nio.channels.FileChannel, long, long, boolean); + ctor protected FileLock(java.nio.channels.AsynchronousFileChannel, long, long, boolean); + method public java.nio.channels.Channel acquiredBy(); method public final java.nio.channels.FileChannel channel(); method public final void close() throws java.io.IOException; method public final boolean isShared(); @@ -49778,22 +50103,56 @@ package java.nio.channels { } public abstract interface GatheringByteChannel implements java.nio.channels.WritableByteChannel { - method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public abstract long write(java.nio.ByteBuffer[]) throws java.io.IOException; } public class IllegalBlockingModeException extends java.lang.IllegalStateException { ctor public IllegalBlockingModeException(); } + public class IllegalChannelGroupException extends java.lang.IllegalArgumentException { + ctor public IllegalChannelGroupException(); + } + public class IllegalSelectorException extends java.lang.IllegalArgumentException { ctor public IllegalSelectorException(); } + public class InterruptedByTimeoutException extends java.io.IOException { + ctor public InterruptedByTimeoutException(); + } + public abstract interface InterruptibleChannel implements java.nio.channels.Channel { method public abstract void close() throws java.io.IOException; } + public abstract class MembershipKey { + ctor protected MembershipKey(); + method public abstract java.nio.channels.MembershipKey block(java.net.InetAddress) throws java.io.IOException; + method public abstract java.nio.channels.MulticastChannel channel(); + method public abstract void drop(); + method public abstract java.net.InetAddress group(); + method public abstract boolean isValid(); + method public abstract java.net.NetworkInterface networkInterface(); + method public abstract java.net.InetAddress sourceAddress(); + method public abstract java.nio.channels.MembershipKey unblock(java.net.InetAddress); + } + + public abstract interface MulticastChannel implements java.nio.channels.NetworkChannel { + method public abstract void close() throws java.io.IOException; + method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface) throws java.io.IOException; + method public abstract java.nio.channels.MembershipKey join(java.net.InetAddress, java.net.NetworkInterface, java.net.InetAddress) throws java.io.IOException; + } + + 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 java.util.Set<java.net.SocketOption<?>> supportedOptions(); + } + public class NoConnectionPendingException extends java.lang.IllegalStateException { ctor public NoConnectionPendingException(); } @@ -49835,13 +50194,26 @@ package java.nio.channels { method public final int validOps(); } + public class ReadPendingException extends java.lang.IllegalStateException { + ctor public ReadPendingException(); + } + public abstract interface ReadableByteChannel implements java.nio.channels.Channel { method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; } public abstract interface ScatteringByteChannel implements java.nio.channels.ReadableByteChannel { - method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException; method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException; + method public abstract long read(java.nio.ByteBuffer[]) throws java.io.IOException; + } + + public abstract interface SeekableByteChannel implements java.nio.channels.ByteChannel { + method public abstract long position() throws java.io.IOException; + method public abstract java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException; + method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException; + method public abstract long size() throws java.io.IOException; + method public abstract java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException; + method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; } public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel { @@ -49852,8 +50224,8 @@ package java.nio.channels { method public abstract boolean isRegistered(); method public abstract java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); method public abstract java.nio.channels.spi.SelectorProvider provider(); - method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException; method public abstract java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; + method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int) throws java.nio.channels.ClosedChannelException; method public abstract int validOps(); } @@ -49885,37 +50257,49 @@ package java.nio.channels { method public abstract java.util.Set<java.nio.channels.SelectionKey> keys(); method public static java.nio.channels.Selector open() throws java.io.IOException; method public abstract java.nio.channels.spi.SelectorProvider provider(); - method public abstract int select() throws java.io.IOException; method public abstract int select(long) throws java.io.IOException; + method public abstract int select() throws java.io.IOException; method public abstract int selectNow() throws java.io.IOException; method public abstract java.util.Set<java.nio.channels.SelectionKey> selectedKeys(); method public abstract java.nio.channels.Selector wakeup(); } - public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel { + public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel { ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider); method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException; + method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException; + method public abstract java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException; method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException; + method public abstract java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException; method public abstract java.net.ServerSocket socket(); method public final int validOps(); } - public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel { + public class ShutdownChannelGroupException extends java.lang.IllegalStateException { + ctor public ShutdownChannelGroupException(); + } + + public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel { ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider); + method public abstract java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException; method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException; method public abstract boolean finishConnect() throws java.io.IOException; + method public abstract java.net.SocketAddress getRemoteAddress() throws java.io.IOException; method public abstract boolean isConnected(); method public abstract boolean isConnectionPending(); method public static java.nio.channels.SocketChannel open() throws java.io.IOException; method public static java.nio.channels.SocketChannel open(java.net.SocketAddress) throws java.io.IOException; 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 synchronized long read(java.nio.ByteBuffer[]) 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 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(); method public final int validOps(); method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException; - method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException; + method public final long write(java.nio.ByteBuffer[]) throws java.io.IOException; } public class UnresolvedAddressException extends java.lang.IllegalArgumentException { @@ -49930,6 +50314,10 @@ package java.nio.channels { method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException; } + public class WritePendingException extends java.lang.IllegalStateException { + ctor public WritePendingException(); + } + } package java.nio.channels.spi { @@ -49940,19 +50328,19 @@ package java.nio.channels.spi { method public final void close() throws java.io.IOException; method protected final void end(boolean) throws java.nio.channels.AsynchronousCloseException; method protected abstract void implCloseChannel() throws java.io.IOException; - method public final synchronized boolean isOpen(); + method public final boolean isOpen(); } public abstract class AbstractSelectableChannel extends java.nio.channels.SelectableChannel { ctor protected AbstractSelectableChannel(java.nio.channels.spi.SelectorProvider); method public final java.lang.Object blockingLock(); method public final java.nio.channels.SelectableChannel configureBlocking(boolean) throws java.io.IOException; - method protected final synchronized void implCloseChannel() throws java.io.IOException; + method protected final void implCloseChannel() throws java.io.IOException; method protected abstract void implCloseSelectableChannel() throws java.io.IOException; method protected abstract void implConfigureBlocking(boolean) throws java.io.IOException; method public final boolean isBlocking(); - method public final synchronized boolean isRegistered(); - method public final synchronized java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); + method public final boolean isRegistered(); + method public final java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector); method public final java.nio.channels.spi.SelectorProvider provider(); method public final java.nio.channels.SelectionKey register(java.nio.channels.Selector, int, java.lang.Object) throws java.nio.channels.ClosedChannelException; } @@ -49976,15 +50364,25 @@ package java.nio.channels.spi { method protected abstract java.nio.channels.SelectionKey register(java.nio.channels.spi.AbstractSelectableChannel, int, java.lang.Object); } + public abstract class AsynchronousChannelProvider { + ctor protected AsynchronousChannelProvider(); + method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(int, java.util.concurrent.ThreadFactory) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousChannelGroup openAsynchronousChannelGroup(java.util.concurrent.ExecutorService, int) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousServerSocketChannel openAsynchronousServerSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException; + method public abstract java.nio.channels.AsynchronousSocketChannel openAsynchronousSocketChannel(java.nio.channels.AsynchronousChannelGroup) throws java.io.IOException; + method public static java.nio.channels.spi.AsynchronousChannelProvider provider(); + } + public abstract class SelectorProvider { ctor protected SelectorProvider(); method public java.nio.channels.Channel inheritedChannel() throws java.io.IOException; method public abstract java.nio.channels.DatagramChannel openDatagramChannel() throws java.io.IOException; + method public abstract java.nio.channels.DatagramChannel openDatagramChannel(java.net.ProtocolFamily) throws java.io.IOException; method public abstract java.nio.channels.Pipe openPipe() throws java.io.IOException; method public abstract java.nio.channels.spi.AbstractSelector openSelector() throws java.io.IOException; method public abstract java.nio.channels.ServerSocketChannel openServerSocketChannel() throws java.io.IOException; method public abstract java.nio.channels.SocketChannel openSocketChannel() throws java.io.IOException; - method public static synchronized java.nio.channels.spi.SelectorProvider provider(); + method public static java.nio.channels.spi.SelectorProvider provider(); } } @@ -50023,8 +50421,8 @@ package java.nio.charset { ctor protected CharsetDecoder(java.nio.charset.Charset, float, float); method public final float averageCharsPerByte(); method public final java.nio.charset.Charset charset(); - method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException; method public final java.nio.charset.CoderResult decode(java.nio.ByteBuffer, java.nio.CharBuffer, boolean); + method public final java.nio.CharBuffer decode(java.nio.ByteBuffer) throws java.nio.charset.CharacterCodingException; method protected abstract java.nio.charset.CoderResult decodeLoop(java.nio.ByteBuffer, java.nio.CharBuffer); method public java.nio.charset.Charset detectedCharset(); method public final java.nio.charset.CoderResult flush(java.nio.CharBuffer); @@ -50046,14 +50444,14 @@ package java.nio.charset { } public abstract class CharsetEncoder { - ctor protected CharsetEncoder(java.nio.charset.Charset, float, float); ctor protected CharsetEncoder(java.nio.charset.Charset, float, float, byte[]); + ctor protected CharsetEncoder(java.nio.charset.Charset, float, float); method public final float averageBytesPerChar(); method public boolean canEncode(char); method public boolean canEncode(java.lang.CharSequence); method public final java.nio.charset.Charset charset(); - method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException; method public final java.nio.charset.CoderResult encode(java.nio.CharBuffer, java.nio.ByteBuffer, boolean); + method public final java.nio.ByteBuffer encode(java.nio.CharBuffer) throws java.nio.charset.CharacterCodingException; method protected abstract java.nio.charset.CoderResult encodeLoop(java.nio.CharBuffer, java.nio.ByteBuffer); method public final java.nio.charset.CoderResult flush(java.nio.ByteBuffer); method protected java.nio.charset.CoderResult implFlush(java.nio.ByteBuffer); @@ -50082,10 +50480,10 @@ package java.nio.charset { method public boolean isOverflow(); method public boolean isUnderflow(); method public boolean isUnmappable(); - method public int length() throws java.lang.UnsupportedOperationException; - method public static synchronized java.nio.charset.CoderResult malformedForLength(int) throws java.lang.IllegalArgumentException; - method public void throwException() throws java.nio.BufferOverflowException, java.nio.BufferUnderflowException, java.nio.charset.CharacterCodingException, java.nio.charset.MalformedInputException, java.nio.charset.UnmappableCharacterException; - method public static synchronized java.nio.charset.CoderResult unmappableForLength(int) throws java.lang.IllegalArgumentException; + method public int length(); + method public static java.nio.charset.CoderResult malformedForLength(int); + method public void throwException() throws java.nio.charset.CharacterCodingException; + method public static java.nio.charset.CoderResult unmappableForLength(int); field public static final java.nio.charset.CoderResult OVERFLOW; field public static final java.nio.charset.CoderResult UNDERFLOW; } @@ -50137,11 +50535,597 @@ package java.nio.charset.spi { } +package java.nio.file { + + public class AccessDeniedException extends java.nio.file.FileSystemException { + ctor public AccessDeniedException(java.lang.String); + ctor public AccessDeniedException(java.lang.String, java.lang.String, java.lang.String); + } + + public final class AccessMode extends java.lang.Enum { + method public static java.nio.file.AccessMode valueOf(java.lang.String); + method public static final java.nio.file.AccessMode[] values(); + enum_constant public static final java.nio.file.AccessMode EXECUTE; + enum_constant public static final java.nio.file.AccessMode READ; + enum_constant public static final java.nio.file.AccessMode WRITE; + } + + public class AtomicMoveNotSupportedException extends java.nio.file.FileSystemException { + ctor public AtomicMoveNotSupportedException(java.lang.String, java.lang.String, java.lang.String); + } + + public class ClosedDirectoryStreamException extends java.lang.IllegalStateException { + ctor public ClosedDirectoryStreamException(); + } + + public class ClosedFileSystemException extends java.lang.IllegalStateException { + ctor public ClosedFileSystemException(); + } + + public class ClosedWatchServiceException extends java.lang.IllegalStateException { + ctor public ClosedWatchServiceException(); + } + + public abstract interface CopyOption { + } + + public final class DirectoryIteratorException extends java.util.ConcurrentModificationException { + ctor public DirectoryIteratorException(java.io.IOException); + } + + public class DirectoryNotEmptyException extends java.nio.file.FileSystemException { + ctor public DirectoryNotEmptyException(java.lang.String); + } + + public abstract interface DirectoryStream implements java.io.Closeable java.lang.Iterable { + method public abstract java.util.Iterator<T> iterator(); + } + + public static abstract interface DirectoryStream.Filter { + method public abstract boolean accept(T) throws java.io.IOException; + } + + public class FileAlreadyExistsException extends java.nio.file.FileSystemException { + ctor public FileAlreadyExistsException(java.lang.String); + ctor public FileAlreadyExistsException(java.lang.String, java.lang.String, java.lang.String); + } + + 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 long getTotalSpace() throws java.io.IOException; + method public abstract long getUnallocatedSpace() throws java.io.IOException; + method public abstract long getUsableSpace() throws java.io.IOException; + method public abstract boolean isReadOnly(); + method public abstract java.lang.String name(); + method public abstract boolean supportsFileAttributeView(java.lang.Class<? extends java.nio.file.attribute.FileAttributeView>); + method public abstract boolean supportsFileAttributeView(java.lang.String); + method public abstract java.lang.String type(); + } + + public abstract class FileSystem implements java.io.Closeable { + ctor protected FileSystem(); + method public abstract void close() throws java.io.IOException; + method public abstract java.lang.Iterable<java.nio.file.FileStore> getFileStores(); + method public abstract java.nio.file.Path getPath(java.lang.String, java.lang.String...); + method public abstract java.nio.file.PathMatcher getPathMatcher(java.lang.String); + method public abstract java.lang.Iterable<java.nio.file.Path> getRootDirectories(); + method public abstract java.lang.String getSeparator(); + method public abstract java.nio.file.attribute.UserPrincipalLookupService getUserPrincipalLookupService(); + method public abstract boolean isOpen(); + method public abstract boolean isReadOnly(); + method public abstract java.nio.file.WatchService newWatchService() throws java.io.IOException; + method public abstract java.nio.file.spi.FileSystemProvider provider(); + method public abstract java.util.Set<java.lang.String> supportedFileAttributeViews(); + } + + public class FileSystemAlreadyExistsException extends java.lang.RuntimeException { + ctor public FileSystemAlreadyExistsException(); + ctor public FileSystemAlreadyExistsException(java.lang.String); + } + + public class FileSystemException extends java.io.IOException { + ctor public FileSystemException(java.lang.String); + ctor public FileSystemException(java.lang.String, java.lang.String, java.lang.String); + method public java.lang.String getFile(); + method public java.lang.String getOtherFile(); + method public java.lang.String getReason(); + } + + public class FileSystemLoopException extends java.nio.file.FileSystemException { + ctor public FileSystemLoopException(java.lang.String); + } + + public class FileSystemNotFoundException extends java.lang.RuntimeException { + ctor public FileSystemNotFoundException(); + ctor public FileSystemNotFoundException(java.lang.String); + } + + public final class FileSystems { + method public static java.nio.file.FileSystem getDefault(); + method public static java.nio.file.FileSystem getFileSystem(java.net.URI); + method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException; + method public static java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>, java.lang.ClassLoader) throws java.io.IOException; + method public static java.nio.file.FileSystem newFileSystem(java.nio.file.Path, java.lang.ClassLoader) throws java.io.IOException; + } + + public final class FileVisitOption extends java.lang.Enum { + method public static java.nio.file.FileVisitOption valueOf(java.lang.String); + method public static final java.nio.file.FileVisitOption[] values(); + enum_constant public static final java.nio.file.FileVisitOption FOLLOW_LINKS; + } + + public final class FileVisitResult extends java.lang.Enum { + method public static java.nio.file.FileVisitResult valueOf(java.lang.String); + method public static final java.nio.file.FileVisitResult[] values(); + enum_constant public static final java.nio.file.FileVisitResult CONTINUE; + enum_constant public static final java.nio.file.FileVisitResult SKIP_SIBLINGS; + enum_constant public static final java.nio.file.FileVisitResult SKIP_SUBTREE; + enum_constant public static final java.nio.file.FileVisitResult TERMINATE; + } + + public abstract interface FileVisitor { + 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; + method public abstract java.nio.file.FileVisitResult visitFileFailed(T, java.io.IOException) throws java.io.IOException; + } + + public final class Files { + method public static java.nio.file.Path copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static long copy(java.io.InputStream, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static long copy(java.nio.file.Path, java.io.OutputStream) throws java.io.IOException; + method public static java.nio.file.Path createDirectories(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createFile(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.Path createSymbolicLink(java.nio.file.Path, java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempDirectory(java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempFile(java.nio.file.Path, java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.file.Path createTempFile(java.lang.String, java.lang.String, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static void delete(java.nio.file.Path) throws java.io.IOException; + method public static boolean deleteIfExists(java.nio.file.Path) throws java.io.IOException; + method public static boolean exists(java.nio.file.Path, java.nio.file.LinkOption...); + 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 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; + method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> getPosixFilePermissions(java.nio.file.Path, java.nio.file.LinkOption...) throws java.io.IOException; + method public static boolean isDirectory(java.nio.file.Path, java.nio.file.LinkOption...); + method public static boolean isExecutable(java.nio.file.Path); + method public static boolean isHidden(java.nio.file.Path) throws java.io.IOException; + method public static boolean isReadable(java.nio.file.Path); + method public static boolean isRegularFile(java.nio.file.Path, java.nio.file.LinkOption...); + method public static boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public static boolean isSymbolicLink(java.nio.file.Path); + method public static boolean isWritable(java.nio.file.Path); + method public static java.nio.file.Path move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public static java.io.BufferedReader newBufferedReader(java.nio.file.Path, java.nio.charset.Charset) throws java.io.IOException; + method public static java.io.BufferedWriter newBufferedWriter(java.nio.file.Path, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public static java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.lang.String) throws java.io.IOException; + method public static java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.io.InputStream newInputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.io.OutputStream newOutputStream(java.nio.file.Path, java.nio.file.OpenOption...) throws java.io.IOException; + method public static boolean notExists(java.nio.file.Path, java.nio.file.LinkOption...); + method public static java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException; + 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 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; + method public static java.nio.file.Path setLastModifiedTime(java.nio.file.Path, java.nio.file.attribute.FileTime) throws java.io.IOException; + method public static java.nio.file.Path setOwner(java.nio.file.Path, java.nio.file.attribute.UserPrincipal) throws java.io.IOException; + method public static java.nio.file.Path setPosixFilePermissions(java.nio.file.Path, java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException; + method public static long size(java.nio.file.Path) throws java.io.IOException; + method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.util.Set<java.nio.file.FileVisitOption>, int, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.nio.file.Path walkFileTree(java.nio.file.Path, java.nio.file.FileVisitor<? super java.nio.file.Path>) throws java.io.IOException; + method public static java.nio.file.Path write(java.nio.file.Path, byte[], java.nio.file.OpenOption...) throws java.io.IOException; + method public static java.nio.file.Path write(java.nio.file.Path, java.lang.Iterable<? extends java.lang.CharSequence>, java.nio.charset.Charset, java.nio.file.OpenOption...) throws java.io.IOException; + } + + public class InvalidPathException extends java.lang.IllegalArgumentException { + ctor public InvalidPathException(java.lang.String, java.lang.String, int); + ctor public InvalidPathException(java.lang.String, java.lang.String); + method public int getIndex(); + method public java.lang.String getInput(); + method public java.lang.String getReason(); + } + + public final class LinkOption extends java.lang.Enum implements java.nio.file.CopyOption java.nio.file.OpenOption { + method public static java.nio.file.LinkOption valueOf(java.lang.String); + method public static final java.nio.file.LinkOption[] values(); + enum_constant public static final java.nio.file.LinkOption NOFOLLOW_LINKS; + } + + public final class LinkPermission extends java.security.BasicPermission { + ctor public LinkPermission(java.lang.String); + ctor public LinkPermission(java.lang.String, java.lang.String); + } + + public class NoSuchFileException extends java.nio.file.FileSystemException { + ctor public NoSuchFileException(java.lang.String); + ctor public NoSuchFileException(java.lang.String, java.lang.String, java.lang.String); + } + + public class NotDirectoryException extends java.nio.file.FileSystemException { + ctor public NotDirectoryException(java.lang.String); + } + + public class NotLinkException extends java.nio.file.FileSystemException { + ctor public NotLinkException(java.lang.String); + ctor public NotLinkException(java.lang.String, java.lang.String, java.lang.String); + } + + public abstract interface OpenOption { + } + + public abstract interface Path implements java.lang.Comparable java.lang.Iterable java.nio.file.Watchable { + method public abstract int compareTo(java.nio.file.Path); + method public abstract boolean endsWith(java.nio.file.Path); + method public abstract boolean endsWith(java.lang.String); + method public abstract boolean equals(java.lang.Object); + method public abstract java.nio.file.Path getFileName(); + method public abstract java.nio.file.FileSystem getFileSystem(); + method public abstract java.nio.file.Path getName(int); + method public abstract int getNameCount(); + method public abstract java.nio.file.Path getParent(); + method public abstract java.nio.file.Path getRoot(); + method public abstract int hashCode(); + method public abstract boolean isAbsolute(); + method public abstract java.util.Iterator<java.nio.file.Path> iterator(); + method public abstract java.nio.file.Path normalize(); + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException; + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException; + method public abstract java.nio.file.Path relativize(java.nio.file.Path); + method public abstract java.nio.file.Path resolve(java.nio.file.Path); + method public abstract java.nio.file.Path resolve(java.lang.String); + method public abstract java.nio.file.Path resolveSibling(java.nio.file.Path); + method public abstract java.nio.file.Path resolveSibling(java.lang.String); + method public abstract boolean startsWith(java.nio.file.Path); + method public abstract boolean startsWith(java.lang.String); + method public abstract java.nio.file.Path subpath(int, int); + method public abstract java.nio.file.Path toAbsolutePath(); + method public abstract java.io.File toFile(); + method public abstract java.nio.file.Path toRealPath(java.nio.file.LinkOption...) throws java.io.IOException; + method public abstract java.lang.String toString(); + method public abstract java.net.URI toUri(); + } + + public abstract interface PathMatcher { + method public abstract boolean matches(java.nio.file.Path); + } + + public final class Paths { + method public static java.nio.file.Path get(java.lang.String, java.lang.String...); + method public static java.nio.file.Path get(java.net.URI); + } + + public class ProviderMismatchException extends java.lang.IllegalArgumentException { + ctor public ProviderMismatchException(); + ctor public ProviderMismatchException(java.lang.String); + } + + public class ProviderNotFoundException extends java.lang.RuntimeException { + ctor public ProviderNotFoundException(); + ctor public ProviderNotFoundException(java.lang.String); + } + + public class ReadOnlyFileSystemException extends java.lang.UnsupportedOperationException { + ctor public ReadOnlyFileSystemException(); + } + + public abstract interface SecureDirectoryStream 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 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 final class StandardCopyOption extends java.lang.Enum implements java.nio.file.CopyOption { + method public static java.nio.file.StandardCopyOption valueOf(java.lang.String); + method public static final java.nio.file.StandardCopyOption[] values(); + enum_constant public static final java.nio.file.StandardCopyOption ATOMIC_MOVE; + enum_constant public static final java.nio.file.StandardCopyOption COPY_ATTRIBUTES; + enum_constant public static final java.nio.file.StandardCopyOption REPLACE_EXISTING; + } + + public final class StandardOpenOption extends java.lang.Enum implements java.nio.file.OpenOption { + method public static java.nio.file.StandardOpenOption valueOf(java.lang.String); + method public static final java.nio.file.StandardOpenOption[] values(); + enum_constant public static final java.nio.file.StandardOpenOption APPEND; + enum_constant public static final java.nio.file.StandardOpenOption CREATE; + enum_constant public static final java.nio.file.StandardOpenOption CREATE_NEW; + enum_constant public static final java.nio.file.StandardOpenOption DELETE_ON_CLOSE; + enum_constant public static final java.nio.file.StandardOpenOption DSYNC; + enum_constant public static final java.nio.file.StandardOpenOption READ; + enum_constant public static final java.nio.file.StandardOpenOption SPARSE; + enum_constant public static final java.nio.file.StandardOpenOption SYNC; + enum_constant public static final java.nio.file.StandardOpenOption TRUNCATE_EXISTING; + enum_constant public static final java.nio.file.StandardOpenOption WRITE; + } + + public final class StandardWatchEventKinds { + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_CREATE; + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_DELETE; + field public static final java.nio.file.WatchEvent.Kind<java.nio.file.Path> ENTRY_MODIFY; + field public static final java.nio.file.WatchEvent.Kind<java.lang.Object> OVERFLOW; + } + + public abstract interface WatchEvent { + 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 { + method public abstract java.lang.String name(); + method public abstract java.lang.Class<T> type(); + } + + public static abstract interface WatchEvent.Modifier { + method public abstract java.lang.String name(); + } + + public abstract interface WatchKey { + method public abstract void cancel(); + method public abstract boolean isValid(); + method public abstract java.util.List<java.nio.file.WatchEvent<?>> pollEvents(); + method public abstract boolean reset(); + method public abstract java.nio.file.Watchable watchable(); + } + + public abstract interface WatchService implements java.io.Closeable { + method public abstract void close() throws java.io.IOException; + method public abstract java.nio.file.WatchKey poll(); + method public abstract java.nio.file.WatchKey poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException; + method public abstract java.nio.file.WatchKey take() throws java.lang.InterruptedException; + } + + public abstract interface Watchable { + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>[], java.nio.file.WatchEvent.Modifier...) throws java.io.IOException; + method public abstract java.nio.file.WatchKey register(java.nio.file.WatchService, java.nio.file.WatchEvent.Kind<?>...) throws java.io.IOException; + } + +} + +package java.nio.file.attribute { + + public final class AclEntry { + method public java.util.Set<java.nio.file.attribute.AclEntryFlag> flags(); + method public static java.nio.file.attribute.AclEntry.Builder newBuilder(); + method public static java.nio.file.attribute.AclEntry.Builder newBuilder(java.nio.file.attribute.AclEntry); + method public java.util.Set<java.nio.file.attribute.AclEntryPermission> permissions(); + method public java.nio.file.attribute.UserPrincipal principal(); + method public java.nio.file.attribute.AclEntryType type(); + } + + public static final class AclEntry.Builder { + method public java.nio.file.attribute.AclEntry build(); + method public java.nio.file.attribute.AclEntry.Builder setFlags(java.util.Set<java.nio.file.attribute.AclEntryFlag>); + method public java.nio.file.attribute.AclEntry.Builder setFlags(java.nio.file.attribute.AclEntryFlag...); + method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.util.Set<java.nio.file.attribute.AclEntryPermission>); + method public java.nio.file.attribute.AclEntry.Builder setPermissions(java.nio.file.attribute.AclEntryPermission...); + method public java.nio.file.attribute.AclEntry.Builder setPrincipal(java.nio.file.attribute.UserPrincipal); + method public java.nio.file.attribute.AclEntry.Builder setType(java.nio.file.attribute.AclEntryType); + } + + public final class AclEntryFlag extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryFlag valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryFlag[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryFlag DIRECTORY_INHERIT; + enum_constant public static final java.nio.file.attribute.AclEntryFlag FILE_INHERIT; + enum_constant public static final java.nio.file.attribute.AclEntryFlag INHERIT_ONLY; + enum_constant public static final java.nio.file.attribute.AclEntryFlag NO_PROPAGATE_INHERIT; + } + + public final class AclEntryPermission extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryPermission valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryPermission[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryPermission APPEND_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission DELETE_CHILD; + enum_constant public static final java.nio.file.attribute.AclEntryPermission EXECUTE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ACL; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_ATTRIBUTES; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission READ_NAMED_ATTRS; + enum_constant public static final java.nio.file.attribute.AclEntryPermission SYNCHRONIZE; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ACL; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_ATTRIBUTES; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_DATA; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_NAMED_ATTRS; + enum_constant public static final java.nio.file.attribute.AclEntryPermission WRITE_OWNER; + field public static final java.nio.file.attribute.AclEntryPermission ADD_FILE; + field public static final java.nio.file.attribute.AclEntryPermission ADD_SUBDIRECTORY; + field public static final java.nio.file.attribute.AclEntryPermission LIST_DIRECTORY; + } + + public final class AclEntryType extends java.lang.Enum { + method public static java.nio.file.attribute.AclEntryType valueOf(java.lang.String); + method public static final java.nio.file.attribute.AclEntryType[] values(); + enum_constant public static final java.nio.file.attribute.AclEntryType ALARM; + enum_constant public static final java.nio.file.attribute.AclEntryType ALLOW; + enum_constant public static final java.nio.file.attribute.AclEntryType AUDIT; + enum_constant public static final java.nio.file.attribute.AclEntryType DENY; + } + + public abstract interface AclFileAttributeView implements java.nio.file.attribute.FileOwnerAttributeView { + method public abstract java.util.List<java.nio.file.attribute.AclEntry> getAcl() throws java.io.IOException; + method public abstract java.lang.String name(); + method public abstract void setAcl(java.util.List<java.nio.file.attribute.AclEntry>) throws java.io.IOException; + } + + public abstract interface AttributeView { + method public abstract java.lang.String name(); + } + + public abstract interface BasicFileAttributeView implements java.nio.file.attribute.FileAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.BasicFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setTimes(java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime, java.nio.file.attribute.FileTime) throws java.io.IOException; + } + + public abstract interface BasicFileAttributes { + method public abstract java.nio.file.attribute.FileTime creationTime(); + method public abstract java.lang.Object fileKey(); + method public abstract boolean isDirectory(); + method public abstract boolean isOther(); + method public abstract boolean isRegularFile(); + method public abstract boolean isSymbolicLink(); + method public abstract java.nio.file.attribute.FileTime lastAccessTime(); + method public abstract java.nio.file.attribute.FileTime lastModifiedTime(); + method public abstract long size(); + } + + public abstract interface DosFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.DosFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setArchive(boolean) throws java.io.IOException; + method public abstract void setHidden(boolean) throws java.io.IOException; + method public abstract void setReadOnly(boolean) throws java.io.IOException; + method public abstract void setSystem(boolean) throws java.io.IOException; + } + + public abstract interface DosFileAttributes implements java.nio.file.attribute.BasicFileAttributes { + method public abstract boolean isArchive(); + method public abstract boolean isHidden(); + method public abstract boolean isReadOnly(); + method public abstract boolean isSystem(); + } + + public abstract interface FileAttribute { + method public abstract java.lang.String name(); + method public abstract T value(); + } + + public abstract interface FileAttributeView implements java.nio.file.attribute.AttributeView { + } + + public abstract interface FileOwnerAttributeView implements java.nio.file.attribute.FileAttributeView { + method public abstract java.nio.file.attribute.UserPrincipal getOwner() throws java.io.IOException; + method public abstract java.lang.String name(); + method public abstract void setOwner(java.nio.file.attribute.UserPrincipal) throws java.io.IOException; + } + + public abstract interface FileStoreAttributeView implements java.nio.file.attribute.AttributeView { + } + + public final class FileTime implements java.lang.Comparable { + method public int compareTo(java.nio.file.attribute.FileTime); + method public static java.nio.file.attribute.FileTime from(long, java.util.concurrent.TimeUnit); + method public static java.nio.file.attribute.FileTime fromMillis(long); + method public long to(java.util.concurrent.TimeUnit); + method public long toMillis(); + } + + public abstract interface GroupPrincipal implements java.nio.file.attribute.UserPrincipal { + } + + public abstract interface PosixFileAttributeView implements java.nio.file.attribute.BasicFileAttributeView java.nio.file.attribute.FileOwnerAttributeView { + method public abstract java.lang.String name(); + method public abstract java.nio.file.attribute.PosixFileAttributes readAttributes() throws java.io.IOException; + method public abstract void setGroup(java.nio.file.attribute.GroupPrincipal) throws java.io.IOException; + method public abstract void setPermissions(java.util.Set<java.nio.file.attribute.PosixFilePermission>) throws java.io.IOException; + } + + public abstract interface PosixFileAttributes implements java.nio.file.attribute.BasicFileAttributes { + method public abstract java.nio.file.attribute.GroupPrincipal group(); + method public abstract java.nio.file.attribute.UserPrincipal owner(); + method public abstract java.util.Set<java.nio.file.attribute.PosixFilePermission> permissions(); + } + + public final class PosixFilePermission extends java.lang.Enum { + method public static java.nio.file.attribute.PosixFilePermission valueOf(java.lang.String); + method public static final java.nio.file.attribute.PosixFilePermission[] values(); + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission GROUP_WRITE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OTHERS_WRITE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_EXECUTE; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_READ; + enum_constant public static final java.nio.file.attribute.PosixFilePermission OWNER_WRITE; + } + + public final class PosixFilePermissions { + method public static java.nio.file.attribute.FileAttribute<java.util.Set<java.nio.file.attribute.PosixFilePermission>> asFileAttribute(java.util.Set<java.nio.file.attribute.PosixFilePermission>); + method public static java.util.Set<java.nio.file.attribute.PosixFilePermission> fromString(java.lang.String); + method public static java.lang.String toString(java.util.Set<java.nio.file.attribute.PosixFilePermission>); + } + + public abstract interface UserPrincipal implements java.security.Principal { + } + + public abstract class UserPrincipalLookupService { + ctor protected UserPrincipalLookupService(); + method public abstract java.nio.file.attribute.GroupPrincipal lookupPrincipalByGroupName(java.lang.String) throws java.io.IOException; + method public abstract java.nio.file.attribute.UserPrincipal lookupPrincipalByName(java.lang.String) throws java.io.IOException; + } + + public class UserPrincipalNotFoundException extends java.io.IOException { + ctor public UserPrincipalNotFoundException(java.lang.String); + method public java.lang.String getName(); + } + +} + +package java.nio.file.spi { + + public abstract class FileSystemProvider { + ctor protected FileSystemProvider(); + method public abstract void checkAccess(java.nio.file.Path, java.nio.file.AccessMode...) throws java.io.IOException; + method public abstract void copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public abstract void createDirectory(java.nio.file.Path, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public void createLink(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + 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 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); + method public abstract java.lang.String getScheme(); + method public static java.util.List<java.nio.file.spi.FileSystemProvider> installedProviders(); + method public abstract boolean isHidden(java.nio.file.Path) throws java.io.IOException; + method public abstract boolean isSameFile(java.nio.file.Path, java.nio.file.Path) throws java.io.IOException; + method public abstract void move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...) throws java.io.IOException; + method public java.nio.channels.AsynchronousFileChannel newAsynchronousFileChannel(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 abstract java.nio.channels.SeekableByteChannel newByteChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public abstract java.nio.file.DirectoryStream<java.nio.file.Path> newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream.Filter<? super java.nio.file.Path>) throws java.io.IOException; + method public java.nio.channels.FileChannel newFileChannel(java.nio.file.Path, java.util.Set<? extends java.nio.file.OpenOption>, java.nio.file.attribute.FileAttribute<?>...) throws java.io.IOException; + method public abstract java.nio.file.FileSystem newFileSystem(java.net.URI, java.util.Map<java.lang.String, ?>) throws java.io.IOException; + 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 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; + } + + public abstract class FileTypeDetector { + ctor protected FileTypeDetector(); + method public abstract java.lang.String probeContentType(java.nio.file.Path) throws java.io.IOException; + } + +} + package java.security { public final class AccessControlContext { - ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner); ctor public AccessControlContext(java.security.ProtectionDomain[]); + ctor public AccessControlContext(java.security.AccessControlContext, java.security.DomainCombiner); method public void checkPermission(java.security.Permission) throws java.security.AccessControlException; method public java.security.DomainCombiner getDomainCombiner(); } @@ -50163,6 +51147,12 @@ package java.security { method public static java.security.AccessControlContext getContext(); } + public abstract interface AlgorithmConstraints { + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.AlgorithmParameters); + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.security.Key); + method public abstract boolean permits(java.util.Set<java.security.CryptoPrimitive>, java.lang.String, java.security.Key, java.security.AlgorithmParameters); + } + public class AlgorithmParameterGenerator { ctor protected AlgorithmParameterGenerator(java.security.AlgorithmParameterGeneratorSpi, java.security.Provider, java.lang.String); method public final java.security.AlgorithmParameters generateParameters(); @@ -50212,9 +51202,11 @@ package java.security { } public final class AllPermission extends java.security.Permission { - ctor public AllPermission(java.lang.String, java.lang.String); ctor public AllPermission(); + ctor public AllPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -50228,7 +51220,9 @@ package java.security { public abstract class BasicPermission extends java.security.Permission implements java.io.Serializable { ctor public BasicPermission(java.lang.String); ctor public BasicPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -50257,9 +51251,24 @@ package java.security { method public boolean implies(java.security.CodeSource); } + public final class CryptoPrimitive extends java.lang.Enum { + method public static java.security.CryptoPrimitive valueOf(java.lang.String); + method public static final java.security.CryptoPrimitive[] values(); + enum_constant public static final java.security.CryptoPrimitive BLOCK_CIPHER; + enum_constant public static final java.security.CryptoPrimitive KEY_AGREEMENT; + enum_constant public static final java.security.CryptoPrimitive KEY_ENCAPSULATION; + enum_constant public static final java.security.CryptoPrimitive KEY_WRAP; + enum_constant public static final java.security.CryptoPrimitive MAC; + enum_constant public static final java.security.CryptoPrimitive MESSAGE_DIGEST; + enum_constant public static final java.security.CryptoPrimitive PUBLIC_KEY_ENCRYPTION; + enum_constant public static final java.security.CryptoPrimitive SECURE_RANDOM; + enum_constant public static final java.security.CryptoPrimitive SIGNATURE; + enum_constant public static final java.security.CryptoPrimitive STREAM_CIPHER; + } + public class DigestException extends java.security.GeneralSecurityException { - ctor public DigestException(java.lang.String); ctor public DigestException(); + ctor public DigestException(java.lang.String); ctor public DigestException(java.lang.String, java.lang.Throwable); ctor public DigestException(java.lang.Throwable); } @@ -50285,8 +51294,8 @@ package java.security { } public class GeneralSecurityException extends java.lang.Exception { - ctor public GeneralSecurityException(java.lang.String); ctor public GeneralSecurityException(); + ctor public GeneralSecurityException(java.lang.String); ctor public GeneralSecurityException(java.lang.String, java.lang.Throwable); ctor public GeneralSecurityException(java.lang.Throwable); } @@ -50302,8 +51311,8 @@ package java.security { public abstract deprecated class Identity implements java.security.Principal java.io.Serializable { ctor protected Identity(); - ctor public Identity(java.lang.String); ctor public Identity(java.lang.String, java.security.IdentityScope) throws java.security.KeyManagementException; + ctor public Identity(java.lang.String); method public void addCertificate(java.security.Certificate) throws java.security.KeyManagementException; method public java.security.Certificate[] certificates(); method public final boolean equals(java.lang.Object); @@ -50334,22 +51343,22 @@ package java.security { } public class InvalidAlgorithmParameterException extends java.security.GeneralSecurityException { - ctor public InvalidAlgorithmParameterException(java.lang.String); ctor public InvalidAlgorithmParameterException(); + ctor public InvalidAlgorithmParameterException(java.lang.String); ctor public InvalidAlgorithmParameterException(java.lang.String, java.lang.Throwable); ctor public InvalidAlgorithmParameterException(java.lang.Throwable); } public class InvalidKeyException extends java.security.KeyException { - ctor public InvalidKeyException(java.lang.String); ctor public InvalidKeyException(); + ctor public InvalidKeyException(java.lang.String); ctor public InvalidKeyException(java.lang.String, java.lang.Throwable); ctor public InvalidKeyException(java.lang.Throwable); } public class InvalidParameterException extends java.lang.IllegalArgumentException { - ctor public InvalidParameterException(java.lang.String); ctor public InvalidParameterException(); + ctor public InvalidParameterException(java.lang.String); } public abstract interface Key implements java.io.Serializable { @@ -50360,8 +51369,8 @@ package java.security { } public class KeyException extends java.security.GeneralSecurityException { - ctor public KeyException(java.lang.String); ctor public KeyException(); + ctor public KeyException(java.lang.String); ctor public KeyException(java.lang.String, java.lang.Throwable); ctor public KeyException(java.lang.Throwable); } @@ -50388,8 +51397,8 @@ package java.security { } public class KeyManagementException extends java.security.KeyException { - ctor public KeyManagementException(java.lang.String); ctor public KeyManagementException(); + ctor public KeyManagementException(java.lang.String); ctor public KeyManagementException(java.lang.String, java.lang.Throwable); ctor public KeyManagementException(java.lang.Throwable); } @@ -50410,8 +51419,8 @@ package java.security { method public static java.security.KeyPairGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final java.security.Provider getProvider(); method public void initialize(int); - method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; method public void initialize(int, java.security.SecureRandom); + method public void initialize(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; } public abstract class KeyPairGeneratorSpi { @@ -50514,8 +51523,8 @@ package java.security { } public class KeyStoreException extends java.security.GeneralSecurityException { - ctor public KeyStoreException(java.lang.String); ctor public KeyStoreException(); + ctor public KeyStoreException(java.lang.String); ctor public KeyStoreException(java.lang.String, java.lang.Throwable); ctor public KeyStoreException(java.lang.Throwable); } @@ -50577,22 +51586,24 @@ package java.security { } public class NoSuchAlgorithmException extends java.security.GeneralSecurityException { - ctor public NoSuchAlgorithmException(java.lang.String); ctor public NoSuchAlgorithmException(); + ctor public NoSuchAlgorithmException(java.lang.String); ctor public NoSuchAlgorithmException(java.lang.String, java.lang.Throwable); ctor public NoSuchAlgorithmException(java.lang.Throwable); } public class NoSuchProviderException extends java.security.GeneralSecurityException { - ctor public NoSuchProviderException(java.lang.String); ctor public NoSuchProviderException(); + ctor public NoSuchProviderException(java.lang.String); } public abstract class Permission implements java.security.Guard java.io.Serializable { ctor public Permission(java.lang.String); method public void checkGuard(java.lang.Object) throws java.lang.SecurityException; + method public abstract boolean equals(java.lang.Object); method public abstract java.lang.String getActions(); method public final java.lang.String getName(); + method public abstract int hashCode(); method public abstract boolean implies(java.security.Permission); method public java.security.PermissionCollection newPermissionCollection(); } @@ -50700,8 +51711,8 @@ package java.security { } public class ProviderException extends java.lang.RuntimeException { - ctor public ProviderException(java.lang.String); ctor public ProviderException(); + ctor public ProviderException(java.lang.String); ctor public ProviderException(java.lang.String, java.lang.Throwable); ctor public ProviderException(java.lang.Throwable); } @@ -50711,8 +51722,8 @@ package java.security { } public class SecureClassLoader extends java.lang.ClassLoader { - ctor protected SecureClassLoader(); ctor protected SecureClassLoader(java.lang.ClassLoader); + ctor protected SecureClassLoader(); method protected final java.lang.Class<?> defineClass(java.lang.String, byte[], int, int, java.security.CodeSource); method protected final java.lang.Class<?> defineClass(java.lang.String, java.nio.ByteBuffer, java.security.CodeSource); method protected java.security.PermissionCollection getPermissions(java.security.CodeSource); @@ -50745,10 +51756,10 @@ package java.security { method public static deprecated java.lang.String getAlgorithmProperty(java.lang.String, java.lang.String); method public static java.util.Set<java.lang.String> getAlgorithms(java.lang.String); method public static java.lang.String getProperty(java.lang.String); - method public static synchronized java.security.Provider getProvider(java.lang.String); - method public static synchronized java.security.Provider[] getProviders(); + method public static java.security.Provider getProvider(java.lang.String); + method public static java.security.Provider[] getProviders(); method public static java.security.Provider[] getProviders(java.lang.String); - method public static synchronized java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>); + method public static java.security.Provider[] getProviders(java.util.Map<java.lang.String, java.lang.String>); method public static synchronized int insertProviderAt(java.security.Provider, int); method public static synchronized void removeProvider(java.lang.String); method public static void setProperty(java.lang.String, java.lang.String); @@ -50762,6 +51773,7 @@ package java.security { public abstract class Signature extends java.security.SignatureSpi { ctor protected Signature(java.lang.String); method public final java.lang.String getAlgorithm(); + method public java.security.SignatureSpi getCurrentSpi(); method public static java.security.Signature getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; method public static java.security.Signature getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; method public static java.security.Signature getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; @@ -50789,8 +51801,8 @@ package java.security { } public class SignatureException extends java.security.GeneralSecurityException { - ctor public SignatureException(java.lang.String); ctor public SignatureException(); + ctor public SignatureException(java.lang.String); ctor public SignatureException(java.lang.String, java.lang.Throwable); ctor public SignatureException(java.lang.Throwable); } @@ -50843,17 +51855,19 @@ package java.security { } public class UnrecoverableKeyException extends java.security.UnrecoverableEntryException { - ctor public UnrecoverableKeyException(java.lang.String); ctor public UnrecoverableKeyException(); + ctor public UnrecoverableKeyException(java.lang.String); } public final class UnresolvedPermission extends java.security.Permission implements java.io.Serializable { ctor public UnresolvedPermission(java.lang.String, java.lang.String, java.lang.String, java.security.cert.Certificate[]); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); method public java.lang.String getUnresolvedActions(); method public java.security.cert.Certificate[] getUnresolvedCerts(); method public java.lang.String getUnresolvedName(); method public java.lang.String getUnresolvedType(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -50927,12 +51941,28 @@ package java.security.cert { } public class CRLException extends java.security.GeneralSecurityException { - ctor public CRLException(java.lang.String); ctor public CRLException(); + ctor public CRLException(java.lang.String); ctor public CRLException(java.lang.String, java.lang.Throwable); ctor public CRLException(java.lang.Throwable); } + public final class CRLReason extends java.lang.Enum { + method public static java.security.cert.CRLReason valueOf(java.lang.String); + method public static final java.security.cert.CRLReason[] values(); + enum_constant public static final java.security.cert.CRLReason AA_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason AFFILIATION_CHANGED; + enum_constant public static final java.security.cert.CRLReason CA_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason CERTIFICATE_HOLD; + enum_constant public static final java.security.cert.CRLReason CESSATION_OF_OPERATION; + enum_constant public static final java.security.cert.CRLReason KEY_COMPROMISE; + enum_constant public static final java.security.cert.CRLReason PRIVILEGE_WITHDRAWN; + enum_constant public static final java.security.cert.CRLReason REMOVE_FROM_CRL; + enum_constant public static final java.security.cert.CRLReason SUPERSEDED; + enum_constant public static final java.security.cert.CRLReason UNSPECIFIED; + enum_constant public static final java.security.cert.CRLReason UNUSED; + } + public abstract interface CRLSelector implements java.lang.Cloneable { method public abstract java.lang.Object clone(); method public abstract boolean match(java.security.cert.CRL); @@ -50965,10 +51995,10 @@ package java.security.cert { } public class CertPathBuilderException extends java.security.GeneralSecurityException { - ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable); - ctor public CertPathBuilderException(java.lang.Throwable); - ctor public CertPathBuilderException(java.lang.String); ctor public CertPathBuilderException(); + ctor public CertPathBuilderException(java.lang.String); + ctor public CertPathBuilderException(java.lang.Throwable); + ctor public CertPathBuilderException(java.lang.String, java.lang.Throwable); } public abstract interface CertPathBuilderResult implements java.lang.Cloneable { @@ -50997,13 +52027,30 @@ package java.security.cert { } public class CertPathValidatorException extends java.security.GeneralSecurityException { - ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int); - ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable); - ctor public CertPathValidatorException(java.lang.Throwable); - ctor public CertPathValidatorException(java.lang.String); ctor public CertPathValidatorException(); + ctor public CertPathValidatorException(java.lang.String); + ctor public CertPathValidatorException(java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int); + ctor public CertPathValidatorException(java.lang.String, java.lang.Throwable, java.security.cert.CertPath, int, java.security.cert.CertPathValidatorException.Reason); method public java.security.cert.CertPath getCertPath(); method public int getIndex(); + method public java.security.cert.CertPathValidatorException.Reason getReason(); + } + + public static final class CertPathValidatorException.BasicReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason { + method public static java.security.cert.CertPathValidatorException.BasicReason valueOf(java.lang.String); + method public static final java.security.cert.CertPathValidatorException.BasicReason[] values(); + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason ALGORITHM_CONSTRAINED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason EXPIRED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason INVALID_SIGNATURE; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason NOT_YET_VALID; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason REVOKED; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNDETERMINED_REVOCATION_STATUS; + enum_constant public static final java.security.cert.CertPathValidatorException.BasicReason UNSPECIFIED; + } + + public static abstract interface CertPathValidatorException.Reason implements java.io.Serializable { } public abstract interface CertPathValidatorResult implements java.lang.Cloneable { @@ -51034,10 +52081,10 @@ package java.security.cert { } public class CertStoreException extends java.security.GeneralSecurityException { - ctor public CertStoreException(java.lang.String, java.lang.Throwable); - ctor public CertStoreException(java.lang.Throwable); - ctor public CertStoreException(java.lang.String); ctor public CertStoreException(); + ctor public CertStoreException(java.lang.String); + ctor public CertStoreException(java.lang.Throwable); + ctor public CertStoreException(java.lang.String, java.lang.Throwable); } public abstract interface CertStoreParameters implements java.lang.Cloneable { @@ -51067,22 +52114,22 @@ package java.security.cert { } public class CertificateEncodingException extends java.security.cert.CertificateException { - ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(); + ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(java.lang.String, java.lang.Throwable); ctor public CertificateEncodingException(java.lang.Throwable); } public class CertificateException extends java.security.GeneralSecurityException { - ctor public CertificateException(java.lang.String); ctor public CertificateException(); + ctor public CertificateException(java.lang.String); ctor public CertificateException(java.lang.String, java.lang.Throwable); ctor public CertificateException(java.lang.Throwable); } public class CertificateExpiredException extends java.security.cert.CertificateException { - ctor public CertificateExpiredException(java.lang.String); ctor public CertificateExpiredException(); + ctor public CertificateExpiredException(java.lang.String); } public class CertificateFactory { @@ -51115,28 +52162,44 @@ package java.security.cert { } public class CertificateNotYetValidException extends java.security.cert.CertificateException { - ctor public CertificateNotYetValidException(java.lang.String); ctor public CertificateNotYetValidException(); + ctor public CertificateNotYetValidException(java.lang.String); } public class CertificateParsingException extends java.security.cert.CertificateException { - ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(); + ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(java.lang.String, java.lang.Throwable); ctor public CertificateParsingException(java.lang.Throwable); } + public class CertificateRevokedException extends java.security.cert.CertificateException { + ctor public CertificateRevokedException(java.util.Date, java.security.cert.CRLReason, javax.security.auth.x500.X500Principal, java.util.Map<java.lang.String, java.security.cert.Extension>); + method public javax.security.auth.x500.X500Principal getAuthorityName(); + method public java.util.Map<java.lang.String, java.security.cert.Extension> getExtensions(); + method public java.util.Date getInvalidityDate(); + method public java.util.Date getRevocationDate(); + method public java.security.cert.CRLReason getRevocationReason(); + } + public class CollectionCertStoreParameters implements java.security.cert.CertStoreParameters { - ctor public CollectionCertStoreParameters(); ctor public CollectionCertStoreParameters(java.util.Collection<?>); + ctor public CollectionCertStoreParameters(); method public java.lang.Object clone(); method public java.util.Collection<?> getCollection(); } + public abstract interface Extension { + method public abstract void encode(java.io.OutputStream) throws java.io.IOException; + method public abstract java.lang.String getId(); + method public abstract byte[] getValue(); + method public abstract boolean isCritical(); + } + public class LDAPCertStoreParameters implements java.security.cert.CertStoreParameters { ctor public LDAPCertStoreParameters(java.lang.String, int); - ctor public LDAPCertStoreParameters(); ctor public LDAPCertStoreParameters(java.lang.String); + ctor public LDAPCertStoreParameters(); method public java.lang.Object clone(); method public int getPort(); method public java.lang.String getServerName(); @@ -51203,6 +52266,19 @@ package java.security.cert { method public void setTrustAnchors(java.util.Set<java.security.cert.TrustAnchor>) throws java.security.InvalidAlgorithmParameterException; } + public final class PKIXReason extends java.lang.Enum implements java.security.cert.CertPathValidatorException.Reason { + method public static java.security.cert.PKIXReason valueOf(java.lang.String); + method public static final java.security.cert.PKIXReason[] values(); + enum_constant public static final java.security.cert.PKIXReason INVALID_KEY_USAGE; + enum_constant public static final java.security.cert.PKIXReason INVALID_NAME; + enum_constant public static final java.security.cert.PKIXReason INVALID_POLICY; + enum_constant public static final java.security.cert.PKIXReason NAME_CHAINING; + enum_constant public static final java.security.cert.PKIXReason NOT_CA_CERT; + enum_constant public static final java.security.cert.PKIXReason NO_TRUST_ANCHOR; + enum_constant public static final java.security.cert.PKIXReason PATH_TOO_LONG; + enum_constant public static final java.security.cert.PKIXReason UNRECOGNIZED_CRIT_EXT; + } + public abstract interface PolicyNode { method public abstract java.util.Iterator<? extends java.security.cert.PolicyNode> getChildren(); method public abstract int getDepth(); @@ -51222,8 +52298,8 @@ package java.security.cert { public class TrustAnchor { ctor public TrustAnchor(java.security.cert.X509Certificate, byte[]); - ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]); ctor public TrustAnchor(javax.security.auth.x500.X500Principal, java.security.PublicKey, byte[]); + ctor public TrustAnchor(java.lang.String, java.security.PublicKey, byte[]); method public final javax.security.auth.x500.X500Principal getCA(); method public final java.lang.String getCAName(); method public final java.security.PublicKey getCAPublicKey(); @@ -51256,6 +52332,7 @@ package java.security.cert { method public javax.security.auth.x500.X500Principal getCertificateIssuer(); method public abstract byte[] getEncoded() throws java.security.cert.CRLException; method public abstract java.util.Date getRevocationDate(); + method public java.security.cert.CRLReason getRevocationReason(); method public abstract java.math.BigInteger getSerialNumber(); method public abstract boolean hasExtensions(); method public abstract java.lang.String toString(); @@ -51531,8 +52608,8 @@ package java.security.spec { } public class EllipticCurve { - ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]); ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger); + ctor public EllipticCurve(java.security.spec.ECField, java.math.BigInteger, java.math.BigInteger, byte[]); method public java.math.BigInteger getA(); method public java.math.BigInteger getB(); method public java.security.spec.ECField getField(); @@ -51546,15 +52623,15 @@ package java.security.spec { } public class InvalidKeySpecException extends java.security.GeneralSecurityException { - ctor public InvalidKeySpecException(java.lang.String); ctor public InvalidKeySpecException(); + ctor public InvalidKeySpecException(java.lang.String); ctor public InvalidKeySpecException(java.lang.String, java.lang.Throwable); ctor public InvalidKeySpecException(java.lang.Throwable); } public class InvalidParameterSpecException extends java.security.GeneralSecurityException { - ctor public InvalidParameterSpecException(java.lang.String); ctor public InvalidParameterSpecException(); + ctor public InvalidParameterSpecException(java.lang.String); } public abstract interface KeySpec { @@ -51575,8 +52652,8 @@ package java.security.spec { } public class PSSParameterSpec implements java.security.spec.AlgorithmParameterSpec { - ctor public PSSParameterSpec(int); ctor public PSSParameterSpec(java.lang.String, java.lang.String, java.security.spec.AlgorithmParameterSpec, int, int); + ctor public PSSParameterSpec(int); method public java.lang.String getDigestAlgorithm(); method public java.lang.String getMGFAlgorithm(); method public java.security.spec.AlgorithmParameterSpec getMGFParameters(); @@ -51645,28 +52722,28 @@ package java.sql { public abstract interface Array { method public abstract void free() throws java.sql.SQLException; method public abstract java.lang.Object getArray() throws java.sql.SQLException; + method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getArray(long, int) throws java.sql.SQLException; method public abstract java.lang.Object getArray(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; - method public abstract java.lang.Object getArray(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract int getBaseType() throws java.sql.SQLException; method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet() throws java.sql.SQLException; + method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet(long, int) throws java.sql.SQLException; method public abstract java.sql.ResultSet getResultSet(long, int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; - method public abstract java.sql.ResultSet getResultSet(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; } - public class BatchUpdateException extends java.sql.SQLException implements java.io.Serializable { + public class BatchUpdateException extends java.sql.SQLException { + ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]); + ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]); + ctor public BatchUpdateException(java.lang.String, int[]); + ctor public BatchUpdateException(int[]); ctor public BatchUpdateException(); ctor public BatchUpdateException(java.lang.Throwable); ctor public BatchUpdateException(int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, java.lang.String, int[], java.lang.Throwable); ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[], java.lang.Throwable); - ctor public BatchUpdateException(int[]); - ctor public BatchUpdateException(java.lang.String, int[]); - ctor public BatchUpdateException(java.lang.String, java.lang.String, int[]); - ctor public BatchUpdateException(java.lang.String, java.lang.String, int, int[]); method public int[] getUpdateCounts(); } @@ -51676,8 +52753,8 @@ package java.sql { method public abstract java.io.InputStream getBinaryStream(long, long) throws java.sql.SQLException; method public abstract byte[] getBytes(long, int) throws java.sql.SQLException; method public abstract long length() throws java.sql.SQLException; - method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException; method public abstract long position(byte[], long) throws java.sql.SQLException; + method public abstract long position(java.sql.Blob, long) throws java.sql.SQLException; method public abstract java.io.OutputStream setBinaryStream(long) throws java.sql.SQLException; method public abstract int setBytes(long, byte[]) throws java.sql.SQLException; method public abstract int setBytes(long, byte[], int, int) throws java.sql.SQLException; @@ -51687,8 +52764,8 @@ package java.sql { public abstract interface CallableStatement implements java.sql.PreparedStatement { method public abstract java.sql.Array getArray(int) throws java.sql.SQLException; method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(java.lang.String) throws java.sql.SQLException; @@ -51783,9 +52860,9 @@ package java.sql { method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; method public abstract void setRowId(java.lang.String, java.sql.RowId) throws java.sql.SQLException; method public abstract void setSQLXML(java.lang.String, java.sql.SQLXML) throws java.sql.SQLException; method public abstract void setShort(java.lang.String, short) throws java.sql.SQLException; @@ -51814,8 +52891,8 @@ package java.sql { method public abstract java.io.Reader getCharacterStream(long, long) throws java.sql.SQLException; method public abstract java.lang.String getSubString(long, int) throws java.sql.SQLException; method public abstract long length() throws java.sql.SQLException; - method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException; method public abstract long position(java.lang.String, long) throws java.sql.SQLException; + method public abstract long position(java.sql.Clob, long) throws java.sql.SQLException; method public abstract java.io.OutputStream setAsciiStream(long) throws java.sql.SQLException; method public abstract java.io.Writer setCharacterStream(long) throws java.sql.SQLException; method public abstract int setString(long, java.lang.String) throws java.sql.SQLException; @@ -51853,10 +52930,10 @@ package java.sql { method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int) throws java.sql.SQLException; method public abstract java.sql.CallableStatement prepareCall(java.lang.String, int, int, int) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String) throws java.sql.SQLException; - method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException; - method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int, int, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, int[]) throws java.sql.SQLException; method public abstract java.sql.PreparedStatement prepareStatement(java.lang.String, java.lang.String[]) throws java.sql.SQLException; method public abstract void releaseSavepoint(java.sql.Savepoint) throws java.sql.SQLException; method public abstract void rollback() throws java.sql.SQLException; @@ -51878,7 +52955,7 @@ package java.sql { field public static final int TRANSACTION_SERIALIZABLE = 8; // 0x8 } - public class DataTruncation extends java.sql.SQLWarning implements java.io.Serializable { + public class DataTruncation extends java.sql.SQLWarning { ctor public DataTruncation(int, boolean, boolean, int, int); ctor public DataTruncation(int, boolean, boolean, int, int, java.lang.Throwable); method public int getDataSize(); @@ -52140,17 +53217,17 @@ package java.sql { } public class DriverManager { - method public static void deregisterDriver(java.sql.Driver) throws java.sql.SQLException; - method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException; + method public static synchronized void deregisterDriver(java.sql.Driver) throws java.sql.SQLException; method public static java.sql.Connection getConnection(java.lang.String, java.util.Properties) throws java.sql.SQLException; method public static java.sql.Connection getConnection(java.lang.String, java.lang.String, java.lang.String) throws java.sql.SQLException; + method public static java.sql.Connection getConnection(java.lang.String) throws java.sql.SQLException; method public static java.sql.Driver getDriver(java.lang.String) throws java.sql.SQLException; method public static java.util.Enumeration<java.sql.Driver> getDrivers(); method public static deprecated java.io.PrintStream getLogStream(); method public static java.io.PrintWriter getLogWriter(); method public static int getLoginTimeout(); method public static void println(java.lang.String); - method public static void registerDriver(java.sql.Driver) throws java.sql.SQLException; + method public static synchronized void registerDriver(java.sql.Driver) throws java.sql.SQLException; method public static deprecated void setLogStream(java.io.PrintStream); method public static void setLogWriter(java.io.PrintWriter); method public static void setLoginTimeout(int); @@ -52229,8 +53306,8 @@ package java.sql { method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(int, int) throws java.sql.SQLException; method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; method public abstract void setRef(int, java.sql.Ref) throws java.sql.SQLException; method public abstract void setRowId(int, java.sql.RowId) throws java.sql.SQLException; @@ -52247,8 +53324,8 @@ package java.sql { public abstract interface Ref { method public abstract java.lang.String getBaseTypeName() throws java.sql.SQLException; - method public abstract java.lang.Object getObject() throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; + method public abstract java.lang.Object getObject() throws java.sql.SQLException; method public abstract void setObject(java.lang.Object) throws java.sql.SQLException; } @@ -52266,10 +53343,10 @@ package java.sql { method public abstract java.sql.Array getArray(java.lang.String) throws java.sql.SQLException; method public abstract java.io.InputStream getAsciiStream(int) throws java.sql.SQLException; method public abstract java.io.InputStream getAsciiStream(java.lang.String) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(int, int) throws java.sql.SQLException; - method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract deprecated java.math.BigDecimal getBigDecimal(java.lang.String, int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(int) throws java.sql.SQLException; + method public abstract java.math.BigDecimal getBigDecimal(java.lang.String) throws java.sql.SQLException; method public abstract java.io.InputStream getBinaryStream(int) throws java.sql.SQLException; method public abstract java.io.InputStream getBinaryStream(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Blob getBlob(int) throws java.sql.SQLException; @@ -52287,8 +53364,8 @@ package java.sql { method public abstract int getConcurrency() throws java.sql.SQLException; method public abstract java.lang.String getCursorName() throws java.sql.SQLException; method public abstract java.sql.Date getDate(int) throws java.sql.SQLException; - method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Date getDate(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Date getDate(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Date getDate(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract double getDouble(int) throws java.sql.SQLException; method public abstract double getDouble(java.lang.String) throws java.sql.SQLException; @@ -52309,8 +53386,8 @@ package java.sql { method public abstract java.lang.String getNString(int) throws java.sql.SQLException; method public abstract java.lang.String getNString(java.lang.String) throws java.sql.SQLException; method public abstract java.lang.Object getObject(int) throws java.sql.SQLException; - method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.lang.String) throws java.sql.SQLException; + method public abstract java.lang.Object getObject(int, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.lang.Object getObject(java.lang.String, java.util.Map<java.lang.String, java.lang.Class<?>>) throws java.sql.SQLException; method public abstract java.sql.Ref getRef(int) throws java.sql.SQLException; method public abstract java.sql.Ref getRef(java.lang.String) throws java.sql.SQLException; @@ -52325,12 +53402,12 @@ package java.sql { method public abstract java.lang.String getString(int) throws java.sql.SQLException; method public abstract java.lang.String getString(java.lang.String) throws java.sql.SQLException; method public abstract java.sql.Time getTime(int) throws java.sql.SQLException; - method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Time getTime(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Time getTime(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Time getTime(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(int) throws java.sql.SQLException; - method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(java.lang.String) throws java.sql.SQLException; + method public abstract java.sql.Timestamp getTimestamp(int, java.util.Calendar) throws java.sql.SQLException; method public abstract java.sql.Timestamp getTimestamp(java.lang.String, java.util.Calendar) throws java.sql.SQLException; method public abstract int getType() throws java.sql.SQLException; method public abstract java.net.URL getURL(int) throws java.sql.SQLException; @@ -52420,10 +53497,10 @@ package java.sql { method public abstract void updateNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void updateNull(int) throws java.sql.SQLException; method public abstract void updateNull(java.lang.String) throws java.sql.SQLException; - method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void updateObject(int, java.lang.Object, int) throws java.sql.SQLException; - method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void updateObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void updateObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void updateObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; method public abstract void updateRef(int, java.sql.Ref) throws java.sql.SQLException; method public abstract void updateRef(java.lang.String, java.sql.Ref) throws java.sql.SQLException; method public abstract void updateRow() throws java.sql.SQLException; @@ -52502,10 +53579,10 @@ package java.sql { ctor public SQLClientInfoException(java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); ctor public SQLClientInfoException(java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); - ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); - ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); ctor public SQLClientInfoException(java.lang.String, java.lang.String, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>); + ctor public SQLClientInfoException(java.lang.String, java.lang.String, int, java.util.Map<java.lang.String, java.sql.ClientInfoStatus>, java.lang.Throwable); method public java.util.Map<java.lang.String, java.sql.ClientInfoStatus> getFailedProperties(); } @@ -52526,11 +53603,11 @@ package java.sql { ctor public SQLDataException(java.lang.String, java.lang.String, int, java.lang.Throwable); } - public class SQLException extends java.lang.Exception implements java.lang.Iterable java.io.Serializable { - ctor public SQLException(); - ctor public SQLException(java.lang.String); - ctor public SQLException(java.lang.String, java.lang.String); + public class SQLException extends java.lang.Exception implements java.lang.Iterable { ctor public SQLException(java.lang.String, java.lang.String, int); + ctor public SQLException(java.lang.String, java.lang.String); + ctor public SQLException(java.lang.String); + ctor public SQLException(); ctor public SQLException(java.lang.Throwable); ctor public SQLException(java.lang.String, java.lang.Throwable); ctor public SQLException(java.lang.String, java.lang.String, java.lang.Throwable); @@ -52657,7 +53734,7 @@ package java.sql { method public abstract void writeURL(java.net.URL) throws java.sql.SQLException; } - public final class SQLPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { + public final class SQLPermission extends java.security.BasicPermission { ctor public SQLPermission(java.lang.String); ctor public SQLPermission(java.lang.String, java.lang.String); } @@ -52728,11 +53805,11 @@ package java.sql { ctor public SQLTransientException(java.lang.String, java.lang.String, int, java.lang.Throwable); } - public class SQLWarning extends java.sql.SQLException implements java.io.Serializable { - ctor public SQLWarning(); - ctor public SQLWarning(java.lang.String); - ctor public SQLWarning(java.lang.String, java.lang.String); + public class SQLWarning extends java.sql.SQLException { ctor public SQLWarning(java.lang.String, java.lang.String, int); + ctor public SQLWarning(java.lang.String, java.lang.String); + ctor public SQLWarning(java.lang.String); + ctor public SQLWarning(); ctor public SQLWarning(java.lang.Throwable); ctor public SQLWarning(java.lang.String, java.lang.Throwable); ctor public SQLWarning(java.lang.String, java.lang.String, java.lang.Throwable); @@ -52821,15 +53898,15 @@ package java.sql { } public class Timestamp extends java.util.Date { - ctor public deprecated Timestamp(int, int, int, int, int, int, int) throws java.lang.IllegalArgumentException; + ctor public deprecated Timestamp(int, int, int, int, int, int, int); ctor public Timestamp(long); method public boolean after(java.sql.Timestamp); method public boolean before(java.sql.Timestamp); method public int compareTo(java.sql.Timestamp); method public boolean equals(java.sql.Timestamp); method public int getNanos(); - method public void setNanos(int) throws java.lang.IllegalArgumentException; - method public static java.sql.Timestamp valueOf(java.lang.String) throws java.lang.IllegalArgumentException; + method public void setNanos(int); + method public static java.sql.Timestamp valueOf(java.lang.String); } public class Types { @@ -52909,11 +53986,11 @@ package java.text { } public class AttributedString { + ctor public AttributedString(java.lang.String); + ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>); ctor public AttributedString(java.text.AttributedCharacterIterator); ctor public AttributedString(java.text.AttributedCharacterIterator, int, int); ctor public AttributedString(java.text.AttributedCharacterIterator, int, int, java.text.AttributedCharacterIterator.Attribute[]); - ctor public AttributedString(java.lang.String); - ctor public AttributedString(java.lang.String, java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>); method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object); method public void addAttribute(java.text.AttributedCharacterIterator.Attribute, java.lang.Object, int, int); method public void addAttributes(java.util.Map<? extends java.text.AttributedCharacterIterator.Attribute, ?>, int, int); @@ -52923,9 +54000,9 @@ package java.text { } public final class Bidi { + ctor public Bidi(java.lang.String, int); ctor public Bidi(java.text.AttributedCharacterIterator); ctor public Bidi(char[], int, byte[], int, int, int); - ctor public Bidi(java.lang.String, int); method public boolean baseIsLeftToRight(); method public java.text.Bidi createLineBidi(int, int); method public int getBaseLevel(); @@ -52952,7 +54029,7 @@ package java.text { method public abstract int current(); method public abstract int first(); method public abstract int following(int); - method public static java.util.Locale[] getAvailableLocales(); + method public static synchronized java.util.Locale[] getAvailableLocales(); method public static java.text.BreakIterator getCharacterInstance(); method public static java.text.BreakIterator getCharacterInstance(java.util.Locale); method public static java.text.BreakIterator getLineInstance(); @@ -52964,8 +54041,8 @@ package java.text { method public static java.text.BreakIterator getWordInstance(java.util.Locale); method public boolean isBoundary(int); method public abstract int last(); - method public abstract int next(); method public abstract int next(int); + method public abstract int next(); method public int preceding(int); method public abstract int previous(); method public void setText(java.lang.String); @@ -52988,11 +54065,11 @@ package java.text { } public class ChoiceFormat extends java.text.NumberFormat { - ctor public ChoiceFormat(double[], java.lang.String[]); ctor public ChoiceFormat(java.lang.String); + ctor public ChoiceFormat(double[], java.lang.String[]); method public void applyPattern(java.lang.String); - method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); + method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.Object[] getFormats(); method public double[] getLimits(); method public static final double nextDouble(double); @@ -53012,8 +54089,8 @@ package java.text { method public void reset(); method public static final short secondaryOrder(int); method public void setOffset(int); - method public void setText(java.text.CharacterIterator); method public void setText(java.lang.String); + method public void setText(java.text.CharacterIterator); method public static final short tertiaryOrder(int); field public static final int NULLORDER = -1; // 0xffffffff } @@ -53028,18 +54105,18 @@ package java.text { public abstract class Collator implements java.lang.Cloneable java.util.Comparator { ctor protected Collator(); method public java.lang.Object clone(); - method public int compare(java.lang.Object, java.lang.Object); method public abstract int compare(java.lang.String, java.lang.String); + method public int compare(java.lang.Object, java.lang.Object); method public boolean equals(java.lang.String, java.lang.String); - method public static java.util.Locale[] getAvailableLocales(); + method public static synchronized java.util.Locale[] getAvailableLocales(); method public abstract java.text.CollationKey getCollationKey(java.lang.String); - method public int getDecomposition(); - method public static java.text.Collator getInstance(); - method public static java.text.Collator getInstance(java.util.Locale); - method public int getStrength(); + method public synchronized int getDecomposition(); + method public static synchronized java.text.Collator getInstance(); + method public static synchronized java.text.Collator getInstance(java.util.Locale); + method public synchronized int getStrength(); method public abstract int hashCode(); - method public void setDecomposition(int); - method public void setStrength(int); + method public synchronized void setDecomposition(int); + method public synchronized void setStrength(int); field public static final int CANONICAL_DECOMPOSITION = 1; // 0x1 field public static final int FULL_DECOMPOSITION = 2; // 0x2 field public static final int IDENTICAL = 3; // 0x3 @@ -53052,8 +54129,8 @@ package java.text { public abstract class DateFormat extends java.text.Format { ctor protected DateFormat(); method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.String format(java.util.Date); method public abstract java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); + method public final java.lang.String format(java.util.Date); method public static java.util.Locale[] getAvailableLocales(); method public java.util.Calendar getCalendar(); method public static final java.text.DateFormat getDateInstance(); @@ -53158,9 +54235,9 @@ package java.text { ctor public DecimalFormat(java.lang.String, java.text.DecimalFormatSymbols); method public void applyLocalizedPattern(java.lang.String); method public void applyPattern(java.lang.String); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.DecimalFormatSymbols getDecimalFormatSymbols(); method public int getGroupingSize(); method public int getMultiplier(); @@ -53196,15 +54273,17 @@ package java.text { method public java.lang.String getExponentSeparator(); method public char getGroupingSeparator(); method public java.lang.String getInfinity(); - method public static java.text.DecimalFormatSymbols getInstance(); - method public static java.text.DecimalFormatSymbols getInstance(java.util.Locale); + method public static final java.text.DecimalFormatSymbols getInstance(); + method public static final java.text.DecimalFormatSymbols getInstance(java.util.Locale); method public java.lang.String getInternationalCurrencySymbol(); method public char getMinusSign(); + method public java.lang.String getMinusSignString(); method public char getMonetaryDecimalSeparator(); method public java.lang.String getNaN(); method public char getPatternSeparator(); method public char getPerMill(); method public char getPercent(); + method public java.lang.String getPercentString(); method public char getZeroDigit(); method public void setCurrency(java.util.Currency); method public void setCurrencySymbol(java.lang.String); @@ -53241,8 +54320,8 @@ package java.text { method public final java.lang.String format(java.lang.Object); method public abstract java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.AttributedCharacterIterator formatToCharacterIterator(java.lang.Object); - method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException; method public abstract java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); + method public java.lang.Object parseObject(java.lang.String) throws java.text.ParseException; } public static class Format.Field extends java.text.AttributedCharacterIterator.Attribute { @@ -53250,17 +54329,17 @@ package java.text { } public class MessageFormat extends java.text.Format { - ctor public MessageFormat(java.lang.String, java.util.Locale); ctor public MessageFormat(java.lang.String); + ctor public MessageFormat(java.lang.String, java.util.Locale); method public void applyPattern(java.lang.String); method public final java.lang.StringBuffer format(java.lang.Object[], java.lang.StringBuffer, java.text.FieldPosition); - method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public static java.lang.String format(java.lang.String, java.lang.Object...); + method public final java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public java.text.Format[] getFormats(); method public java.text.Format[] getFormatsByArgumentIndex(); method public java.util.Locale getLocale(); - method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException; method public java.lang.Object[] parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Object[] parse(java.lang.String) throws java.text.ParseException; method public java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); method public void setFormat(int, java.text.Format); method public void setFormatByArgumentIndex(int, java.text.Format); @@ -53291,11 +54370,11 @@ package java.text { public abstract class NumberFormat extends java.text.Format { ctor protected NumberFormat(); + method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public final java.lang.String format(double); - method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public final java.lang.String format(long); + method public abstract java.lang.StringBuffer format(double, java.lang.StringBuffer, java.text.FieldPosition); method public abstract java.lang.StringBuffer format(long, java.lang.StringBuffer, java.text.FieldPosition); - method public java.lang.StringBuffer format(java.lang.Object, java.lang.StringBuffer, java.text.FieldPosition); method public static java.util.Locale[] getAvailableLocales(); method public java.util.Currency getCurrency(); method public static final java.text.NumberFormat getCurrencyInstance(); @@ -53315,8 +54394,8 @@ package java.text { method public java.math.RoundingMode getRoundingMode(); method public boolean isGroupingUsed(); method public boolean isParseIntegerOnly(); - method public java.lang.Number parse(java.lang.String) throws java.text.ParseException; method public abstract java.lang.Number parse(java.lang.String, java.text.ParsePosition); + method public java.lang.Number parse(java.lang.String) throws java.text.ParseException; method public final java.lang.Object parseObject(java.lang.String, java.text.ParsePosition); method public void setCurrency(java.util.Currency); method public void setGroupingUsed(boolean); @@ -53360,10 +54439,10 @@ package java.text { public class RuleBasedCollator extends java.text.Collator { ctor public RuleBasedCollator(java.lang.String) throws java.text.ParseException; - method public int compare(java.lang.String, java.lang.String); - method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator); + method public synchronized int compare(java.lang.String, java.lang.String); method public java.text.CollationElementIterator getCollationElementIterator(java.lang.String); - method public java.text.CollationKey getCollationKey(java.lang.String); + method public java.text.CollationElementIterator getCollationElementIterator(java.text.CharacterIterator); + method public synchronized java.text.CollationKey getCollationKey(java.lang.String); method public java.lang.String getRules(); method public int hashCode(); } @@ -53371,8 +54450,8 @@ package java.text { public class SimpleDateFormat extends java.text.DateFormat { ctor public SimpleDateFormat(); ctor public SimpleDateFormat(java.lang.String); - ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols); ctor public SimpleDateFormat(java.lang.String, java.util.Locale); + ctor public SimpleDateFormat(java.lang.String, java.text.DateFormatSymbols); method public void applyLocalizedPattern(java.lang.String); method public void applyPattern(java.lang.String); method public java.lang.StringBuffer format(java.util.Date, java.lang.StringBuffer, java.text.FieldPosition); @@ -53519,7 +54598,7 @@ package java.util { method public int size(); } - public class ArrayList extends java.util.AbstractList implements java.lang.Cloneable java.util.RandomAccess java.io.Serializable { + public class ArrayList 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>); @@ -53532,109 +54611,109 @@ package java.util { public class Arrays { method public static java.util.List<T> asList(T...); - method public static int binarySearch(byte[], byte); - method public static int binarySearch(byte[], int, int, byte); + method public static int binarySearch(long[], long); + method public static int binarySearch(long[], int, int, long); + method public static int binarySearch(int[], int); + method public static int binarySearch(int[], int, int, int); + method public static int binarySearch(short[], short); + method public static int binarySearch(short[], int, int, short); method public static int binarySearch(char[], char); method public static int binarySearch(char[], int, int, char); + method public static int binarySearch(byte[], byte); + method public static int binarySearch(byte[], int, int, byte); method public static int binarySearch(double[], double); method public static int binarySearch(double[], int, int, double); method public static int binarySearch(float[], float); method public static int binarySearch(float[], int, int, float); - method public static int binarySearch(int[], int); - method public static int binarySearch(int[], int, int, int); - method public static int binarySearch(long[], long); - method public static int binarySearch(long[], int, int, long); 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 int binarySearch(short[], short); - method public static int binarySearch(short[], int, int, short); - method public static boolean[] copyOf(boolean[], int); + method public static T[] copyOf(T[], int); + method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>); method public static byte[] copyOf(byte[], int); - method public static char[] copyOf(char[], int); - method public static double[] copyOf(double[], int); - method public static float[] copyOf(float[], int); + method public static short[] copyOf(short[], int); method public static int[] copyOf(int[], int); method public static long[] copyOf(long[], int); - method public static short[] copyOf(short[], int); - method public static T[] copyOf(T[], int); - method public static T[] copyOf(U[], int, java.lang.Class<? extends T[]>); - method public static boolean[] copyOfRange(boolean[], int, int); + method public static char[] copyOf(char[], int); + 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 byte[] copyOfRange(byte[], int, int); - method public static char[] copyOfRange(char[], int, int); - method public static double[] copyOfRange(double[], int, int); - method public static float[] copyOfRange(float[], int, int); + method public static short[] copyOfRange(short[], int, int); method public static int[] copyOfRange(int[], int, int); method public static long[] copyOfRange(long[], int, int); - method public static short[] copyOfRange(short[], int, 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 char[] copyOfRange(char[], int, int); + method public static float[] copyOfRange(float[], int, int); + method public static double[] copyOfRange(double[], int, int); + method public static boolean[] copyOfRange(boolean[], int, int); method public static boolean deepEquals(java.lang.Object[], java.lang.Object[]); method public static int deepHashCode(java.lang.Object[]); method public static java.lang.String deepToString(java.lang.Object[]); - method public static boolean equals(byte[], byte[]); + method public static boolean equals(long[], long[]); + method public static boolean equals(int[], int[]); method public static boolean equals(short[], short[]); method public static boolean equals(char[], char[]); - method public static boolean equals(int[], int[]); - method public static boolean equals(long[], long[]); - method public static boolean equals(float[], float[]); - method public static boolean equals(double[], double[]); + method public static boolean equals(byte[], byte[]); method public static boolean equals(boolean[], boolean[]); + method public static boolean equals(double[], double[]); + method public static boolean equals(float[], float[]); method public static boolean equals(java.lang.Object[], java.lang.Object[]); - method public static void fill(byte[], byte); - method public static void fill(byte[], int, int, byte); + method public static void fill(long[], long); + method public static void fill(long[], int, int, long); + method public static void fill(int[], int); + method public static void fill(int[], int, int, int); method public static void fill(short[], short); method public static void fill(short[], int, int, short); method public static void fill(char[], char); method public static void fill(char[], int, int, char); - method public static void fill(int[], int); - method public static void fill(int[], int, int, int); - method public static void fill(long[], long); - method public static void fill(long[], int, int, long); - method public static void fill(float[], float); - method public static void fill(float[], int, int, float); - method public static void fill(double[], double); - method public static void fill(double[], int, int, double); + method public static void fill(byte[], byte); + method public static void fill(byte[], int, int, byte); method public static void fill(boolean[], boolean); method public static void fill(boolean[], int, int, boolean); + method public static void fill(double[], double); + method public static void fill(double[], int, int, double); + method public static void fill(float[], float); + method public static void fill(float[], int, int, float); method public static void fill(java.lang.Object[], java.lang.Object); method public static void fill(java.lang.Object[], int, int, java.lang.Object); - method public static int hashCode(boolean[]); + method public static int hashCode(long[]); method public static int hashCode(int[]); method public static int hashCode(short[]); method public static int hashCode(char[]); method public static int hashCode(byte[]); - method public static int hashCode(long[]); + method public static int hashCode(boolean[]); method public static int hashCode(float[]); method public static int hashCode(double[]); method public static int hashCode(java.lang.Object[]); - method public static void sort(byte[]); - method public static void sort(byte[], int, int); - method public static void sort(char[]); - method public static void sort(char[], int, int); - method public static void sort(double[]); - method public static void sort(double[], int, int); - method public static void sort(float[]); - method public static void sort(float[], int, int); method public static void sort(int[]); method public static void sort(int[], int, int); method public static void sort(long[]); method public static void sort(long[], int, int); method public static void sort(short[]); method public static void sort(short[], int, int); + method public static void sort(char[]); + method public static void sort(char[], int, int); + method public static void sort(byte[]); + method public static void sort(byte[], int, int); + method public static void sort(float[]); + method public static void sort(float[], int, int); + method public static void sort(double[]); + 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[], int, int, java.util.Comparator<? super T>); method public static void sort(T[], java.util.Comparator<? super T>); - method public static java.lang.String toString(boolean[]); - method public static java.lang.String toString(byte[]); - method public static java.lang.String toString(char[]); - method public static java.lang.String toString(double[]); - method public static java.lang.String toString(float[]); - method public static java.lang.String toString(int[]); + method public static void sort(T[], int, int, java.util.Comparator<? super T>); method public static java.lang.String toString(long[]); + method public static java.lang.String toString(int[]); method public static java.lang.String toString(short[]); + method public static java.lang.String toString(char[]); + method public static java.lang.String toString(byte[]); + method public static java.lang.String toString(boolean[]); + method public static java.lang.String toString(float[]); + method public static java.lang.String toString(double[]); method public static java.lang.String toString(java.lang.Object[]); } @@ -53645,8 +54724,8 @@ package java.util { method public void andNot(java.util.BitSet); method public int cardinality(); method public void clear(int); - method public void clear(); method public void clear(int, int); + method public void clear(); method public java.lang.Object clone(); method public void flip(int); method public void flip(int, int); @@ -53662,8 +54741,8 @@ package java.util { method public int previousSetBit(int); method public void set(int); method public void set(int, boolean); - method public void set(int, int, boolean); method public void set(int, int); + method public void set(int, int, boolean); method public int size(); method public byte[] toByteArray(); method public long[] toLongArray(); @@ -53695,10 +54774,10 @@ package java.util { method public java.util.Map<java.lang.String, java.lang.Integer> getDisplayNames(int, int, java.util.Locale); method public int getFirstDayOfWeek(); method public abstract int getGreatestMinimum(int); - method public static synchronized java.util.Calendar getInstance(); - method public static synchronized java.util.Calendar getInstance(java.util.Locale); - method public static synchronized java.util.Calendar getInstance(java.util.TimeZone); - method public static synchronized java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale); + method public static java.util.Calendar getInstance(); + method public static java.util.Calendar getInstance(java.util.TimeZone); + method public static java.util.Calendar getInstance(java.util.Locale); + method public static java.util.Calendar getInstance(java.util.TimeZone, java.util.Locale); method public abstract int getLeastMaximum(int); method public abstract int getMaximum(int); method public int getMinimalDaysInFirstWeek(); @@ -53706,11 +54785,14 @@ package java.util { method public final java.util.Date getTime(); method public long getTimeInMillis(); method public java.util.TimeZone getTimeZone(); + method public int getWeekYear(); + method public int getWeeksInWeekYear(); method protected final int internalGet(int); method public boolean isLenient(); method public final boolean isSet(int); - method public void roll(int, int); + method public boolean isWeekDateSupported(); method public abstract void roll(int, boolean); + method public void roll(int, int); method public void set(int, int); method public final void set(int, int, int); method public final void set(int, int, int, int, int); @@ -53721,6 +54803,7 @@ package java.util { method public final void setTime(java.util.Date); method public void setTimeInMillis(long); method public void setTimeZone(java.util.TimeZone); + method public void setWeekDate(int, int, int); field public static final int ALL_STYLES = 0; // 0x0 field public static final int AM = 0; // 0x0 field public static final int AM_PM = 9; // 0x9 @@ -53837,15 +54920,15 @@ package java.util { 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<E> synchronizedSet(java.util.Set<E>); + 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<E> synchronizedSortedSet(java.util.SortedSet<E>); - method public static java.util.Collection<E> unmodifiableCollection(java.util.Collection<? extends E>); - method public static java.util.List<E> unmodifiableList(java.util.List<? extends E>); + 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<E> unmodifiableSet(java.util.Set<? extends E>); + 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<E> unmodifiableSortedSet(java.util.SortedSet<E>); + method public static 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; @@ -53859,8 +54942,8 @@ package java.util { public class ConcurrentModificationException extends java.lang.RuntimeException { ctor public ConcurrentModificationException(); ctor public ConcurrentModificationException(java.lang.String); - ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); ctor public ConcurrentModificationException(java.lang.Throwable); + ctor public ConcurrentModificationException(java.lang.String, java.lang.Throwable); } public final class Currency implements java.io.Serializable { @@ -53871,16 +54954,17 @@ package java.util { method public java.lang.String getDisplayName(java.util.Locale); method public static java.util.Currency getInstance(java.lang.String); method public static java.util.Currency getInstance(java.util.Locale); + method public int getNumericCode(); method public java.lang.String getSymbol(); method public java.lang.String getSymbol(java.util.Locale); } public class Date implements java.lang.Cloneable java.lang.Comparable java.io.Serializable { ctor public Date(); + ctor public Date(long); ctor public deprecated Date(int, int, int); ctor public deprecated Date(int, int, int, int, int); ctor public deprecated Date(int, int, int, int, int, int); - ctor public Date(long); ctor public deprecated Date(java.lang.String); method public static deprecated long UTC(int, int, int, int, int, int); method public boolean after(java.util.Date); @@ -53958,7 +55042,7 @@ package java.util { ctor public EmptyStackException(); } - public class EnumMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { + public class EnumMap 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>); @@ -53991,8 +55075,8 @@ package java.util { } public abstract class EventListenerProxy implements java.util.EventListener { - ctor public EventListenerProxy(java.util.EventListener); - method public java.util.EventListener getListener(); + ctor public EventListenerProxy(T); + method public T getListener(); } public class EventObject implements java.io.Serializable { @@ -54001,14 +55085,14 @@ package java.util { field protected transient java.lang.Object source; } - public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException implements java.io.Serializable { + public class FormatFlagsConversionMismatchException extends java.util.IllegalFormatException { ctor public FormatFlagsConversionMismatchException(java.lang.String, char); method public char getConversion(); method public java.lang.String getFlags(); } public abstract interface Formattable { - method public abstract void formatTo(java.util.Formatter, int, int, int) throws java.util.IllegalFormatException; + method public abstract void formatTo(java.util.Formatter, int, int, int); } public class FormattableFlags { @@ -54028,10 +55112,10 @@ package java.util { ctor public Formatter(java.io.File) throws java.io.FileNotFoundException; ctor public Formatter(java.io.File, java.lang.String) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; ctor public Formatter(java.io.File, java.lang.String, java.util.Locale) throws java.io.FileNotFoundException, java.io.UnsupportedEncodingException; + ctor public Formatter(java.io.PrintStream); ctor public Formatter(java.io.OutputStream); ctor public Formatter(java.io.OutputStream, java.lang.String) throws java.io.UnsupportedEncodingException; ctor public Formatter(java.io.OutputStream, java.lang.String, java.util.Locale) throws java.io.UnsupportedEncodingException; - ctor public Formatter(java.io.PrintStream); method public void close(); method public void flush(); method public java.util.Formatter format(java.lang.String, java.lang.Object...); @@ -54048,18 +55132,18 @@ package java.util { enum_constant public static final java.util.Formatter.BigDecimalLayoutForm SCIENTIFIC; } - public class FormatterClosedException extends java.lang.IllegalStateException implements java.io.Serializable { + public class FormatterClosedException extends java.lang.IllegalStateException { ctor public FormatterClosedException(); } public class GregorianCalendar extends java.util.Calendar { ctor public GregorianCalendar(); + ctor public GregorianCalendar(java.util.TimeZone); + ctor public GregorianCalendar(java.util.Locale); + ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale); ctor public GregorianCalendar(int, int, int); ctor public GregorianCalendar(int, int, int, int, int); ctor public GregorianCalendar(int, int, int, int, int, int); - ctor public GregorianCalendar(java.util.Locale); - ctor public GregorianCalendar(java.util.TimeZone); - ctor public GregorianCalendar(java.util.TimeZone, java.util.Locale); method public void add(int, int); method protected void computeFields(); method protected void computeTime(); @@ -54069,16 +55153,17 @@ package java.util { method public int getMaximum(int); method public int getMinimum(int); method public boolean isLeapYear(int); + method public final boolean isWeekDateSupported(); method public void roll(int, boolean); method public void setGregorianChange(java.util.Date); field public static final int AD = 1; // 0x1 field public static final int BC = 0; // 0x0 } - public class HashMap extends java.util.AbstractMap implements java.lang.Cloneable java.io.Serializable { - ctor public HashMap(); - ctor public HashMap(int); + public class HashMap 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(); ctor public HashMap(java.util.Map<? extends K, ? extends V>); method public java.lang.Object clone(); method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); @@ -54086,36 +55171,36 @@ package java.util { public class HashSet extends java.util.AbstractSet implements java.lang.Cloneable java.io.Serializable java.util.Set { ctor public HashSet(); - ctor public HashSet(int); - ctor public HashSet(int, float); ctor public HashSet(java.util.Collection<? extends E>); + ctor public HashSet(int, float); + ctor public HashSet(int); method public java.lang.Object clone(); method public java.util.Iterator<E> iterator(); method public int size(); } public class Hashtable extends java.util.Dictionary implements java.lang.Cloneable java.util.Map java.io.Serializable { - ctor public Hashtable(); - ctor public Hashtable(int); ctor public Hashtable(int, float); + ctor public Hashtable(int); + ctor public Hashtable(); ctor public Hashtable(java.util.Map<? extends K, ? extends V>); method public synchronized void clear(); method public synchronized java.lang.Object clone(); - method public boolean contains(java.lang.Object); + method public synchronized boolean contains(java.lang.Object); method public synchronized boolean containsKey(java.lang.Object); - method public synchronized boolean containsValue(java.lang.Object); + method public boolean containsValue(java.lang.Object); method public synchronized java.util.Enumeration<V> elements(); - method public synchronized java.util.Set<java.util.Map.Entry<K, V>> entrySet(); + method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); method public synchronized V get(java.lang.Object); method public synchronized boolean isEmpty(); - method public synchronized java.util.Set<K> keySet(); + method public java.util.Set<K> keySet(); method public synchronized java.util.Enumeration<K> keys(); method public synchronized V put(K, V); method public synchronized void putAll(java.util.Map<? extends K, ? extends V>); method protected void rehash(); method public synchronized V remove(java.lang.Object); method public synchronized int size(); - method public synchronized java.util.Collection<V> values(); + method public java.util.Collection<V> values(); } public class IdentityHashMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.Map java.io.Serializable { @@ -54126,21 +55211,21 @@ package java.util { method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); } - public class IllegalFormatCodePointException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatCodePointException extends java.util.IllegalFormatException { ctor public IllegalFormatCodePointException(int); method public int getCodePoint(); } - public class IllegalFormatConversionException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatConversionException extends java.util.IllegalFormatException { ctor public IllegalFormatConversionException(char, java.lang.Class<?>); method public java.lang.Class<?> getArgumentClass(); method public char getConversion(); } - public class IllegalFormatException extends java.lang.IllegalArgumentException implements java.io.Serializable { + public class IllegalFormatException extends java.lang.IllegalArgumentException { } - public class IllegalFormatFlagsException extends java.util.IllegalFormatException implements java.io.Serializable { + public class IllegalFormatFlagsException extends java.util.IllegalFormatException { ctor public IllegalFormatFlagsException(java.lang.String); method public java.lang.String getFlags(); } @@ -54162,14 +55247,14 @@ package java.util { method public int getErrorIndex(); } - public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable { + public class InputMismatchException extends java.util.NoSuchElementException { ctor public InputMismatchException(); ctor public InputMismatchException(java.lang.String); } public class InvalidPropertiesFormatException extends java.io.IOException { - ctor public InvalidPropertiesFormatException(java.lang.String); ctor public InvalidPropertiesFormatException(java.lang.Throwable); + ctor public InvalidPropertiesFormatException(java.lang.String); } public abstract interface Iterator { @@ -54178,23 +55263,23 @@ package java.util { method public abstract void remove(); } - public class LinkedHashMap extends java.util.HashMap { - ctor public LinkedHashMap(); - ctor public LinkedHashMap(int); + public class LinkedHashMap extends java.util.HashMap implements java.util.Map { ctor public LinkedHashMap(int, float); - ctor public LinkedHashMap(int, float, boolean); + ctor public LinkedHashMap(int); + ctor public LinkedHashMap(); ctor public LinkedHashMap(java.util.Map<? extends K, ? extends V>); + ctor public LinkedHashMap(int, float, boolean); 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 { - ctor public LinkedHashSet(); - ctor public LinkedHashSet(int); 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.util.Queue java.io.Serializable { + public class LinkedList 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); @@ -54225,10 +55310,10 @@ package java.util { } public abstract interface List implements java.util.Collection { - method public abstract void add(int, E); method public abstract boolean add(E); - method public abstract boolean addAll(int, java.util.Collection<? extends E>); + method public abstract void add(int, E); method public abstract boolean addAll(java.util.Collection<? extends E>); + method public abstract boolean addAll(int, java.util.Collection<? extends E>); method public abstract void clear(); method public abstract boolean contains(java.lang.Object); method public abstract boolean containsAll(java.util.Collection<?>); @@ -54241,8 +55326,8 @@ package java.util { method public abstract int lastIndexOf(java.lang.Object); method public abstract java.util.ListIterator<E> listIterator(); method public abstract java.util.ListIterator<E> listIterator(int); - method public abstract E remove(int); method public abstract boolean remove(java.lang.Object); + method public abstract E remove(int); method public abstract boolean removeAll(java.util.Collection<?>); method public abstract boolean retainAll(java.util.Collection<?>); method public abstract E set(int, E); @@ -54272,14 +55357,15 @@ package java.util { } public final class Locale implements java.lang.Cloneable java.io.Serializable { - ctor public Locale(java.lang.String); - ctor public Locale(java.lang.String, java.lang.String); ctor public Locale(java.lang.String, java.lang.String, java.lang.String); + ctor public Locale(java.lang.String, java.lang.String); + ctor public Locale(java.lang.String); method public java.lang.Object clone(); method public static java.util.Locale forLanguageTag(java.lang.String); method public static java.util.Locale[] getAvailableLocales(); method public java.lang.String getCountry(); method public static java.util.Locale getDefault(); + method public static java.util.Locale getDefault(java.util.Locale.Category); method public final java.lang.String getDisplayCountry(); method public java.lang.String getDisplayCountry(java.util.Locale); method public final java.lang.String getDisplayLanguage(); @@ -54292,8 +55378,8 @@ package java.util { method public java.lang.String getDisplayVariant(java.util.Locale); method public java.lang.String getExtension(char); method public java.util.Set<java.lang.Character> getExtensionKeys(); - method public java.lang.String getISO3Country(); - method public java.lang.String getISO3Language(); + method public java.lang.String getISO3Country() throws java.util.MissingResourceException; + method public java.lang.String getISO3Language() throws java.util.MissingResourceException; method public static java.lang.String[] getISOCountries(); method public static java.lang.String[] getISOLanguages(); method public java.lang.String getLanguage(); @@ -54303,6 +55389,7 @@ package java.util { method public java.lang.String getUnicodeLocaleType(java.lang.String); method public java.lang.String getVariant(); 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.lang.String toLanguageTag(); method public final java.lang.String toString(); field public static final java.util.Locale CANADA; @@ -54348,6 +55435,13 @@ package java.util { method public java.util.Locale.Builder setVariant(java.lang.String); } + public static final class Locale.Category extends java.lang.Enum { + method public static java.util.Locale.Category valueOf(java.lang.String); + method public static final java.util.Locale.Category[] values(); + enum_constant public static final java.util.Locale.Category DISPLAY; + enum_constant public static final java.util.Locale.Category FORMAT; + } + public abstract interface Map { method public abstract void clear(); method public abstract boolean containsKey(java.lang.Object); @@ -54450,15 +55544,15 @@ package java.util { public class Observable { ctor public Observable(); - method public void addObserver(java.util.Observer); - method protected void clearChanged(); - method public int countObservers(); + method public synchronized void addObserver(java.util.Observer); + method protected synchronized void clearChanged(); + method public synchronized int countObservers(); method public synchronized void deleteObserver(java.util.Observer); method public synchronized void deleteObservers(); - method public boolean hasChanged(); + method public synchronized boolean hasChanged(); method public void notifyObservers(); method public void notifyObservers(java.lang.Object); - method protected void setChanged(); + method protected synchronized void setChanged(); } public abstract interface Observer { @@ -54487,16 +55581,16 @@ package java.util { method public java.lang.String getProperty(java.lang.String, java.lang.String); method public void list(java.io.PrintStream); method public void list(java.io.PrintWriter); - method public synchronized void load(java.io.InputStream) throws java.io.IOException; method public synchronized void load(java.io.Reader) throws java.io.IOException; + method public synchronized void load(java.io.InputStream) throws java.io.IOException; method public synchronized void loadFromXML(java.io.InputStream) throws java.io.IOException, java.util.InvalidPropertiesFormatException; method public java.util.Enumeration<?> propertyNames(); method public deprecated void save(java.io.OutputStream, java.lang.String); - method public java.lang.Object setProperty(java.lang.String, java.lang.String); - method public synchronized void store(java.io.OutputStream, java.lang.String) throws java.io.IOException; - method public synchronized void store(java.io.Writer, java.lang.String) throws java.io.IOException; + method public synchronized java.lang.Object setProperty(java.lang.String, java.lang.String); + method public void store(java.io.Writer, java.lang.String) throws java.io.IOException; + method public void store(java.io.OutputStream, java.lang.String) throws java.io.IOException; method public void storeToXML(java.io.OutputStream, java.lang.String) throws java.io.IOException; - method public synchronized void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException; + method public void storeToXML(java.io.OutputStream, java.lang.String, java.lang.String) throws java.io.IOException; method public java.util.Set<java.lang.String> stringPropertyNames(); field protected java.util.Properties defaults; } @@ -54524,7 +55618,7 @@ package java.util { public class Random implements java.io.Serializable { ctor public Random(); ctor public Random(long); - method protected synchronized int next(int); + method protected int next(int); method public boolean nextBoolean(); method public void nextBytes(byte[]); method public double nextDouble(); @@ -54541,14 +55635,14 @@ package java.util { public abstract class ResourceBundle { ctor public ResourceBundle(); - method public static void clearCache(); - method public static void clearCache(java.lang.ClassLoader); + method public static final void clearCache(); + method public static final void clearCache(java.lang.ClassLoader); method public boolean containsKey(java.lang.String); - method public static java.util.ResourceBundle getBundle(java.lang.String) throws java.util.MissingResourceException; - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale); - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader) throws java.util.MissingResourceException; - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.ResourceBundle.Control); - method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control); + 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); + method public static final java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.util.ResourceBundle.Control); + method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader); method public static java.util.ResourceBundle getBundle(java.lang.String, java.util.Locale, java.lang.ClassLoader, java.util.ResourceBundle.Control); method public abstract java.util.Enumeration<java.lang.String> getKeys(); method public java.util.Locale getLocale(); @@ -54565,10 +55659,10 @@ package java.util { public static class ResourceBundle.Control { ctor protected ResourceBundle.Control(); method public java.util.List<java.util.Locale> getCandidateLocales(java.lang.String, java.util.Locale); - method public static java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>); + method public static final java.util.ResourceBundle.Control getControl(java.util.List<java.lang.String>); method public java.util.Locale getFallbackLocale(java.lang.String, java.util.Locale); method public java.util.List<java.lang.String> getFormats(java.lang.String); - method public static java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>); + method public static final java.util.ResourceBundle.Control getNoFallbackControl(java.util.List<java.lang.String>); method public long getTimeToLive(java.lang.String, java.util.Locale); method public boolean needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long); method public java.util.ResourceBundle newBundle(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, boolean) throws java.io.IOException, java.lang.IllegalAccessException, java.lang.InstantiationException; @@ -54582,23 +55676,25 @@ package java.util { } public final class Scanner implements java.io.Closeable java.util.Iterator { + ctor public Scanner(java.lang.Readable); + ctor public Scanner(java.io.InputStream); + ctor public Scanner(java.io.InputStream, java.lang.String); ctor public Scanner(java.io.File) throws java.io.FileNotFoundException; ctor public Scanner(java.io.File, java.lang.String) throws java.io.FileNotFoundException; + ctor public Scanner(java.nio.file.Path) throws java.io.IOException; + ctor public Scanner(java.nio.file.Path, java.lang.String) throws java.io.IOException; ctor public Scanner(java.lang.String); - ctor public Scanner(java.io.InputStream); - ctor public Scanner(java.io.InputStream, java.lang.String); - ctor public Scanner(java.lang.Readable); ctor public Scanner(java.nio.channels.ReadableByteChannel); ctor public Scanner(java.nio.channels.ReadableByteChannel, java.lang.String); method public void close(); method public java.util.regex.Pattern delimiter(); - method public java.lang.String findInLine(java.util.regex.Pattern); method public java.lang.String findInLine(java.lang.String); - method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int); + method public java.lang.String findInLine(java.util.regex.Pattern); method public java.lang.String findWithinHorizon(java.lang.String, int); + method public java.lang.String findWithinHorizon(java.util.regex.Pattern, int); method public boolean hasNext(); - method public boolean hasNext(java.util.regex.Pattern); method public boolean hasNext(java.lang.String); + method public boolean hasNext(java.util.regex.Pattern); method public boolean hasNextBigDecimal(); method public boolean hasNextBigInteger(); method public boolean hasNextBigInteger(int); @@ -54618,8 +55714,8 @@ package java.util { method public java.util.Locale locale(); method public java.util.regex.MatchResult match(); method public java.lang.String next(); - method public java.lang.String next(java.util.regex.Pattern); method public java.lang.String next(java.lang.String); + method public java.lang.String next(java.util.regex.Pattern); method public java.math.BigDecimal nextBigDecimal(); method public java.math.BigInteger nextBigInteger(); method public java.math.BigInteger nextBigInteger(int); @@ -54686,12 +55782,12 @@ package java.util { method public int getRawOffset(); method public boolean inDaylightTime(java.util.Date); method public void setDSTSavings(int); - method public void setEndRule(int, int, int); method public void setEndRule(int, int, int, int); + method public void setEndRule(int, int, int); method public void setEndRule(int, int, int, int, boolean); method public void setRawOffset(int); - method public void setStartRule(int, int, int); method public void setStartRule(int, int, int, int); + method public void setStartRule(int, int, int); method public void setStartRule(int, int, int, int, boolean); method public void setStartYear(int); method public boolean useDaylightTime(); @@ -54702,11 +55798,14 @@ package java.util { public abstract interface SortedMap 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(); method public abstract java.util.SortedMap<K, V> headMap(K); + method public abstract java.util.Set<K> keySet(); method public abstract K lastKey(); method public abstract java.util.SortedMap<K, V> subMap(K, K); method public abstract java.util.SortedMap<K, V> tailMap(K); + method public abstract java.util.Collection<V> values(); } public abstract interface SortedSet implements java.util.Set { @@ -54728,9 +55827,9 @@ package java.util { } public class StringTokenizer implements java.util.Enumeration { - ctor public StringTokenizer(java.lang.String); - ctor public StringTokenizer(java.lang.String, java.lang.String); ctor public StringTokenizer(java.lang.String, java.lang.String, boolean); + ctor public StringTokenizer(java.lang.String, java.lang.String); + ctor public StringTokenizer(java.lang.String); method public int countTokens(); method public boolean hasMoreElements(); method public boolean hasMoreTokens(); @@ -54742,21 +55841,22 @@ package java.util { public abstract class TimeZone implements java.lang.Cloneable java.io.Serializable { ctor public TimeZone(); method public java.lang.Object clone(); - method public static synchronized java.lang.String[] getAvailableIDs(); method public static synchronized java.lang.String[] getAvailableIDs(int); + method public static synchronized java.lang.String[] getAvailableIDs(); method public int getDSTSavings(); - method public static synchronized java.util.TimeZone getDefault(); + method public static java.util.TimeZone getDefault(); method public final java.lang.String getDisplayName(); method public final java.lang.String getDisplayName(java.util.Locale); method public final java.lang.String getDisplayName(boolean, int); method public java.lang.String getDisplayName(boolean, int, java.util.Locale); method public java.lang.String getID(); - method public int getOffset(long); method public abstract int getOffset(int, int, int, int, int, int); + method public int getOffset(long); method public abstract int getRawOffset(); method public static synchronized java.util.TimeZone getTimeZone(java.lang.String); method public boolean hasSameRules(java.util.TimeZone); method public abstract boolean inDaylightTime(java.util.Date); + method public boolean observesDaylightTime(); method public static synchronized void setDefault(java.util.TimeZone); method public void setID(java.lang.String); method public abstract void setRawOffset(int); @@ -54766,14 +55866,14 @@ package java.util { } public class Timer { - ctor public Timer(java.lang.String, boolean); - ctor public Timer(java.lang.String); - ctor public Timer(boolean); ctor public Timer(); + ctor public Timer(boolean); + ctor public Timer(java.lang.String); + ctor public Timer(java.lang.String, boolean); method public void cancel(); method public int purge(); - method public void schedule(java.util.TimerTask, java.util.Date); method public void schedule(java.util.TimerTask, long); + method public void schedule(java.util.TimerTask, java.util.Date); method public void schedule(java.util.TimerTask, long, long); method public void schedule(java.util.TimerTask, java.util.Date, long); method public void scheduleAtFixedRate(java.util.TimerTask, long, long); @@ -54792,10 +55892,10 @@ 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 java.util.SortedMap { + public class TreeMap extends java.util.AbstractMap implements java.lang.Cloneable java.util.NavigableMap java.io.Serializable { ctor public TreeMap(); - ctor public TreeMap(java.util.Map<? extends K, ? extends V>); ctor public TreeMap(java.util.Comparator<? super K>); + ctor public TreeMap(java.util.Map<? extends K, ? extends V>); ctor public TreeMap(java.util.SortedMap<K, ? extends V>); method public java.util.Map.Entry<K, V> ceilingEntry(K); method public K ceilingKey(K); @@ -54827,8 +55927,8 @@ package java.util { public class TreeSet extends java.util.AbstractSet implements java.lang.Cloneable java.util.NavigableSet java.io.Serializable { ctor public TreeSet(); - ctor public TreeSet(java.util.Collection<? extends E>); ctor public TreeSet(java.util.Comparator<? super E>); + ctor public TreeSet(java.util.Collection<? extends E>); ctor public TreeSet(java.util.SortedSet<E>); method public E ceiling(E); method public java.lang.Object clone(); @@ -54878,9 +55978,9 @@ package java.util { } public class Vector extends java.util.AbstractList implements java.lang.Cloneable java.util.List java.util.RandomAccess java.io.Serializable { - ctor public Vector(); - ctor public Vector(int); ctor public Vector(int, int); + ctor public Vector(int); + ctor public Vector(); ctor public Vector(java.util.Collection<? extends E>); method public synchronized void addElement(E); method public synchronized int capacity(); @@ -54890,7 +55990,7 @@ package java.util { method public java.util.Enumeration<E> elements(); method public synchronized void ensureCapacity(int); method public synchronized E firstElement(); - method public E get(int); + method public synchronized E get(int); method public synchronized int indexOf(java.lang.Object, int); method public synchronized void insertElementAt(E, int); method public synchronized E lastElement(); @@ -54908,9 +56008,9 @@ package java.util { } public class WeakHashMap extends java.util.AbstractMap implements java.util.Map { - ctor public WeakHashMap(); - ctor public WeakHashMap(int); ctor public WeakHashMap(int, float); + ctor public WeakHashMap(int); + ctor public WeakHashMap(); ctor public WeakHashMap(java.util.Map<? extends K, ? extends V>); method public java.util.Set<java.util.Map.Entry<K, V>> entrySet(); } @@ -56148,16 +57248,16 @@ package java.util.jar { public class Attributes implements java.lang.Cloneable java.util.Map { ctor public Attributes(); - ctor public Attributes(java.util.jar.Attributes); ctor public Attributes(int); + ctor public Attributes(java.util.jar.Attributes); method public void clear(); method public java.lang.Object clone(); method public boolean containsKey(java.lang.Object); method public boolean containsValue(java.lang.Object); method public java.util.Set<java.util.Map.Entry<java.lang.Object, java.lang.Object>> entrySet(); method public java.lang.Object get(java.lang.Object); - method public java.lang.String getValue(java.util.jar.Attributes.Name); method public java.lang.String getValue(java.lang.String); + method public java.lang.String getValue(java.util.jar.Attributes.Name); method public boolean isEmpty(); method public java.util.Set<java.lang.Object> keySet(); method public java.lang.Object put(java.lang.Object, java.lang.Object); @@ -56205,19 +57305,20 @@ package java.util.jar { } public class JarFile extends java.util.zip.ZipFile { + ctor public JarFile(java.lang.String) throws java.io.IOException; + ctor public JarFile(java.lang.String, boolean) throws java.io.IOException; ctor public JarFile(java.io.File) throws java.io.IOException; ctor public JarFile(java.io.File, boolean) throws java.io.IOException; ctor public JarFile(java.io.File, boolean, int) throws java.io.IOException; - ctor public JarFile(java.lang.String) throws java.io.IOException; - ctor public JarFile(java.lang.String, boolean) throws java.io.IOException; method public java.util.jar.JarEntry getJarEntry(java.lang.String); method public java.util.jar.Manifest getManifest() throws java.io.IOException; + method public boolean hasClassPathAttribute() throws java.io.IOException; field public static final java.lang.String MANIFEST_NAME = "META-INF/MANIFEST.MF"; } public class JarInputStream extends java.util.zip.ZipInputStream { - ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException; ctor public JarInputStream(java.io.InputStream) throws java.io.IOException; + ctor public JarInputStream(java.io.InputStream, boolean) throws java.io.IOException; method public java.util.jar.Manifest getManifest(); method public java.util.jar.JarEntry getNextJarEntry() throws java.io.IOException; } @@ -56241,7 +57342,7 @@ package java.util.jar { } public abstract class Pack200 { - method public static java.util.jar.Pack200.Packer newPacker(); + method public static synchronized java.util.jar.Pack200.Packer newPacker(); method public static java.util.jar.Pack200.Unpacker newUnpacker(); } @@ -56295,7 +57396,7 @@ package java.util.logging { public class ErrorManager { ctor public ErrorManager(); - method public void error(java.lang.String, java.lang.Exception, int); + method public synchronized void error(java.lang.String, java.lang.Exception, int); field public static final int CLOSE_FAILURE = 3; // 0x3 field public static final int FLUSH_FAILURE = 2; // 0x2 field public static final int FORMAT_FAILURE = 5; // 0x5 @@ -56305,11 +57406,11 @@ package java.util.logging { } public class FileHandler extends java.util.logging.StreamHandler { - ctor public FileHandler() throws java.io.IOException; - ctor public FileHandler(java.lang.String) throws java.io.IOException; - ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException; - ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException; - ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException; + ctor public FileHandler() throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, boolean) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, int, int) throws java.io.IOException, java.lang.SecurityException; + ctor public FileHandler(java.lang.String, int, int, boolean) throws java.io.IOException, java.lang.SecurityException; } public abstract interface Filter { @@ -56319,28 +57420,28 @@ package java.util.logging { public abstract class Formatter { ctor protected Formatter(); method public abstract java.lang.String format(java.util.logging.LogRecord); - method public java.lang.String formatMessage(java.util.logging.LogRecord); + method public synchronized java.lang.String formatMessage(java.util.logging.LogRecord); method public java.lang.String getHead(java.util.logging.Handler); method public java.lang.String getTail(java.util.logging.Handler); } public abstract class Handler { ctor protected Handler(); - method public abstract void close(); + method public abstract void close() throws java.lang.SecurityException; method public abstract void flush(); method public java.lang.String getEncoding(); method public java.util.logging.ErrorManager getErrorManager(); method public java.util.logging.Filter getFilter(); method public java.util.logging.Formatter getFormatter(); - method public java.util.logging.Level getLevel(); + method public synchronized java.util.logging.Level getLevel(); method public boolean isLoggable(java.util.logging.LogRecord); method public abstract void publish(java.util.logging.LogRecord); method protected void reportError(java.lang.String, java.lang.Exception, int); - method public void setEncoding(java.lang.String) throws java.io.UnsupportedEncodingException; + method public void setEncoding(java.lang.String) throws java.lang.SecurityException, java.io.UnsupportedEncodingException; method public void setErrorManager(java.util.logging.ErrorManager); - method public void setFilter(java.util.logging.Filter); - method public void setFormatter(java.util.logging.Formatter); - method public void setLevel(java.util.logging.Level); + method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException; + method public void setFormatter(java.util.logging.Formatter) throws java.lang.SecurityException; + method public synchronized void setLevel(java.util.logging.Level) throws java.lang.SecurityException; } public class Level implements java.io.Serializable { @@ -56350,7 +57451,7 @@ package java.util.logging { method public java.lang.String getName(); method public java.lang.String getResourceBundleName(); method public final int intValue(); - method public static java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException; + method public static synchronized java.util.logging.Level parse(java.lang.String) throws java.lang.IllegalArgumentException; method public final java.lang.String toString(); field public static final java.util.logging.Level ALL; field public static final java.util.logging.Level CONFIG; @@ -56365,18 +57466,18 @@ package java.util.logging { public class LogManager { ctor protected LogManager(); - method public synchronized boolean addLogger(java.util.logging.Logger); - method public void addPropertyChangeListener(java.beans.PropertyChangeListener); - method public void checkAccess(); + method public boolean addLogger(java.util.logging.Logger); + method public void addPropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException; + method public void checkAccess() throws java.lang.SecurityException; method public static java.util.logging.LogManager getLogManager(); - method public synchronized java.util.logging.Logger getLogger(java.lang.String); - method public synchronized java.util.Enumeration<java.lang.String> getLoggerNames(); - method public static java.util.logging.LoggingMXBean getLoggingMXBean(); + method public java.util.logging.Logger getLogger(java.lang.String); + method public java.util.Enumeration<java.lang.String> getLoggerNames(); + method public static synchronized java.util.logging.LoggingMXBean getLoggingMXBean(); method public java.lang.String getProperty(java.lang.String); - method public void readConfiguration() throws java.io.IOException; - method public void readConfiguration(java.io.InputStream) throws java.io.IOException; - method public void removePropertyChangeListener(java.beans.PropertyChangeListener); - method public synchronized void reset(); + method public void readConfiguration() throws java.io.IOException, java.lang.SecurityException; + method public void readConfiguration(java.io.InputStream) throws java.io.IOException, java.lang.SecurityException; + method public void removePropertyChangeListener(java.beans.PropertyChangeListener) throws java.lang.SecurityException; + method public void reset() throws java.lang.SecurityException; field public static final java.lang.String LOGGING_MXBEAN_NAME = "java.util.logging:type=Logging"; } @@ -56410,7 +57511,7 @@ package java.util.logging { public class Logger { ctor protected Logger(java.lang.String, java.lang.String); - method public void addHandler(java.util.logging.Handler); + method public void addHandler(java.util.logging.Handler) throws java.lang.SecurityException; method public void config(java.lang.String); method public void entering(java.lang.String, java.lang.String); method public void entering(java.lang.String, java.lang.String, java.lang.Object); @@ -56423,7 +57524,7 @@ package java.util.logging { method public static java.util.logging.Logger getAnonymousLogger(); method public static java.util.logging.Logger getAnonymousLogger(java.lang.String); method public java.util.logging.Filter getFilter(); - method public static java.util.logging.Logger getGlobal(); + method public static final java.util.logging.Logger getGlobal(); method public java.util.logging.Handler[] getHandlers(); method public java.util.logging.Level getLevel(); method public static java.util.logging.Logger getLogger(java.lang.String); @@ -56435,11 +57536,11 @@ package java.util.logging { method public boolean getUseParentHandlers(); method public void info(java.lang.String); method public boolean isLoggable(java.util.logging.Level); + method public void log(java.util.logging.LogRecord); method public void log(java.util.logging.Level, java.lang.String); method public void log(java.util.logging.Level, java.lang.String, java.lang.Object); method public void log(java.util.logging.Level, java.lang.String, java.lang.Object[]); method public void log(java.util.logging.Level, java.lang.String, java.lang.Throwable); - method public void log(java.util.logging.LogRecord); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); method public void logp(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); @@ -56448,9 +57549,9 @@ package java.util.logging { method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object); method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Object[]); method public void logrb(java.util.logging.Level, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable); - method public void removeHandler(java.util.logging.Handler); - method public void setFilter(java.util.logging.Filter); - method public void setLevel(java.util.logging.Level); + method public void removeHandler(java.util.logging.Handler) throws java.lang.SecurityException; + method public void setFilter(java.util.logging.Filter) throws java.lang.SecurityException; + method public void setLevel(java.util.logging.Level) throws java.lang.SecurityException; method public void setParent(java.util.logging.Logger); method public void setUseParentHandlers(boolean); method public void severe(java.lang.String); @@ -56467,24 +57568,24 @@ package java.util.logging { method public abstract void setLoggerLevel(java.lang.String, java.lang.String); } - public final class LoggingPermission extends java.security.BasicPermission implements java.security.Guard java.io.Serializable { - ctor public LoggingPermission(java.lang.String, java.lang.String); + public final class LoggingPermission extends java.security.BasicPermission { + ctor public LoggingPermission(java.lang.String, java.lang.String) throws java.lang.IllegalArgumentException; } public class MemoryHandler extends java.util.logging.Handler { ctor public MemoryHandler(); ctor public MemoryHandler(java.util.logging.Handler, int, java.util.logging.Level); - method public void close(); + method public void close() throws java.lang.SecurityException; method public void flush(); - method public java.util.logging.Level getPushLevel(); + method public synchronized java.util.logging.Level getPushLevel(); method public synchronized void publish(java.util.logging.LogRecord); - method public void push(); - method public void setPushLevel(java.util.logging.Level); + method public synchronized void push(); + method public void setPushLevel(java.util.logging.Level) throws java.lang.SecurityException; } public class SimpleFormatter extends java.util.logging.Formatter { ctor public SimpleFormatter(); - method public java.lang.String format(java.util.logging.LogRecord); + method public synchronized java.lang.String format(java.util.logging.LogRecord); } public class SocketHandler extends java.util.logging.StreamHandler { @@ -56495,10 +57596,10 @@ package java.util.logging { public class StreamHandler extends java.util.logging.Handler { ctor public StreamHandler(); ctor public StreamHandler(java.io.OutputStream, java.util.logging.Formatter); - method public void close(); - method public void flush(); + method public synchronized void close() throws java.lang.SecurityException; + method public synchronized void flush(); method public synchronized void publish(java.util.logging.LogRecord); - method protected void setOutputStream(java.io.OutputStream); + method protected synchronized void setOutputStream(java.io.OutputStream) throws java.lang.SecurityException; } public class XMLFormatter extends java.util.logging.Formatter { @@ -56568,12 +57669,12 @@ package java.util.prefs { } public class InvalidPreferencesFormatException extends java.lang.Exception { + ctor public InvalidPreferencesFormatException(java.lang.Throwable); ctor public InvalidPreferencesFormatException(java.lang.String); ctor public InvalidPreferencesFormatException(java.lang.String, java.lang.Throwable); - ctor public InvalidPreferencesFormatException(java.lang.Throwable); } - public class NodeChangeEvent extends java.util.EventObject implements java.io.Serializable { + public class NodeChangeEvent extends java.util.EventObject { ctor public NodeChangeEvent(java.util.prefs.Preferences, java.util.prefs.Preferences); method public java.util.prefs.Preferences getChild(); method public java.util.prefs.Preferences getParent(); @@ -56584,7 +57685,7 @@ package java.util.prefs { method public abstract void childRemoved(java.util.prefs.NodeChangeEvent); } - public class PreferenceChangeEvent extends java.util.EventObject implements java.io.Serializable { + public class PreferenceChangeEvent extends java.util.EventObject { ctor public PreferenceChangeEvent(java.util.prefs.Preferences, java.lang.String, java.lang.String); method public java.lang.String getKey(); method public java.lang.String getNewValue(); @@ -56729,8 +57830,8 @@ package java.util.zip { method public long getValue(); method public void reset(); method public void update(int); - method public void update(byte[]); method public void update(byte[], int, int); + method public void update(byte[]); } public class CRC32 implements java.util.zip.Checksum { @@ -56738,8 +57839,8 @@ package java.util.zip { method public long getValue(); method public void reset(); method public void update(int); - method public void update(byte[]); method public void update(byte[], int, int); + method public void update(byte[]); } public class CheckedInputStream extends java.io.FilterInputStream { @@ -56755,8 +57856,8 @@ package java.util.zip { public abstract interface Checksum { method public abstract long getValue(); method public abstract void reset(); - method public abstract void update(byte[], int, int); method public abstract void update(int); + method public abstract void update(byte[], int, int); } public class DataFormatException extends java.lang.Exception { @@ -56765,28 +57866,28 @@ package java.util.zip { } public class Deflater { - ctor public Deflater(); - ctor public Deflater(int); ctor public Deflater(int, boolean); + ctor public Deflater(int); + ctor public Deflater(); + method public int deflate(byte[], int, int); method public int deflate(byte[]); - method public synchronized int deflate(byte[], int, int); - method public synchronized int deflate(byte[], int, int, int); - method public synchronized void end(); - method public synchronized void finish(); - method public synchronized boolean finished(); - method public synchronized int getAdler(); - method public synchronized long getBytesRead(); - method public synchronized long getBytesWritten(); - method public synchronized int getTotalIn(); - method public synchronized int getTotalOut(); - method public synchronized boolean needsInput(); - method public synchronized void reset(); + method public int deflate(byte[], int, int, int); + method public void end(); + method public void finish(); + method public boolean finished(); + method public int getAdler(); + method public long getBytesRead(); + method public long getBytesWritten(); + method public int getTotalIn(); + method public int getTotalOut(); + method public boolean needsInput(); + method public void reset(); + method public void setDictionary(byte[], int, int); method public void setDictionary(byte[]); - method public synchronized void setDictionary(byte[], int, int); + method public void setInput(byte[], int, int); method public void setInput(byte[]); - method public synchronized void setInput(byte[], int, int); - method public synchronized void setLevel(int); - method public synchronized void setStrategy(int); + method public void setLevel(int); + method public void setStrategy(int); field public static final int BEST_COMPRESSION = 9; // 0x9 field public static final int BEST_SPEED = 1; // 0x1 field public static final int DEFAULT_COMPRESSION = -1; // 0xffffffff @@ -56809,12 +57910,12 @@ package java.util.zip { } public class DeflaterOutputStream extends java.io.FilterOutputStream { - ctor public DeflaterOutputStream(java.io.OutputStream); - ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int); - ctor public DeflaterOutputStream(java.io.OutputStream, boolean); ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, boolean); - ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater, int, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream, java.util.zip.Deflater); + ctor public DeflaterOutputStream(java.io.OutputStream, boolean); + ctor public DeflaterOutputStream(java.io.OutputStream); method protected void deflate() throws java.io.IOException; method public void finish() throws java.io.IOException; field protected byte[] buf; @@ -56822,49 +57923,50 @@ package java.util.zip { } public class GZIPInputStream extends java.util.zip.InflaterInputStream { - ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException; ctor public GZIPInputStream(java.io.InputStream, int) throws java.io.IOException; + ctor public GZIPInputStream(java.io.InputStream) throws java.io.IOException; field public static final int GZIP_MAGIC = 35615; // 0x8b1f field protected java.util.zip.CRC32 crc; field protected boolean eos; } public class GZIPOutputStream extends java.util.zip.DeflaterOutputStream { - ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException; - ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException; ctor public GZIPOutputStream(java.io.OutputStream, int) throws java.io.IOException; ctor public GZIPOutputStream(java.io.OutputStream, int, boolean) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream) throws java.io.IOException; + ctor public GZIPOutputStream(java.io.OutputStream, boolean) throws java.io.IOException; field protected java.util.zip.CRC32 crc; } public class Inflater { - ctor public Inflater(); ctor public Inflater(boolean); - method public synchronized void end(); - method public synchronized boolean finished(); - method public synchronized int getAdler(); - method public synchronized long getBytesRead(); - method public synchronized long getBytesWritten(); - method public synchronized int getRemaining(); - method public synchronized int getTotalIn(); - method public synchronized int getTotalOut(); + ctor public Inflater(); + method public void end(); + method public boolean finished(); + method public int getAdler(); + method public long getBytesRead(); + method public long getBytesWritten(); + method public int getRemaining(); + method public int getTotalIn(); + method public int getTotalOut(); + method public int inflate(byte[], int, int) throws java.util.zip.DataFormatException; method public int inflate(byte[]) throws java.util.zip.DataFormatException; - method public synchronized int inflate(byte[], int, int) throws java.util.zip.DataFormatException; - method public synchronized boolean needsDictionary(); - method public synchronized boolean needsInput(); - method public synchronized void reset(); - method public synchronized void setDictionary(byte[]); - method public synchronized void setDictionary(byte[], int, int); - method public synchronized void setInput(byte[]); - method public synchronized void setInput(byte[], int, int); + method public boolean needsDictionary(); + method public boolean needsInput(); + method public void reset(); + method public void setDictionary(byte[], int, int); + method public void setDictionary(byte[]); + method public void setInput(byte[], int, int); + method public void setInput(byte[]); } public class InflaterInputStream extends java.io.FilterInputStream { - ctor public InflaterInputStream(java.io.InputStream); - ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater); ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater, int); + ctor public InflaterInputStream(java.io.InputStream, java.util.zip.Inflater); + ctor public InflaterInputStream(java.io.InputStream); method protected void fill() throws java.io.IOException; field protected byte[] buf; + field protected boolean closed; field protected java.util.zip.Inflater inf; field protected int len; } @@ -56952,9 +58054,12 @@ package java.util.zip { } public class ZipFile implements java.io.Closeable { - ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; ctor public ZipFile(java.lang.String) throws java.io.IOException; ctor public ZipFile(java.io.File, int) throws java.io.IOException; + ctor public ZipFile(java.io.File) throws java.io.IOException, java.util.zip.ZipException; + ctor public ZipFile(java.io.File, int, java.nio.charset.Charset) throws java.io.IOException; + ctor public ZipFile(java.lang.String, java.nio.charset.Charset) throws java.io.IOException; + ctor public ZipFile(java.io.File, java.nio.charset.Charset) throws java.io.IOException; method public void close() throws java.io.IOException; method public java.util.Enumeration<? extends java.util.zip.ZipEntry> entries(); method public java.lang.String getComment(); @@ -57008,6 +58113,7 @@ package java.util.zip { public class ZipInputStream extends java.util.zip.InflaterInputStream { ctor public ZipInputStream(java.io.InputStream); + ctor public ZipInputStream(java.io.InputStream, java.nio.charset.Charset); method public void closeEntry() throws java.io.IOException; method protected java.util.zip.ZipEntry createZipEntry(java.lang.String); method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException; @@ -57055,6 +58161,7 @@ package java.util.zip { public class ZipOutputStream extends java.util.zip.DeflaterOutputStream { ctor public ZipOutputStream(java.io.OutputStream); + ctor public ZipOutputStream(java.io.OutputStream, java.nio.charset.Charset); method public void closeEntry() throws java.io.IOException; method public void putNextEntry(java.util.zip.ZipEntry) throws java.io.IOException; method public void setComment(java.lang.String); @@ -57114,8 +58221,8 @@ package javax.crypto { } public class BadPaddingException extends java.security.GeneralSecurityException { - ctor public BadPaddingException(java.lang.String); ctor public BadPaddingException(); + ctor public BadPaddingException(java.lang.String); } public class Cipher { @@ -57226,14 +58333,14 @@ package javax.crypto { method public final int getOutputSize(int) throws java.lang.IllegalStateException; method public final java.security.Provider getProvider(); method public final void init(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; - method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final boolean isCryptoAllowed(java.security.Key) throws javax.crypto.ExemptionMechanismException; } public class ExemptionMechanismException extends java.security.GeneralSecurityException { - ctor public ExemptionMechanismException(java.lang.String); ctor public ExemptionMechanismException(); + ctor public ExemptionMechanismException(java.lang.String); } public abstract class ExemptionMechanismSpi { @@ -57242,13 +58349,13 @@ package javax.crypto { method protected abstract int engineGenExemptionBlob(byte[], int) throws javax.crypto.ExemptionMechanismException, javax.crypto.ShortBufferException; method protected abstract int engineGetOutputSize(int); method protected abstract void engineInit(java.security.Key) throws javax.crypto.ExemptionMechanismException, java.security.InvalidKeyException; - method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method protected abstract void engineInit(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; + method protected abstract void engineInit(java.security.Key, java.security.AlgorithmParameters) throws javax.crypto.ExemptionMechanismException, java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; } public class IllegalBlockSizeException extends java.security.GeneralSecurityException { - ctor public IllegalBlockSizeException(java.lang.String); ctor public IllegalBlockSizeException(); + ctor public IllegalBlockSizeException(java.lang.String); } public class KeyAgreement { @@ -57286,19 +58393,19 @@ package javax.crypto { method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; method public static final javax.crypto.KeyGenerator getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final java.security.Provider getProvider(); + method public final void init(java.security.SecureRandom); method public final void init(java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException; method public final void init(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; method public final void init(int); method public final void init(int, java.security.SecureRandom); - method public final void init(java.security.SecureRandom); } public abstract class KeyGeneratorSpi { ctor public KeyGeneratorSpi(); method protected abstract javax.crypto.SecretKey engineGenerateKey(); + method protected abstract void engineInit(java.security.SecureRandom); method protected abstract void engineInit(java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom) throws java.security.InvalidAlgorithmParameterException; method protected abstract void engineInit(int, java.security.SecureRandom); - method protected abstract void engineInit(java.security.SecureRandom); } public class Mac implements java.lang.Cloneable { @@ -57313,12 +58420,12 @@ package javax.crypto { method public static final javax.crypto.Mac getInstance(java.lang.String, java.security.Provider) throws java.security.NoSuchAlgorithmException; method public final int getMacLength(); method public final java.security.Provider getProvider(); - method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void init(java.security.Key) throws java.security.InvalidKeyException; + method public final void init(java.security.Key, java.security.spec.AlgorithmParameterSpec) throws java.security.InvalidAlgorithmParameterException, java.security.InvalidKeyException; method public final void reset(); method public final void update(byte) throws java.lang.IllegalStateException; - method public final void update(byte[], int, int) throws java.lang.IllegalStateException; method public final void update(byte[]) throws java.lang.IllegalStateException; + method public final void update(byte[], int, int) throws java.lang.IllegalStateException; method public final void update(java.nio.ByteBuffer); } @@ -57335,8 +58442,8 @@ package javax.crypto { } public class NoSuchPaddingException extends java.security.GeneralSecurityException { - ctor public NoSuchPaddingException(java.lang.String); ctor public NoSuchPaddingException(); + ctor public NoSuchPaddingException(java.lang.String); } public class NullCipher extends javax.crypto.Cipher { @@ -57377,8 +58484,8 @@ package javax.crypto { } public class ShortBufferException extends java.security.GeneralSecurityException { - ctor public ShortBufferException(java.lang.String); ctor public ShortBufferException(); + ctor public ShortBufferException(java.lang.String); } } @@ -57523,7 +58630,7 @@ package javax.crypto.spec { method public int getWordSize(); } - public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey java.io.Serializable { + public class SecretKeySpec implements java.security.spec.KeySpec javax.crypto.SecretKey { ctor public SecretKeySpec(byte[], java.lang.String); ctor public SecretKeySpec(byte[], int, int, java.lang.String); method public java.lang.String getAlgorithm(); @@ -58418,7 +59525,7 @@ package javax.net { method public abstract java.net.ServerSocket createServerSocket(int) throws java.io.IOException; method public abstract java.net.ServerSocket createServerSocket(int, int) throws java.io.IOException; method public abstract java.net.ServerSocket createServerSocket(int, int, java.net.InetAddress) throws java.io.IOException; - method public static synchronized javax.net.ServerSocketFactory getDefault(); + method public static javax.net.ServerSocketFactory getDefault(); } public abstract class SocketFactory { @@ -58428,7 +59535,7 @@ package javax.net { method public abstract java.net.Socket createSocket(java.lang.String, int, java.net.InetAddress, int) throws java.io.IOException, java.net.UnknownHostException; method public abstract java.net.Socket createSocket(java.net.InetAddress, int) throws java.io.IOException; method public abstract java.net.Socket createSocket(java.net.InetAddress, int, java.net.InetAddress, int) throws java.io.IOException; - method public static synchronized javax.net.SocketFactory getDefault(); + method public static javax.net.SocketFactory getDefault(); } } @@ -58440,6 +59547,12 @@ package javax.net.ssl { method public java.security.cert.CertPathParameters getParameters(); } + public abstract class ExtendedSSLSession implements javax.net.ssl.SSLSession { + ctor public ExtendedSSLSession(); + method public abstract java.lang.String[] getLocalSupportedSignatureAlgorithms(); + method public abstract java.lang.String[] getPeerSupportedSignatureAlgorithms(); + } + public class HandshakeCompletedEvent extends java.util.EventObject { ctor public HandshakeCompletedEvent(javax.net.ssl.SSLSocket, javax.net.ssl.SSLSession); method public java.lang.String getCipherSuite(); @@ -58515,7 +59628,7 @@ package javax.net.ssl { method public final javax.net.ssl.SSLEngine createSSLEngine(); method public final javax.net.ssl.SSLEngine createSSLEngine(java.lang.String, int); method public final javax.net.ssl.SSLSessionContext getClientSessionContext(); - method public static javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException; + method public static synchronized javax.net.ssl.SSLContext getDefault() throws java.security.NoSuchAlgorithmException; method public final javax.net.ssl.SSLParameters getDefaultSSLParameters(); method public static javax.net.ssl.SSLContext getInstance(java.lang.String) throws java.security.NoSuchAlgorithmException; method public static javax.net.ssl.SSLContext getInstance(java.lang.String, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; @@ -58527,13 +59640,13 @@ package javax.net.ssl { method public final javax.net.ssl.SSLSocketFactory getSocketFactory(); method public final javax.net.ssl.SSLParameters getSupportedSSLParameters(); method public final void init(javax.net.ssl.KeyManager[], javax.net.ssl.TrustManager[], java.security.SecureRandom) throws java.security.KeyManagementException; - method public static void setDefault(javax.net.ssl.SSLContext); + method public static synchronized void setDefault(javax.net.ssl.SSLContext); } public abstract class SSLContextSpi { ctor public SSLContextSpi(); - method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int); method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(); + method protected abstract javax.net.ssl.SSLEngine engineCreateSSLEngine(java.lang.String, int); method protected abstract javax.net.ssl.SSLSessionContext engineGetClientSessionContext(); method protected javax.net.ssl.SSLParameters engineGetDefaultSSLParameters(); method protected abstract javax.net.ssl.SSLSessionContext engineGetServerSessionContext(); @@ -58553,6 +59666,7 @@ package javax.net.ssl { method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus(); method public abstract boolean getNeedClientAuth(); method public java.lang.String getPeerHost(); @@ -58572,12 +59686,12 @@ package javax.net.ssl { method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); method public abstract void setWantClientAuth(boolean); - method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[]) throws javax.net.ssl.SSLException; - method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; - method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public abstract javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer, java.nio.ByteBuffer[], int, int) throws javax.net.ssl.SSLException; method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], java.nio.ByteBuffer) throws javax.net.ssl.SSLException; + method public abstract javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[], int, int, java.nio.ByteBuffer) throws javax.net.ssl.SSLException; } public class SSLEngineResult { @@ -58625,11 +59739,15 @@ package javax.net.ssl { ctor public SSLParameters(); ctor public SSLParameters(java.lang.String[]); ctor public SSLParameters(java.lang.String[], java.lang.String[]); + method public java.security.AlgorithmConstraints getAlgorithmConstraints(); method public java.lang.String[] getCipherSuites(); + method public java.lang.String getEndpointIdentificationAlgorithm(); method public boolean getNeedClientAuth(); method public java.lang.String[] getProtocols(); method public boolean getWantClientAuth(); + method public void setAlgorithmConstraints(java.security.AlgorithmConstraints); method public void setCipherSuites(java.lang.String[]); + method public void setEndpointIdentificationAlgorithm(java.lang.String); method public void setNeedClientAuth(boolean); method public void setProtocols(java.lang.String[]); method public void setWantClientAuth(boolean); @@ -58657,6 +59775,7 @@ package javax.net.ssl { method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); method public abstract boolean getNeedClientAuth(); + method public javax.net.ssl.SSLParameters getSSLParameters(); method public abstract java.lang.String[] getSupportedCipherSuites(); method public abstract java.lang.String[] getSupportedProtocols(); method public abstract boolean getUseClientMode(); @@ -58665,6 +59784,7 @@ package javax.net.ssl { method public abstract void setEnabledCipherSuites(java.lang.String[]); method public abstract void setEnabledProtocols(java.lang.String[]); method public abstract void setNeedClientAuth(boolean); + method public void setSSLParameters(javax.net.ssl.SSLParameters); method public abstract void setUseClientMode(boolean); method public abstract void setWantClientAuth(boolean); } @@ -58730,6 +59850,7 @@ package javax.net.ssl { method public abstract boolean getEnableSessionCreation(); method public abstract java.lang.String[] getEnabledCipherSuites(); method public abstract java.lang.String[] getEnabledProtocols(); + method public javax.net.ssl.SSLSession getHandshakeSession(); method public abstract boolean getNeedClientAuth(); method public javax.net.ssl.SSLParameters getSSLParameters(); method public abstract javax.net.ssl.SSLSession getSession(); @@ -58785,6 +59906,14 @@ package javax.net.ssl { method public java.lang.String chooseEngineServerAlias(java.lang.String, java.security.Principal[], javax.net.ssl.SSLEngine); } + public abstract class X509ExtendedTrustManager implements javax.net.ssl.X509TrustManager { + ctor public X509ExtendedTrustManager(); + method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException; + method public abstract void checkClientTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException; + method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.net.Socket) throws java.security.cert.CertificateException; + method public abstract void checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, javax.net.ssl.SSLEngine) throws java.security.cert.CertificateException; + } + public abstract interface X509KeyManager implements javax.net.ssl.KeyManager { method public abstract java.lang.String chooseClientAlias(java.lang.String[], java.security.Principal[], java.net.Socket); method public abstract java.lang.String chooseServerAlias(java.lang.String, java.security.Principal[], java.net.Socket); @@ -58819,11 +59948,21 @@ package javax.security.auth { method public abstract boolean isDestroyed(); } + public abstract deprecated class Policy { + ctor protected Policy(); + method public abstract java.security.PermissionCollection getPermissions(javax.security.auth.Subject, java.security.CodeSource); + method public static javax.security.auth.Policy getPolicy(); + method public abstract void refresh(); + method public static void setPolicy(javax.security.auth.Policy); + } + public final class PrivateCredentialPermission extends java.security.Permission { ctor public PrivateCredentialPermission(java.lang.String, java.lang.String); + method public boolean equals(java.lang.Object); method public java.lang.String getActions(); method public java.lang.String getCredentialClass(); method public java.lang.String[][] getPrincipals(); + method public int hashCode(); method public boolean implies(java.security.Permission); } @@ -58881,6 +60020,43 @@ package javax.security.auth.callback { package javax.security.auth.login { + public class AppConfigurationEntry { + ctor public AppConfigurationEntry(java.lang.String, javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag, java.util.Map<java.lang.String, ?>); + method public javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag getControlFlag(); + method public java.lang.String getLoginModuleName(); + method public java.util.Map<java.lang.String, ?> getOptions(); + } + + public static class AppConfigurationEntry.LoginModuleControlFlag { + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag OPTIONAL; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUIRED; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag REQUISITE; + field public static final javax.security.auth.login.AppConfigurationEntry.LoginModuleControlFlag SUFFICIENT; + } + + public abstract class Configuration { + ctor protected Configuration(); + method public abstract javax.security.auth.login.AppConfigurationEntry[] getAppConfigurationEntry(java.lang.String); + method public static javax.security.auth.login.Configuration getConfiguration(); + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters) throws java.security.NoSuchAlgorithmException; + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.lang.String) throws java.security.NoSuchAlgorithmException, java.security.NoSuchProviderException; + method public static javax.security.auth.login.Configuration getInstance(java.lang.String, javax.security.auth.login.Configuration.Parameters, java.security.Provider) throws java.security.NoSuchAlgorithmException; + method public javax.security.auth.login.Configuration.Parameters getParameters(); + method public java.security.Provider getProvider(); + method public java.lang.String getType(); + method public void refresh(); + method public static void setConfiguration(javax.security.auth.login.Configuration); + } + + public static abstract interface Configuration.Parameters { + } + + public abstract class ConfigurationSpi { + ctor public ConfigurationSpi(); + method protected abstract javax.security.auth.login.AppConfigurationEntry[] engineGetAppConfigurationEntry(java.lang.String); + method protected void engineRefresh(); + } + public class LoginException extends java.security.GeneralSecurityException { ctor public LoginException(); ctor public LoginException(java.lang.String); @@ -58891,10 +60067,10 @@ package javax.security.auth.login { package javax.security.auth.x500 { public final class X500Principal implements java.security.Principal java.io.Serializable { - ctor public X500Principal(byte[]); - ctor public X500Principal(java.io.InputStream); ctor public X500Principal(java.lang.String); ctor public X500Principal(java.lang.String, java.util.Map<java.lang.String, java.lang.String>); + ctor public X500Principal(byte[]); + ctor public X500Principal(java.io.InputStream); method public byte[] getEncoded(); method public java.lang.String getName(); method public java.lang.String getName(java.lang.String); @@ -58918,28 +60094,28 @@ package javax.security.cert { } public class CertificateEncodingException extends javax.security.cert.CertificateException { - ctor public CertificateEncodingException(java.lang.String); ctor public CertificateEncodingException(); + ctor public CertificateEncodingException(java.lang.String); } public class CertificateException extends java.lang.Exception { - ctor public CertificateException(java.lang.String); ctor public CertificateException(); + ctor public CertificateException(java.lang.String); } public class CertificateExpiredException extends javax.security.cert.CertificateException { - ctor public CertificateExpiredException(java.lang.String); ctor public CertificateExpiredException(); + ctor public CertificateExpiredException(java.lang.String); } public class CertificateNotYetValidException extends javax.security.cert.CertificateException { - ctor public CertificateNotYetValidException(java.lang.String); ctor public CertificateNotYetValidException(); + ctor public CertificateNotYetValidException(java.lang.String); } public class CertificateParsingException extends javax.security.cert.CertificateException { - ctor public CertificateParsingException(java.lang.String); ctor public CertificateParsingException(); + ctor public CertificateParsingException(java.lang.String); } public abstract class X509Certificate extends javax.security.cert.Certificate { @@ -58966,11 +60142,12 @@ package javax.sql { public abstract interface CommonDataSource { method public abstract java.io.PrintWriter getLogWriter() throws java.sql.SQLException; method public abstract int getLoginTimeout() throws java.sql.SQLException; + method public abstract java.util.logging.Logger getParentLogger() throws java.sql.SQLFeatureNotSupportedException; method public abstract void setLogWriter(java.io.PrintWriter) throws java.sql.SQLException; method public abstract void setLoginTimeout(int) throws java.sql.SQLException; } - public class ConnectionEvent extends java.util.EventObject implements java.io.Serializable { + public class ConnectionEvent extends java.util.EventObject { ctor public ConnectionEvent(javax.sql.PooledConnection); ctor public ConnectionEvent(javax.sql.PooledConnection, java.sql.SQLException); method public java.sql.SQLException getSQLException(); @@ -59019,21 +60196,21 @@ package javax.sql { method public abstract void removeRowSetListener(javax.sql.RowSetListener); method public abstract void setArray(int, java.sql.Array) throws java.sql.SQLException; method public abstract void setAsciiStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setAsciiStream(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setAsciiStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; - method public abstract void setAsciiStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBigDecimal(int, java.math.BigDecimal) throws java.sql.SQLException; method public abstract void setBigDecimal(java.lang.String, java.math.BigDecimal) throws java.sql.SQLException; method public abstract void setBinaryStream(int, java.io.InputStream, int) throws java.sql.SQLException; + method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBinaryStream(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBinaryStream(java.lang.String, java.io.InputStream) throws java.sql.SQLException; - method public abstract void setBinaryStream(java.lang.String, java.io.InputStream, int) throws java.sql.SQLException; method public abstract void setBlob(int, java.sql.Blob) throws java.sql.SQLException; - method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBlob(int, java.io.InputStream, long) throws java.sql.SQLException; - method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; + method public abstract void setBlob(int, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBlob(java.lang.String, java.io.InputStream, long) throws java.sql.SQLException; method public abstract void setBlob(java.lang.String, java.sql.Blob) throws java.sql.SQLException; + method public abstract void setBlob(java.lang.String, java.io.InputStream) throws java.sql.SQLException; method public abstract void setBoolean(int, boolean) throws java.sql.SQLException; method public abstract void setBoolean(java.lang.String, boolean) throws java.sql.SQLException; method public abstract void setByte(int, byte) throws java.sql.SQLException; @@ -59041,15 +60218,15 @@ package javax.sql { method public abstract void setBytes(int, byte[]) throws java.sql.SQLException; method public abstract void setBytes(java.lang.String, byte[]) throws java.sql.SQLException; method public abstract void setCharacterStream(int, java.io.Reader, int) throws java.sql.SQLException; + method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; method public abstract void setCharacterStream(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; - method public abstract void setCharacterStream(java.lang.String, java.io.Reader, int) throws java.sql.SQLException; method public abstract void setClob(int, java.sql.Clob) throws java.sql.SQLException; - method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setClob(int, java.io.Reader) throws java.sql.SQLException; + method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; method public abstract void setClob(java.lang.String, java.sql.Clob) throws java.sql.SQLException; method public abstract void setClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; - method public abstract void setClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; method public abstract void setCommand(java.lang.String) throws java.sql.SQLException; method public abstract void setConcurrency(int) throws java.sql.SQLException; method public abstract void setDataSourceName(java.lang.String) throws java.sql.SQLException; @@ -59070,26 +60247,26 @@ package javax.sql { method public abstract void setMaxRows(int) throws java.sql.SQLException; method public abstract void setNCharacterStream(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setNCharacterStream(int, java.io.Reader, long) throws java.sql.SQLException; - method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNCharacterStream(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; - method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; - method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; - method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNCharacterStream(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNClob(java.lang.String, java.sql.NClob) throws java.sql.SQLException; - method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; method public abstract void setNClob(java.lang.String, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(java.lang.String, java.io.Reader) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader, long) throws java.sql.SQLException; + method public abstract void setNClob(int, java.sql.NClob) throws java.sql.SQLException; + method public abstract void setNClob(int, java.io.Reader) throws java.sql.SQLException; method public abstract void setNString(int, java.lang.String) throws java.sql.SQLException; method public abstract void setNString(java.lang.String, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(int, int) throws java.sql.SQLException; - method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int) throws java.sql.SQLException; + method public abstract void setNull(int, int, java.lang.String) throws java.sql.SQLException; method public abstract void setNull(java.lang.String, int, java.lang.String) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(int, java.lang.Object, int, int) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; - method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; method public abstract void setObject(java.lang.String, java.lang.Object, int, int) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object, int) throws java.sql.SQLException; + method public abstract void setObject(java.lang.String, java.lang.Object) throws java.sql.SQLException; + method public abstract void setObject(int, java.lang.Object) throws java.sql.SQLException; method public abstract void setPassword(java.lang.String) throws java.sql.SQLException; method public abstract void setQueryTimeout(int) throws java.sql.SQLException; method public abstract void setReadOnly(boolean) throws java.sql.SQLException; @@ -59107,8 +60284,8 @@ package javax.sql { method public abstract void setTime(java.lang.String, java.sql.Time) throws java.sql.SQLException; method public abstract void setTime(java.lang.String, java.sql.Time, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(int, java.sql.Timestamp) throws java.sql.SQLException; - method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp) throws java.sql.SQLException; + method public abstract void setTimestamp(int, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTimestamp(java.lang.String, java.sql.Timestamp, java.util.Calendar) throws java.sql.SQLException; method public abstract void setTransactionIsolation(int) throws java.sql.SQLException; method public abstract void setType(int) throws java.sql.SQLException; @@ -59118,7 +60295,7 @@ package javax.sql { method public abstract void setUsername(java.lang.String) throws java.sql.SQLException; } - public class RowSetEvent extends java.util.EventObject implements java.io.Serializable { + public class RowSetEvent extends java.util.EventObject { ctor public RowSetEvent(javax.sql.RowSet); } @@ -59165,8 +60342,8 @@ package javax.sql { } public class StatementEvent extends java.util.EventObject { - ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException); ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement); + ctor public StatementEvent(javax.sql.PooledConnection, java.sql.PreparedStatement, java.sql.SQLException); method public java.sql.SQLException getSQLException(); method public java.sql.PreparedStatement getStatement(); } diff --git a/core/java/android/accounts/AbstractAccountAuthenticator.java b/core/java/android/accounts/AbstractAccountAuthenticator.java index 185ceb430e13..041f591e0ba8 100644 --- a/core/java/android/accounts/AbstractAccountAuthenticator.java +++ b/core/java/android/accounts/AbstractAccountAuthenticator.java @@ -119,21 +119,26 @@ public abstract class AbstractAccountAuthenticator { /** * Bundle key used for the {@link String} account type in session bundle. * This is used in the default implementation of - * {@link #startAddAccountSession}. TODO: and startUpdateCredentialsSession. + * {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}. */ private static final String KEY_AUTH_TOKEN_TYPE = "android.accounts.KEY_AUTH_TOKEN_TYPE"; /** * Bundle key used for the {@link String} array of required features in * session bundle. This is used in the default implementation of - * {@link #startAddAccountSession}. TODO: and startUpdateCredentialsSession. + * {@link #startAddAccountSession} and {@link startUpdateCredentialsSession}. */ private static final String KEY_REQUIRED_FEATURES = "android.accounts.AbstractAccountAuthenticator.KEY_REQUIRED_FEATURES"; /** * Bundle key used for the {@link Bundle} options in session bundle. This is - * used in default implementation of {@link #startAddAccountSession}. TODO: - * and startUpdateCredentialsSession. + * used in default implementation of {@link #startAddAccountSession} and + * {@link startUpdateCredentialsSession}. */ private static final String KEY_OPTIONS = "android.accounts.AbstractAccountAuthenticator.KEY_OPTIONS"; + /** + * Bundle key used for the {@link Account} account in session bundle. This is used + * used in default implementation of {@link startUpdateCredentialsSession}. + */ + private static final String KEY_ACCOUNT = "android.accounts.AbstractAccountAuthenticator.KEY_ACCOUNT"; private final Context mContext; @@ -385,6 +390,43 @@ public abstract class AbstractAccountAuthenticator { handleException(response, "startAddAccountSession", accountType, e); } } + + @Override + public void startUpdateCredentialsSession( + IAccountAuthenticatorResponse response, + Account account, + String authTokenType, + Bundle loginOptions) throws RemoteException { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, "startUpdateCredentialsSession: " + + account + + ", authTokenType " + + authTokenType); + } + checkBinderPermission(); + try { + final Bundle result = AbstractAccountAuthenticator.this + .startUpdateCredentialsSession( + new AccountAuthenticatorResponse(response), + account, + authTokenType, + loginOptions); + if (Log.isLoggable(TAG, Log.VERBOSE)) { + // Result may be null. + if (result != null) { + result.keySet(); // force it to be unparcelled + } + Log.v(TAG, "startUpdateCredentialsSession: result " + + AccountManager.sanitizeResult(result)); + } + if (result != null) { + response.onResult(result); + } + } catch (Exception e) { + handleException(response, "startUpdateCredentialsSession", + account.toString() + "," + authTokenType, e); + } + } } private void handleException(IAccountAuthenticatorResponse response, String method, @@ -700,4 +742,49 @@ public abstract class AbstractAccountAuthenticator { }).start(); return null; } + + /** + * Asks user to re-authenticate for an account but defers updating the locally stored + * credentials. + * + * @param response to send the result back to the AccountManager, will never + * be null + * @param account the account whose credentials are to be updated, will + * never be null + * @param authTokenType the type of auth token to retrieve after updating + * the credentials, may be null (TODO) + * @param options a Bundle of authenticator-specific options, may be null + * @return a Bundle result or null if the result is to be returned via the + * response. The result will contain either: + * <ul> + * <li>{@link AccountManager#KEY_INTENT}, or + * <li>{@link AccountManager#KEY_ACCOUNT_SESSION_BUNDLE} for updating the + * locally stored credentials later, and if account is + * re-authenticated, {@link AccountManager#KEY_PASSWORD} and + * {@link AccountManager#KEY_ACCOUNT_STATUS_TOKEN} for checking the + * status of the account later, or + * <li>{@link AccountManager#KEY_ERROR_CODE} and + * {@link AccountManager#KEY_ERROR_MESSAGE} to indicate an error + * </ul> + * @throws NetworkErrorException if the authenticator could not honor the + * request due to a network error + */ + public Bundle startUpdateCredentialsSession(final AccountAuthenticatorResponse response, + final Account account, final String authTokenType, final Bundle options) + throws NetworkErrorException { + new Thread(new Runnable() { + @Override + public void run() { + Bundle sessionBundle = new Bundle(); + sessionBundle.putString(KEY_AUTH_TOKEN_TYPE, authTokenType); + sessionBundle.putParcelable(KEY_ACCOUNT, account); + sessionBundle.putBundle(KEY_OPTIONS, options); + Bundle result = new Bundle(); + result.putBundle(AccountManager.KEY_ACCOUNT_SESSION_BUNDLE, sessionBundle); + response.onResult(result); + } + + }).start(); + return null; + } } diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java index 42e5e2a5fb6e..5557905e4f47 100644 --- a/core/java/android/accounts/AccountManager.java +++ b/core/java/android/accounts/AccountManager.java @@ -2666,9 +2666,14 @@ public class AccountManager { * trouble * </ul> */ - public AccountManagerFuture<Bundle> startAddAccountSession(final String accountType, - final String authTokenType, final String[] requiredFeatures, final Bundle options, - final Activity activity, AccountManagerCallback<Bundle> callback, Handler handler) { + public AccountManagerFuture<Bundle> startAddAccountSession( + final String accountType, + final String authTokenType, + final String[] requiredFeatures, + final Bundle options, + final Activity activity, + AccountManagerCallback<Bundle> callback, + Handler handler) { if (accountType == null) throw new IllegalArgumentException("accountType is null"); final Bundle optionsIn = new Bundle(); if (options != null) { @@ -2679,8 +2684,89 @@ public class AccountManager { return new AmsTask(activity, handler, callback) { @Override public void doWork() throws RemoteException { - mService.startAddAccountSession(mResponse, accountType, authTokenType, - requiredFeatures, activity != null, optionsIn); + mService.startAddAccountSession( + mResponse, + accountType, + authTokenType, + requiredFeatures, + activity != null, + optionsIn); + } + }.start(); + } + + /** + * Asks the user to enter a new password for an account but not updating the + * saved credentials for the account until finishSession is + * called. + * <p> + * This method may be called from any thread, but the returned + * {@link AccountManagerFuture} must not be used on the main thread. + * <p> + * <b>NOTE:</b> The saved credentials for the account alone will not be + * updated by calling this API alone . + * + * @param account The account to update credentials for + * @param authTokenType The credentials entered must allow an auth token of + * this type to be created (but no actual auth token is + * returned); may be null + * @param options Authenticator-specific options for the request; may be + * null or empty + * @param activity The {@link Activity} context to use for launching a new + * authenticator-defined sub-Activity to prompt the user to enter + * a password; used only to call startActivity(); if null, the + * prompt will not be launched directly, but the necessary + * {@link Intent} will be returned to the caller instead + * @param callback Callback to invoke when the request completes, null for + * no callback + * @param handler {@link Handler} identifying the callback thread, null for + * the main thread + * @return An {@link AccountManagerFuture} which resolves to a Bundle with + * these fields if an activity was supplied and user was + * successfully re-authenticated to the account (TODO: default impl + * only returns escorw?): + * <ul> + * <li>{@link #KEY_ACCOUNT_SESSION_BUNDLE} - encrypted Bundle for + * updating the local credentials on device later. + * <li>{@link #KEY_PASSWORD} - optional, the password or password hash of the + * account + * <li>{@link #KEY_ACCOUNT_STATUS_TOKEN} - optional, token to check status of + * the account + * </ul> + * If no activity was specified, the returned Bundle contains + * {@link #KEY_INTENT} with the {@link Intent} needed to launch the + * password prompt. If an error occurred, + * {@link AccountManagerFuture#getResult()} throws: + * <ul> + * <li>{@link AuthenticatorException} if the authenticator failed to + * respond + * <li>{@link OperationCanceledException} if the operation was + * canceled for any reason, including the user canceling the + * password prompt + * <li>{@link IOException} if the authenticator experienced an I/O + * problem verifying the password, usually because of network + * trouble + * </ul> + */ + public AccountManagerFuture<Bundle> startUpdateCredentialsSession( + final Account account, + final String authTokenType, + final Bundle options, + final Activity activity, + final AccountManagerCallback<Bundle> callback, + final Handler handler) { + if (account == null) { + throw new IllegalArgumentException("account is null"); + } + return new AmsTask(activity, handler, callback) { + @Override + public void doWork() throws RemoteException { + mService.startUpdateCredentialsSession( + mResponse, + account, + authTokenType, + activity != null, + options); } }.start(); } diff --git a/core/java/android/accounts/IAccountAuthenticator.aidl b/core/java/android/accounts/IAccountAuthenticator.aidl index b326070ddfc7..921fb19ddb63 100644 --- a/core/java/android/accounts/IAccountAuthenticator.aidl +++ b/core/java/android/accounts/IAccountAuthenticator.aidl @@ -90,4 +90,10 @@ oneway interface IAccountAuthenticator { */ void startAddAccountSession(in IAccountAuthenticatorResponse response, String accountType, String authTokenType, in String[] requiredFeatures, in Bundle options); + + /** + * Prompts the user for a new password but does not write it to the IAccountManager. + */ + void startUpdateCredentialsSession(in IAccountAuthenticatorResponse response, in Account account, + String authTokenType, in Bundle options); } diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl index 5de311ea6ec7..8489e47c0ba4 100644 --- a/core/java/android/accounts/IAccountManager.aidl +++ b/core/java/android/accounts/IAccountManager.aidl @@ -88,4 +88,7 @@ interface IAccountManager { String authTokenType, in String[] requiredFeatures, boolean expectActivityLaunch, in Bundle options); + /* Update credentials in two steps. */ + void startUpdateCredentialsSession(in IAccountManagerResponse response, in Account account, + String authTokenType, boolean expectActivityLaunch, in Bundle options); } diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl index 84ddd9f0cf7f..c1d5b196563c 100644 --- a/core/java/android/app/INotificationManager.aidl +++ b/core/java/android/app/INotificationManager.aidl @@ -47,11 +47,11 @@ interface INotificationManager void setNotificationsEnabledForPackage(String pkg, int uid, boolean enabled); boolean areNotificationsEnabledForPackage(String pkg, int uid); - void setPackagePriority(String pkg, int uid, int priority); - int getPackagePriority(String pkg, int uid); - - void setPackageVisibilityOverride(String pkg, int uid, int visibility); - int getPackageVisibilityOverride(String pkg, int uid); + ParceledListSlice getTopics(String pkg, int uid); + void setTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic, int visibility); + int getTopicVisibilityOverride(String pkg, int uid, in Notification.Topic topic); + void setTopicPriority(String pkg, int uid, in Notification.Topic topic, int priority); + int getTopicPriority(String pkg, int uid, in Notification.Topic topic); // TODO: Remove this when callers have been migrated to the equivalent // INotificationListener method. diff --git a/core/java/android/app/Notification.aidl b/core/java/android/app/Notification.aidl index 9d8129ca601a..3f1d1130b936 100644 --- a/core/java/android/app/Notification.aidl +++ b/core/java/android/app/Notification.aidl @@ -17,3 +17,4 @@ package android.app; parcelable Notification; +parcelable Notification.Topic; diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 4e6548b7bb17..848b33ffc99f 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -21,6 +21,7 @@ import android.annotation.DrawableRes; import android.annotation.IntDef; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -1433,6 +1434,9 @@ public class Notification implements Parcelable }; } + @SystemApi + public static final String TOPIC_DEFAULT = "system_default_topic"; + private Topic topic; public Topic getTopic() { @@ -3419,6 +3423,10 @@ public class Notification implements Parcelable mN.extras.putStringArray(EXTRA_PEOPLE, mPersonList.toArray(new String[mPersonList.size()])); } + if (mN.topic == null) { + mN.topic = new Topic(TOPIC_DEFAULT, mContext.getString( + R.string.default_notification_topic_label)); + } return mN; } diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 6f3af52cdcb8..c680d5433a07 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -2863,6 +2863,24 @@ public class DevicePolicyManager { } /** + * Returns the device owner user id. Note this method will still return the device owner user id + * even if it's running on a different user. If there is no device owner this method return + * {@link UserHandle.USER_NULL}. + * + * @hide + */ + public int getDeviceOwnerUserId() { + if (mService != null) { + try { + return mService.getDeviceOwnerUserId(); + } catch (RemoteException re) { + Log.w(TAG, "Failed to get device owner user id"); + } + } + return UserHandle.USER_NULL; + } + + /** * @hide * @deprecated Do not use * @removed @@ -3632,6 +3650,48 @@ public class DevicePolicyManager { } /** + * Called by a device owner to get the list of apps to keep around as APKs even if no user has + * currently installed it. + * + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * + * @return List of package names to keep cached. + * @hide + */ + public List<String> getKeepUninstalledPackages(@NonNull ComponentName admin) { + if (mService != null) { + try { + return mService.getKeepUninstalledPackages(admin); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + return null; + } + + /** + * Called by a device owner to set a list of apps to keep around as APKs even if no user has + * currently installed it. + * + * <p>Please note that setting this policy does not imply that specified apps will be + * automatically pre-cached.</p> + * + * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @param packageNames List of package names to keep cached. + * @hide + */ + public void setKeepUninstalledPackages(@NonNull ComponentName admin, + @NonNull List<String> packageNames) { + if (mService != null) { + try { + mService.setKeepUninstalledPackages(admin, packageNames); + } catch (RemoteException e) { + Log.w(TAG, "Failed talking with device policy service", e); + } + } + } + + /** * Called by a device owner to create a user with the specified name. The UserHandle returned * by this method should not be persisted as user handles are recycled as users are removed and * created. If you need to persist an identifier for this user, use @@ -3804,12 +3864,18 @@ public class DevicePolicyManager { * {@link UserManager#getUserRestrictions()}. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. + * @throws SecurityException if the {@code admin} is not an active admin. */ public Bundle getUserRestrictions(@NonNull ComponentName admin) { + return getUserRestrictions(admin, myUserId()); + } + + /** @hide per-user version */ + public Bundle getUserRestrictions(@NonNull ComponentName admin, int userHandle) { Bundle ret = null; if (mService != null) { try { - ret = mService.getUserRestrictions(admin); + ret = mService.getUserRestrictions(admin, userHandle); } catch (RemoteException e) { Log.w(TAG, "Failed talking with device policy service", e); } diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 7601cf2bb2e0..e14c43626818 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -116,6 +116,7 @@ interface IDevicePolicyManager { boolean setDeviceOwner(in ComponentName who, String ownerName, int userId); ComponentName getDeviceOwner(); String getDeviceOwnerName(); + int getDeviceOwnerUserId(); void clearDeviceOwner(String packageName); boolean setProfileOwner(in ComponentName who, String ownerName, int userHandle); @@ -149,7 +150,7 @@ interface IDevicePolicyManager { ComponentName getRestrictionsProvider(int userHandle); void setUserRestriction(in ComponentName who, in String key, boolean enable); - Bundle getUserRestrictions(in ComponentName who); + Bundle getUserRestrictions(in ComponentName who, int userId); void addCrossProfileIntentFilter(in ComponentName admin, in IntentFilter filter, int flags); void clearCrossProfileIntentFilters(in ComponentName admin); @@ -231,4 +232,6 @@ interface IDevicePolicyManager { String permission, int grantState); int getPermissionGrantState(in ComponentName admin, String packageName, String permission); boolean isProvisioningAllowed(String action); + void setKeepUninstalledPackages(in ComponentName admin,in List<String> packageList); + List<String> getKeepUninstalledPackages(in ComponentName admin); } diff --git a/core/java/android/content/pm/ManifestDigest.java b/core/java/android/content/pm/ManifestDigest.java index 1fbef7a5d3c7..e7dc76488903 100644 --- a/core/java/android/content/pm/ManifestDigest.java +++ b/core/java/android/content/pm/ManifestDigest.java @@ -16,6 +16,8 @@ package android.content.pm; +import com.android.internal.util.HexDump; + import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; @@ -118,7 +120,7 @@ public class ManifestDigest implements Parcelable { final int N = mDigest.length; for (int i = 0; i < N; i++) { final byte b = mDigest[i]; - IntegralToString.appendByteAsHex(sb, b, false); + HexDump.appendByteAsHex(sb, b, false); sb.append(','); } sb.append('}'); @@ -142,4 +144,4 @@ public class ManifestDigest implements Parcelable { } }; -}
\ No newline at end of file +} diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index bf70d6ca9dfe..905ac5e093d8 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -16,7 +16,7 @@ package android.content.pm; -import android.annotation.NonNull; +import java.util.List; /** * Package manager local system service interface. @@ -115,4 +115,11 @@ public abstract class PackageManagerInternal { */ public abstract void grantDefaultPermissionsToDefaultSimCallManager(String packageName, int userId); + + /** + * Sets a list of apps to keep in PM's internal data structures and as APKs even if no user has + * currently installed it. The apps are not preloaded. + * @param packageList List of package names to keep cached. + */ + public abstract void setKeepUninstalledPackages(List<String> packageList); } diff --git a/core/java/android/net/http/SslCertificate.java b/core/java/android/net/http/SslCertificate.java index 5b60c0dee46d..2715af0261df 100644 --- a/core/java/android/net/http/SslCertificate.java +++ b/core/java/android/net/http/SslCertificate.java @@ -16,6 +16,8 @@ package android.net.http; +import com.android.internal.util.HexDump; + import android.content.Context; import android.os.Bundle; import android.text.format.DateFormat; @@ -285,7 +287,7 @@ public class SslCertificate { StringBuilder sb = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { byte b = bytes[i]; - IntegralToString.appendByteAsHex(sb, b, true); + HexDump.appendByteAsHex(sb, b, true); if (i+1 != bytes.length) { sb.append(':'); } diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java index 45355723149c..407ff08ef2de 100644 --- a/core/java/android/os/RecoverySystem.java +++ b/core/java/android/os/RecoverySystem.java @@ -44,11 +44,8 @@ import java.util.Locale; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; -import org.apache.harmony.security.asn1.BerInputStream; -import org.apache.harmony.security.pkcs7.ContentInfo; -import org.apache.harmony.security.pkcs7.SignedData; -import org.apache.harmony.security.pkcs7.SignerInfo; -import org.apache.harmony.security.x509.Certificate; +import sun.security.pkcs.PKCS7; +import sun.security.pkcs.SignerInfo; /** * RecoverySystem contains methods for interacting with the Android @@ -150,14 +147,13 @@ public class RecoverySystem { ProgressListener listener, File deviceCertsZipFile) throws IOException, GeneralSecurityException { - long fileLen = packageFile.length(); + final long fileLen = packageFile.length(); - RandomAccessFile raf = new RandomAccessFile(packageFile, "r"); + final RandomAccessFile raf = new RandomAccessFile(packageFile, "r"); try { - int lastPercent = 0; - long lastPublishTime = System.currentTimeMillis(); + final long startTimeMillis = System.currentTimeMillis(); if (listener != null) { - listener.onProgress(lastPercent); + listener.onProgress(0); } raf.seek(fileLen - 6); @@ -168,8 +164,8 @@ public class RecoverySystem { throw new SignatureException("no signature in file (no footer)"); } - int commentSize = (footer[4] & 0xff) | ((footer[5] & 0xff) << 8); - int signatureStart = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8); + final int commentSize = (footer[4] & 0xff) | ((footer[5] & 0xff) << 8); + final int signatureStart = (footer[0] & 0xff) | ((footer[1] & 0xff) << 8); byte[] eocd = new byte[commentSize + 22]; raf.seek(fileLen - (commentSize + 22)); @@ -189,51 +185,30 @@ public class RecoverySystem { } } - // The following code is largely copied from - // JarUtils.verifySignature(). We could just *call* that - // method here if that function didn't read the entire - // input (ie, the whole OTA package) into memory just to - // compute its message digest. - - BerInputStream bis = new BerInputStream( - new ByteArrayInputStream(eocd, commentSize+22-signatureStart, signatureStart)); - ContentInfo info = (ContentInfo)ContentInfo.ASN1.decode(bis); - SignedData signedData = info.getSignedData(); - if (signedData == null) { - throw new IOException("signedData is null"); - } - List<Certificate> encCerts = signedData.getCertificates(); - if (encCerts.isEmpty()) { - throw new IOException("encCerts is empty"); - } + // Parse the signature + PKCS7 block = + new PKCS7(new ByteArrayInputStream(eocd, commentSize+22-signatureStart, signatureStart)); + // Take the first certificate from the signature (packages // should contain only one). - Iterator<Certificate> it = encCerts.iterator(); - X509Certificate cert = null; - if (it.hasNext()) { - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - InputStream is = new ByteArrayInputStream(it.next().getEncoded()); - cert = (X509Certificate) cf.generateCertificate(is); - } else { + X509Certificate[] certificates = block.getCertificates(); + if (certificates == null || certificates.length == 0) { throw new SignatureException("signature contains no certificates"); } + X509Certificate cert = certificates[0]; + PublicKey signatureKey = cert.getPublicKey(); - List<SignerInfo> sigInfos = signedData.getSignerInfos(); - SignerInfo sigInfo; - if (!sigInfos.isEmpty()) { - sigInfo = (SignerInfo)sigInfos.get(0); - } else { - throw new IOException("no signer infos!"); + SignerInfo[] signerInfos = block.getSignerInfos(); + if (signerInfos == null || signerInfos.length == 0) { + throw new SignatureException("signature contains no signedData"); } + SignerInfo signerInfo = signerInfos[0]; // Check that the public key of the certificate contained // in the package equals one of our trusted public keys. - + boolean verified = false; HashSet<X509Certificate> trusted = getTrustedCerts( deviceCertsZipFile == null ? DEFAULT_KEYSTORE : deviceCertsZipFile); - - PublicKey signatureKey = cert.getPublicKey(); - boolean verified = false; for (X509Certificate c : trusted) { if (c.getPublicKey().equals(signatureKey)) { verified = true; @@ -246,61 +221,54 @@ public class RecoverySystem { // The signature cert matches a trusted key. Now verify that // the digest in the cert matches the actual file data. - - // The verifier in recovery only handles SHA1withRSA and - // SHA256withRSA signatures. SignApk chooses which to use - // based on the signature algorithm of the cert: - // - // "SHA256withRSA" cert -> "SHA256withRSA" signature - // "SHA1withRSA" cert -> "SHA1withRSA" signature - // "MD5withRSA" cert -> "SHA1withRSA" signature (for backwards compatibility) - // any other cert -> SignApk fails - // - // Here we ignore whatever the cert says, and instead use - // whatever algorithm is used by the signature. - - String da = sigInfo.getDigestAlgorithm(); - String dea = sigInfo.getDigestEncryptionAlgorithm(); - String alg = null; - if (da == null || dea == null) { - // fall back to the cert algorithm if the sig one - // doesn't look right. - alg = cert.getSigAlgName(); - } else { - alg = da + "with" + dea; - } - Signature sig = Signature.getInstance(alg); - sig.initVerify(cert); - - // The signature covers all of the OTA package except the - // archive comment and its 2-byte length. - long toRead = fileLen - commentSize - 2; - long soFar = 0; raf.seek(0); - byte[] buffer = new byte[4096]; - boolean interrupted = false; - while (soFar < toRead) { - interrupted = Thread.interrupted(); - if (interrupted) break; - int size = buffer.length; - if (soFar + size > toRead) { - size = (int)(toRead - soFar); + final ProgressListener listenerForInner = listener; + SignerInfo verifyResult = block.verify(signerInfo, new InputStream() { + // The signature covers all of the OTA package except the + // archive comment and its 2-byte length. + long toRead = fileLen - commentSize - 2; + long soFar = 0; + + int lastPercent = 0; + long lastPublishTime = startTimeMillis; + + @Override + public int read() throws IOException { + throw new UnsupportedOperationException(); } - int read = raf.read(buffer, 0, size); - sig.update(buffer, 0, read); - soFar += read; - - if (listener != null) { - long now = System.currentTimeMillis(); - int p = (int)(soFar * 100 / toRead); - if (p > lastPercent && - now - lastPublishTime > PUBLISH_PROGRESS_INTERVAL_MS) { - lastPercent = p; - lastPublishTime = now; - listener.onProgress(lastPercent); + + @Override + public int read(byte[] b, int off, int len) throws IOException { + if (soFar >= toRead) { + return -1; + } + if (Thread.currentThread().isInterrupted()) { + return -1; + } + + int size = len; + if (soFar + size > toRead) { + size = (int)(toRead - soFar); + } + int read = raf.read(b, off, size); + soFar += read; + + if (listenerForInner != null) { + long now = System.currentTimeMillis(); + int p = (int)(soFar * 100 / toRead); + if (p > lastPercent && + now - lastPublishTime > PUBLISH_PROGRESS_INTERVAL_MS) { + lastPercent = p; + lastPublishTime = now; + listenerForInner.onProgress(lastPercent); + } } + + return read; } - } + }); + + final boolean interrupted = Thread.interrupted(); if (listener != null) { listener.onProgress(100); } @@ -309,7 +277,7 @@ public class RecoverySystem { throw new SignatureException("verification was interrupted"); } - if (!sig.verify(sigInfo.getEncryptedDigest())) { + if (verifyResult == null) { throw new SignatureException("signature digest verification failed"); } } finally { diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index e3694e80cfb9..b860bfb49f38 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -394,6 +394,14 @@ public final class ContactsContract { Uri.withAppendedPath(AUTHORITY_URI, "directories"); /** + * The content:// style URI for enterprise Directory table. Requests to this URI can be + * performed on the UI thread because they are always unblocking. + * + */ + public static final Uri CORP_CONTENT_URI = Uri.withAppendedPath(AUTHORITY_URI, + "directories_corp"); + + /** * The MIME-type of {@link #CONTENT_URI} providing a directory of * contact directories. */ @@ -417,6 +425,22 @@ public final class ContactsContract { public static final long LOCAL_INVISIBLE = 1; /** + * _ID of the work profile default directory, which represents locally stored contacts. + * + * @hide + */ + public static final long ENTERPRISE_DEFAULT = Directory.ENTERPRISE_DIRECTORY_ID_BASE + + DEFAULT; + + /** + * _ID of the work profile directory that represents locally stored invisible contacts. + * + * @hide + */ + public static final long ENTERPRISE_LOCAL_INVISIBLE = Directory.ENTERPRISE_DIRECTORY_ID_BASE + + LOCAL_INVISIBLE; + + /** * The name of the package that owns this directory. Contacts Provider * fill it in with the name of the package containing the directory provider. * If the package is later uninstalled, the directories it owns are @@ -472,6 +496,15 @@ public final class ContactsContract { public static final String ACCOUNT_NAME = "accountName"; /** + * Mimimal ID for corp directory returned from + * {@link Directory#CORP_CONTENT_URI}. + * + * @hide + */ + // slightly smaller than 2 ** 30 + public static final long ENTERPRISE_DIRECTORY_ID_BASE = 1000000000; + + /** * One of {@link #EXPORT_SUPPORT_NONE}, {@link #EXPORT_SUPPORT_ANY_ACCOUNT}, * {@link #EXPORT_SUPPORT_SAME_ACCOUNT_ONLY}. This is the expectation the * directory has for data exported from it. Clients must obey this setting. @@ -555,6 +588,24 @@ public final class ContactsContract { public static final int PHOTO_SUPPORT_FULL = 3; /** + * Return TRUE if it is a remote stored directory. + */ + public static boolean isRemoteDirectory(long directoryId) { + return directoryId != Directory.DEFAULT + && directoryId != Directory.LOCAL_INVISIBLE + && directoryId != Directory.ENTERPRISE_DEFAULT + && directoryId != Directory.ENTERPRISE_LOCAL_INVISIBLE; + } + + /** + * Return TRUE if a directory ID is from the contacts provider on the enterprise profile. + * + */ + public static boolean isEnterpriseDirectoryId(long directoryId) { + return directoryId >= ENTERPRISE_DIRECTORY_ID_BASE; + } + + /** * Notifies the system of a change in the list of directories handled by * a particular directory provider. The Contacts provider will turn around * and send a query to the directory provider for the full list of directories, @@ -1589,6 +1640,14 @@ public final class ContactsContract { CONTENT_URI, "filter"); /** + * It supports the same semantics as {@link #CONTENT_FILTER_URI} and returns the same + * columns. If there is a corp profile linked to the current profile, it will query corp + * profile, otherwise it will return null. + */ + public static final Uri CORP_CONTENT_FILTER_URI = Uri.withAppendedPath( + CORP_CONTENT_URI, "filter"); + + /** * The content:// style URI for this table joined with useful data from * {@link ContactsContract.Data}, filtered to include only starred contacts * and the most frequently contacted contacts. diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 9034cc936941..f560f8ad7b15 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7758,6 +7758,7 @@ public final class Settings { AUTO_TIME_ZONE, POWER_SOUNDS_ENABLED, DOCK_SOUNDS_ENABLED, + CHARGING_SOUNDS_ENABLED, USB_MASS_STORAGE_ENABLED, ENABLE_ACCESSIBILITY_GLOBAL_GESTURE_ENABLED, WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 3fc70cc3b4d9..b3cd8c11f0f9 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -186,6 +186,11 @@ interface IWindowSession { void reportDropResult(IWindow window, boolean consumed); /** + * Cancel the current drag operation. + */ + void cancelDragAndDrop(IBinder dragToken); + + /** * Tell the OS that we've just dragged into a View that is willing to accept the drop */ void dragRecipientEntered(IWindow window); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 227d8f2915c1..66381f90da0e 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3696,7 +3696,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Flag indicating that a drag can cross window boundaries. When - * {@link #startDrag(ClipData, DragShadowBuilder, Object, int)} is called + * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)} is called * with this flag set, all visible applications will be able to participate * in the drag operation and receive the dragged content. * @@ -3741,7 +3741,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Flag indicating that the drag shadow will be opaque. When - * {@link #startDrag(ClipData, DragShadowBuilder, Object, int)} is called + * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int)} is called * with this flag set, the drag shadow will be opaque, otherwise, it will be semitransparent. */ public static final int DRAG_FLAG_OPAQUE = 1 << 9; @@ -19910,6 +19910,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** + * @deprecated Use {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int) + * startDragAndDrop()} for newer platform versions. + */ + public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder, + Object myLocalState, int flags) { + return startDragAndDrop(data, shadowBuilder, myLocalState, flags); + } + + /** * Starts a drag and drop operation. When your application calls this method, it passes a * {@link android.view.View.DragShadowBuilder} object to the system. The * system calls this object's {@link DragShadowBuilder#onProvideShadowMetrics(Point, Point)} @@ -19926,9 +19935,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@link android.view.DragEvent#ACTION_DRAG_STARTED}. * </p> * <p> - * Your application can invoke startDrag() on any attached View object. The View object does not - * need to be the one used in {@link android.view.View.DragShadowBuilder}, nor does it need to - * be related to the View the user selected for dragging. + * Your application can invoke {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, + * int) startDragAndDrop()} on any attached View object. The View object does not need to be + * the one used in {@link android.view.View.DragShadowBuilder}, nor does it need to be related + * to the View the user selected for dragging. * </p> * @param data A {@link android.content.ClipData} object pointing to the data to be * transferred by the drag and drop operation. @@ -19948,10 +19958,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * {@code false} if it fails anywhere. Returning {@code false} means the system was unable to * do a drag, and so no drag operation is in progress. */ - public final boolean startDrag(ClipData data, DragShadowBuilder shadowBuilder, + public final boolean startDragAndDrop(ClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int flags) { if (ViewDebug.DEBUG_DRAG) { - Log.d(VIEW_LOG_TAG, "startDrag: data=" + data + " flags=" + flags); + Log.d(VIEW_LOG_TAG, "startDragAndDrop: data=" + data + " flags=" + flags); } boolean okay = false; @@ -19970,11 +19980,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } Surface surface = new Surface(); try { - IBinder token = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow, + mAttachInfo.mDragToken = mAttachInfo.mSession.prepareDrag(mAttachInfo.mWindow, flags, shadowSize.x, shadowSize.y, surface); - if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token=" + token - + " surface=" + surface); - if (token != null) { + if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "prepareDrag returned token=" + + mAttachInfo.mDragToken + " surface=" + surface); + if (mAttachInfo.mDragToken != null) { Canvas canvas = surface.lockCanvas(null); try { canvas.drawColor(0, PorterDuff.Mode.CLEAR); @@ -19991,7 +20001,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // repurpose 'shadowSize' for the last touch point root.getLastTouchPoint(shadowSize); - okay = mAttachInfo.mSession.performDrag(mAttachInfo.mWindow, token, + okay = mAttachInfo.mSession.performDrag(mAttachInfo.mWindow, mAttachInfo.mDragToken, shadowSize.x, shadowSize.y, shadowTouchPoint.x, shadowTouchPoint.y, data); if (ViewDebug.DEBUG_DRAG) Log.d(VIEW_LOG_TAG, "performDrag returned " + okay); @@ -20009,6 +20019,39 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** + * Cancels an ongoing drag and drop operation. + * <p> + * A {@link android.view.DragEvent} object with + * {@link android.view.DragEvent#getAction()} value of + * {@link android.view.DragEvent#ACTION_DRAG_ENDED} and + * {@link android.view.DragEvent#getResult()} value of {@code false} + * will be sent to every + * View that received {@link android.view.DragEvent#ACTION_DRAG_STARTED} + * even if they are not currently visible. + * </p> + * <p> + * This method can be called on any View in the same window as the View on which + * {@link #startDragAndDrop(ClipData, DragShadowBuilder, Object, int) startDragAndDrop} + * was called. + * </p> + */ + public final void cancelDragAndDrop() { + if (ViewDebug.DEBUG_DRAG) { + Log.d(VIEW_LOG_TAG, "cancelDragAndDrop"); + } + if (mAttachInfo.mDragToken != null) { + try { + mAttachInfo.mSession.cancelDragAndDrop(mAttachInfo.mDragToken); + } catch (Exception e) { + Log.e(VIEW_LOG_TAG, "Unable to cancel drag", e); + } + mAttachInfo.mDragToken = null; + } else { + Log.e(VIEW_LOG_TAG, "No active drag to cancel"); + } + } + + /** * Starts a move from {startX, startY}, the amount of the movement will be the offset * between {startX, startY} and the new cursor positon. * @param startX horizontal coordinate where the move started. @@ -20030,7 +20073,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * Handles drag events sent by the system following a call to - * {@link android.view.View#startDrag(ClipData,DragShadowBuilder,Object,int) startDrag()}. + * {@link android.view.View#startDragAndDrop(ClipData,DragShadowBuilder,Object,int) + * startDragAndDrop()}. *<p> * When the system calls this method, it passes a * {@link android.view.DragEvent} object. A call to @@ -22293,6 +22337,11 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final List<View> mPartialLayoutViews = new ArrayList<View>(); /** + * Used to track the identity of the current drag operation. + */ + IBinder mDragToken; + + /** * Creates a new set of attachment information with the specified * events handler and thread. * diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 6812fd14ff69..11df9a3826b7 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -224,7 +224,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * NOTE: If you change the flags below make sure to reflect the changes * the DisplayList class */ - + // When set, ViewGroup invalidates only the child's rectangle // Set by default static final int FLAG_CLIP_CHILDREN = 0x1; @@ -269,7 +269,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * When set, the drawing method will call {@link #getChildDrawingOrder(int, int)} * to get the index of the child to draw for that iteration. - * + * * @hide */ protected static final int FLAG_USE_CHILD_DRAWING_ORDER = 0x400; @@ -1327,7 +1327,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager children[i].dispatchConfigurationChanged(newConfig); } } - + /** * {@inheritDoc} */ @@ -2214,7 +2214,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager final float y = ev.getY(actionIndex); // Find a child that can receive the event. // Scan children from front to back. - final ArrayList<View> preorderedList = buildOrderedChildList(); + final ArrayList<View> preorderedList = buildTouchDispatchChildList(); final boolean customOrder = preorderedList == null && isChildrenDrawingOrderEnabled(); final View[] children = mChildren; @@ -2347,6 +2347,18 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } /** + * Provide custom ordering of views in which the touch will be dispatched. + * + * This is called within a tight loop, so you are not allowed to allocate objects, including + * the return array. Instead, you should return a pre-allocated list that will be cleared + * after the dispatch is finished. + * @hide + */ + public ArrayList<View> buildTouchDispatchChildList() { + return buildOrderedChildList(); + } + + /** * Finds the child which has accessibility focus. * * @return The child that has focus. @@ -2787,7 +2799,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * @see #FOCUS_BEFORE_DESCENDANTS * @see #FOCUS_AFTER_DESCENDANTS * @see #FOCUS_BLOCK_DESCENDANTS - * @see #onRequestFocusInDescendants(int, android.graphics.Rect) + * @see #onRequestFocusInDescendants(int, android.graphics.Rect) */ @Override public boolean requestFocus(int direction, Rect previouslyFocusedRect) { @@ -4104,7 +4116,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * <p>Adds a child view. If no layout parameters are already set on the child, the * default parameters for this ViewGroup are set on the child.</p> - * + * * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> @@ -4120,7 +4132,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Adds a child view. If no layout parameters are already set on the child, the * default parameters for this ViewGroup are set on the child. - * + * * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> @@ -4560,7 +4572,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * {@inheritDoc} - * + * * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> @@ -4579,7 +4591,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> - * + * * @param view the view to remove from the group */ public void removeViewInLayout(View view) { @@ -4607,7 +4619,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> - * + * * @param index the position in the group of the view to remove */ public void removeViewAt(int index) { @@ -4796,7 +4808,7 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager /** * Call this method to remove all child views from the * ViewGroup. - * + * * <p><strong>Note:</strong> do not invoke this method from * {@link #draw(android.graphics.Canvas)}, {@link #onDraw(android.graphics.Canvas)}, * {@link #dispatchDraw(android.graphics.Canvas)} or any related method.</p> diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 5bbfc3f2f9f4..2c0cd7a61af0 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -5372,10 +5372,10 @@ public final class ViewRootImpl implements ViewParent, } } - // When the drag operation ends, release any local state object - // that may have been in use + // When the drag operation ends, reset drag-related state if (what == DragEvent.ACTION_DRAG_ENDED) { setLocalDragState(null); + mAttachInfo.mDragToken = null; } } } diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index 47df4e8877e4..41f1ce748da0 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -937,10 +937,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter } @Override - public void onDismiss() { - super.onDismiss(); + protected void onDismiss() { mMenu.close(); mOverflowPopup = null; + + super.onDismiss(); } } @@ -959,10 +960,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter } @Override - public void onDismiss() { - super.onDismiss(); + protected void onDismiss() { mActionButtonPopup = null; mOpenSubMenuId = 0; + + super.onDismiss(); } } diff --git a/core/java/android/widget/PopupMenu.java b/core/java/android/widget/PopupMenu.java index a53df8835b08..027f8748dc17 100644 --- a/core/java/android/widget/PopupMenu.java +++ b/core/java/android/widget/PopupMenu.java @@ -19,7 +19,6 @@ package android.widget; import com.android.internal.R; import com.android.internal.view.menu.MenuBuilder; import com.android.internal.view.menu.MenuPopupHelper; -import com.android.internal.view.menu.MenuPresenter; import com.android.internal.view.menu.ShowableListMenu; import android.annotation.MenuRes; @@ -45,7 +44,7 @@ public class PopupMenu { private final MenuPopupHelper mPopup; private OnMenuItemClickListener mMenuItemClickListener; - private OnDismissListener mDismissListener; + private OnDismissListener mOnDismissListener; private OnTouchListener mDragListener; /** @@ -114,20 +113,13 @@ public class PopupMenu { mPopup = new MenuPopupHelper(context, mMenu, anchor, false, popupStyleAttr, popupStyleRes); mPopup.setGravity(gravity); - mPopup.setCallback(new MenuPresenter.Callback() { + mPopup.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override - public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { - if (mDismissListener != null) { - mDismissListener.onDismiss(PopupMenu.this); + public void onDismiss() { + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(PopupMenu.this); } } - - @Override - public boolean onOpenSubMenu(MenuBuilder subMenu) { - // The menu presenter will handle opening the submenu itself. - // Nothing to do here. - return false; - } }); } @@ -259,7 +251,7 @@ public class PopupMenu { * @param listener the listener to notify */ public void setOnDismissListener(OnDismissListener listener) { - mDismissListener = listener; + mOnDismissListener = listener; } /** diff --git a/core/java/android/widget/TimePickerClockDelegate.java b/core/java/android/widget/TimePickerClockDelegate.java index b523b84c776e..a24fb40c7c0e 100644 --- a/core/java/android/widget/TimePickerClockDelegate.java +++ b/core/java/android/widget/TimePickerClockDelegate.java @@ -84,6 +84,8 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl private final RadialTimePickerView mRadialTimePickerView; private final TextView mSeparatorView; + private final Calendar mTempCalendar; + private boolean mIsEnabled = true; private boolean mAllowAutoAdvance; private int mInitialHourOfDay; @@ -103,8 +105,6 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate impl private CharSequence mLastAnnouncedText; private boolean mLastAnnouncedIsHour; - private Calendar mTempCalendar; - public TimePickerClockDelegate(TimePicker delegator, Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(delegator, context); diff --git a/core/java/android/widget/TimePickerSpinnerDelegate.java b/core/java/android/widget/TimePickerSpinnerDelegate.java index 2ed230bf1b35..863d40913836 100644 --- a/core/java/android/widget/TimePickerSpinnerDelegate.java +++ b/core/java/android/widget/TimePickerSpinnerDelegate.java @@ -32,6 +32,7 @@ import android.view.inputmethod.InputMethodManager; import com.android.internal.R; import java.util.Calendar; +import java.util.Locale; import libcore.icu.LocaleData; @@ -45,11 +46,6 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate { private static final boolean DEFAULT_ENABLED_STATE = true; private static final int HOURS_IN_HALF_DAY = 12; - // state - private boolean mIs24HourView; - private boolean mIsAm; - - // ui components private final NumberPicker mHourSpinner; private final NumberPicker mMinuteSpinner; private final NumberPicker mAmPmSpinner; @@ -66,11 +62,15 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate { private final String[] mAmPmStrings; + private final Calendar mTempCalendar; + private boolean mIsEnabled = DEFAULT_ENABLED_STATE; - private Calendar mTempCalendar; private boolean mHourWithTwoDigit; private char mHourFormat; + private boolean mIs24HourView; + private boolean mIsAm; + public TimePickerSpinnerDelegate(TimePicker delegator, Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(delegator, context); @@ -202,6 +202,7 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate { updateAmPmControl(); // set to current time + mTempCalendar = Calendar.getInstance(mLocale); setHour(mTempCalendar.get(Calendar.HOUR_OF_DAY)); setMinute(mTempCalendar.get(Calendar.MINUTE)); diff --git a/core/java/com/android/internal/logging/MetricsLogger.java b/core/java/com/android/internal/logging/MetricsLogger.java index 08c7935895ec..c992c70f73e4 100644 --- a/core/java/com/android/internal/logging/MetricsLogger.java +++ b/core/java/com/android/internal/logging/MetricsLogger.java @@ -33,6 +33,7 @@ public class MetricsLogger implements MetricsConstants { public static final int NOTIFICATION_ZEN_MODE_VISUAL_INTERRUPTIONS = 260; public static final int ACTION_ZEN_ALLOW_PEEK = 261; public static final int ACTION_ZEN_ALLOW_LIGHTS = 262; + public static final int NOTIFICATION_TOPIC_NOTIFICATION = 263; public static void visible(Context context, int category) throws IllegalArgumentException { if (Build.IS_DEBUGGABLE && category == VIEW_UNKNOWN) { diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index f73df005c7f1..9391c6038fbc 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -105,7 +105,7 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int MAGIC = 0xBA757475; // 'BATSTATS' // Current on-disk Parcel version - private static final int VERSION = 135 + (USE_OLD_HISTORY ? 1000 : 0); + private static final int VERSION = 136 + (USE_OLD_HISTORY ? 1000 : 0); // Maximum number of items we will record in the history. private static final int MAX_HISTORY_ITEMS = 2000; @@ -1975,8 +1975,14 @@ public final class BatteryStatsImpl extends BatteryStats { private int buildBatteryLevelInt(HistoryItem h) { return ((((int)h.batteryLevel)<<25)&0xfe000000) - | ((((int)h.batteryTemperature)<<14)&0x01ff8000) - | ((((int)h.batteryVoltage)<<1)&0x00007fff); + | ((((int)h.batteryTemperature)<<15)&0x01ff8000) + | ((((int)h.batteryVoltage)<<1)&0x00007ffe); + } + + private void readBatteryLevelInt(int batteryLevelInt, HistoryItem out) { + out.batteryLevel = (byte)((batteryLevelInt & 0xfe000000) >>> 25); + out.batteryTemperature = (short)((batteryLevelInt & 0x01ff8000) >>> 15); + out.batteryVoltage = (char)((batteryLevelInt & 0x00007ffe) >>> 1); } private int buildStateInt(HistoryItem h) { @@ -2117,9 +2123,7 @@ public final class BatteryStatsImpl extends BatteryStats { final int batteryLevelInt; if ((firstToken&DELTA_BATTERY_LEVEL_FLAG) != 0) { batteryLevelInt = src.readInt(); - cur.batteryLevel = (byte)((batteryLevelInt>>25)&0x7f); - cur.batteryTemperature = (short)((batteryLevelInt<<7)>>21); - cur.batteryVoltage = (char)(batteryLevelInt&0x3fff); + readBatteryLevelInt(batteryLevelInt, cur); cur.numReadInts += 1; if (DEBUG) Slog.i(TAG, "READ DELTA: batteryToken=0x" + Integer.toHexString(batteryLevelInt) diff --git a/core/java/com/android/internal/util/HexDump.java b/core/java/com/android/internal/util/HexDump.java index 3c7b7acc9f4a..7be95d89dcf9 100644 --- a/core/java/com/android/internal/util/HexDump.java +++ b/core/java/com/android/internal/util/HexDump.java @@ -19,28 +19,29 @@ package com.android.internal.util; public class HexDump { private final static char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; - + private final static char[] HEX_LOWER_CASE_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + public static String dumpHexString(byte[] array) { return dumpHexString(array, 0, array.length); } - + public static String dumpHexString(byte[] array, int offset, int length) { StringBuilder result = new StringBuilder(); - + byte[] line = new byte[16]; int lineIndex = 0; - + result.append("\n0x"); result.append(toHexString(offset)); - + for (int i = offset ; i < offset + length ; i++) { if (lineIndex == 16) { result.append(" "); - + for (int j = 0 ; j < 16 ; j++) { if (line[j] > ' ' && line[j] < '~') @@ -52,20 +53,20 @@ public class HexDump result.append("."); } } - + result.append("\n0x"); result.append(toHexString(i)); lineIndex = 0; } - + byte b = array[i]; result.append(" "); result.append(HEX_DIGITS[(b >>> 4) & 0x0F]); result.append(HEX_DIGITS[b & 0x0F]); - + line[lineIndex++] = b; } - + if (lineIndex != 16) { int count = (16 - lineIndex) * 3; @@ -74,7 +75,7 @@ public class HexDump { result.append(" "); } - + for (int i = 0 ; i < lineIndex ; i++) { if (line[i] > ' ' && line[i] < '~') @@ -87,10 +88,10 @@ public class HexDump } } } - + return result.toString(); } - + public static String toHexString(byte b) { return toHexString(toByteArray(b)); @@ -98,48 +99,59 @@ public class HexDump public static String toHexString(byte[] array) { - return toHexString(array, 0, array.length); + return toHexString(array, 0, array.length, true); + } + + public static String toHexString(byte[] array, boolean upperCase) + { + return toHexString(array, 0, array.length, upperCase); } - + public static String toHexString(byte[] array, int offset, int length) { + return toHexString(array, offset, length, true); + } + + public static String toHexString(byte[] array, int offset, int length, boolean upperCase) + { + char[] digits = upperCase ? HEX_DIGITS : HEX_LOWER_CASE_DIGITS; char[] buf = new char[length * 2]; int bufIndex = 0; - for (int i = offset ; i < offset + length; i++) + for (int i = offset ; i < offset + length; i++) { byte b = array[i]; - buf[bufIndex++] = HEX_DIGITS[(b >>> 4) & 0x0F]; - buf[bufIndex++] = HEX_DIGITS[b & 0x0F]; + buf[bufIndex++] = digits[(b >>> 4) & 0x0F]; + buf[bufIndex++] = digits[b & 0x0F]; } - return new String(buf); + return new String(buf); } - + public static String toHexString(int i) { return toHexString(toByteArray(i)); } - + public static byte[] toByteArray(byte b) { byte[] array = new byte[1]; array[0] = b; return array; } - + public static byte[] toByteArray(int i) { byte[] array = new byte[4]; - + array[3] = (byte)(i & 0xFF); array[2] = (byte)((i >> 8) & 0xFF); array[1] = (byte)((i >> 16) & 0xFF); array[0] = (byte)((i >> 24) & 0xFF); - + return array; } - + private static int toByte(char c) { if (c >= '0' && c <= '9') return (c - '0'); @@ -148,7 +160,7 @@ public class HexDump throw new RuntimeException ("Invalid hex char '" + c + "'"); } - + public static byte[] hexStringToByteArray(String hexString) { int length = hexString.length(); @@ -158,7 +170,15 @@ public class HexDump { buffer[i / 2] = (byte)((toByte(hexString.charAt(i)) << 4) | toByte(hexString.charAt(i+1))); } - + return buffer; - } + } + + public static StringBuilder appendByteAsHex(StringBuilder sb, byte b, boolean upperCase) { + char[] digits = upperCase ? HEX_DIGITS : HEX_LOWER_CASE_DIGITS; + sb.append(digits[(b >> 4) & 0xf]); + sb.append(digits[b & 0xf]); + return sb; + } + } diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java index e674eccd889d..59d5f94f05db 100644 --- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java +++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java @@ -18,82 +18,104 @@ package com.android.internal.view.menu; import com.android.internal.view.menu.MenuPresenter.Callback; +import android.annotation.AttrRes; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.StyleRes; import android.content.Context; import android.view.Gravity; import android.view.View; -import android.widget.PopupWindow; +import android.widget.PopupWindow.OnDismissListener; /** * Presents a menu as a small, simple popup anchored to another view. - * - * @hide */ -public class MenuPopupHelper implements PopupWindow.OnDismissListener { +public class MenuPopupHelper { private final Context mContext; + + // Immutable cached popup menu properties. private final MenuBuilder mMenu; private final boolean mOverflowOnly; private final int mPopupStyleAttr; private final int mPopupStyleRes; + // Mutable cached popup menu properties. private View mAnchorView; - private MenuPopup mPopup; - - private int mDropDownGravity = Gravity.NO_GRAVITY; + private int mDropDownGravity = Gravity.START; private boolean mForceShowIcon; - private boolean mShowTitle; private Callback mPresenterCallback; - private int mInitXOffset; - private int mInitYOffset; - public MenuPopupHelper(Context context, MenuBuilder menu) { + private MenuPopup mPopup; + private OnDismissListener mOnDismissListener; + + public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu) { this(context, menu, null, false, com.android.internal.R.attr.popupMenuStyle, 0); } - public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView) { + public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu, + @NonNull View anchorView) { this(context, menu, anchorView, false, com.android.internal.R.attr.popupMenuStyle, 0); } - public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView, - boolean overflowOnly, int popupStyleAttr) { + public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu, + @NonNull View anchorView, + boolean overflowOnly, @AttrRes int popupStyleAttr) { this(context, menu, anchorView, overflowOnly, popupStyleAttr, 0); } - public MenuPopupHelper(Context context, MenuBuilder menu, View anchorView, - boolean overflowOnly, int popupStyleAttr, int popupStyleRes) { + public MenuPopupHelper(@NonNull Context context, @NonNull MenuBuilder menu, + @NonNull View anchorView, boolean overflowOnly, @AttrRes int popupStyleAttr, + @StyleRes int popupStyleRes) { mContext = context; mMenu = menu; + mAnchorView = anchorView; mOverflowOnly = overflowOnly; mPopupStyleAttr = popupStyleAttr; mPopupStyleRes = popupStyleRes; - mAnchorView = anchorView; - mPopup = createMenuPopup(); } - private MenuPopup createMenuPopup() { - if (mContext.getResources().getBoolean( - com.android.internal.R.bool.config_enableCascadingSubmenus)) { - return new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr, mPopupStyleRes, - mOverflowOnly); - } - return new StandardMenuPopup( - mContext, mMenu, mAnchorView, mPopupStyleAttr, mPopupStyleRes, mOverflowOnly); + public void setOnDismissListener(@Nullable OnDismissListener listener) { + mOnDismissListener = listener; } - public void setAnchorView(View anchor) { + /** + * Sets the view to which the popup window is anchored. + * <p> + * Changes take effect on the next call to show(). + * + * @param anchor the view to which the popup window should be anchored + */ + public void setAnchorView(@NonNull View anchor) { mAnchorView = anchor; - mPopup.setAnchorView(anchor); } - public void setForceShowIcon(boolean forceShow) { - mForceShowIcon = forceShow; - mPopup.setForceShowIcon(forceShow); + /** + * Sets whether the popup menu's adapter is forced to show icons in the + * menu item views. + * <p> + * Changes take effect on the next call to show(). + * + * @param forceShowIcon {@code true} to force icons to be shown, or + * {@code false} for icons to be optionally shown + */ + public void setForceShowIcon(boolean forceShowIcon) { + mForceShowIcon = forceShowIcon; } + /** + * Sets the alignment of the popup window relative to the anchor view. + * <p> + * Changes take effect on the next call to show(). + * + * @param gravity alignment of the popup relative to the anchor + */ public void setGravity(int gravity) { mDropDownGravity = gravity; - mPopup.setGravity(gravity); } + /** + * @return alignment of the popup relative to the anchor + */ public int getGravity() { return mDropDownGravity; } @@ -110,7 +132,11 @@ public class MenuPopupHelper implements PopupWindow.OnDismissListener { } } - public ShowableListMenu getPopup() { + @NonNull + public MenuPopup getPopup() { + if (mPopup == null) { + mPopup = createPopup(); + } return mPopup; } @@ -129,14 +155,28 @@ public class MenuPopupHelper implements PopupWindow.OnDismissListener { return false; } - mInitXOffset = 0; - mInitYOffset = 0; - mShowTitle = false; - - showPopup(); + showPopup(0, 0, false, false); return true; } + /** + * Shows the popup menu and makes a best-effort to anchor it to the + * specified (x,y) coordinate relative to the anchor view. + * <p> + * If the popup's resolved gravity is {@link Gravity#LEFT}, this will + * display the popup with its top-left corner at (x,y) relative to the + * anchor view. If the resolved gravity is {@link Gravity#RIGHT}, the + * popup's top-right corner will be at (x,y). + * <p> + * If the popup cannot be displayed fully on-screen, this method will + * attempt to scroll the anchor view's ancestors and/or offset the popup + * such that it may be displayed fully on-screen. + * + * @param x x coordinate relative to the anchor view + * @param y y coordinate relative to the anchor view + * @return {@code true} if the popup was shown or was already showing prior + * to calling this method, {@code false} otherwise + */ public boolean tryShow(int x, int y) { if (isShowing()) { return true; @@ -146,51 +186,104 @@ public class MenuPopupHelper implements PopupWindow.OnDismissListener { return false; } - mInitXOffset = x; - mInitYOffset = y; - mShowTitle = true; - - showPopup(); + showPopup(x, y, true, true); return true; } - private void showPopup() { - mPopup = createMenuPopup(); - mPopup.setAnchorView(mAnchorView); - mPopup.setCallback(mPresenterCallback); - mPopup.setForceShowIcon(mForceShowIcon); - mPopup.setGravity(mDropDownGravity); - mPopup.setHorizontalOffset(mInitXOffset); - mPopup.setShowTitle(mShowTitle); - mPopup.setVerticalOffset(mInitYOffset); + /** + * Creates the popup and assigns cached properties. + * + * @return an initialized popup + */ + @NonNull + private MenuPopup createPopup() { + final boolean enableCascadingSubmenus = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_enableCascadingSubmenus); + + final MenuPopup popup; + if (enableCascadingSubmenus) { + popup = new CascadingMenuPopup(mContext, mAnchorView, mPopupStyleAttr, + mPopupStyleRes, mOverflowOnly); + } else { + popup = new StandardMenuPopup(mContext, mMenu, mAnchorView, mPopupStyleAttr, + mPopupStyleRes, mOverflowOnly); + } + + // Assign immutable properties. + popup.addMenu(mMenu); + popup.setOnDismissListener(mInternalOnDismissListener); - // In order for subclasses of MenuPopupHelper to satisfy the OnDismissedListener interface, - // we must set the listener to this outer Helper rather than to the inner MenuPopup. - // Not to worry -- the inner MenuPopup will call our own #onDismiss method after it's done - // its own handling. - mPopup.setOnDismissListener(this); + // Assign mutable properties. These may be reassigned later. + popup.setAnchorView(mAnchorView); + popup.setCallback(mPresenterCallback); + popup.setForceShowIcon(mForceShowIcon); + popup.setGravity(mDropDownGravity); - mPopup.addMenu(mMenu); - mPopup.show(); + return popup; } + private void showPopup(int xOffset, int yOffset, boolean resolveOffsets, boolean showTitle) { + if (resolveOffsets) { + // If the resolved drop-down gravity is RIGHT, the popup's right + // edge will be aligned with the anchor view. Adjust by the anchor + // width such that the top-right corner is at the X offset. + final int hgrav = Gravity.getAbsoluteGravity(mDropDownGravity, + mAnchorView.getLayoutDirection()) & Gravity.HORIZONTAL_GRAVITY_MASK; + if (hgrav == Gravity.RIGHT) { + xOffset -= mAnchorView.getWidth(); + } + } + + final MenuPopup popup = getPopup(); + popup.setHorizontalOffset(xOffset); + popup.setVerticalOffset(yOffset); + popup.setShowTitle(showTitle); + popup.show(); + } + + /** + * Dismisses the popup, if showing. + */ public void dismiss() { if (isShowing()) { mPopup.dismiss(); } } - @Override - public void onDismiss() { + /** + * Called after the popup has been dismissed. + * <p> + * <strong>Note:</strong> Subclasses should call the super implementation + * last to ensure that any necessary tear down has occurred before the + * listener specified by {@link #setOnDismissListener(OnDismissListener)} + * is called. + */ + protected void onDismiss() { mPopup = null; + + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(); + } } public boolean isShowing() { return mPopup != null && mPopup.isShowing(); } - public void setCallback(MenuPresenter.Callback cb) { + public void setCallback(@Nullable MenuPresenter.Callback cb) { mPresenterCallback = cb; - mPopup.setCallback(cb); + if (mPopup != null) { + mPopup.setCallback(cb); + } } + + /** + * Listener used to proxy dismiss callbacks to the helper's owner. + */ + private final OnDismissListener mInternalOnDismissListener = new OnDismissListener() { + @Override + public void onDismiss() { + MenuPopupHelper.this.onDismiss(); + } + }; } diff --git a/core/java/com/android/internal/widget/ButtonBarLayout.java b/core/java/com/android/internal/widget/ButtonBarLayout.java index 3b7bce47e5ab..a694aca8fc4b 100644 --- a/core/java/com/android/internal/widget/ButtonBarLayout.java +++ b/core/java/com/android/internal/widget/ButtonBarLayout.java @@ -30,6 +30,10 @@ import com.android.internal.R; * orientation when it can't fit its child views horizontally. */ public class ButtonBarLayout extends LinearLayout { + // Whether to allow vertically stacked button bars. This is disabled for + // configurations with a small (e.g. less than 320dp) screen height. --> + private static final int ALLOW_STACKING_MIN_HEIGHT_DP = 320; + /** Whether the current configuration allows stacking. */ private boolean mAllowStacking; @@ -38,8 +42,12 @@ public class ButtonBarLayout extends LinearLayout { public ButtonBarLayout(Context context, AttributeSet attrs) { super(context, attrs); + final boolean allowStackingDefault = + context.getResources().getConfiguration().screenHeightDp + >= ALLOW_STACKING_MIN_HEIGHT_DP; final TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ButtonBarLayout); - mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking, false); + mAllowStacking = ta.getBoolean(R.styleable.ButtonBarLayout_allowStacking, + allowStackingDefault); ta.recycle(); } diff --git a/core/java/com/android/internal/widget/DecorCaptionView.java b/core/java/com/android/internal/widget/DecorCaptionView.java index 16e829616704..d747686ca762 100644 --- a/core/java/com/android/internal/widget/DecorCaptionView.java +++ b/core/java/com/android/internal/widget/DecorCaptionView.java @@ -19,18 +19,24 @@ package com.android.internal.widget; import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import android.content.Context; +import android.graphics.Color; +import android.graphics.Rect; import android.os.RemoteException; import android.util.AttributeSet; +import android.util.Log; +import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; +import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewOutlineProvider; import android.view.Window; -import android.util.Log; import com.android.internal.R; import com.android.internal.policy.PhoneWindow; +import java.util.ArrayList; + /** * This class represents the special screen elements to control a window on freeform * environment. @@ -38,8 +44,8 @@ import com.android.internal.policy.PhoneWindow; * <ul> * <li>The caption, containing the system buttons like maximize, close and such as well as * allowing the user to drag the window around.</li> - * After creating the view, the function - * {@link #setPhoneWindow} needs to be called to make + * </ul> + * After creating the view, the function {@link #setPhoneWindow} needs to be called to make * the connection to it's owning PhoneWindow. * Note: At this time the application can change various attributes of the DecorView which * will break things (in settle/unexpected ways): @@ -48,9 +54,29 @@ import com.android.internal.policy.PhoneWindow; * <li>setSurfaceFormat</li> * <li>..</li> * </ul> + * + * Although this ViewGroup has only two direct sub-Views, its behavior is more complex due to + * overlaying caption on the content and drawing. + * + * First, no matter where the content View gets added, it will always be the first child and the + * caption will be the second. This way the caption will always be drawn on top of the content when + * overlaying is enabled. + * + * Second, the touch dispatch is customized to handle overlaying. This is what happens when touch + * is dispatched on the caption area while overlaying it on content: + * <ul> + * <li>DecorCaptionView.onInterceptTouchEvent() will try intercepting the touch events if the + * down action is performed on top close or maximize buttons; the reason for that is we want these + * buttons to always work.</li> + * <li>The content View will receive the touch event. Mind that content is actually underneath the + * caption, so we need to introduce our own dispatch ordering. We achieve this by overriding + * {@link #buildTouchDispatchChildList()}.</li> + * <li>If the touch event is not consumed by the content View, it will go to the caption View + * and the dragging logic will be executed.</li> + * </ul> */ -public class DecorCaptionView extends ViewGroup - implements View.OnClickListener, View.OnTouchListener { +public class DecorCaptionView extends ViewGroup implements View.OnTouchListener, + GestureDetector.OnGestureListener { private final static String TAG = "DecorCaptionView"; private PhoneWindow mOwner = null; private boolean mShow = false; @@ -65,17 +91,42 @@ public class DecorCaptionView extends ViewGroup private View mCaption; private View mContent; + private View mMaximize; + private View mClose; + + // Fields for detecting drag events. + private int mTouchDownX; + private int mTouchDownY; + private boolean mCheckForDragging; + private int mDragSlop; + + // Fields for detecting and intercepting click events on close/maximize. + private ArrayList<View> mTouchDispatchList = new ArrayList<>(2); + // We use the gesture detector to detect clicks on close/maximize buttons and to be consistent + // with existing click detection. + private GestureDetector mGestureDetector; + private final Rect mCloseRect = new Rect(); + private final Rect mMaximizeRect = new Rect(); + private View mClickTarget; public DecorCaptionView(Context context) { super(context); + init(context); } public DecorCaptionView(Context context, AttributeSet attrs) { super(context, attrs); + init(context); } public DecorCaptionView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + init(context); + } + + private void init(Context context) { + mDragSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + mGestureDetector = new GestureDetector(context, this); } @Override @@ -88,13 +139,47 @@ public class DecorCaptionView extends ViewGroup mOwner = owner; mShow = show; mOverlayWithAppContent = owner.getOverlayDecorCaption(); + if (mOverlayWithAppContent) { + // The caption is covering the content, so we make its background transparent to make + // the content visible. + mCaption.setBackgroundColor(Color.TRANSPARENT); + } updateCaptionVisibility(); // By changing the outline provider to BOUNDS, the window can remove its // background without removing the shadow. mOwner.getDecorView().setOutlineProvider(ViewOutlineProvider.BOUNDS); + mMaximize = findViewById(R.id.maximize_window); + mClose = findViewById(R.id.close_window); + } - findViewById(R.id.maximize_window).setOnClickListener(this); - findViewById(R.id.close_window).setOnClickListener(this); + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + // If the user starts touch on the maximize/close buttons, we immediately intercept, so + // that these buttons are always clickable. + if (ev.getAction() == MotionEvent.ACTION_DOWN) { + final int x = (int) ev.getX(); + final int y = (int) ev.getY(); + if (mMaximizeRect.contains(x, y)) { + mClickTarget = mMaximize; + } + if (mCloseRect.contains(x, y)) { + mClickTarget = mClose; + } + } + return mClickTarget != null; + } + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (mClickTarget != null) { + mGestureDetector.onTouchEvent(event); + final int action = event.getAction(); + if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) { + mClickTarget = null; + } + return true; + } + return false; } @Override @@ -102,25 +187,31 @@ public class DecorCaptionView extends ViewGroup // Note: There are no mixed events. When a new device gets used (e.g. 1. Mouse, 2. touch) // the old input device events get cancelled first. So no need to remember the kind of // input device we are listening to. + final int x = (int) e.getX(); + final int y = (int) e.getY(); switch (e.getActionMasked()) { case MotionEvent.ACTION_DOWN: if (!mShow) { // When there is no caption we should not react to anything. return false; } - // A drag action is started if we aren't dragging already and the starting event is - // either a left mouse button or any other input device. - if (!mDragging && - (e.getToolType(e.getActionIndex()) != MotionEvent.TOOL_TYPE_MOUSE || - (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) != 0)) { - mDragging = true; - mLeftMouseButtonReleased = false; - startMovingTask(e.getRawX(), e.getRawY()); + // Checking for a drag action is started if we aren't dragging already and the + // starting event is either a left mouse button or any other input device. + if (((e.getToolType(e.getActionIndex()) != MotionEvent.TOOL_TYPE_MOUSE || + (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) != 0))) { + mCheckForDragging = true; + mTouchDownX = x; + mTouchDownY = y; } break; case MotionEvent.ACTION_MOVE: - if (mDragging && !mLeftMouseButtonReleased) { + if (!mDragging && mCheckForDragging && passedSlop(x, y)) { + mCheckForDragging = false; + mDragging = true; + mLeftMouseButtonReleased = false; + startMovingTask(e.getRawX(), e.getRawY()); + } else if (mDragging && !mLeftMouseButtonReleased) { if (e.getToolType(e.getActionIndex()) == MotionEvent.TOOL_TYPE_MOUSE && (e.getButtonState() & MotionEvent.BUTTON_PRIMARY) == 0) { // There is no separate mouse button up call and if the user mixes mouse @@ -138,9 +229,25 @@ public class DecorCaptionView extends ViewGroup } // Abort the ongoing dragging. mDragging = false; - return true; + return !mCheckForDragging; } - return mDragging; + return mDragging || mCheckForDragging; + } + + @Override + public ArrayList<View> buildTouchDispatchChildList() { + mTouchDispatchList.ensureCapacity(3); + if (mCaption != null) { + mTouchDispatchList.add(mCaption); + } + if (mContent != null) { + mTouchDispatchList.add(mContent); + } + return mTouchDispatchList; + } + + private boolean passedSlop(int x, int y) { + return Math.abs(x - mTouchDownX) > mDragSlop || Math.abs(y - mTouchDownY) > mDragSlop; } /** @@ -153,15 +260,6 @@ public class DecorCaptionView extends ViewGroup } @Override - public void onClick(View view) { - if (view.getId() == R.id.maximize_window) { - maximizeWindow(); - } else if (view.getId() == R.id.close_window) { - mOwner.dispatchOnWindowDismissed(true /*finishTask*/); - } - } - - @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (!(params instanceof MarginLayoutParams)) { throw new IllegalArgumentException( @@ -205,8 +303,12 @@ public class DecorCaptionView extends ViewGroup if (mCaption.getVisibility() != View.GONE) { mCaption.layout(0, 0, mCaption.getMeasuredWidth(), mCaption.getMeasuredHeight()); captionHeight = mCaption.getBottom() - mCaption.getTop(); + mMaximize.getHitRect(mMaximizeRect); + mClose.getHitRect(mCloseRect); } else { captionHeight = 0; + mMaximizeRect.setEmpty(); + mCloseRect.setEmpty(); } if (mContent != null) { @@ -291,4 +393,39 @@ public class DecorCaptionView extends ViewGroup protected boolean checkLayoutParams(ViewGroup.LayoutParams p) { return p instanceof MarginLayoutParams; } + + @Override + public boolean onDown(MotionEvent e) { + return false; + } + + @Override + public void onShowPress(MotionEvent e) { + + } + + @Override + public boolean onSingleTapUp(MotionEvent e) { + if (mClickTarget == mMaximize) { + maximizeWindow(); + } else if (mClickTarget == mClose) { + mOwner.dispatchOnWindowDismissed(true /*finishTask*/); + } + return true; + } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { + return false; + } + + @Override + public void onLongPress(MotionEvent e) { + + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + return false; + } } diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp index 3d96fab9709d..e4e73a4b4c8a 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/core/jni/android_graphics_Canvas.cpp @@ -544,39 +544,6 @@ private: float totalAdvance; }; -// Same values used by Skia -#define kStdStrikeThru_Offset (-6.0f / 21.0f) -#define kStdUnderline_Offset (1.0f / 9.0f) -#define kStdUnderline_Thickness (1.0f / 18.0f) - -void drawTextDecorations(Canvas* canvas, float x, float y, float length, const SkPaint& paint) { - uint32_t flags; - SkDrawFilter* drawFilter = canvas->getDrawFilter(); - if (drawFilter) { - SkPaint paintCopy(paint); - drawFilter->filter(&paintCopy, SkDrawFilter::kText_Type); - flags = paintCopy.getFlags(); - } else { - flags = paint.getFlags(); - } - if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) { - SkScalar left = x; - SkScalar right = x + length; - float textSize = paint.getTextSize(); - float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f); - if (flags & SkPaint::kUnderlineText_Flag) { - SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth; - SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth; - canvas->drawRect(left, top, right, bottom, paint); - } - if (flags & SkPaint::kStrikeThruText_Flag) { - SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth; - SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth; - canvas->drawRect(left, top, right, bottom, paint); - } - } -} - void drawText(Canvas* canvas, const uint16_t* text, int start, int count, int contextCount, float x, float y, int bidiFlags, const Paint& origPaint, TypefaceImpl* typeface) { // minikin may modify the original paint @@ -586,8 +553,8 @@ void drawText(Canvas* canvas, const uint16_t* text, int start, int count, int co MinikinUtils::doLayout(&layout, &paint, bidiFlags, typeface, text, start, count, contextCount); size_t nGlyphs = layout.nGlyphs(); - uint16_t* glyphs = new uint16_t[nGlyphs]; - float* pos = new float[nGlyphs * 2]; + std::unique_ptr<uint16_t[]> glyphs(new uint16_t[nGlyphs]); + std::unique_ptr<float[]> pos(new float[nGlyphs * 2]); x += MinikinUtils::xOffsetForTextAlign(&paint, layout); @@ -597,13 +564,9 @@ void drawText(Canvas* canvas, const uint16_t* text, int start, int count, int co bounds.offset(x, y); } - DrawTextFunctor f(layout, canvas, glyphs, pos, paint, x, y, bounds, layout.getAdvance()); + DrawTextFunctor f(layout, canvas, glyphs.get(), pos.get(), + paint, x, y, bounds, layout.getAdvance()); MinikinUtils::forFontRun(layout, &paint, f); - - drawTextDecorations(canvas, x, y, layout.getAdvance(), paint); - - delete[] glyphs; - delete[] pos; } static void drawTextChars(JNIEnv* env, jobject, jlong canvasHandle, jcharArray text, diff --git a/core/res/res/layout/alert_dialog_button_bar_material.xml b/core/res/res/layout/alert_dialog_button_bar_material.xml index 6e102f35b2b8..f7974a5a3df1 100644 --- a/core/res/res/layout/alert_dialog_button_bar_material.xml +++ b/core/res/res/layout/alert_dialog_button_bar_material.xml @@ -27,7 +27,6 @@ android:paddingTop="4dp" android:paddingBottom="4dp" android:gravity="bottom" - android:allowStacking="@bool/allow_stacked_button_bar" style="?attr/buttonBarStyle"> <Button diff --git a/core/res/res/values-h320dp/bools.xml b/core/res/res/values-h320dp/bools.xml deleted file mode 100644 index 3bbfe9643b38..000000000000 --- a/core/res/res/values-h320dp/bools.xml +++ /dev/null @@ -1,20 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - Copyright (C) 2015 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. ---> - -<resources> - <bool name="allow_stacked_button_bar">true</bool> -</resources> diff --git a/core/res/res/values/bools.xml b/core/res/res/values/bools.xml index 7c63950a9aee..457131a4f84a 100644 --- a/core/res/res/values/bools.xml +++ b/core/res/res/values/bools.xml @@ -25,8 +25,4 @@ <bool name="show_ongoing_ime_switcher">true</bool> <bool name="action_bar_expanded_action_views_exclusive">true</bool> <bool name="target_honeycomb_needs_options_menu">true</bool> - - <!-- Whether to allow vertically stacked button bars. This is disabled for - configurations with a small (e.g. less than 320dp) screen height. --> - <bool name="allow_stacked_button_bar">false</bool> </resources> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 057790a4cb08..539baa59471b 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1946,9 +1946,9 @@ See {@link com.android.server.notification.NotificationSignalExtractor} --> <string-array name="config_notificationSignalExtractors"> <item>com.android.server.notification.ValidateNotificationPeople</item> - <item>com.android.server.notification.PackagePriorityExtractor</item> + <item>com.android.server.notification.TopicPriorityExtractor</item> <item>com.android.server.notification.NotificationIntrusivenessExtractor</item> - <item>com.android.server.notification.PackageVisibilityExtractor</item> + <item>com.android.server.notification.TopicVisibilityExtractor</item> </string-array> <!-- Flag indicating that this device does not rotate and will always remain in its default diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 00c0fe8b26e1..1964bec216a5 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4072,4 +4072,6 @@ <item quantity="one"><xliff:g id="count" example="1">%1$d</xliff:g> selected</item> <item quantity="other"><xliff:g id="count" example="3">%1$d</xliff:g> selected</item> </plurals> + + <string name="default_notification_topic_label">Miscellaneous</string> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 1e325b114190..edd355598c0f 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2321,7 +2321,6 @@ <java-symbol type="string" name="lockscreen_access_pattern_area" /> - <java-symbol type="bool" name="allow_stacked_button_bar" /> <java-symbol type="bool" name="config_eap_sim_based_auth_supported" /> <java-symbol type="array" name="config_cell_retries_per_error_code" /> @@ -2337,4 +2336,5 @@ <java-symbol type="string" name="config_iccHotswapPromptForRestartDialogComponent" /> <java-symbol type="string" name="config_packagedKeyboardName" /> + <java-symbol type="string" name="default_notification_topic_label" /> </resources> diff --git a/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java b/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java new file mode 100644 index 000000000000..951e87a99da3 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2011 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 com.android.internal.util; + +import junit.framework.TestCase; + +public final class HexDumpTest extends TestCase { + public void testBytesToHexString() { + assertEquals("abcdef", HexDump.toHexString( + new byte[] { (byte) 0xab, (byte) 0xcd, (byte) 0xef }, false)); + assertEquals("ABCDEF", HexDump.toHexString( + new byte[] { (byte) 0xab, (byte) 0xcd, (byte) 0xef }, true)); + } +} diff --git a/data/keyboards/qwerty.kl b/data/keyboards/qwerty.kl index 58bf654432d7..41860076e0e4 100644 --- a/data/keyboards/qwerty.kl +++ b/data/keyboards/qwerty.kl @@ -81,7 +81,7 @@ key 38 L key 39 SEMICOLON key 40 APOSTROPHE key 14 DEL - + key 44 Z key 45 X key 46 C @@ -93,7 +93,7 @@ key 51 COMMA key 52 PERIOD key 53 SLASH key 28 ENTER - + key 56 ALT_LEFT key 100 ALT_RIGHT key 42 SHIFT_LEFT @@ -101,7 +101,7 @@ key 54 SHIFT_RIGHT key 15 TAB key 57 SPACE key 150 EXPLORER -key 155 ENVELOPE +key 155 ENVELOPE key 12 MINUS key 13 EQUALS @@ -110,3 +110,16 @@ key 215 AT # On an AT keyboard: ESC, F10 key 1 BACK key 68 MENU + +# App switch = Overview key +key 580 APP_SWITCH + +# Media control keys +key 160 MEDIA_CLOSE +key 161 MEDIA_EJECT +key 163 MEDIA_NEXT +key 164 MEDIA_PLAY_PAUSE +key 165 MEDIA_PREVIOUS +key 166 MEDIA_STOP +key 167 MEDIA_RECORD +key 168 MEDIA_REWIND diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index 0a57d509d129..cc68fb292a8f 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -37,6 +37,7 @@ hwui_src_files := \ AnimatorManager.cpp \ AssetAtlas.cpp \ Caches.cpp \ + Canvas.cpp \ CanvasState.cpp \ ClipArea.cpp \ DamageAccumulator.cpp \ diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp index d2d3285b71f8..d13d7ef81e5b 100644 --- a/libs/hwui/BakedOpRenderer.cpp +++ b/libs/hwui/BakedOpRenderer.cpp @@ -24,6 +24,9 @@ #include "utils/GLUtils.h" #include "VertexBuffer.h" +#include <algorithm> +#include <math.h> + namespace android { namespace uirenderer { @@ -183,6 +186,10 @@ void BakedOpDispatcher::onBitmapOp(BakedOpRenderer& renderer, const BitmapOp& op renderer.renderGlop(state, glop); } +void BakedOpDispatcher::onLinesOp(BakedOpRenderer& renderer, const LinesOp& op, const BakedOpState& state) { + LOG_ALWAYS_FATAL("todo"); +} + void BakedOpDispatcher::onRectOp(BakedOpRenderer& renderer, const RectOp& op, const BakedOpState& state) { Glop glop; GlopBuilder(renderer.renderState(), renderer.caches(), &glop) @@ -270,6 +277,91 @@ void BakedOpDispatcher::onSimpleRectsOp(BakedOpRenderer& renderer, const SimpleR renderer.renderGlop(state, glop); } +static void renderTextShadow(BakedOpRenderer& renderer, FontRenderer& fontRenderer, + const TextOp& op, const BakedOpState& state) { + renderer.caches().textureState().activateTexture(0); + + PaintUtils::TextShadow textShadow; + if (!PaintUtils::getTextShadow(op.paint, &textShadow)) { + LOG_ALWAYS_FATAL("failed to query shadow attributes"); + } + + renderer.caches().dropShadowCache.setFontRenderer(fontRenderer); + ShadowTexture* texture = renderer.caches().dropShadowCache.get( + op.paint, (const char*) op.glyphs, + op.glyphCount, textShadow.radius, op.positions); + // If the drop shadow exceeds the max texture size or couldn't be + // allocated, skip drawing + if (!texture) return; + const AutoTexture autoCleanup(texture); + + const float sx = op.x - texture->left + textShadow.dx; + const float sy = op.y - texture->top + textShadow.dy; + + Glop glop; + GlopBuilder(renderer.renderState(), renderer.caches(), &glop) + .setRoundRectClipState(state.roundRectClipState) + .setMeshTexturedUnitQuad(nullptr) + .setFillShadowTexturePaint(*texture, textShadow.color, *op.paint, state.alpha) + .setTransform(state.computedState.transform, TransformFlags::None) + .setModelViewMapUnitToRect(Rect(sx, sy, sx + texture->width, sy + texture->height)) + .build(); + renderer.renderGlop(state, glop); +} + +void BakedOpDispatcher::onTextOp(BakedOpRenderer& renderer, const TextOp& op, const BakedOpState& state) { + FontRenderer& fontRenderer = renderer.caches().fontRenderer.getFontRenderer(); + + if (CC_UNLIKELY(PaintUtils::hasTextShadow(op.paint))) { + fontRenderer.setFont(op.paint, SkMatrix::I()); + renderTextShadow(renderer, fontRenderer, op, state); + } + + float x = op.x; + float y = op.y; + const Matrix4& transform = state.computedState.transform; + const bool pureTranslate = transform.isPureTranslate(); + if (CC_LIKELY(pureTranslate)) { + x = floorf(x + transform.getTranslateX() + 0.5f); + y = floorf(y + transform.getTranslateY() + 0.5f); + fontRenderer.setFont(op.paint, SkMatrix::I()); + fontRenderer.setTextureFiltering(false); + } else if (CC_UNLIKELY(transform.isPerspective())) { + fontRenderer.setFont(op.paint, SkMatrix::I()); + fontRenderer.setTextureFiltering(true); + } else { + // We only pass a partial transform to the font renderer. That partial + // matrix defines how glyphs are rasterized. Typically we want glyphs + // to be rasterized at their final size on screen, which means the partial + // matrix needs to take the scale factor into account. + // When a partial matrix is used to transform glyphs during rasterization, + // the mesh is generated with the inverse transform (in the case of scale, + // the mesh is generated at 1.0 / scale for instance.) This allows us to + // apply the full transform matrix at draw time in the vertex shader. + // Applying the full matrix in the shader is the easiest way to handle + // rotation and perspective and allows us to always generated quads in the + // font renderer which greatly simplifies the code, clipping in particular. + float sx, sy; + transform.decomposeScale(sx, sy); + fontRenderer.setFont(op.paint, SkMatrix::MakeScale( + roundf(std::max(1.0f, sx)), + roundf(std::max(1.0f, sy)))); + fontRenderer.setTextureFiltering(true); + } + + // TODO: Implement better clipping for scaled/rotated text + const Rect* clip = !pureTranslate ? nullptr : &state.computedState.clipRect; + Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f); + + int alpha = PaintUtils::getAlphaDirect(op.paint) * state.alpha; + SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(op.paint); + TextDrawFunctor functor(&renderer, &state, x, y, pureTranslate, alpha, mode, op.paint); + + bool hasActiveLayer = false; // TODO + fontRenderer.renderPosText(op.paint, clip, (const char*) op.glyphs, op.glyphCount, x, y, + op.positions, hasActiveLayer ? &layerBounds : nullptr, &functor, true); // TODO: merging +} + void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) { OffscreenBuffer* buffer = *op.layerHandle; diff --git a/libs/hwui/Canvas.cpp b/libs/hwui/Canvas.cpp new file mode 100644 index 000000000000..bc88c817ffc8 --- /dev/null +++ b/libs/hwui/Canvas.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2015 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. + */ + +#include "Canvas.h" + +#include <SkDrawFilter.h> + +namespace android { + +void Canvas::drawTextDecorations(float x, float y, float length, const SkPaint& paint) { + uint32_t flags; + SkDrawFilter* drawFilter = getDrawFilter(); + if (drawFilter) { + SkPaint paintCopy(paint); + drawFilter->filter(&paintCopy, SkDrawFilter::kText_Type); + flags = paintCopy.getFlags(); + } else { + flags = paint.getFlags(); + } + if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) { + // Same values used by Skia + const float kStdStrikeThru_Offset = (-6.0f / 21.0f); + const float kStdUnderline_Offset = (1.0f / 9.0f); + const float kStdUnderline_Thickness = (1.0f / 18.0f); + + SkScalar left = x; + SkScalar right = x + length; + float textSize = paint.getTextSize(); + float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f); + if (flags & SkPaint::kUnderlineText_Flag) { + SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth; + SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth; + drawRect(left, top, right, bottom, paint); + } + if (flags & SkPaint::kStrikeThruText_Flag) { + SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth; + SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth; + drawRect(left, top, right, bottom, paint); + } + } +} + +} // namespace android diff --git a/libs/hwui/Canvas.h b/libs/hwui/Canvas.h index 4bd4ac8d4c37..b585a2799cad 100644 --- a/libs/hwui/Canvas.h +++ b/libs/hwui/Canvas.h @@ -149,16 +149,12 @@ public: // Text /** * drawText: count is of glyphs - * totalAdvance is ignored in software renderering, used by hardware renderer for - * text decorations (underlines, strikethroughs). + * totalAdvance: used to define width of text decorations (underlines, strikethroughs). */ virtual void drawText(const uint16_t* glyphs, const float* positions, int count, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, float totalAdvance) = 0; - /** drawPosText: count is of UTF16 characters, posCount is floats (2 * glyphs) */ - virtual void drawPosText(const uint16_t* text, const float* positions, int count, - int posCount, const SkPaint& paint) = 0; /** drawTextOnPath: count is of glyphs */ virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, float hOffset, float vOffset, const SkPaint& paint) = 0; @@ -171,6 +167,9 @@ public: * to be added to each glyph's position to get its absolute position. */ virtual bool drawTextAbsolutePos() const = 0; + +protected: + void drawTextDecorations(float x, float y, float length, const SkPaint& paint); }; }; // namespace android diff --git a/libs/hwui/DisplayListCanvas.cpp b/libs/hwui/DisplayListCanvas.cpp index f5e57355138c..759c12a3f214 100644 --- a/libs/hwui/DisplayListCanvas.cpp +++ b/libs/hwui/DisplayListCanvas.cpp @@ -423,18 +423,6 @@ void DisplayListCanvas::drawTextOnPath(const uint16_t* glyphs, int count, addDrawOp(op); } -void DisplayListCanvas::drawPosText(const uint16_t* text, const float* positions, - int count, int posCount, const SkPaint& paint) { - if (!text || count <= 0) return; - - int bytesCount = 2 * count; - positions = refBuffer<float>(positions, count * 2); - - DrawOp* op = new (alloc()) DrawPosTextOp(refText((const char*) text, bytesCount), - bytesCount, count, positions, refPaint(&paint)); - addDrawOp(op); -} - void DisplayListCanvas::drawText(const uint16_t* glyphs, const float* positions, int count, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, @@ -450,6 +438,7 @@ void DisplayListCanvas::drawText(const uint16_t* glyphs, const float* positions, DrawOp* op = new (alloc()) DrawTextOp(text, bytesCount, count, x, y, positions, refPaint(&paint), totalAdvance, bounds); addDrawOp(op); + drawTextDecorations(x, y, totalAdvance, paint); } void DisplayListCanvas::drawRegion(const SkRegion& region, const SkPaint& paint) { diff --git a/libs/hwui/DisplayListCanvas.h b/libs/hwui/DisplayListCanvas.h index 609103b89644..bf98f79d4d5a 100644 --- a/libs/hwui/DisplayListCanvas.h +++ b/libs/hwui/DisplayListCanvas.h @@ -212,8 +212,6 @@ public: virtual void drawText(const uint16_t* glyphs, const float* positions, int count, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, float totalAdvance) override; - virtual void drawPosText(const uint16_t* text, const float* positions, int count, - int posCount, const SkPaint& paint) override; virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, float hOffset, float vOffset, const SkPaint& paint) override; virtual bool drawTextAbsolutePos() const override { return false; } diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h index 772aa72b7fdc..977b53c31f46 100644 --- a/libs/hwui/DisplayListOp.h +++ b/libs/hwui/DisplayListOp.h @@ -1278,24 +1278,6 @@ private: float mVOffset; }; -class DrawPosTextOp : public DrawSomeTextOp { -public: - DrawPosTextOp(const char* text, int bytesCount, int count, - const float* positions, const SkPaint* paint) - : DrawSomeTextOp(text, bytesCount, count, paint), mPositions(positions) { - /* TODO: inherit from DrawBounded and init mLocalBounds */ - } - - virtual void applyDraw(OpenGLRenderer& renderer, Rect& dirty) override { - renderer.drawPosText(mText, mBytesCount, mCount, mPositions, mPaint); - } - - virtual const char* name() override { return "DrawPosText"; } - -private: - const float* mPositions; -}; - class DrawTextOp : public DrawStrokableOp { public: DrawTextOp(const char* text, int bytesCount, int count, float x, float y, diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp index ccf0b48cd4be..5f33cae2f91a 100644 --- a/libs/hwui/FontRenderer.cpp +++ b/libs/hwui/FontRenderer.cpp @@ -21,13 +21,20 @@ #include "Extensions.h" #include "Glop.h" #include "GlopBuilder.h" -#include "OpenGLRenderer.h" #include "PixelBuffer.h" #include "Rect.h" #include "renderstate/RenderState.h" #include "utils/Blur.h" #include "utils/Timing.h" + +#if HWUI_NEW_OPS +#include "BakedOpState.h" +#include "BakedOpRenderer.h" +#else +#include "OpenGLRenderer.h" +#endif + #include <algorithm> #include <cutils/properties.h> #include <SkGlyph.h> @@ -59,14 +66,25 @@ void TextDrawFunctor::draw(CacheTexture& texture, bool linearFiltering) { int transformFlags = pureTranslate ? TransformFlags::MeshIgnoresCanvasTransform : TransformFlags::None; Glop glop; +#if HWUI_NEW_OPS + GlopBuilder(renderer->renderState(), renderer->caches(), &glop) + .setRoundRectClipState(bakedState->roundRectClipState) + .setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount()) + .setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, bakedState->alpha) + .setTransform(bakedState->computedState.transform, transformFlags) + .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0)) + .build(); + renderer->renderGlop(*bakedState, glop); +#else GlopBuilder(renderer->mRenderState, renderer->mCaches, &glop) + .setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState) .setMeshTexturedIndexedQuads(texture.mesh(), texture.meshElementCount()) .setFillTexturePaint(texture.getTexture(), textureFillFlags, paint, renderer->currentSnapshot()->alpha) .setTransform(*(renderer->currentSnapshot()), transformFlags) .setModelViewOffsetRect(0, 0, Rect(0, 0, 0, 0)) - .setRoundRectClipState(renderer->currentSnapshot()->roundRectClipState) .build(); renderer->renderGlop(glop); +#endif } /////////////////////////////////////////////////////////////////////////////// @@ -539,7 +557,7 @@ void FontRenderer::setFont(const SkPaint* paint, const SkMatrix& matrix) { } FontRenderer::DropShadow FontRenderer::renderDropShadow(const SkPaint* paint, const char *text, - uint32_t startIndex, uint32_t len, int numGlyphs, float radius, const float* positions) { + int numGlyphs, float radius, const float* positions) { checkInit(); DropShadow image; @@ -558,7 +576,7 @@ FontRenderer::DropShadow FontRenderer::renderDropShadow(const SkPaint* paint, co mBounds = nullptr; Rect bounds; - mCurrentFont->measure(paint, text, startIndex, len, numGlyphs, &bounds, positions); + mCurrentFont->measure(paint, text, numGlyphs, &bounds, positions); uint32_t intRadius = Blur::convertRadiusToInt(radius); uint32_t paddedWidth = (uint32_t) (bounds.right - bounds.left) + 2 * intRadius; @@ -590,7 +608,7 @@ FontRenderer::DropShadow FontRenderer::renderDropShadow(const SkPaint* paint, co // text has non-whitespace, so draw and blur to create the shadow // NOTE: bounds.isEmpty() can't be used here, since vertical coordinates are inverted // TODO: don't draw pure whitespace in the first place, and avoid needing this check - mCurrentFont->render(paint, text, startIndex, len, numGlyphs, penX, penY, + mCurrentFont->render(paint, text, numGlyphs, penX, penY, Font::BITMAP, dataBuffer, paddedWidth, paddedHeight, nullptr, positions); // Unbind any PBO we might have used @@ -635,15 +653,15 @@ void FontRenderer::endPrecaching() { } bool FontRenderer::renderPosText(const SkPaint* paint, const Rect* clip, const char *text, - uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, - const float* positions, Rect* bounds, TextDrawFunctor* functor, bool forceFinish) { + int numGlyphs, int x, int y, const float* positions, + Rect* bounds, TextDrawFunctor* functor, bool forceFinish) { if (!mCurrentFont) { ALOGE("No font set"); return false; } initRender(clip, bounds, functor); - mCurrentFont->render(paint, text, startIndex, len, numGlyphs, x, y, positions); + mCurrentFont->render(paint, text, numGlyphs, x, y, positions); if (forceFinish) { finishRender(); @@ -653,15 +671,15 @@ bool FontRenderer::renderPosText(const SkPaint* paint, const Rect* clip, const c } bool FontRenderer::renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text, - uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path, - float hOffset, float vOffset, Rect* bounds, TextDrawFunctor* functor) { + int numGlyphs, const SkPath* path, float hOffset, float vOffset, + Rect* bounds, TextDrawFunctor* functor) { if (!mCurrentFont) { ALOGE("No font set"); return false; } initRender(clip, bounds, functor); - mCurrentFont->render(paint, text, startIndex, len, numGlyphs, path, hOffset, vOffset); + mCurrentFont->render(paint, text, numGlyphs, path, hOffset, vOffset); finishRender(); return mDrawn; diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h index 8172312e9a43..87cfe7ff98e0 100644 --- a/libs/hwui/FontRenderer.h +++ b/libs/hwui/FontRenderer.h @@ -44,13 +44,28 @@ namespace RSC { namespace android { namespace uirenderer { +#if HWUI_NEW_OPS +class BakedOpState; +class BakedOpRenderer; +#else class OpenGLRenderer; +#endif class TextDrawFunctor { public: - TextDrawFunctor(OpenGLRenderer* renderer, float x, float y, bool pureTranslate, + TextDrawFunctor( +#if HWUI_NEW_OPS + BakedOpRenderer* renderer, + const BakedOpState* bakedState, +#else + OpenGLRenderer* renderer, +#endif + float x, float y, bool pureTranslate, int alpha, SkXfermode::Mode mode, const SkPaint* paint) : renderer(renderer) +#if HWUI_NEW_OPS + , bakedState(bakedState) +#endif , x(x) , y(y) , pureTranslate(pureTranslate) @@ -61,7 +76,12 @@ public: void draw(CacheTexture& texture, bool linearFiltering); +#if HWUI_NEW_OPS + BakedOpRenderer* renderer; + const BakedOpState* bakedState; +#else OpenGLRenderer* renderer; +#endif float x; float y; bool pureTranslate; @@ -83,15 +103,13 @@ public: void precache(const SkPaint* paint, const char* text, int numGlyphs, const SkMatrix& matrix); void endPrecaching(); - // bounds is an out parameter bool renderPosText(const SkPaint* paint, const Rect* clip, const char *text, - uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, const float* positions, - Rect* bounds, TextDrawFunctor* functor, bool forceFinish = true); + int numGlyphs, int x, int y, const float* positions, + Rect* outBounds, TextDrawFunctor* functor, bool forceFinish = true); - // bounds is an out parameter bool renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text, - uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path, - float hOffset, float vOffset, Rect* bounds, TextDrawFunctor* functor); + int numGlyphs, const SkPath* path, + float hOffset, float vOffset, Rect* outBounds, TextDrawFunctor* functor); struct DropShadow { uint32_t width; @@ -103,8 +121,8 @@ public: // After renderDropShadow returns, the called owns the memory in DropShadow.image // and is responsible for releasing it when it's done with it - DropShadow renderDropShadow(const SkPaint* paint, const char *text, uint32_t startIndex, - uint32_t len, int numGlyphs, float radius, const float* positions); + DropShadow renderDropShadow(const SkPaint* paint, const char *text, int numGlyphs, + float radius, const float* positions); void setTextureFiltering(bool linearFiltering) { mLinearFiltering = linearFiltering; diff --git a/libs/hwui/OpReorderer.cpp b/libs/hwui/OpReorderer.cpp index 96cac7eedaf0..5e954ae6e971 100644 --- a/libs/hwui/OpReorderer.cpp +++ b/libs/hwui/OpReorderer.cpp @@ -671,6 +671,13 @@ void OpReorderer::onBitmapOp(const BitmapOp& op) { currentLayer().deferMergeableOp(mAllocator, bakedStateOp, OpBatchType::Bitmap, mergeId); } +void OpReorderer::onLinesOp(const LinesOp& op) { + BakedOpState* bakedStateOp = tryBakeOpState(op); + if (!bakedStateOp) return; // quick rejected + currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices); + +} + void OpReorderer::onRectOp(const RectOp& op) { BakedOpState* bakedStateOp = tryBakeOpState(op); if (!bakedStateOp) return; // quick rejected @@ -683,6 +690,17 @@ void OpReorderer::onSimpleRectsOp(const SimpleRectsOp& op) { currentLayer().deferUnmergeableOp(mAllocator, bakedStateOp, OpBatchType::Vertices); } +void OpReorderer::onTextOp(const TextOp& op) { + BakedOpState* bakedStateOp = tryBakeOpState(op); + if (!bakedStateOp) return; // quick rejected + + // TODO: better handling of shader (since we won't care about color then) + batchid_t batchId = op.paint->getColor() == SK_ColorBLACK + ? OpBatchType::Text : OpBatchType::ColorText; + mergeid_t mergeId = reinterpret_cast<mergeid_t>(op.paint->getColor()); + currentLayer().deferMergeableOp(mAllocator, bakedStateOp, batchId, mergeId); +} + void OpReorderer::saveForLayer(uint32_t layerWidth, uint32_t layerHeight, float contentTranslateX, float contentTranslateY, const Rect& repaintRect, diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 12c4607130ca..e386b1cacf74 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1950,7 +1950,7 @@ void OpenGLRenderer::drawRect(float left, float top, float right, float bottom, } void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, - int bytesCount, int count, const float* positions, + int count, const float* positions, FontRenderer& fontRenderer, int alpha, float x, float y) { mCaches.textureState().activateTexture(0); @@ -1963,7 +1963,7 @@ void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text, // if shader-based correction is enabled mCaches.dropShadowCache.setFontRenderer(fontRenderer); ShadowTexture* texture = mCaches.dropShadowCache.get( - paint, text, bytesCount, count, textShadow.radius, positions); + paint, text, count, textShadow.radius, positions); // If the drop shadow exceeds the max texture size or couldn't be // allocated, skip drawing if (!texture) return; @@ -1991,57 +1991,6 @@ bool OpenGLRenderer::canSkipText(const SkPaint* paint) const { && PaintUtils::getXfermode(paint->getXfermode()) == SkXfermode::kSrcOver_Mode; } -void OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count, - const float* positions, const SkPaint* paint) { - if (text == nullptr || count == 0 || mState.currentlyIgnored() || canSkipText(paint)) { - return; - } - - // NOTE: Skia does not support perspective transform on drawPosText yet - if (!currentTransform()->isSimple()) { - return; - } - - mRenderState.scissor().setEnabled(true); - - float x = 0.0f; - float y = 0.0f; - const bool pureTranslate = currentTransform()->isPureTranslate(); - if (pureTranslate) { - x = floorf(x + currentTransform()->getTranslateX() + 0.5f); - y = floorf(y + currentTransform()->getTranslateY() + 0.5f); - } - - FontRenderer& fontRenderer = mCaches.fontRenderer.getFontRenderer(); - fontRenderer.setFont(paint, SkMatrix::I()); - - int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; - SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); - - if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { - drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, - alpha, 0.0f, 0.0f); - } - - // Pick the appropriate texture filtering - bool linearFilter = currentTransform()->changesBounds(); - if (pureTranslate && !linearFilter) { - linearFilter = fabs(y - (int) y) > 0.0f || fabs(x - (int) x) > 0.0f; - } - fontRenderer.setTextureFiltering(linearFilter); - - const Rect& clip(pureTranslate ? writableSnapshot()->getRenderTargetClip() : writableSnapshot()->getLocalClip()); - Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f); - - TextDrawFunctor functor(this, x, y, pureTranslate, alpha, mode, paint); - if (fontRenderer.renderPosText(paint, &clip, text, 0, bytesCount, count, x, y, - positions, hasLayer() ? &bounds : nullptr, &functor)) { - dirtyLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, *currentTransform()); - mDirty = true; - } - -} - bool OpenGLRenderer::findBestFontTransform(const mat4& transform, SkMatrix* outMatrix) const { if (CC_LIKELY(transform.isPureTranslate())) { outMatrix->setIdentity(); @@ -2166,7 +2115,7 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float if (CC_UNLIKELY(PaintUtils::hasTextShadow(paint))) { fontRenderer.setFont(paint, SkMatrix::I()); - drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer, + drawTextShadow(paint, text, count, positions, fontRenderer, alpha, oldX, oldY); } @@ -2195,17 +2144,22 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f); bool status; +#if HWUI_NEW_OPS + LOG_ALWAYS_FATAL("unsupported"); + TextDrawFunctor functor(nullptr, nullptr, x, y, pureTranslate, alpha, mode, paint); +#else TextDrawFunctor functor(this, x, y, pureTranslate, alpha, mode, paint); +#endif // don't call issuedrawcommand, do it at end of batch bool forceFinish = (drawOpMode != DrawOpMode::kDefer); if (CC_UNLIKELY(paint->getTextAlign() != SkPaint::kLeft_Align)) { SkPaint paintCopy(*paint); paintCopy.setTextAlign(SkPaint::kLeft_Align); - status = fontRenderer.renderPosText(&paintCopy, clip, text, 0, bytesCount, count, x, y, + status = fontRenderer.renderPosText(&paintCopy, clip, text, count, x, y, positions, hasActiveLayer ? &layerBounds : nullptr, &functor, forceFinish); } else { - status = fontRenderer.renderPosText(paint, clip, text, 0, bytesCount, count, x, y, + status = fontRenderer.renderPosText(paint, clip, text, count, x, y, positions, hasActiveLayer ? &layerBounds : nullptr, &functor, forceFinish); } @@ -2216,8 +2170,6 @@ void OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float dirtyLayerUnchecked(layerBounds, getRegion()); } - drawTextDecorations(totalAdvance, oldX, oldY, paint); - mDirty = true; } @@ -2236,12 +2188,17 @@ void OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, int alpha = PaintUtils::getAlphaDirect(paint) * currentSnapshot()->alpha; SkXfermode::Mode mode = PaintUtils::getXfermodeDirect(paint); +#if HWUI_NEW_OPS + LOG_ALWAYS_FATAL("unsupported"); + TextDrawFunctor functor(nullptr, nullptr, 0.0f, 0.0f, false, alpha, mode, paint); +#else TextDrawFunctor functor(this, 0.0f, 0.0f, false, alpha, mode, paint); +#endif const Rect* clip = &writableSnapshot()->getLocalClip(); Rect bounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f); - if (fontRenderer.renderTextOnPath(paint, clip, text, 0, bytesCount, count, path, + if (fontRenderer.renderTextOnPath(paint, clip, text, count, path, hOffset, vOffset, hasLayer() ? &bounds : nullptr, &functor)) { dirtyLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, *currentTransform()); mDirty = true; @@ -2375,56 +2332,6 @@ void OpenGLRenderer::drawPathTexture(PathTexture* texture, float x, float y, renderGlop(glop); } -// Same values used by Skia -#define kStdStrikeThru_Offset (-6.0f / 21.0f) -#define kStdUnderline_Offset (1.0f / 9.0f) -#define kStdUnderline_Thickness (1.0f / 18.0f) - -void OpenGLRenderer::drawTextDecorations(float underlineWidth, float x, float y, - const SkPaint* paint) { - // Handle underline and strike-through - uint32_t flags = paint->getFlags(); - if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) { - SkPaint paintCopy(*paint); - - if (CC_LIKELY(underlineWidth > 0.0f)) { - const float textSize = paintCopy.getTextSize(); - const float strokeWidth = std::max(textSize * kStdUnderline_Thickness, 1.0f); - - const float left = x; - float top = 0.0f; - - int linesCount = 0; - if (flags & SkPaint::kUnderlineText_Flag) linesCount++; - if (flags & SkPaint::kStrikeThruText_Flag) linesCount++; - - const int pointsCount = 4 * linesCount; - float points[pointsCount]; - int currentPoint = 0; - - if (flags & SkPaint::kUnderlineText_Flag) { - top = y + textSize * kStdUnderline_Offset; - points[currentPoint++] = left; - points[currentPoint++] = top; - points[currentPoint++] = left + underlineWidth; - points[currentPoint++] = top; - } - - if (flags & SkPaint::kStrikeThruText_Flag) { - top = y + textSize * kStdStrikeThru_Offset; - points[currentPoint++] = left; - points[currentPoint++] = top; - points[currentPoint++] = left + underlineWidth; - points[currentPoint++] = top; - } - - paintCopy.setStrokeWidth(strokeWidth); - - drawLines(&points[0], pointsCount, &paintCopy); - } - } -} - void OpenGLRenderer::drawRects(const float* rects, int count, const SkPaint* paint) { if (mState.currentlyIgnored()) { return; diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h index 400c225b53a0..84bc9b059d33 100755 --- a/libs/hwui/OpenGLRenderer.h +++ b/libs/hwui/OpenGLRenderer.h @@ -193,8 +193,6 @@ public: void drawPoints(const float* points, int count, const SkPaint* paint); void drawTextOnPath(const char* text, int bytesCount, int count, const SkPath* path, float hOffset, float vOffset, const SkPaint* paint); - void drawPosText(const char* text, int bytesCount, int count, - const float* positions, const SkPaint* paint); void drawText(const char* text, int bytesCount, int count, float x, float y, const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds, DrawOpMode drawOpMode = DrawOpMode::kImmediate); @@ -637,24 +635,11 @@ private: */ void drawConvexPath(const SkPath& path, const SkPaint* paint); - /** - * Draws text underline and strike-through if needed. - * - * @param text The text to decor - * @param bytesCount The number of bytes in the text - * @param totalAdvance The total advance in pixels, defines underline/strikethrough length - * @param x The x coordinate where the text will be drawn - * @param y The y coordinate where the text will be drawn - * @param paint The paint to draw the text with - */ - void drawTextDecorations(float totalAdvance, float x, float y, const SkPaint* paint); - /** * Draws shadow layer on text (with optional positions). * * @param paint The paint to draw the shadow with * @param text The text to draw - * @param bytesCount The number of bytes in the text * @param count The number of glyphs in the text * @param positions The x, y positions of individual glyphs (or NULL) * @param fontRenderer The font renderer object @@ -662,7 +647,7 @@ private: * @param x The x coordinate where the shadow will be drawn * @param y The y coordinate where the shadow will be drawn */ - void drawTextShadow(const SkPaint* paint, const char* text, int bytesCount, int count, + void drawTextShadow(const SkPaint* paint, const char* text, int count, const float* positions, FontRenderer& fontRenderer, int alpha, float x, float y); diff --git a/libs/hwui/RecordedOp.h b/libs/hwui/RecordedOp.h index ef0536761a11..127dca5be440 100644 --- a/libs/hwui/RecordedOp.h +++ b/libs/hwui/RecordedOp.h @@ -17,6 +17,7 @@ #ifndef ANDROID_HWUI_RECORDED_OP_H #define ANDROID_HWUI_RECORDED_OP_H +#include "font/FontUtil.h" #include "Matrix.h" #include "Rect.h" #include "RenderNode.h" @@ -42,10 +43,12 @@ struct Vertex; */ #define MAP_OPS(OP_FN) \ OP_FN(BitmapOp) \ + OP_FN(LinesOp) \ OP_FN(RectOp) \ OP_FN(RenderNodeOp) \ OP_FN(ShadowOp) \ OP_FN(SimpleRectsOp) \ + OP_FN(TextOp) \ OP_FN(BeginLayerOp) \ OP_FN(EndLayerOp) \ OP_FN(LayerOp) @@ -98,6 +101,10 @@ struct RenderNodeOp : RecordedOp { bool skipInOrderDraw = false; }; +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Standard Ops +//////////////////////////////////////////////////////////////////////////////////////////////////// + struct BitmapOp : RecordedOp { BitmapOp(BASE_PARAMS, const SkBitmap* bitmap) : SUPER(BitmapOp) @@ -106,6 +113,15 @@ struct BitmapOp : RecordedOp { // TODO: asset atlas/texture id lookup? }; +struct LinesOp : RecordedOp { + LinesOp(BASE_PARAMS, const float* points, const int floatCount) + : SUPER(LinesOp) + , points(points) + , floatCount(floatCount) {} + const float* points; + const int floatCount; +}; + struct RectOp : RecordedOp { RectOp(BASE_PARAMS) : SUPER(RectOp) {} @@ -148,6 +164,27 @@ struct SimpleRectsOp : RecordedOp { // Filled, no AA (TODO: better name?) const size_t vertexCount; }; +struct TextOp : RecordedOp { + TextOp(BASE_PARAMS, const glyph_t* glyphs, const float* positions, int glyphCount, + float x, float y) + : SUPER(TextOp) + , glyphs(glyphs) + , positions(positions) + , glyphCount(glyphCount) + , x(x) + , y(y) {} + const glyph_t* glyphs; + const float* positions; + const int glyphCount; + const float x; + const float y; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// Layers +//////////////////////////////////////////////////////////////////////////////////////////////////// + + /** * Stateful operation! denotes the creation of an off-screen layer, * and that commands following will render into it. diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp index 6ab253c2491f..61fa3844df27 100644 --- a/libs/hwui/RecordingCanvas.cpp +++ b/libs/hwui/RecordingCanvas.cpp @@ -230,12 +230,9 @@ void RecordingCanvas::drawColor(int color, SkXfermode::Mode mode) { void RecordingCanvas::drawPaint(const SkPaint& paint) { // TODO: more efficient recording? - Matrix4 identity; - identity.loadIdentity(); - addOp(new (alloc()) RectOp( mState.getRenderTargetClipBounds(), - identity, + Matrix4::identity(), mState.getRenderTargetClipBounds(), refPaint(&paint))); } @@ -244,9 +241,30 @@ void RecordingCanvas::drawPaint(const SkPaint& paint) { void RecordingCanvas::drawPoints(const float* points, int count, const SkPaint& paint) { LOG_ALWAYS_FATAL("TODO!"); } -void RecordingCanvas::drawLines(const float* points, int count, const SkPaint& paint) { - LOG_ALWAYS_FATAL("TODO!"); + +void RecordingCanvas::drawLines(const float* points, int floatCount, const SkPaint& paint) { + if (floatCount < 4) return; + floatCount &= ~0x3; // round down to nearest four + + Rect unmappedBounds(points[0], points[1], points[0], points[1]); + for (int i = 2; i < floatCount; i += 2) { + unmappedBounds.left = std::min(unmappedBounds.left, points[i]); + unmappedBounds.right = std::max(unmappedBounds.right, points[i]); + unmappedBounds.top = std::min(unmappedBounds.top, points[i + 1]); + unmappedBounds.bottom = std::max(unmappedBounds.bottom, points[i + 1]); + } + + // since anything AA stroke with less than 1.0 pixel width is drawn with an alpha-reduced + // 1.0 stroke, treat 1.0 as minimum. + unmappedBounds.outset(std::max(paint.getStrokeWidth(), 1.0f) * 0.5f); + + addOp(new (alloc()) LinesOp( + unmappedBounds, + *mState.currentSnapshot()->transform, + mState.getRenderTargetClipBounds(), + refPaint(&paint), refBuffer<float>(points, floatCount), floatCount)); } + void RecordingCanvas::drawRect(float left, float top, float right, float bottom, const SkPaint& paint) { addOp(new (alloc()) RectOp( Rect(left, top, right, bottom), @@ -388,17 +406,24 @@ void RecordingCanvas::drawNinePatch(const SkBitmap& bitmap, const android::Res_p } // Text -void RecordingCanvas::drawText(const uint16_t* glyphs, const float* positions, int count, +void RecordingCanvas::drawText(const uint16_t* glyphs, const float* positions, int glyphCount, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, float totalAdvance) { - LOG_ALWAYS_FATAL("TODO!"); -} -void RecordingCanvas::drawPosText(const uint16_t* text, const float* positions, int count, - int posCount, const SkPaint& paint) { - LOG_ALWAYS_FATAL("TODO!"); + if (!glyphs || !positions || glyphCount <= 0 || PaintUtils::paintWillNotDrawText(paint)) return; + glyphs = refBuffer<glyph_t>(glyphs, glyphCount); + positions = refBuffer<float>(positions, glyphCount * 2); + + addOp(new (alloc()) TextOp( + Rect(boundsLeft, boundsTop, boundsRight, boundsBottom), + *(mState.currentSnapshot()->transform), + mState.getRenderTargetClipBounds(), + refPaint(&paint), glyphs, positions, glyphCount, x, y)); + drawTextDecorations(x, y, totalAdvance, paint); } + void RecordingCanvas::drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, float hOffset, float vOffset, const SkPaint& paint) { + // NOTE: can't use refPaint() directly, since it forces left alignment LOG_ALWAYS_FATAL("TODO!"); } diff --git a/libs/hwui/RecordingCanvas.h b/libs/hwui/RecordingCanvas.h index f26b0c827604..736cc9ecaf2a 100644 --- a/libs/hwui/RecordingCanvas.h +++ b/libs/hwui/RecordingCanvas.h @@ -178,8 +178,6 @@ public: virtual void drawText(const uint16_t* glyphs, const float* positions, int count, const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, float totalAdvance) override; - virtual void drawPosText(const uint16_t* text, const float* positions, int count, - int posCount, const SkPaint& paint) override; virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, float hOffset, float vOffset, const SkPaint& paint) override; virtual bool drawTextAbsolutePos() const override { return false; } @@ -221,6 +219,15 @@ private: return cachedPath; } + /** + * Returns a RenderThread-safe, const copy of the SkPaint parameter passed in (with deduping + * based on paint generation ID) + * + * Note that this forces Left_Align, since drawText glyph rendering expects left alignment, + * since alignment offsetting has been done at a higher level. This is done to essentially all + * copied paints, since the deduping can mean a paint is shared by drawText commands and other + * types (which wouldn't care about alignment). + */ inline const SkPaint* refPaint(const SkPaint* paint) { if (!paint) return nullptr; @@ -239,10 +246,11 @@ private: // In the unlikely event that 2 unique paints have the same hash we do a // object equality check to ensure we don't erroneously dedup them. if (cachedPaint == nullptr || *cachedPaint != *paint) { - cachedPaint = new SkPaint(*paint); - std::unique_ptr<const SkPaint> copy(cachedPaint); - mDisplayList->paints.push_back(std::move(copy)); + SkPaint* copy = new SkPaint(*paint); + copy->setTextAlign(SkPaint::kLeft_Align); + cachedPaint = copy; + mDisplayList->paints.emplace_back(copy); // replaceValueFor() performs an add if the entry doesn't exist mPaintMap.replaceValueFor(key, cachedPaint); refBitmapsInShader(cachedPaint->getShader()); diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h index 0736a109e572..472aad711432 100644 --- a/libs/hwui/Rect.h +++ b/libs/hwui/Rect.h @@ -260,13 +260,6 @@ public: bottom = std::max(bottom, y); } - void expandToCoverRect(float otherLeft, float otherTop, float otherRight, float otherBottom) { - left = std::min(left, otherLeft); - top = std::min(top, otherTop); - right = std::max(right, otherRight); - bottom = std::max(bottom, otherBottom); - } - SkRect toSkRect() const { return SkRect::MakeLTRB(left, top, right, bottom); } diff --git a/libs/hwui/SkiaCanvas.cpp b/libs/hwui/SkiaCanvas.cpp index 6d3dfac4ba9c..96c1a7c18db9 100644 --- a/libs/hwui/SkiaCanvas.cpp +++ b/libs/hwui/SkiaCanvas.cpp @@ -131,8 +131,6 @@ public: const SkPaint& paint, float x, float y, float boundsLeft, float boundsTop, float boundsRight, float boundsBottom, float totalAdvance) override; - virtual void drawPosText(const uint16_t* text, const float* positions, int count, - int posCount, const SkPaint& paint) override; virtual void drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, float hOffset, float vOffset, const SkPaint& paint) override; @@ -152,7 +150,6 @@ private: void drawPoints(const float* points, int count, const SkPaint& paint, SkCanvas::PointMode mode); - void drawTextDecorations(float x, float y, float length, const SkPaint& paint); SkAutoTUnref<SkCanvas> mCanvas; std::unique_ptr<SkDeque> mSaveStack; // lazily allocated, tracks partial saves. @@ -712,22 +709,7 @@ void SkiaCanvas::drawText(const uint16_t* text, const float* positions, int coun static_assert(sizeof(SkPoint) == sizeof(float)*2, "SkPoint is no longer two floats"); mCanvas->drawPosText(text, count << 1, reinterpret_cast<const SkPoint*>(positions), paintCopy); -} - -void SkiaCanvas::drawPosText(const uint16_t* text, const float* positions, int count, int posCount, - const SkPaint& paint) { - SkPoint* posPtr = posCount > 0 ? new SkPoint[posCount] : NULL; - int indx; - for (indx = 0; indx < posCount; indx++) { - posPtr[indx].fX = positions[indx << 1]; - posPtr[indx].fY = positions[(indx << 1) + 1]; - } - - SkPaint paintCopy(paint); - paintCopy.setTextEncoding(SkPaint::kUTF16_TextEncoding); - mCanvas->drawPosText(text, count, posPtr, paintCopy); - - delete[] posPtr; + drawTextDecorations(x, y, totalAdvance, paint); } void SkiaCanvas::drawTextOnPath(const uint16_t* glyphs, int count, const SkPath& path, diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp index b7a76baadff5..996ac8ebc447 100644 --- a/libs/hwui/TextDropShadowCache.cpp +++ b/libs/hwui/TextDropShadowCache.cpp @@ -30,8 +30,7 @@ namespace uirenderer { /////////////////////////////////////////////////////////////////////////////// hash_t ShadowText::hash() const { - uint32_t charCount = len / sizeof(char16_t); - uint32_t hash = JenkinsHashMix(0, len); + uint32_t hash = JenkinsHashMix(0, glyphCount); hash = JenkinsHashMix(hash, android::hash_type(radius)); hash = JenkinsHashMix(hash, android::hash_type(textSize)); hash = JenkinsHashMix(hash, android::hash_type(typeface)); @@ -40,10 +39,10 @@ hash_t ShadowText::hash() const { hash = JenkinsHashMix(hash, android::hash_type(scaleX)); if (text) { hash = JenkinsHashMixShorts( - hash, reinterpret_cast<const uint16_t*>(text), charCount); + hash, reinterpret_cast<const uint16_t*>(text), glyphCount); } if (positions) { - for (uint32_t i = 0; i < charCount * 2; i++) { + for (uint32_t i = 0; i < glyphCount * 2; i++) { hash = JenkinsHashMix(hash, android::hash_type(positions[i])); } } @@ -51,7 +50,7 @@ hash_t ShadowText::hash() const { } int ShadowText::compare(const ShadowText& lhs, const ShadowText& rhs) { - int deltaInt = int(lhs.len) - int(rhs.len); + int deltaInt = int(lhs.glyphCount) - int(rhs.glyphCount); if (deltaInt != 0) return deltaInt; deltaInt = lhs.flags - rhs.flags; @@ -76,7 +75,7 @@ int ShadowText::compare(const ShadowText& lhs, const ShadowText& rhs) { if (!lhs.text) return -1; if (!rhs.text) return +1; - deltaInt = memcmp(lhs.text, rhs.text, lhs.len); + deltaInt = memcmp(lhs.text, rhs.text, lhs.glyphCount * sizeof(glyph_t)); if (deltaInt != 0) return deltaInt; } @@ -84,7 +83,7 @@ int ShadowText::compare(const ShadowText& lhs, const ShadowText& rhs) { if (!lhs.positions) return -1; if (!rhs.positions) return +1; - return memcmp(lhs.positions, rhs.positions, lhs.len << 2); + return memcmp(lhs.positions, rhs.positions, lhs.glyphCount << 1); } return 0; @@ -168,16 +167,16 @@ void TextDropShadowCache::clear() { mCache.clear(); } -ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* text, uint32_t len, - int numGlyphs, float radius, const float* positions) { - ShadowText entry(paint, radius, len, text, positions); +ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* glyphs, int numGlyphs, + float radius, const float* positions) { + ShadowText entry(paint, radius, numGlyphs * 2, glyphs, positions); ShadowTexture* texture = mCache.get(entry); if (!texture) { SkPaint paintCopy(*paint); paintCopy.setTextAlign(SkPaint::kLeft_Align); - FontRenderer::DropShadow shadow = mRenderer->renderDropShadow(&paintCopy, text, 0, - len, numGlyphs, radius, positions); + FontRenderer::DropShadow shadow = mRenderer->renderDropShadow(&paintCopy, glyphs, numGlyphs, + radius, positions); if (!shadow.image) { return nullptr; diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h index caf089f6d2a5..c4f3c5d96786 100644 --- a/libs/hwui/TextDropShadowCache.h +++ b/libs/hwui/TextDropShadowCache.h @@ -34,14 +34,14 @@ class Caches; class FontRenderer; struct ShadowText { - ShadowText(): len(0), radius(0.0f), textSize(0.0f), typeface(nullptr), + ShadowText(): glyphCount(0), radius(0.0f), textSize(0.0f), typeface(nullptr), flags(0), italicStyle(0.0f), scaleX(0), text(nullptr), positions(nullptr) { } // len is the number of bytes in text - ShadowText(const SkPaint* paint, float radius, uint32_t len, const char* srcText, + ShadowText(const SkPaint* paint, float radius, uint32_t glyphCount, const char* srcText, const float* positions): - len(len), radius(radius), positions(positions) { + glyphCount(glyphCount), radius(radius), positions(positions) { // TODO: Propagate this through the API, we should not cast here text = (const char16_t*) srcText; @@ -73,17 +73,16 @@ struct ShadowText { } void copyTextLocally() { - uint32_t charCount = len / sizeof(char16_t); - str.setTo((const char16_t*) text, charCount); + str.setTo((const char16_t*) text, glyphCount); text = str.string(); if (positions != nullptr) { positionsCopy.clear(); - positionsCopy.appendArray(positions, charCount * 2); + positionsCopy.appendArray(positions, glyphCount * 2); positions = positionsCopy.array(); } } - uint32_t len; + uint32_t glyphCount; float radius; float textSize; SkTypeface* typeface; @@ -136,7 +135,7 @@ public: */ void operator()(ShadowText& text, ShadowTexture*& texture) override; - ShadowTexture* get(const SkPaint* paint, const char* text, uint32_t len, + ShadowTexture* get(const SkPaint* paint, const char* text, int numGlyphs, float radius, const float* positions); /** diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp index d680f990a0be..dc82041e8f89 100644 --- a/libs/hwui/font/Font.cpp +++ b/libs/hwui/font/Font.cpp @@ -291,20 +291,18 @@ CachedGlyphInfo* Font::getCachedGlyph(const SkPaint* paint, glyph_t textUnit, bo return cachedGlyph; } -void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len, +void Font::render(const SkPaint* paint, const char *text, int numGlyphs, int x, int y, const float* positions) { - render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, nullptr, + render(paint, text, numGlyphs, x, y, FRAMEBUFFER, nullptr, 0, 0, nullptr, positions); } -void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len, - int numGlyphs, const SkPath* path, float hOffset, float vOffset) { - if (numGlyphs == 0 || text == nullptr || len == 0) { +void Font::render(const SkPaint* paint, const char *text, int numGlyphs, + const SkPath* path, float hOffset, float vOffset) { + if (numGlyphs == 0 || text == nullptr) { return; } - text += start; - int glyphsCount = 0; SkFixed prevRsbDelta = 0; @@ -317,7 +315,7 @@ void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32 float pathLength = SkScalarToFloat(measure.getLength()); if (paint->getTextAlign() != SkPaint::kLeft_Align) { - float textWidth = SkScalarToFloat(paint->measureText(text, len)); + float textWidth = SkScalarToFloat(paint->measureText(text, numGlyphs * 2)); float pathOffset = pathLength; if (paint->getTextAlign() == SkPaint::kCenter_Align) { textWidth *= 0.5f; @@ -347,14 +345,14 @@ void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32 } } -void Font::measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len, +void Font::measure(const SkPaint* paint, const char* text, int numGlyphs, Rect *bounds, const float* positions) { if (bounds == nullptr) { ALOGE("No return rectangle provided to measure text"); return; } bounds->set(1e6, -1e6, -1e6, 1e6); - render(paint, text, start, len, numGlyphs, 0, 0, MEASURE, nullptr, 0, 0, bounds, positions); + render(paint, text, numGlyphs, 0, 0, MEASURE, nullptr, 0, 0, bounds, positions); } void Font::precache(const SkPaint* paint, const char* text, int numGlyphs) { @@ -378,10 +376,10 @@ void Font::precache(const SkPaint* paint, const char* text, int numGlyphs) { } } -void Font::render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len, +void Font::render(const SkPaint* paint, const char* text, int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* positions) { - if (numGlyphs == 0 || text == nullptr || len == 0) { + if (numGlyphs == 0 || text == nullptr) { return; } @@ -395,7 +393,6 @@ void Font::render(const SkPaint* paint, const char* text, uint32_t start, uint32 }; RenderGlyph render = gRenderGlyph[(mode << 1) + !mIdentityTransform]; - text += start; int glyphsCount = 0; while (glyphsCount < numGlyphs) { diff --git a/libs/hwui/font/Font.h b/libs/hwui/font/Font.h index 3119d734bc2b..59518a1fb8ee 100644 --- a/libs/hwui/font/Font.h +++ b/libs/hwui/font/Font.h @@ -82,10 +82,10 @@ public: ~Font(); - void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len, + void render(const SkPaint* paint, const char* text, int numGlyphs, int x, int y, const float* positions); - void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len, + void render(const SkPaint* paint, const char* text, int numGlyphs, const SkPath* path, float hOffset, float vOffset); const Font::FontDescription& getDescription() const { @@ -113,11 +113,11 @@ private: void precache(const SkPaint* paint, const char* text, int numGlyphs); - void render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len, + void render(const SkPaint* paint, const char *text, int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH, Rect *bounds, const float* positions); - void measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len, + void measure(const SkPaint* paint, const char* text, int numGlyphs, Rect *bounds, const float* positions); void invalidateTextureCache(CacheTexture* cacheTexture = nullptr); diff --git a/libs/hwui/unit_tests/OpReordererTests.cpp b/libs/hwui/unit_tests/OpReordererTests.cpp index ec8048dae014..d76086c9cfcd 100644 --- a/libs/hwui/unit_tests/OpReordererTests.cpp +++ b/libs/hwui/unit_tests/OpReordererTests.cpp @@ -136,14 +136,14 @@ TEST(OpReorderer, simpleRejection) { } TEST(OpReorderer, simpleBatching) { - static int SIMPLE_BATCHING_LOOPS = 5; + const int LOOPS = 5; class SimpleBatchingTestRenderer : public TestRendererBase { public: void onBitmapOp(const BitmapOp& op, const BakedOpState& state) override { - EXPECT_TRUE(mIndex++ >= SIMPLE_BATCHING_LOOPS); + EXPECT_TRUE(mIndex++ >= LOOPS) << "Bitmaps should be above all rects"; } void onRectOp(const RectOp& op, const BakedOpState& state) override { - EXPECT_TRUE(mIndex++ < SIMPLE_BATCHING_LOOPS); + EXPECT_TRUE(mIndex++ < LOOPS) << "Rects should be below all bitmaps"; } }; @@ -153,7 +153,7 @@ TEST(OpReorderer, simpleBatching) { // Alternate between drawing rects and bitmaps, with bitmaps overlapping rects. // Rects don't overlap bitmaps, so bitmaps should be brought to front as a group. canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); - for (int i = 0; i < SIMPLE_BATCHING_LOOPS; i++) { + for (int i = 0; i < LOOPS; i++) { canvas.translate(0, 10); canvas.drawRect(0, 0, 10, 10, SkPaint()); canvas.drawBitmap(bitmap, 5, 0, nullptr); @@ -164,7 +164,35 @@ TEST(OpReorderer, simpleBatching) { OpReorderer reorderer(200, 200, *dl, sLightCenter); SimpleBatchingTestRenderer renderer; reorderer.replayBakedOps<TestDispatcher>(renderer); - EXPECT_EQ(2 * SIMPLE_BATCHING_LOOPS, renderer.getIndex()); // 2 x loops ops, because no merging (TODO: force no merging) + EXPECT_EQ(2 * LOOPS, renderer.getIndex()) + << "Expect number of ops = 2 * loop count"; // TODO: force no merging +} + +TEST(OpReorderer, textStrikethroughBatching) { + const int LOOPS = 5; + class TextStrikethroughTestRenderer : public TestRendererBase { + public: + void onRectOp(const RectOp& op, const BakedOpState& state) override { + EXPECT_TRUE(mIndex++ >= LOOPS) << "Strikethrough rects should be above all text"; + } + void onTextOp(const TextOp& op, const BakedOpState& state) override { + EXPECT_TRUE(mIndex++ < LOOPS) << "Text should be beneath all strikethrough rects"; + } + }; + auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 2000, [](RecordingCanvas& canvas) { + SkPaint textPaint; + textPaint.setAntiAlias(true); + textPaint.setTextSize(20); + textPaint.setStrikeThruText(true); + for (int i = 0; i < LOOPS; i++) { + TestUtils::drawTextToCanvas(&canvas, "test text", textPaint, 10, 100 * (i + 1)); + } + }); + OpReorderer reorderer(200, 2000, *dl, sLightCenter); + TextStrikethroughTestRenderer renderer; + reorderer.replayBakedOps<TestDispatcher>(renderer); + EXPECT_EQ(2 * LOOPS, renderer.getIndex()) + << "Expect number of ops = 2 * loop count"; // TODO: force no merging } TEST(OpReorderer, renderNode) { diff --git a/libs/hwui/unit_tests/RecordingCanvasTests.cpp b/libs/hwui/unit_tests/RecordingCanvasTests.cpp index 22190f50cbe5..c23d47e3fab4 100644 --- a/libs/hwui/unit_tests/RecordingCanvasTests.cpp +++ b/libs/hwui/unit_tests/RecordingCanvasTests.cpp @@ -41,21 +41,110 @@ TEST(RecordingCanvas, emptyPlayback) { playbackOps(*dl, [](const RecordedOp& op) { ADD_FAILURE(); }); } -TEST(RecordingCanvas, testSimpleRectRecord) { +TEST(RecordingCanvas, drawLines) { + auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) { + SkPaint paint; + paint.setStrokeWidth(20); + float points[] = { 0, 0, 20, 10, 30, 40, 90 }; // NB: only 1 valid line + canvas.drawLines(&points[0], 7, paint); + }); + + ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op"; + auto op = dl->getOps()[0]; + ASSERT_EQ(RecordedOpId::LinesOp, op->opId); + EXPECT_EQ(4, ((LinesOp*)op)->floatCount) + << "float count must be rounded down to closest multiple of 4"; + EXPECT_EQ(Rect(-10, -10, 30, 20), op->unmappedBounds) + << "unmapped bounds must be size of line, outset by 1/2 stroke width"; +} + +TEST(RecordingCanvas, drawRect) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) { canvas.drawRect(10, 20, 90, 180, SkPaint()); }); + ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op"; + auto op = *(dl->getOps()[0]); + ASSERT_EQ(RecordedOpId::RectOp, op.opId); + EXPECT_EQ(Rect(0, 0, 100, 200), op.localClipRect); + EXPECT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds); +} + +TEST(RecordingCanvas, drawText) { + auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { + SkPaint paint; + paint.setAntiAlias(true); + paint.setTextSize(20); + TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25); + }); + int count = 0; playbackOps(*dl, [&count](const RecordedOp& op) { count++; - ASSERT_EQ(RecordedOpId::RectOp, op.opId); - ASSERT_EQ(Rect(0, 0, 100, 200), op.localClipRect); - ASSERT_EQ(Rect(10, 20, 90, 180), op.unmappedBounds); + ASSERT_EQ(RecordedOpId::TextOp, op.opId); + EXPECT_EQ(Rect(0, 0, 200, 200), op.localClipRect); + EXPECT_TRUE(op.localMatrix.isIdentity()); + EXPECT_TRUE(op.unmappedBounds.contains(25, 15, 50, 25)) + << "Op expected to be 25+ pixels wide, 10+ pixels tall"; }); ASSERT_EQ(1, count); } +TEST(RecordingCanvas, drawText_strikeThruAndUnderline) { + auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { + SkPaint paint; + paint.setAntiAlias(true); + paint.setTextSize(20); + for (int i = 0; i < 2; i++) { + for (int j = 0; j < 2; j++) { + paint.setUnderlineText(i != 0); + paint.setStrikeThruText(j != 0); + TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25); + } + } + }); + + auto ops = dl->getOps(); + ASSERT_EQ(8u, ops.size()); + + int index = 0; + EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId); // no underline or strikethrough + + EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId); + EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // strikethrough only + + EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId); + EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // underline only + + EXPECT_EQ(RecordedOpId::TextOp, ops[index++]->opId); + EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // underline + EXPECT_EQ(RecordedOpId::RectOp, ops[index++]->opId); // strikethrough +} + +TEST(RecordingCanvas, drawText_forceAlignLeft) { + auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { + SkPaint paint; + paint.setAntiAlias(true); + paint.setTextSize(20); + paint.setTextAlign(SkPaint::kLeft_Align); + TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25); + paint.setTextAlign(SkPaint::kCenter_Align); + TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25); + paint.setTextAlign(SkPaint::kRight_Align); + TestUtils::drawTextToCanvas(&canvas, "test text", paint, 25, 25); + }); + + int count = 0; + playbackOps(*dl, [&count](const RecordedOp& op) { + count++; + ASSERT_EQ(RecordedOpId::TextOp, op.opId); + EXPECT_EQ(SkPaint::kLeft_Align, op.paint->getTextAlign()) + << "recorded drawText commands must force kLeft_Align on their paint"; + EXPECT_EQ(SkPaint::kGlyphID_TextEncoding, op.paint->getTextEncoding()); // verify TestUtils + }); + ASSERT_EQ(3, count); +} + TEST(RecordingCanvas, backgroundAndImage) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) { SkBitmap bitmap; @@ -109,7 +198,7 @@ TEST(RecordingCanvas, backgroundAndImage) { ASSERT_EQ(2, count); } -TEST(RecordingCanvas, saveLayerSimple) { +TEST(RecordingCanvas, saveLayer_simple) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { canvas.saveLayerAlpha(10, 20, 190, 180, 128, SkCanvas::kARGB_ClipLayer_SaveFlag); canvas.drawRect(10, 20, 190, 180, SkPaint()); @@ -143,7 +232,7 @@ TEST(RecordingCanvas, saveLayerSimple) { EXPECT_EQ(3, count); } -TEST(RecordingCanvas, saveLayerViewportCrop) { +TEST(RecordingCanvas, saveLayer_viewportCrop) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { // shouldn't matter, since saveLayer will clip to its bounds canvas.clipRect(-1000, -1000, 1000, 1000, SkRegion::kReplace_Op); @@ -167,7 +256,7 @@ TEST(RecordingCanvas, saveLayerViewportCrop) { EXPECT_EQ(3, count); } -TEST(RecordingCanvas, saveLayerRotateUnclipped) { +TEST(RecordingCanvas, saveLayer_rotateUnclipped) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); canvas.translate(100, 100); @@ -193,7 +282,7 @@ TEST(RecordingCanvas, saveLayerRotateUnclipped) { EXPECT_EQ(3, count); } -TEST(RecordingCanvas, saveLayerRotateClipped) { +TEST(RecordingCanvas, saveLayer_rotateClipped) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { canvas.save(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag); canvas.translate(100, 100); @@ -224,7 +313,7 @@ TEST(RecordingCanvas, saveLayerRotateClipped) { EXPECT_EQ(3, count); } -TEST(RecordingCanvas, testReorderBarrier) { +TEST(RecordingCanvas, insertReorderBarrier) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { canvas.drawRect(0, 0, 400, 400, SkPaint()); canvas.insertReorderBarrier(true); diff --git a/libs/hwui/utils/TestUtils.cpp b/libs/hwui/utils/TestUtils.cpp index 84230a72f1c2..dd6fc36b8042 100644 --- a/libs/hwui/utils/TestUtils.cpp +++ b/libs/hwui/utils/TestUtils.cpp @@ -36,5 +36,46 @@ SkColor TestUtils::interpolateColor(float fraction, SkColor start, SkColor end) | (int)((startB + (int)(fraction * (endB - startB)))); } +void TestUtils::drawTextToCanvas(TestCanvas* canvas, const char* text, + const SkPaint& inPaint, float x, float y) { + // copy to force TextEncoding (which JNI layer would have done) + SkPaint paint(inPaint); + paint.setTextEncoding(SkPaint::kGlyphID_TextEncoding); + + SkMatrix identity; + identity.setIdentity(); + SkSurfaceProps surfaceProps(0, kUnknown_SkPixelGeometry); + SkAutoGlyphCacheNoGamma autoCache(paint, &surfaceProps, &identity); + + float totalAdvance = 0; + std::vector<glyph_t> glyphs; + std::vector<float> positions; + Rect bounds; + while (*text != '\0') { + SkUnichar unichar = SkUTF8_NextUnichar(&text); + glyph_t glyph = autoCache.getCache()->unicharToGlyph(unichar); + autoCache.getCache()->unicharToGlyph(unichar); + + // push glyph and its relative position + glyphs.push_back(glyph); + positions.push_back(totalAdvance); + positions.push_back(0); + + // compute bounds + SkGlyph skGlyph = autoCache.getCache()->getUnicharMetrics(unichar); + Rect glyphBounds(skGlyph.fWidth, skGlyph.fHeight); + glyphBounds.translate(totalAdvance + skGlyph.fLeft, skGlyph.fTop); + bounds.unionWith(glyphBounds); + + // advance next character + SkScalar skWidth; + paint.getTextWidths(&glyph, sizeof(glyph), &skWidth, NULL); + totalAdvance += skWidth; + } + bounds.translate(x, y); + canvas->drawText(glyphs.data(), positions.data(), glyphs.size(), paint, x, y, + bounds.left, bounds.top, bounds.right, bounds.bottom, totalAdvance); +} + } /* namespace uirenderer */ } /* namespace android */ diff --git a/libs/hwui/utils/TestUtils.h b/libs/hwui/utils/TestUtils.h index f7f4f2d1ca10..f9fa242ec833 100644 --- a/libs/hwui/utils/TestUtils.h +++ b/libs/hwui/utils/TestUtils.h @@ -196,6 +196,9 @@ public: static SkColor interpolateColor(float fraction, SkColor start, SkColor end); + static void drawTextToCanvas(TestCanvas* canvas, const char* text, + const SkPaint& inPaint, float x, float y); + private: static void syncHierarchyPropertiesAndDisplayListImpl(RenderNode* node) { node->syncProperties(); diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml index d45345e41584..595928a373f9 100644 --- a/packages/DocumentsUI/AndroidManifest.xml +++ b/packages/DocumentsUI/AndroidManifest.xml @@ -71,7 +71,7 @@ <action android:name="android.intent.action.MAIN" /> </intent-filter> <intent-filter> - <action android:name="android.provider.action.BROWSE_DOCUMENT_ROOT" /> + <action android:name="android.provider.action.BROWSE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.document/root" /> </intent-filter> diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java index b9a9c24576fc..2e96f18bedb2 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java @@ -159,6 +159,7 @@ public class SettingsBackupAgent extends BackupAgentHelper { String key_mgmt = ""; boolean certUsed = false; boolean hasWepKey = false; + boolean isEap = false; final ArrayList<String> rawLines = new ArrayList<String>(); public static Network readFromStream(BufferedReader in) { @@ -189,6 +190,9 @@ public class SettingsBackupAgent extends BackupAgentHelper { ssid = line; } else if (line.startsWith("key_mgmt=")) { key_mgmt = line; + if (line.contains("EAP")) { + isEap = true; + } } else if (line.startsWith("client_cert=")) { certUsed = true; } else if (line.startsWith("ca_cert=")) { @@ -197,6 +201,8 @@ public class SettingsBackupAgent extends BackupAgentHelper { certUsed = true; } else if (line.startsWith("wep_")) { hasWepKey = true; + } else if (line.startsWith("eap=")) { + isEap = true; } } @@ -325,6 +331,13 @@ public class SettingsBackupAgent extends BackupAgentHelper { continue; } } + // Don't propagate EAP network definitions + if (net.isEap) { + if (DEBUG_BACKUP) { + Log.v(TAG, "Skipping EAP network " + net.ssid + " / " + net.key_mgmt); + } + continue; + } if (! mKnownNetworks.contains(net)) { if (DEBUG_BACKUP) { Log.v(TAG, "Adding " + net.ssid + " / " + net.key_mgmt); @@ -353,6 +366,12 @@ public class SettingsBackupAgent extends BackupAgentHelper { continue; } + if (net.isEap) { + // Similarly, omit EAP network definitions to avoid propagating + // controlled enterprise network definitions. + continue; + } + net.write(w); } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 8b1caf9411ee..3971706b02d8 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -904,12 +904,12 @@ public class SettingsProvider extends ContentProvider { } } - // Enforce what the calling package can mutate the system settings. - enforceRestrictedSystemSettingsMutationForCallingPackage(operation, name, runAsUserId); - // Resolve the userId on whose behalf the call is made. final int callingUserId = resolveCallingUserIdEnforcingPermissionsLocked(runAsUserId); + // Enforce what the calling package can mutate the system settings. + enforceRestrictedSystemSettingsMutationForCallingPackage(operation, name, callingUserId); + // Determine the owning user as some profile settings are cloned from the parent. final int owningUserId = resolveOwningUserIdForSystemSettingLocked(callingUserId, name); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index fa9c4bbcb485..83edc967c260 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -383,6 +383,12 @@ public class PhoneStatusBarPolicy implements Callback { @Override public void onUserSwitching(int newUserId, IRemoteCallback reply) { mUserInfoController.reloadUserInfo(); + if (reply != null) { + try { + reply.sendResult(null); + } catch (RemoteException e) { + } + } } @Override diff --git a/preloaded-classes b/preloaded-classes index e48255c1efa7..79c0957e48ae 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -3560,11 +3560,6 @@ org.apache.harmony.security.asn1.BerInputStream org.apache.harmony.security.asn1.BerOutputStream org.apache.harmony.security.asn1.DerInputStream org.apache.harmony.security.asn1.DerOutputStream -org.apache.harmony.security.fortress.Engine -org.apache.harmony.security.fortress.Engine$ServiceCacheEntry -org.apache.harmony.security.fortress.Engine$SpiAndProvider -org.apache.harmony.security.fortress.SecurityAccess -org.apache.harmony.security.fortress.Services org.apache.harmony.security.provider.crypto.CryptoProvider org.apache.harmony.security.utils.AlgNameMapper org.apache.harmony.security.utils.AlgNameMapperSource diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 9f1dc0a96559..3d358ec5e8eb 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -64,21 +64,17 @@ import android.os.UserManager; import android.provider.Settings; import android.text.TextUtils; import android.text.TextUtils.SimpleStringSplitter; -import android.util.Pools.Pool; -import android.util.Pools.SimplePool; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.view.IWindow; import android.view.InputDevice; -import android.view.InputEventConsistencyVerifier; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.MagnificationSpec; import android.view.WindowInfo; import android.view.WindowManager; import android.view.WindowManagerInternal; -import android.view.WindowManagerPolicy; import android.view.accessibility.AccessibilityEvent; import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityManager; @@ -146,8 +142,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private static final int OWN_PROCESS_ID = android.os.Process.myPid(); - private static final int MAX_POOL_SIZE = 10; - private static final int WINDOW_ID_UNKNOWN = -1; private static int sIdCounter = 0; @@ -158,9 +152,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private final Object mLock = new Object(); - private final Pool<PendingEvent> mPendingEventPool = - new SimplePool<>(MAX_POOL_SIZE); - private final SimpleStringSplitter mStringColonSplitter = new SimpleStringSplitter(COMPONENT_NAME_SEPARATOR); @@ -193,6 +184,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private boolean mHasInputFilter; + private KeyEventDispatcher mKeyEventDispatcher; + private final Set<ComponentName> mTempComponentNameSet = new HashSet<>(); private final List<AccessibilityServiceInfo> mTempAccessibilityServiceInfoList = @@ -756,12 +749,11 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { boolean notifyKeyEvent(KeyEvent event, int policyFlags) { synchronized (mLock) { - KeyEvent localClone = KeyEvent.obtain(event); - boolean handled = notifyKeyEventLocked(localClone, policyFlags, false); - if (!handled) { - handled = notifyKeyEventLocked(localClone, policyFlags, true); + List<Service> boundServices = getCurrentUserStateLocked().mBoundServices; + if (boundServices.isEmpty()) { + return false; } - return handled; + return getKeyEventDispatcher().notifyKeyEventLocked(event, policyFlags, boundServices); } } @@ -935,31 +927,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return false; } - private boolean notifyKeyEventLocked(KeyEvent event, int policyFlags, boolean isDefault) { - // TODO: Now we are giving the key events to the last enabled - // service that can handle them Ideally, the user should - // make the call which service handles key events. However, - // only one service should handle key events to avoid user - // frustration when different behavior is observed from - // different combinations of enabled accessibility services. - UserState state = getCurrentUserStateLocked(); - for (int i = state.mBoundServices.size() - 1; i >= 0; i--) { - Service service = state.mBoundServices.get(i); - // Key events are handled only by services that declared - // this capability and requested to filter key events. - if (!service.mRequestFilterKeyEvents || - (service.mAccessibilityServiceInfo.getCapabilities() & AccessibilityServiceInfo - .CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS) == 0) { - continue; - } - if (service.mIsDefault == isDefault) { - service.notifyKeyEvent(event, policyFlags); - return true; - } - } - return false; - } - private void notifyClearAccessibilityCacheLocked() { UserState state = getCurrentUserStateLocked(); for (int i = state.mBoundServices.size() - 1; i >= 0; i--) { @@ -1754,6 +1721,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return null; } + private KeyEventDispatcher getKeyEventDispatcher() { + if (mKeyEventDispatcher == null) { + mKeyEventDispatcher = new KeyEventDispatcher( + mMainHandler, MainHandler.MSG_SEND_KEY_EVENT_TO_INPUT_FILTER, mLock); + } + return mKeyEventDispatcher; + } + @Override public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) { mSecurityPolicy.enforceCallingPermission(Manifest.permission.DUMP, FUNCTION_DUMP); @@ -1954,22 +1929,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } - private PendingEvent obtainPendingEventLocked(KeyEvent event, int policyFlags, int sequence) { - PendingEvent pendingEvent = mPendingEventPool.acquire(); - if (pendingEvent == null) { - pendingEvent = new PendingEvent(); - } - pendingEvent.event = event; - pendingEvent.policyFlags = policyFlags; - pendingEvent.sequence = sequence; - return pendingEvent; - } - - private void recyclePendingEventLocked(PendingEvent pendingEvent) { - pendingEvent.clear(); - mPendingEventPool.release(pendingEvent); - } - private int findWindowIdLocked(IBinder token) { final int globalIndex = mGlobalWindowTokens.indexOfValue(token); if (globalIndex >= 0) { @@ -2082,8 +2041,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { final SparseArray<AccessibilityEvent> mPendingEvents = new SparseArray<>(); - final KeyEventDispatcher mKeyEventDispatcher = new KeyEventDispatcher(); - boolean mWasConnectedAndDied; // Handler only for dispatching accessibility events since we use event @@ -2195,7 +2152,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return false; } UserState userState = getUserStateLocked(mUserId); - mKeyEventDispatcher.flush(); + getKeyEventDispatcher().flush(this); if (!mIsAutomation) { mContext.unbindService(this); } else { @@ -2212,7 +2169,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { @Override public void setOnKeyEventResult(boolean handled, int sequence) { - mKeyEventDispatcher.setOnKeyEventResult(handled, sequence); + getKeyEventDispatcher().setOnKeyEventResult(this, handled, sequence); } @Override @@ -2926,7 +2883,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { return; } mWasConnectedAndDied = true; - mKeyEventDispatcher.flush(); + getKeyEventDispatcher().flush(this); UserState userState = getUserStateLocked(mUserId); // The death recipient is unregistered in removeServiceLocked removeServiceLocked(this, userState); @@ -3035,11 +2992,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { gestureId, 0).sendToTarget(); } - public void notifyKeyEvent(KeyEvent event, int policyFlags) { - mInvocationHandler.obtainMessage(InvocationHandler.MSG_ON_KEY_EVENT, - policyFlags, 0, event).sendToTarget(); - } - public void notifyClearAccessibilityNodeInfoCache() { mInvocationHandler.sendEmptyMessage( InvocationHandler.MSG_CLEAR_ACCESSIBILITY_CACHE); @@ -3084,10 +3036,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } - private void notifyKeyEventInternal(KeyEvent event, int policyFlags) { - mKeyEventDispatcher.notifyKeyEvent(event, policyFlags); - } - private void notifyClearAccessibilityCacheInternal() { final IAccessibilityServiceClient listener; synchronized (mLock) { @@ -3205,9 +3153,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private final class InvocationHandler extends Handler { public static final int MSG_ON_GESTURE = 1; - public static final int MSG_ON_KEY_EVENT = 2; - public static final int MSG_CLEAR_ACCESSIBILITY_CACHE = 3; - public static final int MSG_ON_KEY_EVENT_TIMEOUT = 4; + public static final int MSG_CLEAR_ACCESSIBILITY_CACHE = 2; private static final int MSG_ON_MAGNIFICATION_CHANGED = 5; @@ -3226,21 +3172,10 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { notifyGestureInternal(gestureId); } break; - case MSG_ON_KEY_EVENT: { - KeyEvent event = (KeyEvent) message.obj; - final int policyFlags = message.arg1; - notifyKeyEventInternal(event, policyFlags); - } break; - case MSG_CLEAR_ACCESSIBILITY_CACHE: { notifyClearAccessibilityCacheInternal(); } break; - case MSG_ON_KEY_EVENT_TIMEOUT: { - PendingEvent eventState = (PendingEvent) message.obj; - setOnKeyEventResult(false, eventState.sequence); - } break; - case MSG_ON_MAGNIFICATION_CHANGED: { final SomeArgs args = (SomeArgs) message.obj; final Region region = (Region) args.arg1; @@ -3278,140 +3213,6 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } - private final class KeyEventDispatcher { - - private static final long ON_KEY_EVENT_TIMEOUT_MILLIS = 500; - - private PendingEvent mPendingEvents; - - private final InputEventConsistencyVerifier mSentEventsVerifier = - InputEventConsistencyVerifier.isInstrumentationEnabled() - ? new InputEventConsistencyVerifier( - this, 0, KeyEventDispatcher.class.getSimpleName()) : null; - - public void notifyKeyEvent(KeyEvent event, int policyFlags) { - final PendingEvent pendingEvent; - - synchronized (mLock) { - pendingEvent = addPendingEventLocked(event, policyFlags); - } - - Message message = mInvocationHandler.obtainMessage( - InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT, pendingEvent); - mInvocationHandler.sendMessageDelayed(message, ON_KEY_EVENT_TIMEOUT_MILLIS); - - try { - // Accessibility services are exclusively not in the system - // process, therefore no need to clone the motion event to - // prevent tampering. It will be cloned in the IPC call. - mServiceInterface.onKeyEvent(pendingEvent.event, pendingEvent.sequence); - } catch (RemoteException re) { - setOnKeyEventResult(false, pendingEvent.sequence); - } - } - - public void setOnKeyEventResult(boolean handled, int sequence) { - synchronized (mLock) { - PendingEvent pendingEvent = removePendingEventLocked(sequence); - if (pendingEvent != null) { - mInvocationHandler.removeMessages( - InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT, - pendingEvent); - pendingEvent.handled = handled; - finishPendingEventLocked(pendingEvent); - } - } - } - - public void flush() { - synchronized (mLock) { - cancelAllPendingEventsLocked(); - if (mSentEventsVerifier != null) { - mSentEventsVerifier.reset(); - } - } - } - - private PendingEvent addPendingEventLocked(KeyEvent event, int policyFlags) { - final int sequence = event.getSequenceNumber(); - PendingEvent pendingEvent = obtainPendingEventLocked(event, policyFlags, sequence); - pendingEvent.next = mPendingEvents; - mPendingEvents = pendingEvent; - return pendingEvent; - } - - private PendingEvent removePendingEventLocked(int sequence) { - PendingEvent previous = null; - PendingEvent current = mPendingEvents; - - while (current != null) { - if (current.sequence == sequence) { - if (previous != null) { - previous.next = current.next; - } else { - mPendingEvents = current.next; - } - current.next = null; - return current; - } - previous = current; - current = current.next; - } - return null; - } - - private void finishPendingEventLocked(PendingEvent pendingEvent) { - if (!pendingEvent.handled) { - sendKeyEventToInputFilter(pendingEvent.event, pendingEvent.policyFlags); - } - // Nullify the event since we do not want it to be - // recycled yet. It will be sent to the input filter. - pendingEvent.event = null; - recyclePendingEventLocked(pendingEvent); - } - - private void sendKeyEventToInputFilter(KeyEvent event, int policyFlags) { - if (DEBUG) { - Slog.i(LOG_TAG, "Injecting event: " + event); - } - if (mSentEventsVerifier != null) { - mSentEventsVerifier.onKeyEvent(event, 0); - } - policyFlags |= WindowManagerPolicy.FLAG_PASS_TO_USER; - mMainHandler.obtainMessage(MainHandler.MSG_SEND_KEY_EVENT_TO_INPUT_FILTER, - policyFlags, 0, event).sendToTarget(); - } - - private void cancelAllPendingEventsLocked() { - while (mPendingEvents != null) { - PendingEvent pendingEvent = removePendingEventLocked(mPendingEvents.sequence); - pendingEvent.handled = false; - mInvocationHandler.removeMessages(InvocationHandler.MSG_ON_KEY_EVENT_TIMEOUT, - pendingEvent); - finishPendingEventLocked(pendingEvent); - } - } - } - } - - private static final class PendingEvent { - PendingEvent next; - - KeyEvent event; - int policyFlags; - int sequence; - boolean handled; - - public void clear() { - if (event != null) { - event.recycle(); - event = null; - } - next = null; - policyFlags = 0; - sequence = 0; - handled = false; - } } final class WindowsForAccessibilityCallback implements diff --git a/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java new file mode 100644 index 000000000000..34695654c6f7 --- /dev/null +++ b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java @@ -0,0 +1,285 @@ +/* + ** Copyright 2015, 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 com.android.server.accessibility; + +import android.accessibilityservice.AccessibilityServiceInfo; +import android.os.Handler; +import android.os.Message; +import android.os.RemoteException; +import android.util.ArrayMap; +import android.util.Pools; +import android.util.Pools.Pool; +import android.util.Slog; +import android.view.InputEventConsistencyVerifier; +import android.view.KeyEvent; +import android.view.WindowManagerPolicy; + +import com.android.server.accessibility.AccessibilityManagerService.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * Dispatcher to send KeyEvents to all accessibility services that are able to process them. + * Events that are handled by one or more services are consumed. Events that are not processed + * by any service (or time out before a service reports them as handled) are passed along to + * the rest of the system. + * + * The class assumes that services report their return values in order, which is valid because + * they process each call to {@code AccessibilityService.onKeyEvent} on a single thread, and so + * don't see the N+1th event until they have processed the Nth event. + */ +public class KeyEventDispatcher { + // Debugging + private static final String LOG_TAG = "KeyEventDispatcher"; + private static final boolean DEBUG = false; + /* KeyEvents must be processed in this time interval */ + private static final long ON_KEY_EVENT_TIMEOUT_MILLIS = 500; + private static final int MSG_ON_KEY_EVENT_TIMEOUT = 1; + private static final int MAX_POOL_SIZE = 10; + + private final Pool<PendingKeyEvent> mPendingEventPool = new Pools.SimplePool<>(MAX_POOL_SIZE); + private final Object mLock; + + /* + * Track events sent to each service. If a KeyEvent is to be sent to at least one service, + * a corresponding PendingKeyEvent is created for it. This PendingKeyEvent is placed in + * the list for each service its KeyEvent is sent to. It is removed from the list when + * the service calls setOnKeyEventResult, or when we time out waiting for the service to + * respond. + */ + private final Map<Service, ArrayList<PendingKeyEvent>> mPendingEventsMap = new ArrayMap<>(); + + private final InputEventConsistencyVerifier mSentEventsVerifier; + private final Handler mHandlerToSendKeyEventsToInputFilter; + private final int mMessageTypeForSendKeyEvent; + private final Handler mKeyEventTimeoutHandler; + + /** + * @param handlerToSendKeyEventsToInputFilter The handler to which to post {@code KeyEvent}s + * that have not been handled by any accessibility service. + * @param messageTypeForSendKeyEvent The field to populate {@code message.what} for the + * message that carries a {@code KeyEvent} to be sent to the input filter + * @param lock The lock used for all synchronization in this package. This lock must be held + * when calling {@code notifyKeyEventLocked} + */ + public KeyEventDispatcher(Handler handlerToSendKeyEventsToInputFilter, + int messageTypeForSendKeyEvent, Object lock) { + if (InputEventConsistencyVerifier.isInstrumentationEnabled()) { + mSentEventsVerifier = new InputEventConsistencyVerifier( + this, 0, KeyEventDispatcher.class.getSimpleName()); + } else { + mSentEventsVerifier = null; + } + mHandlerToSendKeyEventsToInputFilter = handlerToSendKeyEventsToInputFilter; + mMessageTypeForSendKeyEvent = messageTypeForSendKeyEvent; + mKeyEventTimeoutHandler = + new Handler(mHandlerToSendKeyEventsToInputFilter.getLooper(), new Callback()); + mLock = lock; + } + + /** + * Notify that a new KeyEvent is available to accessibility services. Must be called with the + * lock used to construct this object held. The boundServices list must also be protected + * by a lock. + * + * @param event The new key event + * @param policyFlags Flags for the event + * @param boundServices A list of currently bound AccessibilityServices + * + * @return {@code true} if the event was passed to at least one AccessibilityService, + * {@code false} otherwise. + */ + // TODO: The locking policy for boundServices needs some thought. + public boolean notifyKeyEventLocked( + KeyEvent event, int policyFlags, List<Service> boundServices) { + PendingKeyEvent pendingKeyEvent = null; + KeyEvent localClone = KeyEvent.obtain(event); + for (int i = 0; i < boundServices.size(); i++) { + Service service = boundServices.get(i); + // Key events are handled only by services that declared + // this capability and requested to filter key events. + if (!service.mRequestFilterKeyEvents) { + continue; + } + int filterKeyEventBit = service.mAccessibilityServiceInfo.getCapabilities() + & AccessibilityServiceInfo.CAPABILITY_CAN_REQUEST_FILTER_KEY_EVENTS; + if (filterKeyEventBit == 0) { + continue; + } + + try { + // The event will be cloned in the IPC call, so it doesn't need to be here. + service.mServiceInterface.onKeyEvent(localClone, localClone.getSequenceNumber()); + } catch (RemoteException re) { + continue; + } + + if (pendingKeyEvent == null) { + pendingKeyEvent = obtainPendingEventLocked(localClone, policyFlags); + } + ArrayList<PendingKeyEvent> pendingEventList = mPendingEventsMap.get(service); + if (pendingEventList == null) { + pendingEventList = new ArrayList<>(); + mPendingEventsMap.put(service, pendingEventList); + } + pendingEventList.add(pendingKeyEvent); + pendingKeyEvent.referenceCount++; + } + + if (pendingKeyEvent == null) { + localClone.recycle(); + return false; + } + + Message message = mKeyEventTimeoutHandler.obtainMessage( + MSG_ON_KEY_EVENT_TIMEOUT, pendingKeyEvent); + mKeyEventTimeoutHandler.sendMessageDelayed(message, ON_KEY_EVENT_TIMEOUT_MILLIS); + return true; + } + + /** + * Set the result from onKeyEvent from one service. + * + * @param service The service setting the result + * @param handled {@code true} if the service handled the {@code KeyEvent} + * @param sequence The sequence number of the {@code KeyEvent} + */ + public void setOnKeyEventResult(Service service, boolean handled, int sequence) { + synchronized (mLock) { + PendingKeyEvent pendingEvent = + removeEventFromListLocked(mPendingEventsMap.get(service), sequence); + if (pendingEvent != null) { + pendingEvent.handled |= handled; + removeReferenceToPendingEventLocked(pendingEvent); + } + } + } + + /** + * Flush all pending key events for a service, treating all of them as unhandled + * + * @param service The service for which to flush events + */ + public void flush(Service service) { + synchronized (mLock) { + List<PendingKeyEvent> pendingEvents = mPendingEventsMap.get(service); + if (pendingEvents != null) { + for (int i = 0; i < pendingEvents.size(); i++) { + PendingKeyEvent pendingEvent = pendingEvents.get(i); + removeReferenceToPendingEventLocked(pendingEvent); + } + mPendingEventsMap.remove(service); + } + } + } + + private PendingKeyEvent obtainPendingEventLocked(KeyEvent event, int policyFlags) { + PendingKeyEvent pendingEvent = mPendingEventPool.acquire(); + if (pendingEvent == null) { + pendingEvent = new PendingKeyEvent(); + } + pendingEvent.event = event; + pendingEvent.policyFlags = policyFlags; + pendingEvent.referenceCount = 0; + pendingEvent.handled = false; + return pendingEvent; + } + + private static PendingKeyEvent removeEventFromListLocked( + List<PendingKeyEvent> listOfEvents, int sequence) { + /* In normal operation, the event should be first */ + for (int i = 0; i < listOfEvents.size(); i++) { + PendingKeyEvent pendingKeyEvent = listOfEvents.get(i); + if (pendingKeyEvent.event.getSequenceNumber() == sequence) { + /* + * Removing the first element of the ArrayList can be slow if there are a lot + * of events backed up, but for a handful of events it's better than incurring + * the fixed overhead of LinkedList. An ArrayList optimized for removing the + * first element (by treating the underlying array as a circular buffer) would + * be ideal. + */ + listOfEvents.remove(pendingKeyEvent); + return pendingKeyEvent; + } + } + return null; + } + + /** + * @param pendingEvent The event whose reference count should be decreased + * @return {@code true} if the event was release, {@code false} if not. + */ + private boolean removeReferenceToPendingEventLocked(PendingKeyEvent pendingEvent) { + if (--pendingEvent.referenceCount > 0) { + return false; + } + mKeyEventTimeoutHandler.removeMessages(MSG_ON_KEY_EVENT_TIMEOUT, pendingEvent); + if (!pendingEvent.handled) { + /* Pass event to input filter */ + if (DEBUG) { + Slog.i(LOG_TAG, "Injecting event: " + pendingEvent.event); + } + if (mSentEventsVerifier != null) { + mSentEventsVerifier.onKeyEvent(pendingEvent.event, 0); + } + int policyFlags = pendingEvent.policyFlags | WindowManagerPolicy.FLAG_PASS_TO_USER; + mHandlerToSendKeyEventsToInputFilter + .obtainMessage(mMessageTypeForSendKeyEvent, policyFlags, 0, pendingEvent.event) + .sendToTarget(); + } else { + pendingEvent.event.recycle(); + } + mPendingEventPool.release(pendingEvent); + return true; + } + + private static final class PendingKeyEvent { + /* Event and policyFlag provided in notifyKeyEventLocked */ + KeyEvent event; + int policyFlags; + /* + * The referenceCount optimizes the process of determining the number of services + * still holding a KeyEvent. It must be equal to the number of times the PendingEvent + * appears in mPendingEventsMap, or PendingEvents will leak. + */ + int referenceCount; + /* Whether or not at least one service had handled this event */ + boolean handled; + } + + private class Callback implements Handler.Callback { + @Override + public boolean handleMessage(Message message) { + if (message.what != MSG_ON_KEY_EVENT_TIMEOUT) { + throw new IllegalArgumentException("Unknown message: " + message.what); + } + PendingKeyEvent pendingKeyEvent = (PendingKeyEvent) message.obj; + synchronized (mLock) { + for (ArrayList<PendingKeyEvent> listForService : mPendingEventsMap.values()) { + if (listForService.remove(pendingKeyEvent)) { + if(removeReferenceToPendingEventLocked(pendingKeyEvent)) { + break; + } + } + } + } + return true; + } + } +} diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java index 504a7efab60e..c5ce2fd0477b 100644 --- a/services/core/java/com/android/server/AlarmManagerService.java +++ b/services/core/java/com/android/server/AlarmManagerService.java @@ -2769,7 +2769,9 @@ class AlarmManagerService extends SystemService { } @Override public void onUidIdle(int uid) throws RemoteException { - removeForStoppedLocked(uid); + synchronized (mLock) { + removeForStoppedLocked(uid); + } } }; diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 37d47c3b0568..93eaf0e66460 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -2286,8 +2286,11 @@ public class AccountManagerService } @Override - public void startAddAccountSession(final IAccountManagerResponse response, final String accountType, - final String authTokenType, final String[] requiredFeatures, + public void startAddAccountSession( + final IAccountManagerResponse response, + final String accountType, + final String authTokenType, + final String[] requiredFeatures, final boolean expectActivityLaunch, final Bundle optionsIn) { if (Log.isLoggable(TAG, Log.VERBOSE)) { @@ -2571,6 +2574,60 @@ public class AccountManagerService } @Override + public void startUpdateCredentialsSession( + IAccountManagerResponse response, + final Account account, + final String authTokenType, + final boolean expectActivityLaunch, + final Bundle loginOptions) { + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.v(TAG, + "startUpdateCredentialsSession: " + account + ", response " + response + + ", authTokenType " + authTokenType + ", expectActivityLaunch " + + expectActivityLaunch + ", caller's uid " + Binder.getCallingUid() + + ", pid " + Binder.getCallingPid()); + } + if (response == null) { + throw new IllegalArgumentException("response is null"); + } + if (account == null) { + throw new IllegalArgumentException("account is null"); + } + int userId = UserHandle.getCallingUserId(); + long identityToken = clearCallingIdentity(); + try { + UserAccounts accounts = getUserAccounts(userId); + new StartAccountSession( + accounts, + response, + account.type, + expectActivityLaunch, + account.name, + false /* authDetailsRequired */, + true /* updateLastCredentialTime */) { + @Override + public void run() throws RemoteException { + mAuthenticator.startUpdateCredentialsSession(this, account, authTokenType, + loginOptions); + } + + @Override + protected String toDebugString(long now) { + if (loginOptions != null) + loginOptions.keySet(); + return super.toDebugString(now) + + ", startUpdateCredentialsSession" + + ", " + account + + ", authTokenType " + authTokenType + + ", loginOptions " + loginOptions; + } + }.bind(); + } finally { + restoreCallingIdentity(identityToken); + } + } + + @Override public void editProperties(IAccountManagerResponse response, final String accountType, final boolean expectActivityLaunch) { final int callingUid = Binder.getCallingUid(); diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 3fc6846b812f..02cf87ae82b1 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -1277,7 +1277,7 @@ final class TaskRecord { } final Configuration serviceConfig = mService.mConfiguration; - mOverrideConfig = new Configuration(serviceConfig); + mOverrideConfig = new Configuration(Configuration.EMPTY); // TODO(multidisplay): Update Dp to that of display stack is on. final float density = serviceConfig.densityDpi * DisplayMetrics.DENSITY_DEFAULT_SCALE; mOverrideConfig.screenWidthDp = diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 6d8bd1c59212..4b2a55fff57a 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -674,7 +674,7 @@ final class UserController { void timeoutUserSwitch(UserState uss, int oldUserId, int newUserId) { synchronized (mService) { - Slog.w(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId); + Slog.wtf(TAG, "User switch timeout: from " + oldUserId + " to " + newUserId); sendContinueUserSwitchLocked(uss, oldUserId, newUserId); } } diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index ec7c1c437d92..103ed0a9f0cf 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -1139,6 +1139,12 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe public void onUserSwitching(int newUserId, IRemoteCallback reply) { mHandler.obtainMessage(MSG_USER_SWITCHING, newUserId, 0 /* unused */) .sendToTarget(); + if (reply != null) { + try { + reply.sendResult(null); + } catch (RemoteException e) { + } + } } @Override public void onUserSwitchComplete(int newUserId) throws RemoteException { diff --git a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java index 2eca42b94d6b..adc1cd7fc1d3 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecKeycode.java @@ -448,4 +448,20 @@ final class HdmiCecKeycode { static boolean isSupportedKeycode(int androidKeycode) { return HdmiCecKeycode.androidKeyToCecKey(androidKeycode) != null; } + + /** + * Returns CEC keycode to control audio mute status. + * + * @param muting {@code true} if audio is being muted + */ + public static int getMuteKey(boolean muting) { + // CEC_KEYCODE_MUTE_FUNCTION, CEC_KEYCODE_RESTORE_VOLUME_FUNCTION are deterministic + // commands that ensures the status changes to what we want, while CEC_KEYCODE_MUTE + // simply toggles the status. + // The former is a better choice in this regard, but there are compatibility issues + // observed - many audio receivers don't recognize the commands. We fall back on + // CEC_KEYCODE_MUTE for now. + // return muting ? CEC_KEYCODE_MUTE_FUNCTION : CEC_KEYCODE_RESTORE_VOLUME_FUNCTION; + return CEC_KEYCODE_MUTE; + } } diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java index cd8484f5a674..e63a143c8d92 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDeviceTv.java @@ -1099,8 +1099,7 @@ final class HdmiCecLocalDeviceTv extends HdmiCecLocalDevice { // Remove existing volume action. removeAction(VolumeControlAction.class); sendUserControlPressedAndReleased(getAvrDeviceInfo().getLogicalAddress(), - mute ? HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION : - HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION); + HdmiCecKeycode.getMuteKey(mute)); } @Override diff --git a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java index dba3591cbdb4..2ae5c979690d 100644 --- a/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java +++ b/services/core/java/com/android/server/hdmi/SystemAudioStatusAction.java @@ -68,10 +68,8 @@ final class SystemAudioStatusAction extends HdmiCecFeatureAction { // the audio amplifier is unknown. tv().setAudioStatus(false, Constants.UNKNOWN_VOLUME); - int uiCommand = tv().isSystemAudioActivated() - ? HdmiCecKeycode.CEC_KEYCODE_RESTORE_VOLUME_FUNCTION // SystemAudioMode: ON - : HdmiCecKeycode.CEC_KEYCODE_MUTE_FUNCTION; // SystemAudioMode: OFF - sendUserControlPressedAndReleased(mAvrAddress, uiCommand); + sendUserControlPressedAndReleased(mAvrAddress, + HdmiCecKeycode.getMuteKey(!tv().isSystemAudioActivated())); // Still return SUCCESS to callback. finishWithCallback(HdmiControlManager.RESULT_SUCCESS); diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 4424838bf612..946fbb14624a 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -1211,29 +1211,36 @@ public class NotificationManagerService extends SystemService { } @Override - public void setPackagePriority(String pkg, int uid, int priority) { + public ParceledListSlice<Notification.Topic> getTopics(String pkg, int uid) { checkCallerIsSystem(); - mRankingHelper.setPackagePriority(pkg, uid, priority); + return new ParceledListSlice<Notification.Topic>(mRankingHelper.getTopics(pkg, uid)); + } + + @Override + public void setTopicPriority(String pkg, int uid, Notification.Topic topic, int priority) { + checkCallerIsSystem(); + mRankingHelper.setTopicPriority(pkg, uid, topic, priority); savePolicyFile(); } @Override - public int getPackagePriority(String pkg, int uid) { + public int getTopicPriority(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); - return mRankingHelper.getPackagePriority(pkg, uid); + return mRankingHelper.getTopicPriority(pkg, uid, topic); } @Override - public void setPackageVisibilityOverride(String pkg, int uid, int visibility) { + public void setTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic, + int visibility) { checkCallerIsSystem(); - mRankingHelper.setPackageVisibilityOverride(pkg, uid, visibility); + mRankingHelper.setTopicVisibilityOverride(pkg, uid, topic, visibility); savePolicyFile(); } @Override - public int getPackageVisibilityOverride(String pkg, int uid) { + public int getTopicVisibilityOverride(String pkg, int uid, Notification.Topic topic) { checkCallerIsSystem(); - return mRankingHelper.getPackageVisibilityOverride(pkg, uid); + return mRankingHelper.getTopicVisibilityOverride(pkg, uid, topic); } /** diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java index aea137bc7923..7ee29e45910e 100644 --- a/services/core/java/com/android/server/notification/RankingConfig.java +++ b/services/core/java/com/android/server/notification/RankingConfig.java @@ -15,12 +15,20 @@ */ package com.android.server.notification; +import android.app.Notification; + +import java.util.List; + public interface RankingConfig { - int getPackagePriority(String packageName, int uid); - void setPackagePriority(String packageName, int uid, int priority); + List<Notification.Topic> getTopics(String packageName, int uid); + + int getTopicPriority(String packageName, int uid, Notification.Topic topic); + + void setTopicPriority(String packageName, int uid, Notification.Topic topic, int priority); - int getPackageVisibilityOverride(String packageName, int uid); + int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic); - void setPackageVisibilityOverride(String packageName, int uid, int visibility); + void setTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic, + int visibility); } diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index f8b661fc5365..4d3324898f9e 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -27,6 +27,8 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.Slog; +import com.android.internal.R; + import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; @@ -35,6 +37,8 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; public class RankingHelper implements RankingConfig { @@ -45,11 +49,14 @@ public class RankingHelper implements RankingConfig { private static final String TAG_RANKING = "ranking"; private static final String TAG_PACKAGE = "package"; private static final String ATT_VERSION = "version"; + private static final String TAG_TOPIC = "topic"; private static final String ATT_NAME = "name"; private static final String ATT_UID = "uid"; private static final String ATT_PRIORITY = "priority"; private static final String ATT_VISIBILITY = "visibility"; + private static final String ATT_TOPIC_ID = "id"; + private static final String ATT_TOPIC_LABEL = "label"; private static final int DEFAULT_PRIORITY = Notification.PRIORITY_DEFAULT; private static final int DEFAULT_VISIBILITY = @@ -161,12 +168,14 @@ public class RankingHelper implements RankingConfig { } else { r = getOrCreateRecord(name, uid); } - if (priority != DEFAULT_PRIORITY) { - r.priority = priority; - } - if (vis != DEFAULT_VISIBILITY) { - r.visibility = vis; - } + + // Migrate package level settings to the default topic. + // Might be overwritten by parseTopics. + Topic defaultTopic = r.topics.get(Notification.TOPIC_DEFAULT); + defaultTopic.priority = priority; + defaultTopic.visibility = vis; + + parseTopics(r, parser); } } } @@ -174,6 +183,38 @@ public class RankingHelper implements RankingConfig { throw new IllegalStateException("Failed to reach END_DOCUMENT"); } + public void parseTopics(Record r, XmlPullParser parser) + throws XmlPullParserException, IOException { + final int innerDepth = parser.getDepth(); + int type; + while ((type = parser.next()) != XmlPullParser.END_DOCUMENT + && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) { + if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { + continue; + } + + String tagName = parser.getName(); + if (TAG_TOPIC.equals(tagName)) { + int priority = safeInt(parser, ATT_PRIORITY, DEFAULT_PRIORITY); + int vis = safeInt(parser, ATT_VISIBILITY, DEFAULT_VISIBILITY); + String id = parser.getAttributeValue(null, ATT_TOPIC_ID); + CharSequence label = parser.getAttributeValue(null, ATT_TOPIC_LABEL); + + if (!TextUtils.isEmpty(id)) { + Topic topic = new Topic(new Notification.Topic(id, label)); + + if (priority != DEFAULT_PRIORITY) { + topic.priority = priority; + } + if (vis != DEFAULT_VISIBILITY) { + topic.visibility = vis; + } + r.topics.put(id, topic); + } + } + } + } + private static String recordKey(String pkg, int uid) { return pkg + "|" + uid; } @@ -185,21 +226,14 @@ public class RankingHelper implements RankingConfig { r = new Record(); r.pkg = pkg; r.uid = uid; + r.topics.put(Notification.TOPIC_DEFAULT, + new Topic(new Notification.Topic(Notification.TOPIC_DEFAULT, + mContext.getString(R.string.default_notification_topic_label)))); mRecords.put(key, r); } return r; } - private void removeDefaultRecords() { - final int N = mRecords.size(); - for (int i = N - 1; i >= 0; i--) { - final Record r = mRecords.valueAt(i); - if (r.priority == DEFAULT_PRIORITY && r.visibility == DEFAULT_VISIBILITY) { - mRecords.remove(i); - } - } - } - public void writeXml(XmlSerializer out, boolean forBackup) throws IOException { out.startTag(null, TAG_RANKING); out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION)); @@ -213,20 +247,32 @@ public class RankingHelper implements RankingConfig { } out.startTag(null, TAG_PACKAGE); out.attribute(null, ATT_NAME, r.pkg); - if (r.priority != DEFAULT_PRIORITY) { - out.attribute(null, ATT_PRIORITY, Integer.toString(r.priority)); - } - if (r.visibility != DEFAULT_VISIBILITY) { - out.attribute(null, ATT_VISIBILITY, Integer.toString(r.visibility)); - } + if (!forBackup) { out.attribute(null, ATT_UID, Integer.toString(r.uid)); } + + writeTopicsXml(out, r); out.endTag(null, TAG_PACKAGE); } out.endTag(null, TAG_RANKING); } + public void writeTopicsXml(XmlSerializer out, Record r) throws IOException { + for (Topic t : r.topics.values()) { + out.startTag(null, TAG_TOPIC); + out.attribute(null, ATT_TOPIC_ID, t.topic.getId()); + out.attribute(null, ATT_TOPIC_LABEL, t.topic.getLabel().toString()); + if (t.priority != DEFAULT_PRIORITY) { + out.attribute(null, ATT_PRIORITY, Integer.toString(t.priority)); + } + if (t.visibility != DEFAULT_VISIBILITY) { + out.attribute(null, ATT_VISIBILITY, Integer.toString(t.visibility)); + } + out.endTag(null, TAG_TOPIC); + } + } + private void updateConfig() { final int N = mSignalExtractors.length; for (int i = 0; i < N; i++) { @@ -322,37 +368,54 @@ public class RankingHelper implements RankingConfig { } @Override - public int getPackagePriority(String packageName, int uid) { - final Record r = mRecords.get(recordKey(packageName, uid)); - return r != null ? r.priority : DEFAULT_PRIORITY; + public List<Notification.Topic> getTopics(String packageName, int uid) { + final Record r = getOrCreateRecord(packageName, uid); + List<Notification.Topic> topics = new ArrayList<>(); + for (Topic t : r.topics.values()) { + topics.add(t.topic); + } + return topics; } @Override - public void setPackagePriority(String packageName, int uid, int priority) { - if (priority == getPackagePriority(packageName, uid)) { - return; - } - getOrCreateRecord(packageName, uid).priority = priority; - removeDefaultRecords(); + public int getTopicPriority(String packageName, int uid, Notification.Topic topic) { + final Record r = getOrCreateRecord(packageName, uid); + return getOrCreateTopic(r, topic).priority; + } + + @Override + public void setTopicPriority(String packageName, int uid, Notification.Topic topic, + int priority) { + final Record r = getOrCreateRecord(packageName, uid); + getOrCreateTopic(r, topic).priority = priority; updateConfig(); } @Override - public int getPackageVisibilityOverride(String packageName, int uid) { - final Record r = mRecords.get(recordKey(packageName, uid)); - return r != null ? r.visibility : DEFAULT_VISIBILITY; + public int getTopicVisibilityOverride(String packageName, int uid, Notification.Topic topic) { + final Record r = getOrCreateRecord(packageName, uid); + return getOrCreateTopic(r, topic).visibility; } @Override - public void setPackageVisibilityOverride(String packageName, int uid, int visibility) { - if (visibility == getPackageVisibilityOverride(packageName, uid)) { - return; - } - getOrCreateRecord(packageName, uid).visibility = visibility; - removeDefaultRecords(); + public void setTopicVisibilityOverride(String pkgName, int uid, Notification.Topic topic, + int visibility) { + final Record r = getOrCreateRecord(pkgName, uid); + getOrCreateTopic(r, topic).visibility = visibility; updateConfig(); } + private Topic getOrCreateTopic(Record r, Notification.Topic topic) { + Topic t = r.topics.get(topic.getId()); + if (t != null) { + return t; + } else { + t = new Topic(topic); + r.topics.put(topic.getId(), t); + return t; + } + } + public void dump(PrintWriter pw, String prefix, NotificationManagerService.DumpFilter filter) { if (filter == null) { final int N = mSignalExtractors.length; @@ -385,15 +448,22 @@ public class RankingHelper implements RankingConfig { pw.print(" ("); pw.print(r.uid == Record.UNKNOWN_UID ? "UNKNOWN_UID" : Integer.toString(r.uid)); pw.print(')'); - if (r.priority != DEFAULT_PRIORITY) { - pw.print(" priority="); - pw.print(Notification.priorityToString(r.priority)); - } - if (r.visibility != DEFAULT_VISIBILITY) { - pw.print(" visibility="); - pw.print(Notification.visibilityToString(r.visibility)); - } pw.println(); + for (Topic t : r.topics.values()) { + pw.print(prefix); + pw.print(" "); + pw.print(" "); + pw.print(t.topic.getId()); + if (t.priority != DEFAULT_PRIORITY) { + pw.print(" priority="); + pw.print(Notification.priorityToString(t.priority)); + } + if (t.visibility != DEFAULT_VISIBILITY) { + pw.print(" visibility="); + pw.print(Notification.visibilityToString(t.visibility)); + } + pw.println(); + } } } } @@ -429,8 +499,16 @@ public class RankingHelper implements RankingConfig { String pkg; int uid = UNKNOWN_UID; + Map<String, Topic> topics = new ArrayMap<>(); + } + + private static class Topic { + Notification.Topic topic; int priority = DEFAULT_PRIORITY; int visibility = DEFAULT_VISIBILITY; - } + public Topic(Notification.Topic topic) { + this.topic = topic; + } + } } diff --git a/services/core/java/com/android/server/notification/PackagePriorityExtractor.java b/services/core/java/com/android/server/notification/TopicPriorityExtractor.java index 6beed9c3614e..5bf989ae0cdd 100644 --- a/services/core/java/com/android/server/notification/PackagePriorityExtractor.java +++ b/services/core/java/com/android/server/notification/TopicPriorityExtractor.java @@ -18,8 +18,11 @@ package com.android.server.notification; import android.content.Context; import android.util.Slog; -public class PackagePriorityExtractor implements NotificationSignalExtractor { - private static final String TAG = "ImportantPackageExtractor"; +/** + * Determines if the given notification can bypass Do Not Disturb. + */ +public class TopicPriorityExtractor implements NotificationSignalExtractor { + private static final String TAG = "ImportantTopicExtractor"; private static final boolean DBG = false; private RankingConfig mConfig; @@ -39,8 +42,8 @@ public class PackagePriorityExtractor implements NotificationSignalExtractor { return null; } - final int packagePriority = mConfig.getPackagePriority( - record.sbn.getPackageName(), record.sbn.getUid()); + final int packagePriority = mConfig.getTopicPriority(record.sbn.getPackageName(), + record.sbn.getUid(), record.sbn.getNotification().getTopic()); record.setPackagePriority(packagePriority); return null; diff --git a/services/core/java/com/android/server/notification/PackageVisibilityExtractor.java b/services/core/java/com/android/server/notification/TopicVisibilityExtractor.java index af99db7688e5..e05338277b1c 100644 --- a/services/core/java/com/android/server/notification/PackageVisibilityExtractor.java +++ b/services/core/java/com/android/server/notification/TopicVisibilityExtractor.java @@ -18,8 +18,11 @@ package com.android.server.notification; import android.content.Context; import android.util.Slog; -public class PackageVisibilityExtractor implements NotificationSignalExtractor { - private static final String TAG = "PackageVisibilityExtractor"; +/** + * Determines if the given notification can display sensitive content on the lockscreen. + */ +public class TopicVisibilityExtractor implements NotificationSignalExtractor { + private static final String TAG = "TopicVisibilityExtractor"; private static final boolean DBG = false; private RankingConfig mConfig; @@ -39,8 +42,9 @@ public class PackageVisibilityExtractor implements NotificationSignalExtractor { return null; } - final int packageVisibility = mConfig.getPackageVisibilityOverride( - record.sbn.getPackageName(), record.sbn.getUid()); + final int packageVisibility = mConfig.getTopicVisibilityOverride( + record.sbn.getPackageName(), record.sbn.getUid(), + record.sbn.getNotification().getTopic()); record.setPackageVisibilityOverride(packageVisibility); return null; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 4f3544b3e380..21a42063cca5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -617,6 +617,9 @@ public class PackageManagerService extends IPackageManager.Stub { final DefaultPermissionGrantPolicy mDefaultPermissionPolicy = new DefaultPermissionGrantPolicy(this); + // List of packages names to keep cached, even if they are uninstalled for all users + private List<String> mKeepUninstalledPackages; + private static class IFVerificationParams { PackageParser.Package pkg; boolean replacing; @@ -13015,7 +13018,7 @@ public class PackageManagerService extends IPackageManager.Stub { final boolean deleteAllUsers = (flags & PackageManager.DELETE_ALL_USERS) != 0; final int[] users = deleteAllUsers ? sUserManager.getUserIds() : new int[]{ userId }; if (UserHandle.getUserId(uid) != userId || (deleteAllUsers && users.length > 1)) { - mContext.enforceCallingPermission( + mContext.enforceCallingOrSelfPermission( android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, "deletePackage for user " + userId); } @@ -13090,6 +13093,10 @@ public class PackageManagerService extends IPackageManager.Stub { return false; } + private boolean shouldKeepUninstalledPackageLPr(String packageName) { + return mKeepUninstalledPackages != null && mKeepUninstalledPackages.contains(packageName); + } + /** * This method is an internal method that could be get invoked either * to delete an installed package or to clean up a failed installation. @@ -13512,7 +13519,9 @@ public class PackageManagerService extends IPackageManager.Stub { false, // blockUninstall ps.readUserState(userId).domainVerificationStatus, 0); if (!isSystemApp(ps)) { - if (ps.isAnyInstalled(sUserManager.getUserIds())) { + // Do not uninstall the APK if an app should be cached + boolean keepUninstalledPackage = shouldKeepUninstalledPackageLPr(packageName); + if (ps.isAnyInstalled(sUserManager.getUserIds()) || keepUninstalledPackage) { // Other user still have this package installed, so all // we need to do is clear this user's data and save that // it is uninstalled. @@ -16686,15 +16695,21 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_CLEAN_APKS) { Slog.i(TAG, "Checking package " + packageName); } - boolean keep = false; - for (int i = 0; i < users.length; i++) { - if (users[i] != userHandle && ps.getInstalled(users[i])) { - keep = true; - if (DEBUG_CLEAN_APKS) { - Slog.i(TAG, " Keeping package " + packageName + " for user " - + users[i]); + boolean keep = shouldKeepUninstalledPackageLPr(packageName); + if (keep) { + if (DEBUG_CLEAN_APKS) { + Slog.i(TAG, " Keeping package " + packageName + " - requested by DO"); + } + } else { + for (int i = 0; i < users.length; i++) { + if (users[i] != userHandle && ps.getInstalled(users[i])) { + keep = true; + if (DEBUG_CLEAN_APKS) { + Slog.i(TAG, " Keeping package " + packageName + " for user " + + users[i]); + } + break; } - break; } } if (!keep) { @@ -16896,6 +16911,23 @@ public class PackageManagerService extends IPackageManager.Stub { } } + private void deletePackageIfUnusedLPr(final String packageName) { + PackageSetting ps = mSettings.mPackages.get(packageName); + if (ps == null) { + return; + } + if (!ps.isAnyInstalled(sUserManager.getUserIds())) { + // TODO Implement atomic delete if package is unused + // It is currently possible that the package will be deleted even if it is installed + // after this method returns. + mHandler.post(new Runnable() { + public void run() { + deletePackageX(packageName, 0, PackageManager.DELETE_ALL_USERS); + } + }); + } + } + /** * Check and throw if the given before/after packages would be considered a * downgrade. @@ -17133,6 +17165,34 @@ public class PackageManagerService extends IPackageManager.Stub { packageName, userId); } } + + @Override + public void setKeepUninstalledPackages(final List<String> packageList) { + Preconditions.checkNotNull(packageList); + List<String> removedFromList = null; + synchronized (mPackages) { + if (mKeepUninstalledPackages != null) { + final int packagesCount = mKeepUninstalledPackages.size(); + for (int i = 0; i < packagesCount; i++) { + String oldPackage = mKeepUninstalledPackages.get(i); + if (packageList != null && packageList.contains(oldPackage)) { + continue; + } + if (removedFromList == null) { + removedFromList = new ArrayList<>(); + } + removedFromList.add(oldPackage); + } + } + mKeepUninstalledPackages = new ArrayList<>(packageList); + if (removedFromList != null) { + final int removedCount = removedFromList.size(); + for (int i = 0; i < removedCount; i++) { + deletePackageIfUnusedLPr(removedFromList.get(i)); + } + } + } + } } @Override diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index b3c40d36185c..fd036a75444f 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -1561,6 +1561,8 @@ public class UserManagerService extends IUserManager.Stub { final boolean isManagedProfile = (flags & UserInfo.FLAG_MANAGED_PROFILE) != 0; final boolean isRestricted = (flags & UserInfo.FLAG_RESTRICTED) != 0; final long ident = Binder.clearCallingIdentity(); + final DevicePolicyManager devicePolicyManager = (DevicePolicyManager) mContext + .getSystemService(Context.DEVICE_POLICY_SERVICE); UserInfo userInfo; final int userId; try { @@ -1603,13 +1605,22 @@ public class UserManagerService extends IUserManager.Stub { return null; } } + if (devicePolicyManager != null) { + int deviceOwnerUserId = devicePolicyManager.getDeviceOwnerUserId(); + // If there is a device owner, completely disallow multiple user in non-split + // user devices. In split user devices, no further users can be added If there + // is a device owner outside of the system user. + if (deviceOwnerUserId != UserHandle.USER_NULL + && (!UserManager.isSplitSystemUser() + || deviceOwnerUserId != UserHandle.USER_SYSTEM)) { + return null; + } + } // In split system user mode, we assign the first human user the primary flag. // And if there is no device owner, we also assign the admin flag to primary user. if (UserManager.isSplitSystemUser() && !isGuest && !isManagedProfile && getPrimaryUser() == null) { flags |= UserInfo.FLAG_PRIMARY; - DevicePolicyManager devicePolicyManager = (DevicePolicyManager) - mContext.getSystemService(Context.DEVICE_POLICY_SERVICE); if (devicePolicyManager == null || devicePolicyManager.getDeviceOwner() == null) { flags |= UserInfo.FLAG_ADMIN; diff --git a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java index 8fc979cccf23..cc25c8c5f836 100644 --- a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java +++ b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java @@ -17,6 +17,7 @@ package com.android.server.updates; import com.android.server.EventLogTags; +import com.android.internal.util.HexDump; import android.content.BroadcastReceiver; import android.content.Context; @@ -155,7 +156,7 @@ public class ConfigUpdateInstallReceiver extends BroadcastReceiver { try { MessageDigest dgst = MessageDigest.getInstance("SHA512"); byte[] fingerprint = dgst.digest(content); - return IntegralToString.bytesToHexString(fingerprint, false); + return HexDump.toHexString(fingerprint, false); } catch (NoSuchAlgorithmException e) { throw new AssertionError(e); } diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 8b1a8305d5b1..9a88c607cef6 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1419,7 +1419,7 @@ public class AppTransition implements Dump { // to be set. Rect rect = spec.rect; putDefaultNextAppTransitionCoordinates(rect.left, rect.top, - rect.width(), rect.height(), null); + rect.width(), rect.height(), spec.bitmap); } } } diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java index dfd01efe36d0..b32ec2d1b0a6 100644 --- a/services/core/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java @@ -228,7 +228,8 @@ public class AppWindowAnimator { private void stepThumbnailAnimation(long currentTime) { thumbnailTransformation.clear(); - thumbnailAnimation.getTransformation(currentTime, thumbnailTransformation); + final long animationFrameTime = getAnimationFrameTime(thumbnailAnimation, currentTime); + thumbnailAnimation.getTransformation(animationFrameTime, thumbnailTransformation); thumbnailTransformation.getMatrix().preTranslate(thumbnailX, thumbnailY); ScreenRotationAnimation screenRotationAnimation = @@ -265,16 +266,26 @@ public class AppWindowAnimator { tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]); } + /** + * Sometimes we need to synchronize the first frame of animation with some external event, e.g. + * Recents hiding some of its content. To achieve this, we prolong the start of the animaiton + * and keep producing the first frame of the animation. + */ + private long getAnimationFrameTime(Animation animation, long currentTime) { + if (mProlongAnimation == PROLONG_ANIMATION_AT_START) { + animation.setStartTime(currentTime); + return currentTime + 1; + } + return currentTime; + } + private boolean stepAnimation(long currentTime) { if (animation == null) { return false; } transformation.clear(); - if (mProlongAnimation == PROLONG_ANIMATION_AT_START) { - animation.setStartTime(currentTime); - currentTime += 1; - } - boolean hasMoreFrames = animation.getTransformation(currentTime, transformation); + final long animationFrameTime = getAnimationFrameTime(animation, currentTime); + boolean hasMoreFrames = animation.getTransformation(animationFrameTime, transformation); if (!hasMoreFrames) { if (deferThumbnailDestruction && !deferFinalFrameCleanup) { // We are deferring the thumbnail destruction, so extend the animation for one more @@ -290,10 +301,10 @@ public class AppWindowAnimator { hasMoreFrames = true; } else { animation = null; + clearThumbnail(); + if (DEBUG_ANIM) Slog.v(TAG, "Finished animation in " + mAppToken + " @ " + + currentTime); } - clearThumbnail(); - if (DEBUG_ANIM) Slog.v(TAG, - "Finished animation in " + mAppToken + " @ " + currentTime); } } hasTransformation = hasMoreFrames; diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java index 4926352829a0..74750a95590d 100644 --- a/services/core/java/com/android/server/wm/DragState.java +++ b/services/core/java/com/android/server/wm/DragState.java @@ -16,6 +16,14 @@ package com.android.server.wm; +import android.graphics.Matrix; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Interpolator; +import android.view.animation.Transformation; +import android.view.animation.TranslateAnimation; import com.android.server.input.InputApplicationHandle; import com.android.server.input.InputWindowHandle; import com.android.server.wm.WindowManagerService.DragInputEventReceiver; @@ -45,6 +53,8 @@ import java.util.ArrayList; * Drag/drop state */ class DragState { + private static final long ANIMATION_DURATION_MS = 500; + final WindowManagerService mService; IBinder mToken; SurfaceControl mSurfaceControl; @@ -55,6 +65,8 @@ class DragState { ClipData mData; ClipDescription mDataDescription; boolean mDragResult; + float mOriginalAlpha; + float mOriginalX, mOriginalY; float mCurrentX, mCurrentY; float mThumbOffsetX, mThumbOffsetY; InputChannel mServerChannel, mClientChannel; @@ -69,6 +81,10 @@ class DragState { private final Region mTmpRegion = new Region(); private final Rect mTmpRect = new Rect(); + private Animation mAnimation; + final Transformation mTransformation = new Transformation(); + private final Interpolator mCubicEaseOutInterpolator = new DecelerateInterpolator(1.5f); + DragState(WindowManagerService service, IBinder token, SurfaceControl surface, int flags, IBinder localWin) { mService = service; @@ -184,6 +200,9 @@ class DragState { /* call out to each visible window/session informing it about the drag */ void broadcastDragStartedLw(final float touchX, final float touchY) { + mOriginalX = mCurrentX = touchX; + mOriginalY = mCurrentY = touchY; + // Cache a base-class instance of the clip metadata so that parceling // works correctly in calling out to the apps. mDataDescription = (mData != null) ? mData.getDescription() : null; @@ -294,19 +313,32 @@ class DragState { } void endDragLw() { - mService.mDragState.broadcastDragEndedLw(); + if (!mDragResult) { + mAnimation = createReturnAnimationLocked(); + mService.scheduleAnimationLocked(); + return; // Will call cleanUpDragLw when the animation is done. + } + cleanUpDragLw(); + } + + + void cleanUpDragLw() { + broadcastDragEndedLw(); // stop intercepting input - mService.mDragState.unregister(); + unregister(); // free our resources and drop all the object references - mService.mDragState.reset(); + reset(); mService.mDragState = null; mService.mInputMonitor.updateInputWindowsLw(true /*force*/); } void notifyMoveLw(float x, float y) { + mCurrentX = x; + mCurrentY = y; + final int myPid = Process.myPid(); // Move the surface to the given touch @@ -378,6 +410,9 @@ class DragState { // result from the recipient. boolean notifyDropLw(WindowState touchedWin, DropPermissionHolder dropPermissionHolder, float x, float y) { + mCurrentX = x; + mCurrentY = y; + if (touchedWin == null) { // "drop" outside a valid window -- no recipient to apply a // timeout to, and we can send the drag-ended message immediately. @@ -469,4 +504,38 @@ class DragState { return DragEvent.obtain(action, winX, winY, localState, description, data, dropPermissionHolder, result); } + + boolean stepAnimationLocked(long currentTimeMs) { + if (mAnimation == null) { + return false; + } + + mTransformation.clear(); + if (!mAnimation.getTransformation(currentTimeMs, mTransformation)) { + cleanUpDragLw(); + return false; + } + + final float tmpFloats[] = mService.mTmpFloats; + mTransformation.getMatrix().getValues(tmpFloats); + mSurfaceControl.setPosition( + tmpFloats[Matrix.MTRANS_X] - mThumbOffsetX, + tmpFloats[Matrix.MTRANS_Y] - mThumbOffsetY); + mSurfaceControl.setAlpha(mTransformation.getAlpha()); + mSurfaceControl.setMatrix(tmpFloats[Matrix.MSCALE_X], tmpFloats[Matrix.MSKEW_Y], + tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]); + return true; + } + + private Animation createReturnAnimationLocked() { + final AnimationSet set = new AnimationSet(false); + set.addAnimation(new TranslateAnimation( + mCurrentX, mOriginalX, mCurrentY, mOriginalY)); + set.addAnimation(new AlphaAnimation(mOriginalAlpha, mOriginalAlpha / 2)); + set.setDuration(ANIMATION_DURATION_MS); + set.setInterpolator(mCubicEaseOutInterpolator); + set.initialize(0, 0, 0, 0); + set.start(); // Will start on the first call to getTransformation. + return set; + } }
\ No newline at end of file diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index 1caeca09238d..f23fcdb46258 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -325,8 +325,6 @@ final class Session extends IWindowSession.Stub } mService.mDragState.mData = data; - mService.mDragState.mCurrentX = touchX; - mService.mDragState.mCurrentY = touchY; mService.mDragState.broadcastDragStartedLw(touchX, touchY); // remember the thumb offsets for later @@ -401,6 +399,34 @@ final class Session extends IWindowSession.Stub } } + public void cancelDragAndDrop(IBinder dragToken) { + if (WindowManagerService.DEBUG_DRAG) { + Slog.d(WindowManagerService.TAG, "cancelDragAndDrop"); + } + + synchronized (mService.mWindowMap) { + long ident = Binder.clearCallingIdentity(); + try { + if (mService.mDragState == null) { + Slog.w(WindowManagerService.TAG, "cancelDragAndDrop() without prepareDrag()"); + throw new IllegalStateException("cancelDragAndDrop() without prepareDrag()"); + } + + if (mService.mDragState.mToken != dragToken) { + Slog.w(WindowManagerService.TAG, + "cancelDragAndDrop() does not match prepareDrag()"); + throw new IllegalStateException( + "cancelDragAndDrop() does not match prepareDrag()"); + } + + mService.mDragState.mDragResult = false; + mService.mDragState.endDragLw(); + } finally { + Binder.restoreCallingIdentity(ident); + } + } + } + public void dragRecipientEntered(IWindow window) { if (WindowManagerService.DEBUG_DRAG) { Slog.d(WindowManagerService.TAG, "Drag into new candidate view @ " + window.asBinder()); diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 8085f13ca7f9..04ab5440ea6e 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -515,10 +515,11 @@ public class TaskStack implements DimLayer.DimLayerUser { for (int i = 0; i < count; i++) { final TaskStack otherStack = mService.mStackIdToStack.valueAt(i); final int otherStackId = otherStack.mStackId; - if (StackId.isResizeableByDockedStack(otherStackId)) { + if (StackId.isResizeableByDockedStack(otherStackId) + && !otherStack.mBounds.equals(bounds)) { mService.mH.sendMessage( mService.mH.obtainMessage(RESIZE_STACK, otherStackId, - 1 /*allowResizeInDockedMode*/, bounds)); + 1 /*allowResizeInDockedMode*/, fullscreen ? null : bounds)); } } } diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index a96bd2c612ef..46fab2ae0223 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -708,6 +708,10 @@ public class WindowAnimator { } } + if (mService.mDragState != null) { + mAnimating |= mService.mDragState.stepAnimationLocked(mCurrentTime); + } + if (mAnimating) { mService.scheduleAnimationLocked(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index b6600266166d..e741c45325ea 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -309,6 +309,8 @@ public class WindowManagerService extends IWindowManager.Stub // trying to apply a new one. private static final boolean ALWAYS_KEEP_CURRENT = true; + private static final float DRAG_SHADOW_ALPHA_TRANSPARENT = .7071f; + final private KeyguardDisableHandler mKeyguardDisableHandler; final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @@ -753,9 +755,6 @@ public class WindowManagerService extends IWindowManager.Stub private boolean completeDropLw(float x, float y) { WindowState dropTargetWin = mDragState.getDropTargetWinLw(x, y); - mDragState.mCurrentX = x; - mDragState.mCurrentY = y; - DropPermissionHolder dropPermissionHolder = null; if (dropTargetWin != null && (mDragState.mFlags & View.DRAG_FLAG_GLOBAL) != 0 && @@ -7175,9 +7174,11 @@ public class WindowManagerService extends IWindowManager.Stub SurfaceControl surface = new SurfaceControl(session, "drag surface", width, height, PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN); surface.setLayerStack(display.getLayerStack()); + float alpha = 1; if ((flags & View.DRAG_FLAG_OPAQUE) == 0) { - surface.setAlpha(.7071f); + alpha = DRAG_SHADOW_ALPHA_TRANSPARENT; } + surface.setAlpha(alpha); if (SHOW_TRANSACTIONS) Slog.i(TAG, " DRAG " + surface + ": CREATE"); @@ -7187,6 +7188,7 @@ public class WindowManagerService extends IWindowManager.Stub mDragState = new DragState(this, token, surface, flags, winBinder); mDragState.mPid = callerPid; mDragState.mUid = callerUid; + mDragState.mOriginalAlpha = alpha; token = mDragState.mToken = new Binder(); // 5 second timeout for this window to actually begin the drag diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index e59c6f814869..d80fcab9942c 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -60,6 +60,7 @@ import android.content.pm.IPackageManager; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.PackageManagerInternal; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; @@ -416,7 +417,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { "cross-profile-widget-providers"; private static final String TAG_PROVIDER = "provider"; private static final String TAG_PACKAGE_LIST_ITEM = "item"; - + private static final String TAG_KEEP_UNINSTALLED_PACKAGES = "keep-uninstalled-packages"; private static final String TAG_USER_RESTRICTIONS = "user-restrictions"; final DeviceAdminInfo info; @@ -489,6 +490,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { // allowed. List<String> permittedInputMethods; + // List of package names to keep cached. + List<String> keepUninstalledPackages; + // TODO: review implementation decisions with frameworks team boolean specifiesGlobalProxy = false; String globalProxySpec = null; @@ -674,6 +678,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { writePackageListToXml(out, TAG_PERMITTED_ACCESSIBILITY_SERVICES, permittedAccessiblityServices); writePackageListToXml(out, TAG_PERMITTED_IMES, permittedInputMethods); + writePackageListToXml(out, TAG_KEEP_UNINSTALLED_PACKAGES, keepUninstalledPackages); if (hasUserRestrictions()) { UserRestrictionsUtils.writeRestrictions( out, userRestrictions, TAG_USER_RESTRICTIONS); @@ -787,6 +792,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { permittedAccessiblityServices = readPackageList(parser, tag); } else if (TAG_PERMITTED_IMES.equals(tag)) { permittedInputMethods = readPackageList(parser, tag); + } else if (TAG_KEEP_UNINSTALLED_PACKAGES.equals(tag)) { + keepUninstalledPackages = readPackageList(parser, tag); } else if (TAG_USER_RESTRICTIONS.equals(tag)) { UserRestrictionsUtils.readRestrictions(parser, ensureUserRestrictions()); } else { @@ -981,13 +988,17 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { pw.println(disabledKeyguardFeatures); pw.print(prefix); pw.print("crossProfileWidgetProviders="); pw.println(crossProfileWidgetProviders); - if (!(permittedAccessiblityServices == null)) { + if (permittedAccessiblityServices != null) { pw.print(prefix); pw.print("permittedAccessibilityServices="); - pw.println(permittedAccessiblityServices.toString()); + pw.println(permittedAccessiblityServices); } - if (!(permittedInputMethods == null)) { + if (permittedInputMethods != null) { pw.print(prefix); pw.print("permittedInputMethods="); - pw.println(permittedInputMethods.toString()); + pw.println(permittedInputMethods); + } + if (keepUninstalledPackages != null) { + pw.print(prefix); pw.print("keepUninstalledPackages="); + pw.println(keepUninstalledPackages); } pw.print(prefix); pw.println("userRestrictions:"); UserRestrictionsUtils.dumpRestrictions(pw, prefix + " ", userRestrictions); @@ -1068,6 +1079,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return LocalServices.getService(UserManagerInternal.class); } + PackageManagerInternal getPackageManagerInternal() { + return LocalServices.getService(PackageManagerInternal.class); + } + NotificationManager getNotificationManager() { return mContext.getSystemService(NotificationManager.class); } @@ -2101,6 +2116,14 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { new SetupContentObserver(mHandler).register(mContext.getContentResolver()); // Initialize the user setup state, to handle the upgrade case. updateUserSetupComplete(); + + List<String> packageList; + synchronized (this) { + packageList = getKeepUninstalledPackagesLocked(); + } + if (packageList != null) { + mInjector.getPackageManagerInternal().setKeepUninstalledPackages(packageList); + } } private void ensureDeviceOwnerUserStarted() { @@ -4490,6 +4513,42 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override + public void setKeepUninstalledPackages(ComponentName who, List<String> packageList) { + if (!mHasFeature) { + return; + } + Preconditions.checkNotNull(who, "ComponentName is null"); + Preconditions.checkNotNull(packageList, "packageList is null"); + final int userHandle = UserHandle.getCallingUserId(); + synchronized (this) { + ActiveAdmin admin = getActiveAdminForCallerLocked(who, + DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); + admin.keepUninstalledPackages = packageList; + saveSettingsLocked(userHandle); + mInjector.getPackageManagerInternal().setKeepUninstalledPackages(packageList); + } + } + + @Override + public List<String> getKeepUninstalledPackages(ComponentName who) { + Preconditions.checkNotNull(who, "ComponentName is null"); + if (!mHasFeature) { + return null; + } + // TODO In split system user mode, allow apps on user 0 to query the list + synchronized (this) { + // Check if this is the device owner who is calling + getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); + return getKeepUninstalledPackagesLocked(); + } + } + + private List<String> getKeepUninstalledPackagesLocked() { + ActiveAdmin deviceOwner = getDeviceOwnerAdminLocked(); + return (deviceOwner != null) ? deviceOwner.keepUninstalledPackages : null; + } + + @Override public boolean setDeviceOwner(ComponentName admin, String ownerName, int userId) { if (!mHasFeature) { return false; @@ -4569,6 +4628,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } } + @Override + public int getDeviceOwnerUserId() { + return mOwners.hasDeviceOwner() ? mOwners.getDeviceOwnerUserId() : UserHandle.USER_NULL; + } + // Returns the active device owner or null if there is no device owner. @VisibleForTesting ActiveAdmin getDeviceOwnerAdminLocked() { @@ -5718,11 +5782,18 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public Bundle getUserRestrictions(ComponentName who) { + public Bundle getUserRestrictions(ComponentName who, int userHandle) { Preconditions.checkNotNull(who, "ComponentName is null"); + enforceCrossUserPermission(userHandle); synchronized (this) { - final ActiveAdmin activeAdmin = - getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); + ActiveAdmin activeAdmin = getActiveAdminUncheckedLocked(who, userHandle); + if (activeAdmin == null) { + throw new SecurityException("No active admin: " + activeAdmin); + } + if (activeAdmin.getUid() != mInjector.binderGetCallingUid()) { + mContext.enforceCallingOrSelfPermission( + android.Manifest.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS, null); + } return activeAdmin.userRestrictions; } } diff --git a/services/net/java/android/net/dhcp/DhcpPacket.java b/services/net/java/android/net/dhcp/DhcpPacket.java index 8927bfa25654..6a255e599631 100644 --- a/services/net/java/android/net/dhcp/DhcpPacket.java +++ b/services/net/java/android/net/dhcp/DhcpPacket.java @@ -291,6 +291,11 @@ abstract class DhcpPacket { */ abstract void finishPacket(ByteBuffer buffer); + // Set in unit tests, to ensure that the test does not break when run on different devices and + // on different releases. + static String testOverrideVendorId = null; + static String testOverrideHostname = null; + protected DhcpPacket(int transId, short secs, Inet4Address clientIp, Inet4Address yourIp, Inet4Address nextIp, Inet4Address relayIp, byte[] clientMac, boolean broadcast) { @@ -593,6 +598,16 @@ abstract class DhcpPacket { buf.put((byte) 0xFF); } + private String getVendorId() { + if (testOverrideVendorId != null) return testOverrideVendorId; + return "android-dhcp-" + Build.VERSION.RELEASE; + } + + private String getHostname() { + if (testOverrideHostname != null) return testOverrideHostname; + return SystemProperties.get("net.hostname"); + } + /** * Adds common client TLVs. * @@ -601,8 +616,8 @@ abstract class DhcpPacket { */ protected void addCommonClientTlvs(ByteBuffer buf) { addTlv(buf, DHCP_MAX_MESSAGE_SIZE, (short) MAX_LENGTH); - addTlv(buf, DHCP_VENDOR_CLASS_ID, "android-dhcp-" + Build.VERSION.RELEASE); - addTlv(buf, DHCP_HOST_NAME, SystemProperties.get("net.hostname")); + addTlv(buf, DHCP_VENDOR_CLASS_ID, getVendorId()); + addTlv(buf, DHCP_HOST_NAME, getHostname()); } /** diff --git a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java index 7e60bf17d96e..2a967e651f04 100644 --- a/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java +++ b/services/tests/servicestests/src/android/net/dhcp/DhcpPacketTest.java @@ -29,6 +29,7 @@ import java.util.ArrayList; import junit.framework.TestCase; import libcore.util.HexEncoding; +import java.util.Arrays; import static android.net.dhcp.DhcpPacket.*; @@ -47,6 +48,11 @@ public class DhcpPacketTest extends TestCase { return (Inet4Address) NetworkUtils.numericToInetAddress(addrString); } + public void setUp() { + DhcpPacket.testOverrideVendorId = "android-dhcp-???"; + DhcpPacket.testOverrideHostname = "android-01234567890abcde"; + } + class TestDhcpPacket extends DhcpPacket { private byte mType; // TODO: Make this a map of option numbers to bytes instead. @@ -584,4 +590,93 @@ public class DhcpPacketTest extends TestCase { assertDhcpResults("192.168.189.49/24", "192.168.189.1", "8.8.8.8,8.8.4.4", null, "192.171.189.2", null, 28800, false, dhcpResults); } + + @SmallTest + public void testDiscoverPacket() throws Exception { + short secs = 7; + int transactionId = 0xdeadbeef; + byte[] hwaddr = { + (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a + }; + byte[] params = new byte[] { + DHCP_SUBNET_MASK, + DHCP_ROUTER, + DHCP_DNS_SERVER, + DHCP_DOMAIN_NAME, + DHCP_MTU, + DHCP_LEASE_TIME, + }; + + ByteBuffer packet = DhcpPacket.buildDiscoverPacket( + DhcpPacket.ENCAP_L2, transactionId, secs, hwaddr, + false /* do unicast */, params); + + byte[] headers = new byte[] { + // Ethernet header. + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a, + (byte) 0x08, (byte) 0x00, + // IP header. + (byte) 0x45, (byte) 0x10, (byte) 0x01, (byte) 0x52, + (byte) 0x00, (byte) 0x00, (byte) 0x40, (byte) 0x00, + (byte) 0x40, (byte) 0x11, (byte) 0x39, (byte) 0x8c, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, + // UDP header. + (byte) 0x00, (byte) 0x44, (byte) 0x00, (byte) 0x43, + (byte) 0x01, (byte) 0x3e, (byte) 0xd8, (byte) 0xa4, + // BOOTP. + (byte) 0x01, (byte) 0x01, (byte) 0x06, (byte) 0x00, + (byte) 0xde, (byte) 0xad, (byte) 0xbe, (byte) 0xef, + (byte) 0x00, (byte) 0x07, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, + (byte) 0xb1, (byte) 0x7a + }; + byte[] options = new byte[] { + // Magic cookie 0x63825363. + (byte) 0x63, (byte) 0x82, (byte) 0x53, (byte) 0x63, + // Message type DISCOVER. + (byte) 0x35, (byte) 0x01, (byte) 0x01, + // Client identifier Ethernet, da:01:19:5b:b1:7a. + (byte) 0x3d, (byte) 0x07, + (byte) 0x01, + (byte) 0xda, (byte) 0x01, (byte) 0x19, (byte) 0x5b, (byte) 0xb1, (byte) 0x7a, + // Max message size 1500. + (byte) 0x39, (byte) 0x02, (byte) 0x05, (byte) 0xdc, + // Version "android-dhcp-???". + (byte) 0x3c, (byte) 0x10, + 'a', 'n', 'd', 'r', 'o', 'i', 'd', '-', 'd', 'h', 'c', 'p', '-', '?', '?', '?', + // Hostname "android-01234567890abcde" + (byte) 0x0c, (byte) 0x18, + 'a', 'n', 'd', 'r', 'o', 'i', 'd', '-', + '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e', + // Requested parameter list. + (byte) 0x37, (byte) 0x06, + DHCP_SUBNET_MASK, + DHCP_ROUTER, + DHCP_DNS_SERVER, + DHCP_DOMAIN_NAME, + DHCP_MTU, + DHCP_LEASE_TIME, + // End options. + (byte) 0xff, + // Our packets are always of even length. TODO: find out why and possibly fix it. + (byte) 0x00 + }; + byte[] expected = new byte[DhcpPacket.MIN_PACKET_LENGTH_L2 + options.length]; + assertTrue((expected.length & 1) == 0); + System.arraycopy(headers, 0, expected, 0, headers.length); + System.arraycopy(options, 0, expected, DhcpPacket.MIN_PACKET_LENGTH_L2, options.length); + + byte[] actual = new byte[packet.limit()]; + packet.get(actual); + String msg = + "Expected:\n " + Arrays.toString(expected) + + "\nActual:\n " + Arrays.toString(actual); + assertTrue(msg, Arrays.equals(expected, actual)); + } } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java index 2c01b8aaac12..56d6fc05d6b5 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DevicePolicyManagerServiceTestable.java @@ -20,8 +20,8 @@ import com.android.internal.widget.LockPatternUtils; import android.app.IActivityManager; import android.app.NotificationManager; import android.app.backup.IBackupManager; -import android.content.Context; import android.content.pm.IPackageManager; +import android.content.pm.PackageManagerInternal; import android.media.IAudioService; import android.os.Looper; import android.os.PowerManagerInternal; @@ -113,6 +113,11 @@ public class DevicePolicyManagerServiceTestable extends DevicePolicyManagerServi } @Override + PackageManagerInternal getPackageManagerInternal() { + return context.packageManagerInternal; + } + + @Override PowerManagerInternal getPowerManagerInternal() { return context.powerManagerInternal; } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java index f4fdc95870ea..bb1e06ddb35a 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmMockContext.java @@ -28,6 +28,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.content.pm.PackageManagerInternal; import android.content.pm.UserInfo; import android.media.IAudioService; import android.os.Bundle; @@ -205,6 +206,7 @@ public class DpmMockContext extends MockContext { public final SystemPropertiesForMock systemProperties; public final UserManager userManager; public final UserManagerInternal userManagerInternal; + public final PackageManagerInternal packageManagerInternal; public final UserManagerForMock userManagerForMock; public final PowerManagerForMock powerManager; public final PowerManagerInternal powerManagerInternal; @@ -237,6 +239,7 @@ public class DpmMockContext extends MockContext { userManager = mock(UserManager.class); userManagerInternal = mock(UserManagerInternal.class); userManagerForMock = mock(UserManagerForMock.class); + packageManagerInternal = mock(PackageManagerInternal.class); powerManager = mock(PowerManagerForMock.class); powerManagerInternal = mock(PowerManagerInternal.class); notificationManager = mock(NotificationManager.class); diff --git a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java b/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java deleted file mode 100644 index 56fd351887e3..000000000000 --- a/services/tests/servicestests/src/com/android/server/pm/UserRestrictionsUtilsTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (C) 2015 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 com.android.server.pm; - -import com.android.server.devicepolicy.DpmTestUtils; - -import android.os.Bundle; -import android.os.UserManager; -import android.test.AndroidTestCase; -import android.test.MoreAsserts; - -/** - * Tests for {@link com.android.server.pm.UserRestrictionsUtils}. - * - * <p>Run with:<pre> - m FrameworksServicesTests && - adb install \ - -r out/target/product/hammerhead/data/app/FrameworksServicesTests/FrameworksServicesTests.apk && - adb shell am instrument -e class com.android.server.pm.UserRestrictionsUtilsTest \ - -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner - * </pre> - */ -public class UserRestrictionsUtilsTest extends AndroidTestCase { - public void testNonNull() { - Bundle out = UserRestrictionsUtils.nonNull(null); - assertNotNull(out); - out.putBoolean("a", true); // Should not be Bundle.EMPTY. - - Bundle in = new Bundle(); - assertSame(in, UserRestrictionsUtils.nonNull(in)); - } - - public void testIsEmpty() { - assertTrue(UserRestrictionsUtils.isEmpty(null)); - assertTrue(UserRestrictionsUtils.isEmpty(new Bundle())); - assertFalse(UserRestrictionsUtils.isEmpty(DpmTestUtils.newRestrictions("a"))); - } - - public void testClone() { - Bundle in = new Bundle(); - Bundle out = UserRestrictionsUtils.clone(in); - assertNotSame(in, out); - DpmTestUtils.assertRestrictions(out, new Bundle()); - - out = UserRestrictionsUtils.clone(null); - assertNotNull(out); - out.putBoolean("a", true); // Should not be Bundle.EMPTY. - } - - public void testMerge() { - Bundle a = DpmTestUtils.newRestrictions("a", "d"); - Bundle b = DpmTestUtils.newRestrictions("b", "d", "e"); - - UserRestrictionsUtils.merge(a, b); - - DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions("a", "b", "d", "e"), a); - - UserRestrictionsUtils.merge(a, null); - - DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions("a", "b", "d", "e"), a); - - try { - UserRestrictionsUtils.merge(a, a); - fail(); - } catch (IllegalArgumentException expected) { - } - } - - public void testIsSystemControlled() { - assertTrue(UserRestrictionsUtils.isSystemControlled(UserManager.DISALLOW_RECORD_AUDIO)); - assertFalse(UserRestrictionsUtils.isSystemControlled(UserManager.DISALLOW_FUN)); - } - - public void testCanDeviceOwnerChange() { - assertFalse(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_RECORD_AUDIO)); - assertFalse(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_WALLPAPER)); - assertTrue(UserRestrictionsUtils.canDeviceOwnerChange(UserManager.DISALLOW_ADD_USER)); - } - - public void testCanProfileOwnerChange() { - assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_RECORD_AUDIO)); - assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_WALLPAPER)); - assertFalse(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_ADD_USER)); - assertTrue(UserRestrictionsUtils.canProfileOwnerChange(UserManager.DISALLOW_ADJUST_VOLUME)); - } - - public void testSortToGlobalAndLocal() { - final Bundle local = new Bundle(); - final Bundle global = new Bundle(); - - UserRestrictionsUtils.sortToGlobalAndLocal(null, global, local); - assertEquals(0, global.size()); - assertEquals(0, local.size()); - - UserRestrictionsUtils.sortToGlobalAndLocal(Bundle.EMPTY, global, local); - assertEquals(0, global.size()); - assertEquals(0, local.size()); - - UserRestrictionsUtils.sortToGlobalAndLocal(DpmTestUtils.newRestrictions( - UserManager.DISALLOW_ADJUST_VOLUME, - UserManager.DISALLOW_UNMUTE_MICROPHONE, - UserManager.DISALLOW_USB_FILE_TRANSFER, - UserManager.DISALLOW_CONFIG_TETHERING, - UserManager.DISALLOW_OUTGOING_BEAM, - UserManager.DISALLOW_APPS_CONTROL - ), global, local); - - - DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions( - // These can be set by PO too, but when DO sets them, they're global. - UserManager.DISALLOW_ADJUST_VOLUME, - UserManager.DISALLOW_UNMUTE_MICROPHONE, - - // These can only be set by DO. - UserManager.DISALLOW_USB_FILE_TRANSFER, - UserManager.DISALLOW_CONFIG_TETHERING - ), global); - - DpmTestUtils.assertRestrictions(DpmTestUtils.newRestrictions( - // They can be set by both DO/PO. - UserManager.DISALLOW_OUTGOING_BEAM, - UserManager.DISALLOW_APPS_CONTROL - ), local); - } - - public void testAreEqual() { - assertTrue(UserRestrictionsUtils.areEqual( - null, - null)); - - assertTrue(UserRestrictionsUtils.areEqual( - null, - Bundle.EMPTY)); - - assertTrue(UserRestrictionsUtils.areEqual( - Bundle.EMPTY, - null)); - - assertTrue(UserRestrictionsUtils.areEqual( - Bundle.EMPTY, - Bundle.EMPTY)); - - assertTrue(UserRestrictionsUtils.areEqual( - new Bundle(), - Bundle.EMPTY)); - - assertFalse(UserRestrictionsUtils.areEqual( - null, - DpmTestUtils.newRestrictions("a"))); - - assertFalse(UserRestrictionsUtils.areEqual( - DpmTestUtils.newRestrictions("a"), - null)); - - assertTrue(UserRestrictionsUtils.areEqual( - DpmTestUtils.newRestrictions("a"), - DpmTestUtils.newRestrictions("a"))); - - assertFalse(UserRestrictionsUtils.areEqual( - DpmTestUtils.newRestrictions("a"), - DpmTestUtils.newRestrictions("a", "b"))); - - assertFalse(UserRestrictionsUtils.areEqual( - DpmTestUtils.newRestrictions("a", "b"), - DpmTestUtils.newRestrictions("a"))); - - assertFalse(UserRestrictionsUtils.areEqual( - DpmTestUtils.newRestrictions("b", "a"), - DpmTestUtils.newRestrictions("a", "a"))); - - // Make sure false restrictions are handled correctly. - final Bundle a = DpmTestUtils.newRestrictions("a"); - a.putBoolean("b", true); - - final Bundle b = DpmTestUtils.newRestrictions("a"); - b.putBoolean("b", false); - - assertFalse(UserRestrictionsUtils.areEqual(a, b)); - assertFalse(UserRestrictionsUtils.areEqual(b, a)); - } -} diff --git a/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java b/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java index b6742a104c30..d79851817f85 100644 --- a/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java +++ b/services/tests/servicestests/src/com/android/server/updates/CertPinInstallReceiverTest.java @@ -16,6 +16,8 @@ package com.android.server.updates; +import com.android.internal.util.HexDump; + import android.content.Context; import android.content.Intent; import android.test.AndroidTestCase; @@ -128,7 +130,7 @@ public class CertPinInstallReceiverTest extends AndroidTestCase { MessageDigest dgst = MessageDigest.getInstance("SHA512"); byte[] encoded = content.getBytes(); byte[] fingerprint = dgst.digest(encoded); - return IntegralToString.bytesToHexString(fingerprint, false); + return HexDump.toHexString(fingerprint, false); } private static String getHashOfCurrentContent() throws Exception { diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java index 572cc6fb4bb9..a183de5c7396 100644 --- a/telephony/java/com/android/internal/telephony/PhoneConstants.java +++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java @@ -59,6 +59,9 @@ public class PhoneConstants { public static final int PHONE_TYPE_SIP = RILConstants.SIP_PHONE; public static final int PHONE_TYPE_THIRD_PARTY = RILConstants.THIRD_PARTY_PHONE; public static final int PHONE_TYPE_IMS = RILConstants.IMS_PHONE; + // Currently this is used only to differentiate CDMA and CDMALTE Phone in GsmCdma* files. For + // anything outside of that, a cdma + lte phone is still CDMA_PHONE + public static final int PHONE_TYPE_CDMA_LTE = RILConstants.CDMA_LTE_PHONE; // Modes for LTE_ON_CDMA public static final int LTE_ON_CDMA_UNKNOWN = RILConstants.LTE_ON_CDMA_UNKNOWN; diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 7088be828408..3c4c04b36ae9 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -118,6 +118,7 @@ public interface RILConstants { int SIP_PHONE = 3; int THIRD_PARTY_PHONE = 4; int IMS_PHONE = 5; + int CDMA_LTE_PHONE = 6; int LTE_ON_CDMA_UNKNOWN = -1; int LTE_ON_CDMA_FALSE = 0; diff --git a/test-runner/Android.mk b/test-runner/Android.mk index b12795c737c5..68bde35d4ec5 100644 --- a/test-runner/Android.mk +++ b/test-runner/Android.mk @@ -20,7 +20,7 @@ include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_JAVA_LIBRARIES := core-libart core-junit framework +LOCAL_JAVA_LIBRARIES := core-oj core-libart core-junit framework LOCAL_STATIC_JAVA_LIBRARIES := junit-runner LOCAL_MODULE:= android.test.runner diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java index 67b9d7784fed..8eb30d23b206 100644 --- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java +++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java @@ -160,6 +160,36 @@ public class NotificationTestList extends TestActivity } }, + new Test("with topic Hello") { + public void run() { + Notification n = new Notification.Builder(NotificationTestList.this) + .setSmallIcon(R.drawable.icon1) + .setWhen(mActivityCreateTime) + .setContentTitle("hihi") + .setContentText("This is a notification!!!") + .setContentIntent(makeIntent2()) + .setTopic(new Notification.Topic("hello", "Hello")) + .build(); + + mNM.notify(999, n); + } + }, + + new Test("with topic GoodBye") { + public void run() { + Notification n = new Notification.Builder(NotificationTestList.this) + .setSmallIcon(R.drawable.icon1) + .setWhen(mActivityCreateTime) + .setContentTitle("byebye") + .setContentText("This is a notification!!!") + .setContentIntent(makeIntent2()) + .setTopic(new Notification.Topic("bye", "Goodbye")) + .build(); + + mNM.notify(9999, n); + } + }, + new Test("Whens") { public void run() { diff --git a/tools/layoutlib/Android.mk b/tools/layoutlib/Android.mk index 61ddb04bc08c..53bfc1581e53 100644 --- a/tools/layoutlib/Android.mk +++ b/tools/layoutlib/Android.mk @@ -30,6 +30,9 @@ LOCAL_JAVACFLAGS := -source 6 -target 6 built_framework_dep := $(call java-lib-deps,framework) built_framework_classes := $(call java-lib-files,framework) +built_oj_dep := $(call java-lib-deps,core-oj) +built_oj_classes := $(call java-lib-files,core-oj) + built_core_dep := $(call java-lib-deps,core-libart) built_core_classes := $(call java-lib-files,core-libart) @@ -56,7 +59,8 @@ LOCAL_BUILT_MODULE_STEM := javalib.jar include $(BUILD_SYSTEM)/base_rules.mk ####################################### -$(LOCAL_BUILT_MODULE): $(built_core_dep) \ +$(LOCAL_BUILT_MODULE): $(built_oj_dep) \ + $(built_core_dep) \ $(built_framework_dep) \ $(built_ext_dep) \ $(built_ext_data) \ @@ -69,6 +73,7 @@ $(LOCAL_BUILT_MODULE): $(built_core_dep) \ $(hide) ls -l $(built_framework_classes) $(hide) java -ea -jar $(built_layoutlib_create_jar) \ $@ \ + $(built_oj_classes) \ $(built_core_classes) \ $(built_framework_classes) \ $(built_ext_classes) \ diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java index 1ec054720547..5c73fb6a6fbe 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowSession.java @@ -167,6 +167,11 @@ public final class BridgeWindowSession implements IWindowSession { } @Override + public void cancelDragAndDrop(IBinder dragToken) throws RemoteException { + // pass for now + } + + @Override public void dragRecipientEntered(IWindow window) throws RemoteException { // pass for now } |