Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart

Issue 16097002: Implement simple name and qualified name. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | dart/tests/lib/mirrors/mirrors_test.dart » ('j') | dart/tests/lib/mirrors/mirrors_test.dart » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart b/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
index fda0709db1ee6cafdc2bc44eb7073bc6d25f4daf..6709df0cd3b8f5f2b2d71d2753b6912d85bd6d8c 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
@@ -38,7 +38,7 @@ class _MirrorSystem implements MirrorSystem {
List<String> classes = data[2];
List<String> functions = data[3];
var libraries = result.putIfAbsent(name, () => <LibraryMirror>[]);
- libraries.add(new _LibraryMirror(name, uri, classes, functions));
+ libraries.add(new _LibraryMirror(_s(name), uri, classes, functions));
}
return result;
}
@@ -50,12 +50,14 @@ class _TypeMirror implements TypeMirror {
}
class _LibraryMirror extends _ObjectMirror implements LibraryMirror {
- final String _name;
+ final Symbol simpleName;
final Uri uri;
final List<String> _classes;
final List<String> _functions;
- _LibraryMirror(this._name, this.uri, this._classes, this._functions);
+ _LibraryMirror(this.simpleName, this.uri, this._classes, this._functions);
+
+ Symbol get qualifiedName => simpleName;
Map<Symbol, ClassMirror> get classes {
var result = new Map<Symbol, ClassMirror>();
@@ -78,6 +80,51 @@ class _LibraryMirror extends _ObjectMirror implements LibraryMirror {
// TODO(ahe): This is extremely dangerous!!!
return _reflect(JS('', r'$[#]', _n(fieldName)));
}
+
+ Map<Symbol, MethodMirror> get functions {
+ var result = new Map<Symbol, MethodMirror>();
+ for (int i = 0; i < _functions.length; i++) {
+ String name = _functions[i];
+ Symbol symbol = _s(name);
+ int parameterCount = null; // TODO(ahe): Compute this.
+ _MethodMirror mirror =
+ new _MethodMirror(symbol, JS('', r'$[#]', name), parameterCount);
kasperl 2013/05/27 12:15:33 Create helpers for reading and writing to fields o
ahe 2013/05/27 13:55:55 Added TODO (a big cleanup).
+ // TODO(ahe): Cache mirrors.
+ result[symbol] = mirror;
+ mirror._owner = this;
+ }
+ return result;
+ }
+
+ Map<Symbol, MethodMirror> get getters {
+ var result = new Map<Symbol, MethodMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, MethodMirror> get setters {
+ var result = new Map<Symbol, MethodMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, VariableMirror> get variables {
+ var result = new Map<Symbol, VariableMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, Mirror> get members {
+ Map<Symbol, Mirror> result = new Map<Symbol, Mirror>.from(classes);
+ addToResult(Symbol key, Mirror value) {
+ result[key] = value;
+ }
+ functions.forEach(addToResult);
+ getters.forEach(addToResult);
+ setters.forEach(addToResult);
+ variables.forEach(addToResult);
+ return result;
+ }
}
String _n(Symbol symbol) => _symbol_dev.Symbol.getName(symbol);
@@ -212,17 +259,49 @@ class _ClassMirror extends _ObjectMirror implements ClassMirror {
_ClassMirror(this.simpleName, this._jsConstructor, this._fields);
- Map<Symbol, Mirror> get members {
- var result = new Map<Symbol, Mirror>();
+ Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
+
+ Map<Symbol, MethodMirror> get functions {
+ var result = new Map<Symbol, MethodMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, MethodMirror> get getters {
+ var result = new Map<Symbol, MethodMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, MethodMirror> get setters {
+ var result = new Map<Symbol, MethodMirror>();
+ // TODO(ahe): Implement this.
+ return result;
+ }
+
+ Map<Symbol, VariableMirror> get variables {
+ var result = new Map<Symbol, VariableMirror>();
var s = _fields.split(";");
var fields = s[1] == "" ? [] : s[1].split(",");
for (String field in fields) {
_VariableMirror mirror = new _VariableMirror.from(field);
result[mirror.simpleName] = mirror;
+ mirror._owner = this;
}
return result;
}
+ Map<Symbol, Mirror> get members {
+ Map<Symbol, Mirror> result = new Map<Symbol, Mirror>.from(functions);
+ addToResult(Symbol key, Mirror value) {
+ result[key] = value;
+ }
+ getters.forEach(addToResult);
+ setters.forEach(addToResult);
+ variables.forEach(addToResult);
+ return result;
+ }
+
InstanceMirror setField(Symbol fieldName, Object arg) {
// TODO(ahe): This is extremely dangerous!!!
JS('void', r'$[#] = #', '${_n(simpleName)}_${_n(fieldName)}', arg);
@@ -287,6 +366,7 @@ class _VariableMirror implements VariableMirror {
final Symbol simpleName;
final String _jsName;
final bool _readOnly;
+ DeclarationMirror _owner;
_VariableMirror(this.simpleName, this._jsName, this._readOnly);
@@ -311,6 +391,10 @@ class _VariableMirror implements VariableMirror {
TypeMirror get type => _MirrorSystem._dynamicType;
+ DeclarationMirror get owner => _owner;
+
+ Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
+
static int fieldCode(int code) {
if (code >= 60 && code <= 64) return code - 59;
if (code >= 123 && code <= 126) return code - 117;
@@ -338,7 +422,7 @@ function(reflectee) {
}
var jsFunction = JS('', '#[#]', reflectee, callName);
int parameterCount = int.parse(callName.split(r'$')[1]);
- return new _MethodMirror(jsFunction, parameterCount);
+ return new _MethodMirror(_s(callName), jsFunction, parameterCount);
}
InstanceMirror apply(List positionalArguments,
@@ -355,13 +439,24 @@ function(reflectee) {
}
class _MethodMirror implements MethodMirror {
+ final Symbol simpleName;
final _jsFunction;
final int _parameterCount;
+ DeclarationMirror _owner;
- _MethodMirror(this._jsFunction, this._parameterCount);
+ _MethodMirror(this.simpleName, this._jsFunction, this._parameterCount);
List<ParameterMirror> get parameters {
// TODO(ahe): Fill the list with parameter mirrors.
return new List<ParameterMirror>(_parameterCount);
}
+
+ DeclarationMirror get owner => _owner;
+
+ Symbol get qualifiedName => _computeQualifiedName(owner, simpleName);
+}
+
+Symbol _computeQualifiedName(DeclarationMirror owner, Symbol simpleName) {
+ if (owner == null || _n(owner.qualifiedName) == '') return simpleName;
kasperl 2013/05/27 12:15:33 Consider using ? :.
ahe 2013/05/27 13:55:55 Did something else :-)
+ return _s('${_n(owner.qualifiedName)}.${_n(simpleName)}');
}
« no previous file with comments | « no previous file | dart/tests/lib/mirrors/mirrors_test.dart » ('j') | dart/tests/lib/mirrors/mirrors_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698