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

Unified Diff: pkg/analyzer/lib/src/task/strong/ast_properties.dart

Issue 2954523002: fix #27259, implement covariance checking for strong mode and DDC (Closed)
Patch Set: merged and fix an analysis error Created 3 years, 5 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/generated/type_system.dart ('k') | pkg/analyzer/lib/src/task/strong/checker.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/task/strong/ast_properties.dart
diff --git a/pkg/analyzer/lib/src/task/strong/ast_properties.dart b/pkg/analyzer/lib/src/task/strong/ast_properties.dart
index 621b79af6c306eb6bc55281ebb120073a51a6276..1497a91757ced2f76ce6897167051f73d335bdd5 100644
--- a/pkg/analyzer/lib/src/task/strong/ast_properties.dart
+++ b/pkg/analyzer/lib/src/task/strong/ast_properties.dart
@@ -7,17 +7,27 @@
/// These properties are not public, but provided by use of back-ends such as
/// Dart Dev Compiler.
import 'package:analyzer/analyzer.dart';
+import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
const String _hasImplicitCasts = '_hasImplicitCasts';
-const String _implicitAssignmentCast = '_implicitAssignmentCast';
+const String _implicitOperationCast = '_implicitAssignmentCast';
const String _implicitCast = '_implicitCast';
const String _isDynamicInvoke = '_isDynamicInvoke';
+const String _classCovariantParameters = '_classCovariantParameters';
+const String _superclassCovariantParameters = '_superclassCovariantParameters';
+const String _covariantGenericReturn = '_covariantGenericReturn';
+const String _covariantPrivateFields = '_covariantPrivateFields';
+const String _covariantPrivateMembers = '_covariantPrivateMembers';
-/// If this op-assign has an implicit cast on the assignment, returns the type
-/// it is coerced to, otherwise returns null.
-DartType getImplicitAssignmentCast(Expression node) {
- return node.getProperty/*<DartType>*/(_implicitAssignmentCast);
+/// If this expression needs an implicit cast on a subexpression that cannot be
+/// expressed anywhere else, returns the type it is coerced to.
+///
+/// For example, op-assign can have an implicit cast on the final assignment,
+/// and MethodInvocation calls on functions (`obj.f()` where `obj.f` is an
+/// accessor and not a real method) can need a cast on the function.
+DartType getImplicitOperationCast(Expression node) {
+ return node.getProperty/*<DartType>*/(_implicitOperationCast);
}
/// If this expression has an implicit cast, returns the type it is coerced to,
@@ -44,9 +54,9 @@ void setHasImplicitCasts(CompilationUnit node, bool value) {
node.setProperty(_hasImplicitCasts, value == true ? true : null);
}
-/// Sets the result of [getImplicitAssignmentCast] for this node.
-void setImplicitAssignmentCast(Expression node, DartType type) {
- node.setProperty(_implicitAssignmentCast, type);
+/// Sets the result of [getImplicitOperationCast] for this node.
+void setImplicitOperationCast(Expression node, DartType type) {
+ node.setProperty(_implicitOperationCast, type);
}
/// Sets the result of [getImplicitCast] for this node.
@@ -54,7 +64,44 @@ void setImplicitCast(Expression node, DartType type) {
node.setProperty(_implicitCast, type);
}
-/// Sets [isDynamicInvoke] property for this expression
+/// Sets [isDynamicInvoke] property for this expression.
void setIsDynamicInvoke(Expression node, bool value) {
node.setProperty(_isDynamicInvoke, value == true ? true : null);
}
+
+/// Returns a list of parameters and method type parameters in this class
+/// declaration that need a check at runtime to ensure soundness.
+Set<Element> getClassCovariantParameters(Declaration node) {
+ return node.getProperty(_classCovariantParameters);
+}
+
+/// Sets [getClassCovariantParameters] property for this class.
+void setClassCovariantParameters(Declaration node, Set<Element> value) {
+ node.setProperty(_classCovariantParameters, value);
+}
+
+/// Returns a list of parameters and method type parameters from mixins and
+/// superclasses of this class that need a stub method to check their type at
+/// runtime for soundness.
+Set<Element> getSuperclassCovariantParameters(Declaration node) {
+ return node.getProperty(_superclassCovariantParameters);
+}
+
+/// Sets [getSuperclassCovariantParameters] property for this class.
+void setSuperclassCovariantParameters(Declaration node, Set<Element> value) {
+ node.setProperty(_superclassCovariantParameters, value);
+}
+
+/// Gets the private setters and methods that are accessed unsafely from
+/// this compilation unit.
+///
+/// These members will require a check.
+Set<ExecutableElement> getCovariantPrivateMembers(CompilationUnit node) {
+ return node.getProperty(_covariantPrivateMembers);
+}
+
+/// Sets [getCovariantPrivateMembers] property for this compilation unit.
+void setCovariantPrivateMembers(
+ CompilationUnit node, Set<ExecutableElement> value) {
+ node.setProperty(_covariantPrivateMembers, value);
+}
« no previous file with comments | « pkg/analyzer/lib/src/generated/type_system.dart ('k') | pkg/analyzer/lib/src/task/strong/checker.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698