Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,15 @@
BDC8CA6A1BE9352100F7E9E6 /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = BDC8CA691BE9352100F7E9E6 /* libsqlite3.tbd */; };
BDD9BF501BEBCCFD00EC6FE4 /* prefixes.properties in Resources */ = {isa = PBXBuildFile; fileRef = BDD9BF4F1BEBCCFD00EC6FE4 /* prefixes.properties */; };
BDD9BF521BEBCD8200EC6FE4 /* IOSSQLiteDatabaseAdapter.java in Sources */ = {isa = PBXBuildFile; fileRef = BDD9BF511BEBCD8200EC6FE4 /* IOSSQLiteDatabaseAdapter.java */; };
DE9870F62214302000846E67 /* ModelGenErrors.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870F42214302000846E67 /* ModelGenErrors.java */; };
DE9870F72214302000846E67 /* Constants.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870F52214302000846E67 /* Constants.java */; };
DE9870FA2214303E00846E67 /* ISQLitePreparedStatement.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870F82214303E00846E67 /* ISQLitePreparedStatement.java */; };
DE9870FB2214303E00846E67 /* PreparedInsertCache.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870F92214303E00846E67 /* PreparedInsertCache.java */; };
DE9870FF2214305C00846E67 /* CompileContext.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870FC2214305C00846E67 /* CompileContext.java */; };
DE9871002214305C00846E67 /* DefaultArgumentResolver.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870FD2214305C00846E67 /* DefaultArgumentResolver.java */; };
DE9871012214305C00846E67 /* ArgumentResolver.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9870FE2214305C00846E67 /* ArgumentResolver.java */; };
DE9871032214374100846E67 /* IOSSQLiteStatementAdapter.java in Sources */ = {isa = PBXBuildFile; fileRef = DE9871022214374100846E67 /* IOSSQLiteStatementAdapter.java */; };
DE9871062214379D00846E67 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = DE9871052214379D00846E67 /* libiconv.tbd */; };
/* End PBXBuildFile section */

