From c10bf728da5d8039b517c9e91086c9f93a31a4e1 Mon Sep 17 00:00:00 2001 From: Andrew John Hughes Date: Tue, 6 Jan 2009 22:44:05 +0000 Subject: Merge GNU Classpath libgcj-snapshot-20090102. 2009-01-06 Andrew John Hughes Import GNU Classpath (libgcj-snapshot-20090102). * libjava/classpath/lib/java/text/RuleBasedCollator$CollationSorter.class, * libjava/classpath/lib/java/text/MessageFormat$MessageFormatElement.class, * libjava/classpath/lib/java/text/MessageFormat.class, * libjava/classpath/lib/java/text/SimpleDateFormat.class, * libjava/classpath/lib/java/text/NumberFormat.class, * libjava/classpath/lib/java/text/RuleBasedCollator$CollationElement.class, * libjava/classpath/lib/java/text/MessageFormat$Field.class, * libjava/classpath/lib/java/text/RuleBasedCollator.class, * libjava/classpath/lib/java/text/NumberFormat$Field.class, * libjava/classpath/lib/gnu/xml/transform/Bindings.class, * libjava/classpath/lib/gnu/java/locale/LocaleData.class, * libjava/classpath/lib/gnu/java/awt/peer/gtk/FreetypeGlyphVector.class, * libjava/classpath/lib/gnu/javax/crypto/jce/key/SecretKeyGeneratorImpl.class, * libjava/gnu/java/awt/peer/gtk/FreetypeGlyphVector.h, * libjava/java/text/MessageFormat.h, * libjava/java/text/RuleBasedCollator$CollationSorter.h, * libjava/java/text/RuleBasedCollator.h, * libjava/java/text/SimpleDateFormat.h: Regenerated. 2009-01-02 Andrew John Hughes * ChangeLog-2008: New file. 2009-01-02 Andrew John Hughes * java/text/MessageFormat.java: (setLocale(Locale)): Integer format should use NumberFormat.getIntegerInstance. libjava/classpath/ChangeLog-2008 2008-12-31 Andrew John Hughes * java/text/MessageFormat.java: (parse(String,ParsePosition)): Emulate behaviour of Vector's setSize() which was being implicitly relied on. 2008-12-31 Andrew John Hughes * java/text/SimpleDateFormat.java: Remove superfluous empty line introduced in last commit. 2008-12-31 Andrew John Hughes * java/text/MessageFormat.java: Convert variables to use generic types, use CPStringBuilder in place of StringBuilder. (Field()): Suppress warning due to only being used by deserialization. (scanFormat(String,int,CPStringBuilder,List,Locale)): Use ArrayList instead of Vector as no synchronisation needed. (parse(String,ParsePosition)): Likewise. * java/text/NumberFormat.java: (Field()): Suppress warning due to only being used by deserialization. * java/text/RuleBasedCollator.java: Convert variables to use generic types. (CollationElement): Make fields final. (CollationSorter): Likewise. (CollationSorter(int,String,int,boolean)): New constructor. * java/text/SimpleDateFormat.java, Convert variables to use generic types. (applyPattern(String)): Clear list rather than creating a new instance. 2008-12-30 Andrew John Hughes * java/text/SimpleDateFormat.java: (standardChars): Use standard characters from CLDR. (RFC822_TIMEZONE_FIELD): Fixed to match new standard characters. 2008-12-22 Andrew John Hughes * java/lang/String.java: (byte[],int,int,String): Call new Charset method. (stringToCharset(String)): Private method added to handle exception conversion. (byte[],int,int,Charset): Implemented. (byte[], Charset): Likewise. (getBytes(String)): Call new Charset method. (getBytes(Charset)): Implemented. 2008-12-18 Andrew John Hughes * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c: Include '\0' in the string. 2008-12-09 Andrew John Hughes PR classpath/38473: * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c: (Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative): Check that the glyph is an outline before calling FT_Outline_Decompose. 2008-11-16 Andrew John Hughes * gnu/xml/transform/Bindings.java: Add generics to collections. 2008-11-16 Andrew John Hughes * gnu/javax/crypto/jce/key/SecretKeyGeneratorImpl.java: (init(int,SecureRandom)): Improve exception message. 2008-11-06 Mark Wielaard * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (getKerning): Removed unused cls, method, values. 2008-11-05 Andrew Haley * gnu/java/awt/peer/gtk/FreetypeGlyphVector.java (getKerning): Return result in a float[], not a Point2D. (performDefaultLayout): Call getKerning with a float[]. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c (getKerning): Return result in a float[], not a Point2D. 2008-11-05 Andrew Haley * tools/Makefile.am (UPDATE_TOOLS_ZIP, CREATE_TOOLS_ZIP): Exclude .svn direcories. 2008-10-23 David Edelsohn * native/fdlibm/fdlibm.h: Undef hz. 2008-10-20 Andrew John Hughes * m4/ac_prog_antlr.m4: Remove redundant checks. * tools/Makefile.am: Use gjdoc_gendir when calling antlr. 2008-10-17 Robert Lougher * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector): Release 'fonts'. 2008-10-16 Tom Tromey * tools/gnu/classpath/tools/jar/WorkSet.java (initSet): Use foreach. Change argument type. (WorkSet): Change argument type. * tools/gnu/classpath/tools/jar/Indexer.java (indexJarFile): Use foreach. * tools/gnu/classpath/tools/jar/Creator.java (writeCommandLineEntries): Use foreach. (getAllEntries): Likewise. 2008-10-15 Andrew John Hughes * configure.ac: Remove superfluous AC_PROG_JAVA call. From-SVN: r143139 --- libjava/classpath/java/lang/String.java | 123 +++++++++++++++++++++++++------- 1 file changed, 99 insertions(+), 24 deletions(-) (limited to 'libjava/classpath/java/lang') diff --git a/libjava/classpath/java/lang/String.java b/libjava/classpath/java/lang/String.java index 95c8839..c8c6cb9 100644 --- a/libjava/classpath/java/lang/String.java +++ b/libjava/classpath/java/lang/String.java @@ -337,9 +337,59 @@ public final class String * @throws Error if the decoding fails * @since 1.1 */ - public String(byte[] data, int offset, int count, String encoding) + public String(byte[] data, int offset, int count, final String encoding) throws UnsupportedEncodingException { + this(data, offset, count, stringToCharset(encoding)); + } + + /** + * Wrapper method to convert exceptions resulting from + * the selection of a {@link java.nio.charset.Charset} based on + * a String. + * + * @throws UnsupportedEncodingException if encoding is not found + */ + private static final Charset stringToCharset(final String encoding) + throws UnsupportedEncodingException + { + try + { + return Charset.forName(encoding); + } + catch(IllegalCharsetNameException e) + { + throw new UnsupportedEncodingException("Encoding: "+encoding+ + " not found."); + } + catch(UnsupportedCharsetException e) + { + throw new UnsupportedEncodingException("Encoding: "+encoding+ + " not found."); + } + } + + /** + * Creates a new String using the portion of the byte array starting at the + * offset and ending at offset + count. Uses the specified encoding type + * to decode the byte array, so the resulting string may be longer or + * shorter than the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. Malformed input and unmappable + * character sequences are replaced with the default replacement string + * provided by the {@link java.nio.charset.Charset}. + * + * @param data byte array to copy + * @param offset the offset to start at + * @param count the number of bytes in the array to use + * @param encoding the encoding to use + * @throws NullPointerException if data or encoding is null + * @throws IndexOutOfBoundsException if offset or count is incorrect + * (while unspecified, this is a StringIndexOutOfBoundsException) + * @since 1.6 + */ + public String(byte[] data, int offset, int count, Charset encoding) + { if (offset < 0) throw new StringIndexOutOfBoundsException("offset: " + offset); if (count < 0) @@ -350,7 +400,7 @@ public final class String + (offset + count)); try { - CharsetDecoder csd = Charset.forName(encoding).newDecoder(); + CharsetDecoder csd = encoding.newDecoder(); csd.onMalformedInput(CodingErrorAction.REPLACE); csd.onUnmappableCharacter(CodingErrorAction.REPLACE); CharBuffer cbuf = csd.decode(ByteBuffer.wrap(data, offset, count)); @@ -366,16 +416,12 @@ public final class String this.offset = 0; this.count = value.length; } - } catch(CharacterCodingException e){ - throw new UnsupportedEncodingException("Encoding: "+encoding+ - " not found."); - } catch(IllegalCharsetNameException e){ - throw new UnsupportedEncodingException("Encoding: "+encoding+ - " not found."); - } catch(UnsupportedCharsetException e){ - throw new UnsupportedEncodingException("Encoding: "+encoding+ - " not found."); - } + } + catch(CharacterCodingException e) + { + // This shouldn't ever happen. + throw (InternalError) new InternalError().initCause(e); + } } /** @@ -402,6 +448,26 @@ public final class String } /** + * Creates a new String using the byte array. Uses the specified encoding + * type to decode the byte array, so the resulting string may be longer or + * shorter than the byte array. For more decoding control, use + * {@link java.nio.charset.CharsetDecoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. Malformed input and unmappable + * character sequences are replaced with the default replacement string + * provided by the {@link java.nio.charset.Charset}. + * + * @param data byte array to copy + * @param encoding the name of the encoding to use + * @throws NullPointerException if data or encoding is null + * @see #String(byte[], int, int, java.nio.Charset) + * @since 1.6 + */ + public String(byte[] data, Charset encoding) + { + this(data, 0, data.length, encoding); + } + + /** * Creates a new String using the portion of the byte array starting at the * offset and ending at offset + count. Uses the encoding of the platform's * default charset, so the resulting string may be longer or shorter than @@ -726,11 +792,30 @@ public final class String * @throws UnsupportedEncodingException if encoding is not supported * @since 1.1 */ - public byte[] getBytes(String enc) throws UnsupportedEncodingException + public byte[] getBytes(final String enc) + throws UnsupportedEncodingException + { + return getBytes(stringToCharset(enc)); + } + + /** + * Converts the Unicode characters in this String to a byte array. Uses the + * specified encoding method, so the result may be longer or shorter than + * the String. For more encoding control, use + * {@link java.nio.charset.CharsetEncoder}, and for valid character sets, + * see {@link java.nio.charset.Charset}. Unsupported characters get + * replaced by the {@link java.nio.charset.Charset}'s default replacement. + * + * @param enc encoding name + * @return the resulting byte array + * @throws NullPointerException if enc is null + * @since 1.6 + */ + public byte[] getBytes(Charset enc) { try { - CharsetEncoder cse = Charset.forName(enc).newEncoder(); + CharsetEncoder cse = enc.newEncoder(); cse.onMalformedInput(CodingErrorAction.REPLACE); cse.onUnmappableCharacter(CodingErrorAction.REPLACE); ByteBuffer bbuf = cse.encode(CharBuffer.wrap(value, offset, count)); @@ -742,16 +827,6 @@ public final class String bbuf.get(bytes); return bytes; } - catch(IllegalCharsetNameException e) - { - throw new UnsupportedEncodingException("Encoding: " + enc - + " not found."); - } - catch(UnsupportedCharsetException e) - { - throw new UnsupportedEncodingException("Encoding: " + enc - + " not found."); - } catch(CharacterCodingException e) { // This shouldn't ever happen. -- cgit v1.1