OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 /// Prints all information about all mirrors. This tests that it is possible to | 5 /// Prints all information about all mirrors. This tests that it is possible to |
6 /// enumerate all reflective information without crashing. | 6 /// enumerate all reflective information without crashing. |
7 | 7 |
8 // Note: Adding imports below is fine for regression tests. For example, | 8 // Note: Adding imports below is fine for regression tests. For example, |
9 // 'crash_library_metadata.dart' is imported to ensure the compiler doesn't | 9 // 'crash_library_metadata.dart' is imported to ensure the compiler doesn't |
10 // crash. | 10 // crash. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 get indent { | 45 get indent { |
46 for (int i = 0; i < indentationLevel; i++) { | 46 for (int i = 0; i < indentationLevel; i++) { |
47 w(' '); | 47 w(' '); |
48 } | 48 } |
49 } | 49 } |
50 | 50 |
51 String stringifyInstance(InstanceMirror mirror) { | 51 String stringifyInstance(InstanceMirror mirror) { |
52 var reflectee = mirror.reflectee; | 52 var reflectee = mirror.reflectee; |
53 if (reflectee is String) return '"${reflectee}"'; | 53 if (reflectee is String) return '"${reflectee}"'; |
54 if (reflectee is Null || reflectee is bool || reflectee is num || | 54 if (reflectee is Null || |
55 reflectee is List || reflectee is Map) { | 55 reflectee is bool || |
| 56 reflectee is num || |
| 57 reflectee is List || |
| 58 reflectee is Map) { |
56 return '$reflectee'; | 59 return '$reflectee'; |
57 } | 60 } |
58 StringBuffer buffer = new StringBuffer(); | 61 StringBuffer buffer = new StringBuffer(); |
59 Map<Symbol, DeclarationMirror> declarations = mirror.type.declarations; | 62 Map<Symbol, DeclarationMirror> declarations = mirror.type.declarations; |
60 buffer | 63 buffer..write(n(mirror.type.simpleName))..write('('); |
61 ..write(n(mirror.type.simpleName)) | |
62 ..write('('); | |
63 bool first = true; | 64 bool first = true; |
64 declarations.forEach((Symbol name, DeclarationMirror declaration) { | 65 declarations.forEach((Symbol name, DeclarationMirror declaration) { |
65 if (declaration is! VariableMirror) return; | 66 if (declaration is! VariableMirror) return; |
66 VariableMirror variable = declaration; | 67 VariableMirror variable = declaration; |
67 if (variable.isStatic) return; | 68 if (variable.isStatic) return; |
68 // TODO(ahe): Include superclasses. | 69 // TODO(ahe): Include superclasses. |
69 if (first) { | 70 if (first) { |
70 first = false; | 71 first = false; |
71 } else { | 72 } else { |
72 buffer.write(', '); | 73 buffer.write(', '); |
73 } | 74 } |
74 buffer | 75 buffer |
75 ..write(n(name)) | 76 ..write(n(name)) |
76 ..write(': ') | 77 ..write(': ') |
77 ..write(stringifyInstance(mirror.getField(name))); | 78 ..write(stringifyInstance(mirror.getField(name))); |
78 }); | 79 }); |
79 buffer.write(')'); | 80 buffer.write(')'); |
80 return buffer.toString(); | 81 return buffer.toString(); |
81 } | 82 } |
82 | 83 |
83 String stringifyMetadata(InstanceMirror mirror) { | 84 String stringifyMetadata(InstanceMirror mirror) { |
84 return '@${stringifyInstance(mirror)}'; | 85 return '@${stringifyInstance(mirror)}'; |
85 } | 86 } |
86 | 87 |
87 bool writeType(TypeMirror mirror) { | 88 bool writeType(TypeMirror mirror) { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
161 writeMethod(declaration); | 162 writeMethod(declaration); |
162 } else { | 163 } else { |
163 // TODO(ahe): Test other subclasses of DeclarationMirror. | 164 // TODO(ahe): Test other subclasses of DeclarationMirror. |
164 w('$declaration'); | 165 w('$declaration'); |
165 } | 166 } |
166 } | 167 } |
167 | 168 |
168 writeLibrary(LibraryMirror library) { | 169 writeLibrary(LibraryMirror library) { |
169 w('library ${n(library.simpleName)};\n\n'); | 170 w('library ${n(library.simpleName)};\n\n'); |
170 library.declarations.values | 171 library.declarations.values |
171 .where((d)=> d is! TypeMirror) | 172 .where((d) => d is! TypeMirror) |
172 .forEach(writeDeclaration); | 173 .forEach(writeDeclaration); |
173 w('\n'); | 174 w('\n'); |
174 } | 175 } |
175 | 176 |
176 static StringBuffer stringify(Map<Uri, LibraryMirror> libraries) { | 177 static StringBuffer stringify(Map<Uri, LibraryMirror> libraries) { |
177 StringBuffer buffer = new StringBuffer(); | 178 StringBuffer buffer = new StringBuffer(); |
178 libraries.values.forEach(new MirrorPrinter(buffer).writeLibrary); | 179 libraries.values.forEach(new MirrorPrinter(buffer).writeLibrary); |
179 return buffer; | 180 return buffer; |
180 } | 181 } |
181 } | 182 } |
182 | 183 |
183 main() { | 184 main() { |
184 print(MirrorPrinter.stringify(currentMirrorSystem().libraries)); | 185 print(MirrorPrinter.stringify(currentMirrorSystem().libraries)); |
185 // Clear the nodes to avoid confusing the fine test framework (by "fine" I | 186 // Clear the nodes to avoid confusing the fine test framework (by "fine" I |
186 // mean something else) -- ahe. | 187 // mean something else) -- ahe. |
187 document.body.nodes.clear(); | 188 document.body.nodes.clear(); |
188 } | 189 } |
OLD | NEW |