OLD | NEW |
| (Empty) |
1 library java.core; | |
2 | |
3 import "dart:math" as math; | |
4 import "dart:uri"; | |
5 | |
6 class JavaSystem { | |
7 static int currentTimeMillis() { | |
8 return (new DateTime.now()).millisecondsSinceEpoch; | |
9 } | |
10 | |
11 static void arraycopy(List src, int srcPos, List dest, int destPos, int length
) { | |
12 for (int i = 0; i < length; i++) { | |
13 dest[destPos + i] = src[srcPos + i]; | |
14 } | |
15 } | |
16 } | |
17 | |
18 /** | |
19 * Limited implementation of "o is instanceOfType", see | |
20 * http://code.google.com/p/dart/issues/detail?id=8184 | |
21 */ | |
22 bool isInstanceOf(o, Type t) { | |
23 if (o == null) { | |
24 return false; | |
25 } | |
26 if (o.runtimeType == t) { | |
27 return true; | |
28 } | |
29 String oTypeName = o.runtimeType.toString(); | |
30 String tTypeName = t.toString(); | |
31 if (oTypeName == tTypeName) { | |
32 return true; | |
33 } | |
34 if (oTypeName.startsWith("HashMap") && tTypeName == "Map") { | |
35 return true; | |
36 } | |
37 if (oTypeName.startsWith("List") && tTypeName == "List") { | |
38 return true; | |
39 } | |
40 // Dart Analysis Engine specific | |
41 if (oTypeName == "${tTypeName}Impl") { | |
42 return true; | |
43 } | |
44 if (tTypeName == "ExecutableElement") { | |
45 if (oTypeName == "MethodElementImpl" || oTypeName == "FunctionElementImpl")
{ | |
46 return true; | |
47 } | |
48 } | |
49 // no | |
50 return false; | |
51 } | |
52 | |
53 class JavaArrays { | |
54 static bool equals(List a, List b) { | |
55 if (a.length != b.length) { | |
56 return false; | |
57 } | |
58 var len = a.length; | |
59 for (int i = 0; i < len; i++) { | |
60 if (a[i] != b[i]) { | |
61 return false; | |
62 } | |
63 } | |
64 return true; | |
65 } | |
66 static int makeHashCode(List a) { | |
67 if (a == null) { | |
68 return 0; | |
69 } | |
70 int result = 1; | |
71 for (var element in a) { | |
72 result = 31 * result + (element == null ? 0 : element.hashCode); | |
73 } | |
74 return result; | |
75 } | |
76 static List asList(List list) => list; | |
77 } | |
78 | |
79 class Character { | |
80 static const int MAX_VALUE = 0xffff; | |
81 static const int MAX_CODE_POINT = 0x10ffff; | |
82 static bool isLetter(int c) { | |
83 return c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A; | |
84 } | |
85 static bool isLetterOrDigit(int c) { | |
86 return isLetter(c) || c >= 0x30 && c <= 0x39; | |
87 } | |
88 static bool isWhitespace(int c) { | |
89 return c == 0x09 || c == 0x20 || c == 0x0A || c == 0x0D; | |
90 } | |
91 static int digit(int codePoint, int radix) { | |
92 if (radix != 16) { | |
93 throw new ArgumentError("only radix == 16 is supported"); | |
94 } | |
95 if (0x30 <= codePoint && codePoint <= 0x39) { | |
96 return codePoint - 0x30; | |
97 } | |
98 if (0x41 <= codePoint && codePoint <= 0x46) { | |
99 return 0xA + (codePoint - 0x41); | |
100 } | |
101 if (0x61 <= codePoint && codePoint <= 0x66) { | |
102 return 0xA + (codePoint - 0x61); | |
103 } | |
104 return -1; | |
105 } | |
106 static String toChars(int codePoint) { | |
107 throw new UnsupportedOperationException(); | |
108 } | |
109 } | |
110 | |
111 class CharBuffer { | |
112 final String _content; | |
113 CharBuffer(this._content); | |
114 static CharBuffer wrap(String content) => new CharBuffer(content); | |
115 int charAt(int index) => _content.codeUnitAt(index); | |
116 int length() => _content.length; | |
117 String subSequence(int start, int end) => _content.substring(start, end); | |
118 } | |
119 | |
120 class JavaString { | |
121 static String format(String fmt, List args) { | |
122 return fmt; | |
123 } | |
124 } | |
125 | |
126 /** | |
127 * Very limited printf implementation, supports only %s and %d. | |
128 */ | |
129 String _printf(String fmt, List args) { | |
130 StringBuffer sb = new StringBuffer(); | |
131 bool markFound = false; | |
132 int argIndex = 0; | |
133 for (int i = 0; i < fmt.length; i++) { | |
134 int c = fmt.codeUnitAt(i); | |
135 if (c == 0x25) { | |
136 if (markFound) { | |
137 sb.writeCharCode(c); | |
138 markFound = false; | |
139 } else { | |
140 markFound = true; | |
141 } | |
142 continue; | |
143 } | |
144 if (markFound) { | |
145 markFound = false; | |
146 // %d | |
147 if (c == 0x64) { | |
148 sb.writeCharCode(args[argIndex++]); | |
149 continue; | |
150 } | |
151 // %s | |
152 if (c == 0x73) { | |
153 sb.writeCharCode(args[argIndex++]); | |
154 continue; | |
155 } | |
156 // unknown | |
157 throw new IllegalArgumentException('[$fmt][$i] = 0x${c.toRadixString(16)}'
); | |
158 } else { | |
159 sb.writeCharCode(c); | |
160 } | |
161 } | |
162 return sb.toString(); | |
163 } | |
164 | |
165 abstract class PrintWriter { | |
166 void print(x); | |
167 | |
168 void println() { | |
169 this.print('\n'); | |
170 } | |
171 | |
172 void printlnObject(String s) { | |
173 this.print(s); | |
174 this.println(); | |
175 } | |
176 | |
177 void printf(String fmt, List args) { | |
178 this.print(_printf(fmt, args)); | |
179 } | |
180 } | |
181 | |
182 class PrintStringWriter extends PrintWriter { | |
183 final StringBuffer _sb = new StringBuffer(); | |
184 | |
185 void print(x) { | |
186 _sb.write(x); | |
187 } | |
188 | |
189 String toString() => _sb.toString(); | |
190 } | |
191 | |
192 class StringUtils { | |
193 static List<String> split(String s, String pattern) => s.split(pattern); | |
194 static String replace(String s, String from, String to) => s.replaceAll(from,
to); | |
195 static String repeat(String s, int n) { | |
196 StringBuffer sb = new StringBuffer(); | |
197 for (int i = 0; i < n; i++) { | |
198 sb.write(s); | |
199 } | |
200 return sb.toString(); | |
201 } | |
202 } | |
203 | |
204 class Math { | |
205 static num max(num a, num b) => math.max(a, b); | |
206 static num min(num a, num b) => math.min(a, b); | |
207 } | |
208 | |
209 class RuntimeException implements Exception { | |
210 String toString() => "RuntimeException"; | |
211 } | |
212 | |
213 class JavaException implements Exception { | |
214 final String message; | |
215 final Exception e; | |
216 JavaException([this.message = "", this.e = null]); | |
217 JavaException.withCause(this.e) : message = null; | |
218 String toString() => "JavaException: $message $e"; | |
219 } | |
220 | |
221 class IllegalArgumentException implements Exception { | |
222 final String message; | |
223 const IllegalArgumentException([this.message = "", Exception e = null]); | |
224 String toString() => "IllegalStateException: $message"; | |
225 } | |
226 | |
227 class StringIndexOutOfBoundsException implements Exception { | |
228 final int index; | |
229 const StringIndexOutOfBoundsException(this.index); | |
230 String toString() => "StringIndexOutOfBoundsException: $index"; | |
231 } | |
232 | |
233 class IllegalStateException implements Exception { | |
234 final String message; | |
235 const IllegalStateException([this.message = ""]); | |
236 String toString() => "IllegalStateException: $message"; | |
237 } | |
238 | |
239 class UnsupportedOperationException implements Exception { | |
240 String toString() => "UnsupportedOperationException"; | |
241 } | |
242 | |
243 class NumberFormatException implements Exception { | |
244 String toString() => "NumberFormatException"; | |
245 } | |
246 | |
247 class URISyntaxException implements Exception { | |
248 String toString() => "URISyntaxException"; | |
249 } | |
250 | |
251 class IOException implements Exception { | |
252 String toString() => "IOException"; | |
253 } | |
254 | |
255 class ListWrapper<E> extends Collection<E> implements List<E> { | |
256 List<E> elements = new List<E>(); | |
257 | |
258 Iterator<E> get iterator { | |
259 return elements.iterator; | |
260 } | |
261 | |
262 E operator [](int index) { | |
263 return elements[index]; | |
264 } | |
265 | |
266 void operator []=(int index, E value) { | |
267 elements[index] = value; | |
268 } | |
269 | |
270 void set length(int newLength) { | |
271 elements.length = newLength; | |
272 } | |
273 | |
274 void add(E value) { | |
275 elements.add(value); | |
276 } | |
277 | |
278 void addLast(E value) { | |
279 elements.add(value); | |
280 } | |
281 | |
282 void addAll(Iterable<E> iterable) { | |
283 elements.addAll(iterable); | |
284 } | |
285 | |
286 void sort([int compare(E a, E b)]) { | |
287 elements.sort(compare); | |
288 } | |
289 | |
290 int indexOf(E element, [int start = 0]) { | |
291 return elements.indexOf(element, start); | |
292 } | |
293 | |
294 int lastIndexOf(E element, [int start]) { | |
295 return elements.lastIndexOf(element, start); | |
296 } | |
297 | |
298 void clear() { | |
299 elements.clear(); | |
300 } | |
301 | |
302 void remove(Object element) { | |
303 return elements.remove(element); | |
304 } | |
305 | |
306 E removeAt(int index) { | |
307 return elements.removeAt(index); | |
308 } | |
309 | |
310 E removeLast() { | |
311 return elements.removeLast(); | |
312 } | |
313 | |
314 Iterable<E> get reversed => elements.reversed; | |
315 | |
316 List<E> getRange(int start, int length) { | |
317 return elements.getRange(start, length); | |
318 } | |
319 | |
320 void setRange(int start, int length, List<E> from, [int startFrom]) { | |
321 elements.setRange(start, length, from, startFrom); | |
322 } | |
323 | |
324 void removeRange(int start, int length) { | |
325 elements.removeRange(start, length); | |
326 } | |
327 | |
328 void insertRange(int start, int length, [E fill]) { | |
329 elements.insertRange(start, length, fill); | |
330 } | |
331 | |
332 Map<int, E> asMap() { | |
333 return elements.asMap(); | |
334 } | |
335 } | |
336 | |
337 class JavaIterator<E> { | |
338 Collection<E> _collection; | |
339 List<E> _elements = new List<E>(); | |
340 int _coPos = 0; | |
341 int _elPos = 0; | |
342 E _current = null; | |
343 JavaIterator(this._collection) { | |
344 Iterator iterator = _collection.iterator; | |
345 while (iterator.moveNext()) { | |
346 _elements.add(iterator.current); | |
347 } | |
348 } | |
349 | |
350 bool get hasNext { | |
351 return _elPos < _elements.length; | |
352 } | |
353 | |
354 E next() { | |
355 _current = _elements[_elPos]; | |
356 _coPos++; | |
357 _elPos++; | |
358 return _current; | |
359 } | |
360 | |
361 void remove() { | |
362 if (_collection is List) { | |
363 _coPos--; | |
364 (_collection as List).remove(_coPos); | |
365 } else if (_collection is Set) { | |
366 _collection.remove(_current); | |
367 } else { | |
368 throw new StateError("Unsupported collection ${_collection.runtimeType}"); | |
369 } | |
370 } | |
371 } | |
372 | |
373 class MapEntry<K, V> { | |
374 K _key; | |
375 V _value; | |
376 MapEntry(this._key, this._value); | |
377 K getKey() => _key; | |
378 V getValue() => _value; | |
379 } | |
380 | |
381 Set<MapEntry> getMapEntrySet(Map m) { | |
382 Set<MapEntry> result = new Set(); | |
383 m.forEach((k, v) { | |
384 result.add(new MapEntry(k, v)); | |
385 }); | |
386 return result; | |
387 } | |
388 | |
389 bool javaSetAdd(Set s, o) { | |
390 if (!s.contains(o)) { | |
391 s.add(o); | |
392 return true; | |
393 } | |
394 return false; | |
395 } | |
396 | |
397 void javaMapPutAll(Map target, Map source) { | |
398 source.forEach((k, v) { | |
399 target[k] = v; | |
400 }); | |
401 } | |
402 | |
403 bool javaStringEqualsIgnoreCase(String a, String b) { | |
404 return a.toLowerCase() == b.toLowerCase(); | |
405 } | |
406 | |
407 class JavaStringBuilder { | |
408 StringBuffer sb = new StringBuffer(); | |
409 String toString() => sb.toString(); | |
410 void append(x) { | |
411 sb.write(x); | |
412 } | |
413 void appendChar(int c) { | |
414 sb.writeCharCode(c); | |
415 } | |
416 int get length => sb.length; | |
417 void set length(int newLength) { | |
418 if (newLength < 0) { | |
419 throw new StringIndexOutOfBoundsException(newLength); | |
420 } | |
421 if (sb.length < newLength) { | |
422 while (sb.length < newLength) { | |
423 sb.writeCharCode(0); | |
424 } | |
425 } else if (sb.length > newLength) { | |
426 var s = sb.toString().substring(0, newLength); | |
427 sb = new StringBuffer(s); | |
428 } | |
429 } | |
430 void clear() { | |
431 sb = new StringBuffer(); | |
432 } | |
433 } | |
OLD | NEW |