| Index: pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| index 10bbb77d459e2a753b32d9aae9a4bd6629f57327..e50a7d7ee1ea6f54ff82d02a251d4f9fe324cd21 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart
|
| @@ -19,15 +19,13 @@ import '../../elements/elements.dart'
|
| ClassElement,
|
| FieldElement,
|
| FunctionSignature,
|
| - GetterElement,
|
| LibraryElement,
|
| MemberElement,
|
| MethodElement,
|
| ParameterElement;
|
| import '../../elements/entities.dart';
|
| -import '../../elements/resolution_types.dart'
|
| - show ResolutionDartType, ResolutionFunctionType, ResolutionTypedefType;
|
| -import '../../elements/types.dart' show DartType, DartTypes, FunctionType;
|
| +import '../../elements/resolution_types.dart' show ResolutionDartType;
|
| +import '../../elements/types.dart';
|
| import '../../js/js.dart' as js;
|
| import '../../js_backend/backend.dart' show SuperMemberData;
|
| import '../../js_backend/backend_usage.dart';
|
| @@ -524,10 +522,9 @@ class ProgramBuilder {
|
| .forEach((LibraryEntity library, List<ClassEntity> classElements, _) {
|
| for (ClassEntity cls in classElements) {
|
| if (_nativeData.isJsInteropClass(cls)) {
|
| - // TODO(redemption): Handle class entities.
|
| - ClassElement e = cls;
|
| - e.declaration.forEachMember((_, _member) {
|
| - MemberElement member = _member;
|
| + _elementEnvironment.forEachClassMember(cls,
|
| + (ClassEntity declarer, MemberEntity member) {
|
| + if (declarer != cls) return;
|
| var jsName = _nativeData.computeUnescapedJSInteropName(member.name);
|
| if (!member.isInstanceMember) return;
|
| if (member.isGetter || member.isField || member.isFunction) {
|
| @@ -561,15 +558,15 @@ class ProgramBuilder {
|
| // Generating stubs for direct calls and stubs for call-through
|
| // of getters that happen to be functions.
|
| bool isFunctionLike = false;
|
| - ResolutionFunctionType functionType = null;
|
| + FunctionType functionType = null;
|
|
|
| if (member.isFunction) {
|
| MethodElement fn = member;
|
| functionType = fn.type;
|
| } else if (member.isGetter) {
|
| if (_options.trustTypeAnnotations) {
|
| - GetterElement getter = member;
|
| - ResolutionDartType returnType = getter.type.returnType;
|
| + DartType returnType =
|
| + _elementEnvironment.getFunctionType(member).returnType;
|
| if (returnType.isFunctionType) {
|
| functionType = returnType;
|
| } else if (returnType.treatAsDynamic ||
|
| @@ -578,9 +575,8 @@ class ProgramBuilder {
|
| // ignore: UNNECESSARY_CAST
|
| _commonElements.functionType as DartType)) {
|
| if (returnType.isTypedef) {
|
| - ResolutionTypedefType typedef = returnType;
|
| - // TODO(jacobr): can we just use typdef.unaliased instead?
|
| - functionType = typedef.element.functionSignature.type;
|
| + TypedefType typedef = returnType;
|
| + functionType = typedef.unaliased;
|
| } else {
|
| // Other misc function type such as commonElements.Function.
|
| // Allow any number of arguments.
|
|
|