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

Unified Diff: pkg/analyzer/lib/src/generated/static_type_analyzer.dart

Issue 1355393003: JS inline handles -dynamic (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Readability improvements Created 5 years, 3 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 | « no previous file | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/generated/static_type_analyzer.dart
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 0dcd0146701c6a11ee798a51c21f07c27461a155..433bae1c7051d9200cd0790eaad8cb706a1b6d0d 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -1740,8 +1740,14 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
if (e is FunctionElement &&
e.library.source.uri.toString() == 'dart:_foreign_helper' &&
e.name == 'JS') {
- DartType returnType = _getFirstArgumentAsType(
- _typeProvider.objectType.element.library, node.argumentList);
+ String typeStr = _getFirstArgumentAsString(node.argumentList);
+ DartType returnType = null;
+ if (typeStr == '-dynamic') {
+ returnType = _typeProvider.bottomType;
+ } else {
+ returnType = _getElementNameAsType(
+ _typeProvider.objectType.element.library, typeStr, null);
+ }
if (returnType != null) {
_recordStaticType(node, returnType);
return true;
@@ -1760,8 +1766,10 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
String name = node.methodName.name;
MethodElement inferredElement =
_typeProvider.objectType.element.getMethod(name);
- DartType inferredType = (inferredElement != null &&
- !inferredElement.isStatic) ? inferredElement.type : null;
+ if (inferredElement == null || inferredElement.isStatic) {
+ return false;
+ }
+ DartType inferredType = inferredElement.type;
DartType nodeType = node.staticType;
if (nodeType != null &&
nodeType.isDynamic &&
@@ -1769,8 +1777,6 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
inferredType.parameters.isEmpty &&
node.argumentList.arguments.isEmpty &&
_typeProvider.nonSubtypableTypes.contains(inferredType.returnType)) {
- //TODO(leafp): When we start marking dynamic calls for the backend, be
- // sure that this does not get marked as dynamic.
_recordStaticType(node.methodName, inferredType);
_recordStaticType(node, inferredType.returnType);
return true;
@@ -1798,7 +1804,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
}
/**
- * Given a property access [node], where [target] is the target of the access
+ * Given a property access [node] with static type [nodeType],
* and [id] is the property name being accessed, infer a type for the
* access itself and its constituent components if the access is to one of the
* methods or getters of the built in 'Object' type, and if the result type is
@@ -1810,15 +1816,14 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
String name = id.name;
PropertyAccessorElement inferredElement =
_typeProvider.objectType.element.getGetter(name);
- DartType inferredType = (inferredElement != null &&
- !inferredElement.isStatic) ? inferredElement.type.returnType : null;
+ if (inferredElement == null || inferredElement.isStatic) {
+ return false;
+ }
+ DartType inferredType = inferredElement.type.returnType;
if (nodeType != null &&
nodeType.isDynamic &&
inferredType != null &&
_typeProvider.nonSubtypableTypes.contains(inferredType)) {
- // TODO(leafp): Eliminate the dynamic call here once we start
- // annotating dynamic calls from this code. Even if the type is not
- // sealed we can eliminate the dynamic call.
_recordStaticType(id, inferredType);
_recordStaticType(node, inferredType);
return true;
@@ -1872,7 +1877,7 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
/**
* Return a more specialized type for a method invocation based on
- * an ad-hoc list of pseudo-generic methids.
+ * an ad-hoc list of pseudo-generic methods.
*/
DartType _matchGeneric(MethodInvocation node) {
Element e = node.methodName.staticElement;
@@ -1897,8 +1902,8 @@ class StaticTypeAnalyzer extends SimpleAstVisitor<Object> {
arguments.length == 2) {
DartType tx = arguments[0];
DartType ty = arguments[1];
- if (tx == ty && tx == _typeProvider.intType ||
- tx == _typeProvider.doubleType) {
+ if (tx == ty &&
+ (tx == _typeProvider.intType || tx == _typeProvider.doubleType)) {
return tx;
}
}
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698