This commit is contained in:
Joel Dice 2010-09-12 14:33:02 -06:00
commit 345c7d38a9
21 changed files with 306 additions and 21 deletions

View File

@ -377,6 +377,31 @@ Java_java_io_File_delete(JNIEnv* e, jclass, jstring path)
}
}
extern "C" JNIEXPORT jboolean JNICALL
Java_java_io_File_canRead(JNIEnv* e, jclass, jstring path)
{
string_t chars = getChars(e, path);
if (chars) {
int r = access(chars, R_OK);
releaseChars(e, path, chars);
return (r == 0);
}
return false;
}
extern "C" JNIEXPORT jboolean JNICALL
Java_java_io_File_canWrite(JNIEnv* e, jclass, jstring path)
{
string_t chars = getChars(e, path);
if (chars) {
int r = access(chars, W_OK);
releaseChars(e, path, chars);
return (r == 0);
}
return false;
}
extern "C" JNIEXPORT jboolean JNICALL
Java_java_io_File_rename(JNIEnv* e, jclass, jstring old, jstring new_)
{

View File

@ -60,7 +60,19 @@ public class File {
public boolean isFile() {
return isFile(path);
}
private static native boolean canRead(String path);
public boolean canRead() {
return canRead(path);
}
private static native boolean canWrite(String path);
public boolean canWrite() {
return canWrite(path);
}
public String getName() {
int index = path.lastIndexOf(FileSeparator);
if (index >= 0) {

View File

@ -79,6 +79,10 @@ public class ObjectInputStream extends InputStream {
read('d');
return readDoubleToken();
}
public void defaultReadObject() throws IOException {
throw new UnsupportedOperationException();
}
private void skipSpace() throws IOException {
int c;

View File

@ -82,6 +82,10 @@ public class ObjectOutputStream extends OutputStream {
out.print(v);
}
public void defaultWriteObject() throws IOException {
throw new UnsupportedOperationException();
}
private void writeObject(Object o, IdentityHashMap<Object, Integer> map,
int nextId)
throws IOException

View File

@ -0,0 +1,30 @@
/* Copyright (c) 2010, Avian Contributors
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice appear
in all copies.
There is NO WARRANTY for this software. See license.txt for
details. */
package java.lang;
import java.security.AccessController;
import java.security.Permission;
import java.security.SecurityPermission;
public class SecurityManager {
public SecurityManager() {
}
public void checkPermission(Permission perm) {
AccessController.checkPermission(perm);
}
public void checkSecurityAccess(String target) {
checkPermission(new SecurityPermission(target));
}
}

View File

@ -236,19 +236,31 @@ public final class String
}
public String toLowerCase() {
char[] b = new char[length];
for (int i = 0; i < length; ++i) {
b[i] = Character.toLowerCase(charAt(i));
for (int j = 0; j < length; ++j) {
char ch = charAt(j);
if (Character.toLowerCase(ch) != ch) {
char[] b = new char[length];
for (int i = 0; i < length; ++i) {
b[i] = Character.toLowerCase(charAt(i));
}
return new String(b, 0, length, false);
}
}
return new String(b, 0, length, false);
return this;
}
public String toUpperCase() {
char[] b = new char[length];
for (int i = 0; i < length; ++i) {
b[i] = Character.toUpperCase(charAt(i));
for (int j = 0; j < length; ++j) {
char ch = charAt(j);
if (Character.toUpperCase(ch) != ch) {
char[] b = new char[length];
for (int i = 0; i < length; ++i) {
b[i] = Character.toUpperCase(charAt(i));
}
return new String(b, 0, length, false);
}
}
return new String(b, 0, length, false);
return this;
}
public int indexOf(int c) {
@ -581,11 +593,19 @@ public final class String
}
public String toUpperCase(Locale locale) {
throw new UnsupportedOperationException();
if (locale == Locale.ENGLISH) {
return toUpperCase();
} else {
throw new UnsupportedOperationException("toUpperCase("+locale+')');
}
}
public String toLowerCase(Locale locale) {
throw new UnsupportedOperationException();
if (locale == Locale.ENGLISH) {
return toLowerCase();
} else {
throw new UnsupportedOperationException("toLowerCase("+locale+')');
}
}
public static String format(Locale locale, String format, Object ... args) {

View File

@ -22,6 +22,7 @@ import java.util.Properties;
public abstract class System {
private static Property properties;
private static SecurityManager securityManager;
// static {
// loadLibrary("natives");
// }
@ -118,6 +119,14 @@ public abstract class System {
public static void exit(int code) {
Runtime.getRuntime().exit(code);
}
public static SecurityManager getSecurityManager() {
return securityManager;
}
public static void setSecurityManager(SecurityManager securityManager) {
System.securityManager = securityManager;
}
private static class Property {
public final String name;

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2008, Avian Contributors
/* Copyright (c) 2008, 2010 Avian Contributors
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
@ -21,5 +21,9 @@ public class AccessController {
public static Object doPrivileged (PrivilegedAction action) {
return action.run();
}
public static void checkPermission(Permission perm) throws AccessControlException {
}
}

View File

@ -10,4 +10,10 @@
package java.security;
public class AllPermission extends Permission { }
public class AllPermission extends Permission {
public AllPermission() {
super("<all>");
}
}

View File

@ -0,0 +1,19 @@
/* Copyright (c) 2010, Avian Contributors
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice appear
in all copies.
There is NO WARRANTY for this software. See license.txt for
details. */
package java.security;
public class BasicPermission extends Permission {
public BasicPermission(String name) {
super(name);
}
}

View File

@ -11,6 +11,22 @@
package java.security;
public abstract class Permission {
protected String name;
public Permission(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return this.getClass().getSimpleName() + '['+name+']';
}
public PermissionCollection newPermissionCollection() {
return null;
}

View File

@ -0,0 +1,19 @@
/* Copyright (c) 2010, Avian Contributors
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice appear
in all copies.
There is NO WARRANTY for this software. See license.txt for
details. */
package java.security;
public class SecurityPermission extends BasicPermission {
public SecurityPermission(String name) {
super(name);
}
}

View File

@ -148,5 +148,11 @@ public class Arrays {
array[i] = value;
}
}
public static <T> void fill(T[] array, T value) {
for (int i=0;i<array.length;i++) {
array[i] = value;
}
}
}

View File

@ -11,6 +11,7 @@
package java.util;
public class Collections {
private Collections() { }
public static void shuffle(List list, Random random) {
@ -84,6 +85,10 @@ public class Collections {
return new IteratorEnumeration<T> (c.iterator());
}
public static <T> Comparator<T> reverseOrder(Comparator<T> cmp) {
return new ReverseComparator<T>(cmp);
}
static class IteratorEnumeration<T> implements Enumeration<T> {
private final Iterator<T> it;
@ -379,4 +384,20 @@ public class Collections {
it.remove();
}
}
private static final class ReverseComparator<T> implements Comparator<T> {
Comparator<T> cmp;
public ReverseComparator(Comparator<T> cmp) {
this.cmp = cmp;
}
@Override
public int compare(T o1, T o2) {
return - cmp.compare(o1, o2);
}
}
}

View File

@ -0,0 +1,47 @@
/* Copyright (c) 2010, Avian Contributors
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted, provided
that the above copyright notice and this permission notice appear
in all copies.
There is NO WARRANTY for this software. See license.txt for
details. */
package java.util;
/**
* @author zsombor
*
*/
public class ConcurrentModificationException extends RuntimeException {
/**
* @param message
* @param cause
*/
public ConcurrentModificationException(String message, Throwable cause) {
super(message, cause);
}
/**
* @param message
*/
public ConcurrentModificationException(String message) {
super(message);
}
/**
* @param cause
*/
public ConcurrentModificationException(Throwable cause) {
super(cause);
}
/**
*
*/
public ConcurrentModificationException() {
}
}

View File

@ -269,8 +269,10 @@ public class HashMap<K, V> implements Map<K, V> {
return value;
}
public void setValue(V value) {
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
public HashMap.Cell<K, V> next() {

View File

@ -40,6 +40,6 @@ public interface Map<K, V> {
public V getValue();
public void setValue(V value);
public V setValue(V value);
}
}

View File

@ -14,10 +14,15 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.io.Reader;
public class Properties extends Hashtable {
public void load(InputStream in) throws IOException {
new Parser().parse(in, this);
new InputStreamParser(in).parse(this);
}
public void load(Reader reader) throws IOException {
new ReaderParser(reader).parse(this);
}
public void store(OutputStream out, String comment) throws IOException {
@ -53,7 +58,7 @@ public class Properties extends Hashtable {
return keys();
}
private static class Parser {
private abstract static class Parser {
private StringBuilder key = null;
private StringBuilder value = null;
private StringBuilder current = null;
@ -79,13 +84,15 @@ public class Properties extends Hashtable {
key = value = current = null;
}
private void parse(InputStream in, Map map)
abstract int readCharacter() throws IOException;
void parse(Map map)
throws IOException
{
boolean escaped = false;
int c;
while ((c = in.read()) != -1) {
while ((c = readCharacter()) != -1) {
if (c == '\\') {
if (escaped) {
escaped = false;
@ -98,7 +105,7 @@ public class Properties extends Hashtable {
case '#':
case '!':
if (key == null) {
while ((c = in.read()) != -1 && c != '\n');
while ((c = readCharacter()) != -1 && c != '\n');
} else {
append(c);
}
@ -153,4 +160,32 @@ public class Properties extends Hashtable {
finishLine(map);
}
}
static class InputStreamParser extends Parser {
InputStream in;
public InputStreamParser(InputStream in) {
this.in = in;
}
@Override
int readCharacter() throws IOException {
return in.read();
}
}
static class ReaderParser extends Parser {
Reader in;
public ReaderParser(Reader in) {
this.in = in;
}
@Override
int readCharacter() throws IOException {
return in.read();
}
}
}

View File

@ -112,9 +112,12 @@ public class TreeMap<K,V> implements Map<K,V> {
return value;
}
public void setValue(V value) {
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
}
private class KeySet implements Set<K> {

View File

@ -114,8 +114,10 @@ public class WeakHashMap<K, V> implements Map<K, V> {
return value;
}
public void setValue(V value) {
public V setValue(V value) {
V old = this.value;
this.value = value;
return old;
}
public HashMap.Cell<K, V> next() {

View File

@ -1,3 +1,4 @@
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;