Index: sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart |
index b7f522b14b6c02dbb6be6b53099c4fcb6f667d7e..fe4e6da855f1e3b705f00079eae712c329914f26 100644 |
--- a/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart |
+++ b/sdk/lib/_internal/compiler/implementation/mirrors/dart2js_mirror.dart |
@@ -1353,81 +1353,91 @@ class Dart2JsDynamicMirror extends Dart2JsTypeElementMirror { |
class Dart2JsMethodMirror extends Dart2JsMemberMirror |
implements MethodMirror { |
final Dart2JsContainerMirror _objectMirror; |
- String _simpleName; |
- String _displayName; |
- String _constructorName; |
- String _operatorName; |
- Dart2JsMethodKind _kind; |
- |
- Dart2JsMethodMirror(Dart2JsContainerMirror objectMirror, |
- FunctionElement function) |
+ final String simpleName; |
+ final String displayName; |
+ final String constructorName; |
+ final String operatorName; |
+ final Dart2JsMethodKind _kind; |
+ |
+ Dart2JsMethodMirror._internal(Dart2JsContainerMirror objectMirror, |
+ FunctionElement function, |
+ String this.simpleName, |
+ String this.displayName, |
+ String this.constructorName, |
+ String this.operatorName, |
+ Dart2JsMethodKind this._kind) |
: this._objectMirror = objectMirror, |
- super(objectMirror.mirrors, function) { |
- _simpleName = _element.name.slowToString(); |
- if (_function.kind == ElementKind.GETTER) { |
- _kind = Dart2JsMethodKind.GETTER; |
- _displayName = _simpleName; |
- } else if (_function.kind == ElementKind.SETTER) { |
- _kind = Dart2JsMethodKind.SETTER; |
- _displayName = _simpleName; |
- _simpleName = '$_simpleName='; |
- } else if (_function.kind == ElementKind.GENERATIVE_CONSTRUCTOR) { |
+ super(objectMirror.mirrors, function); |
+ |
+ factory Dart2JsMethodMirror(Dart2JsContainerMirror objectMirror, |
+ FunctionElement function) { |
+ String simpleName = function.name.slowToString(); |
+ String displayName; |
+ String constructorName = null; |
+ String operatorName = null; |
+ Dart2JsMethodKind kind; |
+ if (function.kind == ElementKind.GETTER) { |
+ kind = Dart2JsMethodKind.GETTER; |
+ displayName = simpleName; |
+ } else if (function.kind == ElementKind.SETTER) { |
+ kind = Dart2JsMethodKind.SETTER; |
+ displayName = simpleName; |
+ simpleName = '$simpleName='; |
+ } else if (function.kind == ElementKind.GENERATIVE_CONSTRUCTOR) { |
// TODO(johnniwinther): Support detection of redirecting constructors. |
- _constructorName = ''; |
- int dollarPos = _simpleName.indexOf('\$'); |
+ constructorName = ''; |
+ int dollarPos = simpleName.indexOf('\$'); |
if (dollarPos != -1) { |
- _constructorName = _simpleName.substring(dollarPos + 1); |
- _simpleName = _simpleName.substring(0, dollarPos); |
+ constructorName = simpleName.substring(dollarPos + 1); |
+ simpleName = simpleName.substring(0, dollarPos); |
// Simple name is TypeName.constructorName. |
- _simpleName = '$_simpleName.$_constructorName'; |
+ simpleName = '$simpleName.$constructorName'; |
} else { |
// Simple name is TypeName. |
} |
- if (_function.modifiers.isConst()) { |
- _kind = Dart2JsMethodKind.CONST; |
+ if (function.modifiers.isConst()) { |
+ kind = Dart2JsMethodKind.CONST; |
} else { |
- _kind = Dart2JsMethodKind.GENERATIVE; |
+ kind = Dart2JsMethodKind.GENERATIVE; |
} |
- _displayName = _simpleName; |
- } else if (_function.modifiers.isFactory()) { |
- _kind = Dart2JsMethodKind.FACTORY; |
- _constructorName = ''; |
- int dollarPos = _simpleName.indexOf('\$'); |
+ displayName = simpleName; |
+ } else if (function.modifiers.isFactory()) { |
+ kind = Dart2JsMethodKind.FACTORY; |
+ constructorName = ''; |
+ int dollarPos = simpleName.indexOf('\$'); |
if (dollarPos != -1) { |
- _constructorName = _simpleName.substring(dollarPos+1); |
- _simpleName = _simpleName.substring(0, dollarPos); |
- _simpleName = '$_simpleName.$_constructorName'; |
+ constructorName = simpleName.substring(dollarPos+1); |
+ simpleName = simpleName.substring(0, dollarPos); |
+ simpleName = '$simpleName.$constructorName'; |
} |
// Simple name is TypeName.constructorName. |
- _displayName = _simpleName; |
- } else if (_simpleName == 'negate') { |
- _kind = Dart2JsMethodKind.OPERATOR; |
- _operatorName = '-'; |
+ displayName = simpleName; |
+ } else if (simpleName == 'negate') { |
+ kind = Dart2JsMethodKind.OPERATOR; |
+ operatorName = '-'; |
// Simple name is 'unary-'. |
- _simpleName = Mirror.UNARY_MINUS; |
+ simpleName = Mirror.UNARY_MINUS; |
// Display name is 'operator operatorName'. |
- _displayName = 'operator -'; |
- } else if (_simpleName.startsWith('operator\$')) { |
- String str = _simpleName.substring(9); |
- _simpleName = 'operator'; |
- _kind = Dart2JsMethodKind.OPERATOR; |
- _operatorName = _getOperatorFromOperatorName(str); |
+ displayName = 'operator -'; |
+ } else if (simpleName.startsWith('operator\$')) { |
+ String str = simpleName.substring(9); |
+ simpleName = 'operator'; |
+ kind = Dart2JsMethodKind.OPERATOR; |
+ operatorName = _getOperatorFromOperatorName(str); |
// Simple name is 'operator operatorName'. |
- _simpleName = _operatorName; |
+ simpleName = operatorName; |
// Display name is 'operator operatorName'. |
- _displayName = 'operator $_operatorName'; |
+ displayName = 'operator $operatorName'; |
} else { |
- _kind = Dart2JsMethodKind.REGULAR; |
- _displayName = _simpleName; |
+ kind = Dart2JsMethodKind.REGULAR; |
+ displayName = simpleName; |
} |
+ return new Dart2JsMethodMirror._internal(objectMirror, function, |
+ simpleName, displayName, constructorName, operatorName, kind); |
} |
FunctionElement get _function => _element; |
- String get simpleName => _simpleName; |
- |
- String get displayName => _displayName; |
- |
String get qualifiedName |
=> '${owner.qualifiedName}.$simpleName'; |
@@ -1467,16 +1477,12 @@ class Dart2JsMethodMirror extends Dart2JsMemberMirror |
bool get isFactoryConstructor => _kind == Dart2JsMethodKind.FACTORY; |
- String get constructorName => _constructorName; |
- |
bool get isGetter => _kind == Dart2JsMethodKind.GETTER; |
bool get isSetter => _kind == Dart2JsMethodKind.SETTER; |
bool get isOperator => _kind == Dart2JsMethodKind.OPERATOR; |
- String get operatorName => _operatorName; |
- |
SourceLocation get location { |
var node = _function.parseNode(_diagnosticListener); |
if (node != null) { |