Skip to content

Commit

Permalink
Restored java.nio.charset encoder API, added CharsetProvider, moved i…
Browse files Browse the repository at this point in the history
…OS support classes.

	Change on 2016/08/26 by tball <tball@google.com>

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=131413312
  • Loading branch information
tomball committed Sep 8, 2016
1 parent 448e07d commit f20adf2
Show file tree
Hide file tree
Showing 12 changed files with 1,200 additions and 580 deletions.
1 change: 1 addition & 0 deletions jre_emul/.classpath
Expand Up @@ -20,6 +20,7 @@
<classpathentry kind="src" path="apache_harmony/classlib/modules/luni/src/test/api/common"/>
<classpathentry kind="src" path="apache_harmony/classlib/modules/math/src/main/java"/>
<classpathentry kind="src" path="apache_harmony/classlib/modules/math/src/test/java"/>
<classpathentry kind="src" path="apache_harmony/classlib/modules/nio_char/src/main/java"/>
<classpathentry kind="src" path="apache_harmony/classlib/modules/text/src/test/java"/>
<classpathentry kind="src" path="apache_harmony/classlib/support/src/test/java"/>
<classpathentry kind="src" path="Classes"/>
Expand Down
15 changes: 8 additions & 7 deletions jre_emul/Classes/NSString+JavaString.m
Expand Up @@ -23,6 +23,7 @@

#import "IOSClass.h"
#import "J2ObjC_source.h"
#import "com/google/j2objc/nio/charset/IOSCharset.h"
#import "java/io/ObjectStreamField.h"
#import "java/io/Serializable.h"
#import "java/io/UnsupportedEncodingException.h"
Expand All @@ -35,7 +36,6 @@
#import "java/lang/StringBuilder.h"
#import "java/lang/StringIndexOutOfBoundsException.h"
#import "java/nio/charset/Charset.h"
#import "java/nio/charset/IOSCharset.h"
#import "java/nio/charset/UnsupportedCharsetException.h"
#import "java/util/Comparator.h"
#import "java/util/Formatter.h"
Expand Down Expand Up @@ -498,7 +498,7 @@ + (NSString *)stringWithBytes:(IOSByteArray *)value

NSStringEncoding parseCharsetName(NSString *charset) {
JavaNioCharsetCharset *cs = JavaNioCharsetCharset_forNameUEEWithNSString_(charset);
return (NSStringEncoding)[(JavaNioCharsetIOSCharset *)cs nsEncoding];
return (NSStringEncoding)[(ComGoogleJ2objcNioCharsetIOSCharset *)cs nsEncoding];
}

