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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2995973002: Gardening: Revert "fix #30423, covariant parameter tearoff type should be Object" (TBR) (Closed)
Patch Set: Created 3 years, 4 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 | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/dev_compiler/test/codegen_expected/closure.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9deaaa4fa053320d93a13df21a5d4f3fb4bdeee7..51f3d76ec19a4b9a9dbd679595ec60f44cc7077e 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -14,8 +14,9 @@ import 'package:analyzer/dart/ast/token.dart' show Token, TokenType;
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/token.dart' show StringToken;
-import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart'
+ show FieldElementImpl, LocalVariableElementImpl;
+import 'package:analyzer/src/dart/element/type.dart' show DynamicTypeImpl;
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
import 'package:analyzer/src/generated/resolver.dart'
@@ -2020,9 +2021,11 @@ class CodeGenerator extends Object
lookup = classElem.type.lookUpInheritedSetter;
tMember = node.isStatic ? tStaticSetters : tInstanceSetters;
} else {
- // Swap in "Object" for parameter types that are covariant, either via
- // the `covariant` keyword or because of covariant generics.
- elementToType = _getMemberRuntimeType;
+ // Method
+ // Swap in "Object" for parameter types that are covariant overrides.
+ var objectType = context.typeProvider.objectType;
+ elementToType =
+ (MethodElement element) => element.getReifiedType(objectType);
getOverride = classElem.lookUpInheritedConcreteMethod;
lookup = classElem.type.lookUpInheritedMethod;
tMember = node.isStatic ? tStaticMethods : tInstanceMethods;
@@ -2188,24 +2191,6 @@ class CodeGenerator extends Object
}''', [params, params, body]);
}
- FunctionType _getMemberRuntimeType(ExecutableElement element) {
- // Check whether we have any covariant parameters.
- // Usually we don't, so we can use the same type.
- if (!element.parameters.any(_isCovariant)) return element.type;
-
- var parameters = element.parameters
- .map((p) => new ParameterElementImpl.synthetic(p.name,
- _isCovariant(p) ? objectClass.type : p.type, p.parameterKind))
- .toList();
-
- var function = new FunctionElementImpl("", -1)
- ..isSynthetic = true
- ..returnType = element.returnType
- ..shareTypeParameters(element.typeParameters)
- ..parameters = parameters;
- return function.type = new FunctionTypeImpl(function);
- }
-
JS.Expression _constructorName(ConstructorElement ctor) {
var name = ctor.name;
if (name == '') {
@@ -2401,6 +2386,8 @@ class CodeGenerator extends Object
var parameters = _parametersOf(node);
if (parameters == null) return null;
+ var covariantParams = _classProperties?.covariantParameters;
+
var body = <JS.Statement>[];
for (var param in parameters.parameters) {
var jsParam = _emitSimpleIdentifier(param.identifier);
@@ -2428,7 +2415,8 @@ class CodeGenerator extends Object
}
var paramElement = resolutionMap.elementDeclaredByFormalParameter(param);
- if (_isCovariant(paramElement)) {
+ if (paramElement.isCovariant ||
+ covariantParams != null && covariantParams.contains(paramElement)) {
var castType = _emitType(paramElement.type);
body.add(js.statement('#._check(#);', [castType, jsParam]));
}
@@ -2436,12 +2424,6 @@ class CodeGenerator extends Object
return body.isEmpty ? null : _statement(body);
}
- bool _isCovariant(ParameterElement p) {
- if (p.isCovariant) return true;
- var covariantParams = _classProperties?.covariantParameters;
- return covariantParams != null && covariantParams.contains(p);
- }
-
JS.Expression _defaultParamValue(FormalParameter param) {
if (param is DefaultFormalParameter && param.defaultValue != null) {
return _visit(param.defaultValue);
« no previous file with comments | « pkg/analyzer/lib/src/dart/element/element.dart ('k') | pkg/dev_compiler/test/codegen_expected/closure.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698