/* Begin PBXBuildRule section */
Expand Down Expand Up @@ -340,13 +349,23 @@
BDC8CA691BE9352100F7E9E6 /* libsqlite3.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libsqlite3.tbd; path = usr/lib/libsqlite3.tbd; sourceTree = SDKROOT; };
BDD9BF4F1BEBCCFD00EC6FE4 /* prefixes.properties */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = prefixes.properties; sourceTree = "<group>"; };
BDD9BF511BEBCD8200EC6FE4 /* IOSSQLiteDatabaseAdapter.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = IOSSQLiteDatabaseAdapter.java; sourceTree = "<group>"; };
DE9870F42214302000846E67 /* ModelGenErrors.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = ModelGenErrors.java; sourceTree = "<group>"; };
DE9870F52214302000846E67 /* Constants.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = Constants.java; sourceTree = "<group>"; };
DE9870F82214303E00846E67 /* ISQLitePreparedStatement.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = ISQLitePreparedStatement.java; sourceTree = "<group>"; };
DE9870F92214303E00846E67 /* PreparedInsertCache.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = PreparedInsertCache.java; sourceTree = "<group>"; };
DE9870FC2214305C00846E67 /* CompileContext.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = CompileContext.java; sourceTree = "<group>"; };
DE9870FD2214305C00846E67 /* DefaultArgumentResolver.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = DefaultArgumentResolver.java; sourceTree = "<group>"; };
DE9870FE2214305C00846E67 /* ArgumentResolver.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = ArgumentResolver.java; sourceTree = "<group>"; };
DE9871022214374100846E67 /* IOSSQLiteStatementAdapter.java */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.java; path = IOSSQLiteStatementAdapter.java; sourceTree = "<group>"; };
DE9871052214379D00846E67 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
BDC8C9161BE92DD300F7E9E6 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
DE9871062214379D00846E67 /* libiconv.tbd in Frameworks */,
BDC8CA6A1BE9352100F7E9E6 /* libsqlite3.tbd in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down Expand Up @@ -385,6 +404,8 @@
2228C4401D11D0A900955753 /* data */ = {
isa = PBXGroup;
children = (
DE9870F82214303E00846E67 /* ISQLitePreparedStatement.java */,
DE9870F92214303E00846E67 /* PreparedInsertCache.java */,
2228C4411D11D0A900955753 /* AbstractModel.java */,
2228C4421D11D0A900955753 /* DataChangedNotifier.java */,
2228C4431D11D0A900955753 /* ICursor.java */,
Expand All @@ -405,6 +426,9 @@
2228C44E1D11D0A900955753 /* sql */ = {
isa = PBXGroup;
children = (
DE9870FE2214305C00846E67 /* ArgumentResolver.java */,
DE9870FC2214305C00846E67 /* CompileContext.java */,
DE9870FD2214305C00846E67 /* DefaultArgumentResolver.java */,
2228C44F1D11D0A900955753 /* ArgumentFunction.java */,
2228C4501D11D0A900955753 /* BetweenCriterion.java */,
2228C4511D11D0A900955753 /* BinaryCriterion.java */,
Expand Down Expand Up @@ -562,6 +586,7 @@
BDC8CA661BE9333300F7E9E6 /* Settings.xcconfig */,
BDC8C91B1BE92DD300F7E9E6 /* squidb-ios-sample */,
BDC8C91A1BE92DD300F7E9E6 /* Products */,
DE9871042214379D00846E67 /* Frameworks */,
);
sourceTree = "<group>";
};
Expand Down Expand Up @@ -668,6 +693,8 @@
BDC8C9B91BE9316700F7E9E6 /* annotations */ = {
isa = PBXGroup;
children = (
DE9870F52214302000846E67 /* Constants.java */,
DE9870F42214302000846E67 /* ModelGenErrors.java */,
BDC8C9BA1BE9316700F7E9E6 /* Alias.java */,
BDC8C9BB1BE9316700F7E9E6 /* ColumnSpec.java */,
BDC8C9BC1BE9316700F7E9E6 /* Ignore.java */,
Expand Down Expand Up @@ -814,6 +841,7 @@
BDC8CA131BE931B000F7E9E6 /* ios */ = {
isa = PBXGroup;
children = (
DE9871022214374100846E67 /* IOSSQLiteStatementAdapter.java */,
BDD9BF511BEBCD8200EC6FE4 /* IOSSQLiteDatabaseAdapter.java */,
BDC8CA141BE931B000F7E9E6 /* IOSOpenHelper.java */,
BDC8CA161BE931B000F7E9E6 /* SquidCursorFactory.java */,
Expand Down Expand Up @@ -898,6 +926,14 @@
path = utils;
sourceTree = "<group>";
};
DE9871042214379D00846E67 /* Frameworks */ = {
isa = PBXGroup;
children = (
DE9871052214379D00846E67 /* libiconv.tbd */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
Expand Down Expand Up @@ -979,7 +1015,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "${SRCROOT}/generate-models.sh";
shellScript = "${SRCROOT}/generate-models.sh\n";
};
/* End PBXShellScriptBuildPhase section */

Expand Down Expand Up @@ -1020,6 +1056,7 @@
BDC8CA291BE931B000F7E9E6 /* Printer.java in Sources */,
2228C4A41D11D0A900955753 /* MathOperator.java in Sources */,
BDC8CA2E1BE931B000F7E9E6 /* SQLiteBlobTooBigException.java in Sources */,
DE9870FA2214303E00846E67 /* ISQLitePreparedStatement.java in Sources */,
2228C4931D11D0A900955753 /* CompilableWithArguments.java in Sources */,
2228C4AA1D11D0A900955753 /* QueryFunction.java in Sources */,
BDC8CA381BE931B000F7E9E6 /* SQLiteDatabaseConfiguration.java in Sources */,
Expand All @@ -1031,6 +1068,7 @@
BDC8CA321BE931B000F7E9E6 /* SQLiteConnectionPool.java in Sources */,
2228C4B31D11D0A900955753 /* TableModelName.java in Sources */,
2228C4B71D11D0A900955753 /* View.java in Sources */,
DE9870FB2214303E00846E67 /* PreparedInsertCache.java in Sources */,
BDC0E2BB1BEA722900F429FE /* TaskCell.m in Sources */,
BDBF185B1BE976500025045D /* IOSOpenHelperCreator.java in Sources */,
BDC8C9CC1BE9316700F7E9E6 /* ViewModelSpec.java in Sources */,
Expand All @@ -1055,6 +1093,7 @@
BDC8C9CD1BE9316700F7E9E6 /* ViewQuery.java in Sources */,
2228C4981D11D0A900955753 /* Criterion.java in Sources */,
BDC8CA4A1BE931B000F7E9E6 /* SQLiteSession.java in Sources */,
DE9870F72214302000846E67 /* Constants.java in Sources */,
BDC8CA341BE931B000F7E9E6 /* SQLiteCursor.java in Sources */,
BDC8CA1B1BE931B000F7E9E6 /* AbstractCursor.java in Sources */,
BDC8C9CA1BE9316700F7E9E6 /* PrimaryKey.java in Sources */,
Expand All @@ -1065,6 +1104,7 @@
BDC8CA371BE931B000F7E9E6 /* SQLiteDatabase.java in Sources */,
2228C4941D11D0A900955753 /* CompiledArgumentResolver.java in Sources */,
BDC8CA481BE931B000F7E9E6 /* SQLiteQueryBuilder.java in Sources */,
DE9871012214305C00846E67 /* ArgumentResolver.java in Sources */,
BDC8CA4B1BE931B000F7E9E6 /* SQLiteStatement.java in Sources */,
2228C4A81D11D0A900955753 /* Property.java in Sources */,
2228C49C1D11D0A900955753 /* Field.java in Sources */,
Expand All @@ -1086,6 +1126,7 @@
2228C48F1D11D0A900955753 /* BetweenCriterion.java in Sources */,
2228C4A11D11D0A900955753 /* Join.java in Sources */,
BDC8CA391BE931B000F7E9E6 /* SQLiteDatabaseCorruptException.java in Sources */,
DE9870FF2214305C00846E67 /* CompileContext.java in Sources */,
2228C49D1D11D0A900955753 /* Function.java in Sources */,
BDC8CA2B1BE931B000F7E9E6 /* SQLiteAbortException.java in Sources */,
BDC8CA501BE931B000F7E9E6 /* IOSOpenHelper.java in Sources */,
Expand All @@ -1094,6 +1135,7 @@
BDC0E2BE1BEA770600F429FE /* SimpleTasksNotifier.m in Sources */,
BDC8CA431BE931B000F7E9E6 /* SQLiteMisuseException.java in Sources */,
2228C4801D11D0A900955753 /* Beta.java in Sources */,
DE9871002214305C00846E67 /* DefaultArgumentResolver.java in Sources */,
2228C4A61D11D0A900955753 /* Operator.java in Sources */,
BDC8CA621BE9321F00F7E9E6 /* TasksDatabase.java in Sources */,
2228C49A1D11D0A900955753 /* Delete.java in Sources */,
Expand All @@ -1103,8 +1145,10 @@
2228C4921D11D0A900955753 /* CaseInsensitiveEqualsCriterion.java in Sources */,
2228C49F1D11D0A900955753 /* Index.java in Sources */,
2228C4831D11D0A900955753 /* ICursor.java in Sources */,
DE9871032214374100846E67 /* IOSSQLiteStatementAdapter.java in Sources */,
BDC8CA421BE931B000F7E9E6 /* SQLiteGlobal.java in Sources */,
BDC8CA331BE931B000F7E9E6 /* SQLiteConstraintException.java in Sources */,
DE9870F62214302000846E67 /* ModelGenErrors.java in Sources */,
2228C4B81D11D0A900955753 /* VirtualTable.java in Sources */,
BDC8CA1C1BE931B000F7E9E6 /* AbstractWindowedCursor.java in Sources */,
BDC8CA521BE931B000F7E9E6 /* SquidCursorFactory.java in Sources */,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
6 changes: 3 additions & 3 deletions samples/squidb-ios-sample/squidb-ios-sample/AppDelegate.m
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(
UINavigationController *navController = (UINavigationController *)self.window.rootViewController;
TasksViewController *rootViewController = (TasksViewController *)navController.viewControllers[0];

SDBSampleIOSOpenHelperCreator * creator = [[SDBSampleIOSOpenHelperCreator alloc] init];
[SDBSampleOpenHelperCreator setCreatorWithSDBSampleOpenHelperCreator:creator];
SDBIOSOpenHelperCreator * creator = [[SDBIOSOpenHelperCreator alloc] init];
[SDBOpenHelperCreator setCreatorWithSDBOpenHelperCreator:creator];

SimpleTasksNotifier *notifier = [[SimpleTasksNotifier alloc] init];
notifier.tasksViewController = rootViewController;

[[SDBSampleTasksDatabase getInstance] registerDataChangedNotifierWithSDBDataChangedNotifier:notifier];
[[SDBTasksDatabase getInstance] registerDataChangedNotifierWithSDBDataChangedNotifier:notifier];

return YES;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
// with the name “j2objc-dist” to the parent directory of this project.

// The path should be written without quotes, when modified use Xcode's Product -> Clean
J2OBJC_HOME = ${SRCROOT}/../../../j2objc-1.0.2;
J2OBJC_HOME = /Users/j2objc-2.3;

SQUIDB_ROOT = ${SRCROOT}/../..;

Expand Down
2 changes: 1 addition & 1 deletion samples/squidb-ios-sample/squidb-ios-sample/TaskCell.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@

@property (nonatomic, weak) IBOutlet UILabel *tags;

@property (nonatomic, strong, readonly) SDBSampleTask *task;
@property (nonatomic, strong, readonly) SDBTask *task;

@end
6 changes: 4 additions & 2 deletions samples/squidb-ios-sample/squidb-ios-sample/TaskCell.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,17 @@ @implementation TaskCell
@synthesize task = _task;
@synthesize tags;

- (SDBSampleTask *) task {
- (SDBTask *) task {
if (!_task) {
_task = [[SDBSampleTask alloc] init];
_task = [[SDBTask alloc] init];
}
return _task;
}

- (void)awakeFromNib {
// Initialization code
[super awakeFromNib];

}

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ - (void) addTask {
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[SDBSampleTaskUtils getInstance] insertNewTaskWithNSString:[alert.textFields objectAtIndex:0].text withInt:0 withLong:0 withNSString:[alert.textFields objectAtIndex:1].text];
[[SDBTaskUtils getInstance] insertNewTaskWithNSString:[alert.textFields objectAtIndex:0].text withInt:0 withLong:0 withNSString:[alert.textFields objectAtIndex:1].text];
});
}];

Expand All @@ -76,7 +76,7 @@ - (void) deliverResult:(SDBSquidCursor *)cursor {

- (void) requery {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
SDBSquidCursor *cursor = [[SDBSampleTaskUtils getInstance] getTasksCursor];
SDBSquidCursor *cursor = [[SDBTaskUtils getInstance] getTasksCursor];
[cursor getCount];
dispatch_async(dispatch_get_main_queue(), ^{
[self deliverResult:cursor];
Expand Down Expand Up @@ -108,14 +108,14 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N
} else {
cell.textLabel.text = [cell.task getTitle];
}
cell.tags.text = [cell.task getWithSDBProperty:SDBSampleTaskUtils_get_TAGS_CONCAT()];
cell.tags.text = [cell.task getWithSDBProperty:SDBTaskUtils_get_TAGS_CONCAT()];

return cell;
}

- (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSIndexPath * _Nonnull)indexPath {
[self.tasksCursor moveToPositionWithInt:(int) indexPath.row];
SDBSampleTask *task = [[SDBSampleTask alloc] initWithSDBSquidCursor:self.tasksCursor];
SDBTask *task = [[SDBTask alloc] initWithSDBSquidCursor:self.tasksCursor];

// Create complete/delete/cancel dialog
UIAlertController* alert = [UIAlertController alertControllerWithTitle:[task getTitle]
Expand All @@ -127,13 +127,13 @@ - (void)tableView:(UITableView * _Nonnull)tableView didSelectRowAtIndexPath:(NSI
UIAlertAction *deleteAction = [UIAlertAction actionWithTitle:@"Delete" style:UIAlertActionStyleDestructive
handler:^(UIAlertAction * action) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[SDBSampleTaskUtils getInstance] deleteTaskWithSDBSampleTask:task];
[[SDBTaskUtils getInstance] completeTaskWithSDBTask:task];
});
}];
UIAlertAction *completeAction = [UIAlertAction actionWithTitle:@"Complete" style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[SDBSampleTaskUtils getInstance] completeTaskWithSDBSampleTask:task];
[[SDBTaskUtils getInstance] completeTaskWithSDBTask:task];
});
}];

Expand Down
2 changes: 1 addition & 1 deletion squidb-ios/native/CursorWindowNative.m
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ + (NSString *)nativeGetString:(NSObject *)windowPtr row:(jint)row column:(jint)c
NSLog(@"Failed to allocate memory for string with %d bytes", sizeIncludingNull - 1);
return @"";
}
return [NSString stringWithCharacters:chars];
return [NSString java_stringWithCharacters:chars];
} else if (type == FIELD_TYPE_INTEGER) {
int64_t value = fieldSlot->data.l;
return [NSString stringWithFormat:@"%lld", value];
Expand Down
25 changes: 21 additions & 4 deletions squidb-ios/native/SQLiteConnectionNative.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,23 @@
#import "CursorWindowNative.h"
#import "NSString+JavaString.h"


@interface NSString (IOSByteArrayTrans)

- (IOSByteArray *)java_getBytes_with_encoding:(NSStringEncoding)encoding;

@end

@implementation NSString (IOSByteArrayTrans)

- (IOSByteArray *)java_getBytes_with_encoding:(NSStringEncoding)encoding{
NSData *data = [self dataUsingEncoding:encoding];
return [IOSByteArray arrayWithNSData:data];
}

@end


@implementation SQLiteConnectionNative

@synthesize db;
Expand Down Expand Up @@ -163,7 +180,7 @@ + (void) nativeClose:(NSObject *)connectionPtr {
+ (NSObject *) nativePrepareStatement:(NSObject *)connectionPtr withSql:(NSString *)sqlString {
SQLiteConnectionNative* connection = (SQLiteConnectionNative *)(connectionPtr);

IOSByteArray *sql = [sqlString getBytesWithEncoding:NSUTF16StringEncoding];
IOSByteArray *sql = [sqlString java_getBytes_with_encoding:NSUTF16StringEncoding];
uint32_t sqlLength = [sql length];
sqlite3_stmt* statement;
int err = sqlite3_prepare16_v2(connection->db, [sql buffer], sqlLength, &statement, NULL);
Expand Down Expand Up @@ -232,7 +249,7 @@ + (NSString *) nativeGetColumnName:(NSObject *)connectionPtr statement:(NSObject
length += 1;
}
IOSCharArray *chars = [IOSCharArray newArrayWithChars:name count:length];
return [NSString stringWithCharacters:chars];
return [NSString java_stringWithCharacters:chars];
}
return nil;
}
Expand Down Expand Up @@ -282,7 +299,7 @@ + (void) nativeBindString:(NSObject *)connectionPtr statement:(NSObject *)statem
SQLiteConnectionNative *connection = (SQLiteConnectionNative *)(connectionPtr);
SQLitePreparedStatement *statement = (SQLitePreparedStatement *)(statementPtr);

const IOSByteArray *bytes = [value getBytesWithEncoding:NSUTF16StringEncoding];
const IOSByteArray *bytes = [value java_getBytes_with_encoding:NSUTF16StringEncoding];
int err = sqlite3_bind_text16(statement.statement, index, [bytes buffer], [bytes length],
SQLITE_TRANSIENT);
if (err != SQLITE_OK) {
Expand Down Expand Up @@ -350,7 +367,7 @@ + (NSString *) nativeExecuteForString:(NSObject *)connectionPtr statement:(NSObj
if (text) {
size_t length = sqlite3_column_bytes16(statement.statement, 0) / sizeof(jchar);
IOSCharArray *chars = [IOSCharArray newArrayWithChars:text count:length];
return [NSString stringWithCharacters:chars];
return [NSString java_stringWithCharacters:chars];
}
}
return nil;
Expand Down