| Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| index d4069072afdc15a04bf9e717848d7a34c0434d1a..7a9560f1402218cd40026e1ac3b5c82d8d34926a 100644
|
| --- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| +++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| @@ -1505,7 +1505,7 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|
|
| var fnBody = js.call('this.noSuchMethod(new #.InvocationImpl(#, #, #))', [
|
| _runtimeModule,
|
| - _declareMemberName(method),
|
| + _declareMemberName(method, useDisplayName: true),
|
| positionalArgs,
|
| new JS.ObjectInitializer(invocationProps)
|
| ]);
|
| @@ -1939,14 +1939,14 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| }
|
|
|
| List<ExecutableElement> _extensionsToImplement(ClassElement element) {
|
| - var members = <ExecutableElement>[];
|
| - if (_extensionTypes.isNativeClass(element)) return members;
|
| + if (_extensionTypes.isNativeClass(element)) return [];
|
|
|
| // Collect all extension types we implement.
|
| var type = element.type;
|
| var types = _extensionTypes.collectNativeInterfaces(element);
|
| - if (types.isEmpty) return members;
|
| + if (types.isEmpty) return [];
|
|
|
| + var members = new Set<ExecutableElement>();
|
| // Collect all possible extension method names.
|
| var extensionMembers = new HashSet<String>();
|
| for (var t in types) {
|
| @@ -1961,7 +1961,9 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| members.add(m);
|
| }
|
| }
|
| - return members;
|
| + members.addAll(_collectMockMethods(type)
|
| + .where((m) => extensionMembers.contains(m.name)));
|
| + return members.toList();
|
| }
|
|
|
| /// Generates the implicit default constructor for class C of the form
|
| @@ -5463,17 +5465,14 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| ///
|
| /// Unlike call sites, we always have an element available, so we can use it
|
| /// directly rather than computing the relevant options for [_emitMemberName].
|
| - JS.Expression _declareMemberName(ExecutableElement e, {bool useExtension}) {
|
| - String name;
|
| - if (e is PropertyAccessorElement) {
|
| - name = e.variable.name;
|
| - } else {
|
| - name = e.name;
|
| - }
|
| + JS.Expression _declareMemberName(ExecutableElement e,
|
| + {bool useExtension, useDisplayName = false}) {
|
| + var name = (e is PropertyAccessorElement) ? e.variable.name : e.name;
|
| return _emitMemberName(name,
|
| isStatic: e.isStatic,
|
| useExtension:
|
| - useExtension ?? _extensionTypes.isNativeClass(e.enclosingElement));
|
| + useExtension ?? _extensionTypes.isNativeClass(e.enclosingElement),
|
| + useDisplayName: useDisplayName);
|
| }
|
|
|
| /// This handles member renaming for private names and operators.
|
| @@ -5520,6 +5519,7 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| {DartType type,
|
| bool isStatic: false,
|
| bool useExtension,
|
| + bool useDisplayName: false,
|
| Element element}) {
|
| // Static members skip the rename steps and may require JS interop renames.
|
| if (isStatic) {
|
| @@ -5532,20 +5532,22 @@ class CodeGenerator extends GeneralizingAstVisitor
|
|
|
| // When generating synthetic names, we use _ as the prefix, since Dart names
|
| // won't have this (eliminated above), nor will static names reach here.
|
| - switch (name) {
|
| - case '[]':
|
| - name = '_get';
|
| - break;
|
| - case '[]=':
|
| - name = '_set';
|
| - break;
|
| - case 'unary-':
|
| - name = '_negate';
|
| - break;
|
| - case 'constructor':
|
| - case 'prototype':
|
| - name = '_$name';
|
| - break;
|
| + if (!useDisplayName) {
|
| + switch (name) {
|
| + case '[]':
|
| + name = '_get';
|
| + break;
|
| + case '[]=':
|
| + name = '_set';
|
| + break;
|
| + case 'unary-':
|
| + name = '_negate';
|
| + break;
|
| + case 'constructor':
|
| + case 'prototype':
|
| + name = '_$name';
|
| + break;
|
| + }
|
| }
|
|
|
| var result = _propertyName(name);
|
|
|