| 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 ce58c459435ee80d60c3ac3612d8dce61750db8d..24aac39abbdb4c5e7b1c3bd363f5bee5d8bb218b 100644
|
| --- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| +++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
|
| @@ -1824,7 +1824,11 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| if (node.isAbstract) {
|
| continue;
|
| }
|
| -
|
| + if (node.isStatic &&
|
| + !options.emitMetadata &&
|
| + (node.isGetter || node.isSetter)) {
|
| + continue;
|
| + }
|
| List<JS.Property> tMember;
|
| Function getOverride;
|
| Function lookup;
|
| @@ -1851,12 +1855,6 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| }
|
|
|
| DartType reifiedType = elementToType(element);
|
| - var type = _emitAnnotatedFunctionType(reifiedType, node.metadata,
|
| - parameters: node.parameters?.parameters,
|
| - nameType: options.hoistSignatureTypes,
|
| - hoistType: options.hoistSignatureTypes,
|
| - definite: true);
|
| -
|
| // Don't add redundant signatures for inherited methods whose signature
|
| // did not change. If we are not overriding, or if the thing we are
|
| // overriding has a different reified type from ourselves, we must
|
| @@ -1867,11 +1865,19 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| lookup(name, library: currentLibrary, thisType: false)) !=
|
| reifiedType;
|
|
|
| + var type = _emitAnnotatedFunctionType(reifiedType, node.metadata,
|
| + parameters: node.parameters?.parameters,
|
| + nameType: options.hoistSignatureTypes,
|
| + hoistType: options.hoistSignatureTypes,
|
| + definite: true);
|
| +
|
| if (needsSignature) {
|
| var memberName = _declareMemberName(element);
|
| var property = new JS.Property(memberName, type);
|
| tMember.add(property);
|
| - // TODO(vsm): Why do we need this?
|
| + // We record the names of static methods seperately so we can
|
| + // attach metadata to them individually.
|
| + // TODO(leafp): Revisit this.
|
| if (node.isStatic && !node.isGetter && !node.isSetter) {
|
| sNames.add(memberName);
|
| }
|
| @@ -1881,28 +1887,32 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| var tInstanceFields = <JS.Property>[];
|
| var tStaticFields = <JS.Property>[];
|
| for (FieldDeclaration node in fields) {
|
| - for (VariableDeclaration field in node.fields.variables) {
|
| - var element = field.element as FieldElement;
|
| - var memberName = _declareMemberName(element.getter);
|
| - var type = _emitAnnotatedType(element.type, node.metadata);
|
| - var property = new JS.Property(memberName, type);
|
| - (node.isStatic ? tStaticFields : tInstanceFields).add(property);
|
| + if (!node.isStatic || options.emitMetadata) {
|
| + for (VariableDeclaration field in node.fields.variables) {
|
| + var element = field.element as FieldElement;
|
| + var memberName = _declareMemberName(element.getter);
|
| + var type = _emitAnnotatedType(element.type, node.metadata);
|
| + var property = new JS.Property(memberName, type);
|
| + (node.isStatic ? tStaticFields : tInstanceFields).add(property);
|
| + }
|
| }
|
| }
|
|
|
| var tCtors = <JS.Property>[];
|
| - for (ConstructorDeclaration node in ctors) {
|
| - var memberName = _constructorName(node.element);
|
| - var element = resolutionMap.elementDeclaredByConstructorDeclaration(node);
|
| - var type = _emitAnnotatedFunctionType(element.type, node.metadata,
|
| - parameters: node.parameters.parameters,
|
| - nameType: options.hoistSignatureTypes,
|
| - hoistType: options.hoistSignatureTypes,
|
| - definite: true);
|
| - var property = new JS.Property(memberName, type);
|
| - tCtors.add(property);
|
| + if (options.emitMetadata) {
|
| + for (ConstructorDeclaration node in ctors) {
|
| + var memberName = _constructorName(node.element);
|
| + var element =
|
| + resolutionMap.elementDeclaredByConstructorDeclaration(node);
|
| + var type = _emitAnnotatedFunctionType(element.type, node.metadata,
|
| + parameters: node.parameters.parameters,
|
| + nameType: options.hoistSignatureTypes,
|
| + hoistType: options.hoistSignatureTypes,
|
| + definite: true);
|
| + var property = new JS.Property(memberName, type);
|
| + tCtors.add(property);
|
| + }
|
| }
|
| -
|
| var sigFields = <JS.Property>[];
|
| if (!tCtors.isEmpty) {
|
| sigFields.add(_buildSignatureField('constructors', tCtors));
|
| @@ -1930,7 +1940,8 @@ class CodeGenerator extends GeneralizingAstVisitor
|
| }
|
| if (!tStaticMethods.isEmpty) {
|
| assert(!sNames.isEmpty);
|
| - // TODO(vsm): Why do we need this names field?
|
| + // Emit names so that we can lazily attach metadata to statics
|
| + // TODO(leafp): revisit this strategy
|
| var aNames = new JS.Property(
|
| _propertyName('names'), new JS.ArrayInitializer(sNames));
|
| sigFields.add(_buildSignatureField('statics', tStaticMethods));
|
|
|