+ (NSString *)stringWithBytes:(IOSByteArray *)value
Expand Down Expand Up @@ -534,11 +534,11 @@ + (NSString *)stringWithBytes:(IOSByteArray *)value
offset:(int)offset
length:(int)count
charset:(JavaNioCharsetCharset *)charset {
if (![charset isKindOfClass:[JavaNioCharsetIOSCharset class]]) {
if (![charset isKindOfClass:[ComGoogleJ2objcNioCharsetIOSCharset class]]) {
@throw AUTORELEASE([[JavaNioCharsetUnsupportedCharsetException alloc]
initWithNSString:[charset description]]);
}
JavaNioCharsetIOSCharset *iosCharset = (JavaNioCharsetIOSCharset *) charset;
ComGoogleJ2objcNioCharsetIOSCharset *iosCharset = (ComGoogleJ2objcNioCharsetIOSCharset *) charset;
NSStringEncoding encoding = (NSStringEncoding) [iosCharset nsEncoding];
return [NSString stringWithBytes:value
offset:offset
Expand Down Expand Up @@ -611,7 +611,8 @@ + (NSString *)stringWithInts:(IOSIntArray *)codePoints

- (IOSByteArray *)getBytes {
JavaNioCharsetCharset *charset = JavaNioCharsetCharset_defaultCharset();
NSStringEncoding encoding = (NSStringEncoding)[(JavaNioCharsetIOSCharset *)charset nsEncoding];
NSStringEncoding encoding =
(NSStringEncoding)[(ComGoogleJ2objcNioCharsetIOSCharset *)charset nsEncoding];
return [self getBytesWithEncoding:encoding];
}

Expand All @@ -625,11 +626,11 @@ - (IOSByteArray *)getBytesWithCharsetName:(NSString *)charsetName {

- (IOSByteArray *)getBytesWithCharset:(JavaNioCharsetCharset *)charset {
nil_chk(charset);
if (![charset isKindOfClass:[JavaNioCharsetIOSCharset class]]) {
if (![charset isKindOfClass:[ComGoogleJ2objcNioCharsetIOSCharset class]]) {
@throw AUTORELEASE([[JavaNioCharsetUnsupportedCharsetException alloc]
initWithNSString:[charset description]]);
}
JavaNioCharsetIOSCharset *iosCharset = (JavaNioCharsetIOSCharset *) charset;
ComGoogleJ2objcNioCharsetIOSCharset *iosCharset = (ComGoogleJ2objcNioCharsetIOSCharset *) charset;
NSStringEncoding encoding = (NSStringEncoding) [iosCharset nsEncoding];
return [self getBytesWithEncoding:encoding];
}
Expand Down
Expand Up @@ -15,13 +15,14 @@
* limitations under the License.
*/

package java.nio.charset;
package com.google.j2objc.nio.charset;

import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;

/*-[
#import "java/io/UnsupportedEncodingException.h"
Expand All @@ -34,7 +35,7 @@
*
* @author Tom Ball
*/
class IOSCharset extends Charset {
public class IOSCharset extends Charset {

// The NSStringEncoding enum value for this charset.
private long nsEncoding;
Expand All @@ -44,6 +45,8 @@ class IOSCharset extends Charset {

private static Map<String, IOSCharset> encodings = new HashMap<String, IOSCharset>();

public static final IOSCharset DEFAULT_CHARSET = getDefaultCharset();

private IOSCharset(long nsEncoding, String canonicalName, String[] aliases, float charBytes) {
super(canonicalName, aliases);
this.nsEncoding = nsEncoding;
Expand All @@ -69,11 +72,11 @@ public CharsetDecoder newDecoder() {
return new IOSCharsetDecoder(this);
}

static Set<String> getAvailableCharsetNames() {
public static Set<String> getAvailableCharsetNames() {
return getEncodings().keySet();
}

static Charset charsetForName(String charsetName) {
public static Charset charsetForName(String charsetName) {
// See if an encoding was requested by name.
Map<String, IOSCharset> encodings = getEncodings();
IOSCharset result = encodings.get(charsetName.toUpperCase());
Expand Down Expand Up @@ -165,16 +168,16 @@ static Charset charsetForName(String charsetName) {
};
static const int numIosCharsets = sizeof(iosCharsets) / sizeof(CharsetInfo);
static JavaNioCharsetIOSCharset *addEncoding(CharsetInfo info) {
static ComGoogleJ2objcNioCharsetIOSCharset *addEncoding(CharsetInfo info) {
IOSObjectArray *aliases = [IOSObjectArray arrayWithObjects:info.aliases
count:info.aliasCount
type:NSString_class_()];
JavaNioCharsetIOSCharset *cs = [[[JavaNioCharsetIOSCharset alloc]
initWithLong:info.encoding
withNSString:info.name
withNSStringArray:aliases
withFloat:info.charBytes] autorelease];
[JavaNioCharsetIOSCharset_encodings putWithId:info.name withId:cs];
ComGoogleJ2objcNioCharsetIOSCharset *cs = [[[ComGoogleJ2objcNioCharsetIOSCharset alloc]
initWithLong:info.encoding
withNSString:info.name
withNSStringArray:aliases
withFloat:info.charBytes] autorelease];
[ComGoogleJ2objcNioCharsetIOSCharset_encodings putWithId:info.name withId:cs];
return cs;
}
]-*/
Expand All @@ -183,7 +186,7 @@ private static native IOSCharset getDefaultCharset() /*-[
NSString *fileEncoding = JavaLangSystem_getPropertyWithNSString_(@"file.encoding");
if (fileEncoding) {
@try {
return (JavaNioCharsetIOSCharset *)
return (ComGoogleJ2objcNioCharsetIOSCharset *)
JavaNioCharsetCharset_forNameUEEWithNSString_(fileEncoding);
}
@catch (JavaIoUnsupportedEncodingException *e) {
Expand All @@ -194,15 +197,13 @@ private static native IOSCharset getDefaultCharset() /*-[
return addEncoding(iosCharsets[0]);
]-*/;

static final IOSCharset DEFAULT_CHARSET = getDefaultCharset();

private static native Map<String, IOSCharset> getEncodings() /*-[
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
for (jint i = 0; i < numIosCharsets; i++) {
addEncoding(iosCharsets[i]);
}
});
return JavaNioCharsetIOSCharset_encodings;
return ComGoogleJ2objcNioCharsetIOSCharset_encodings;
]-*/;
}
Expand Up @@ -15,10 +15,14 @@
* limitations under the License.
*/

package java.nio.charset;
package com.google.j2objc.nio.charset;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import java.nio.charset.UnsupportedCharsetException;

/**
* iOS native charset decoder.
Expand Down Expand Up @@ -59,12 +63,6 @@ protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) {
return CoderResult.UNDERFLOW; // All input data was decoded.
}

@Override
public CharBuffer decode(ByteBuffer in) throws CharacterCodingException {
String s = decodeImpl(in);
return CharBuffer.wrap(s);
}

private String decodeImpl(ByteBuffer in) {
Charset cs = charset();
if (!(cs instanceof IOSCharset)) {
Expand Down
Expand Up @@ -15,10 +15,14 @@
* limitations under the License.
*/

package java.nio.charset;
package com.google.j2objc.nio.charset;

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CoderResult;
import java.nio.charset.UnsupportedCharsetException;

/**
* iOS native charset encoder.
Expand All @@ -34,11 +38,6 @@ protected IOSCharsetEncoder(Charset charset, float maxBytesPerChar) {
super(charset, maxBytesPerChar, maxBytesPerChar, new byte[] { (byte) '?' });
}

@Override
public ByteBuffer encode(CharBuffer in) throws CharacterCodingException {
return ByteBuffer.wrap(encodeImpl(in));
}

@Override
protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) {
if (byteBuffer != null) {
Expand Down
Expand Up @@ -17,6 +17,7 @@

package java.nio.charset;

import com.google.j2objc.nio.charset.IOSCharset;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
Expand Down

0 comments on commit f20adf2

Please sign in to comment.