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

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

Issue 1423623005: Report hint when target of an invocation uses '?.', so can be null. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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/error.dart ('k') | 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/resolver.dart
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 2d5fac3269d04c5bcd01af8a8d70c3c9d7b6a13e..f1a4d5b3ce4de559b263349af1fc9d8a97baccb1 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -218,6 +218,12 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
}
@override
+ Object visitMethodInvocation(MethodInvocation node) {
+ _checkForCanBeNullAfterNullAware(node.realTarget);
+ return super.visitMethodInvocation(node);
+ }
+
+ @override
Object visitPostfixExpression(PostfixExpression node) {
_checkForDeprecatedMemberUse(node.bestElement, node);
return super.visitPostfixExpression(node);
@@ -230,6 +236,12 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
}
@override
+ Object visitPropertyAccess(PropertyAccess node) {
+ _checkForCanBeNullAfterNullAware(node.realTarget);
+ return super.visitPropertyAccess(node);
+ }
+
+ @override
Object visitRedirectingConstructorInvocation(
RedirectingConstructorInvocation node) {
_checkForDeprecatedMemberUse(node.staticElement, node);
@@ -453,6 +465,25 @@ class BestPracticesVerifier extends RecursiveAstVisitor<Object> {
}
/**
+ * Produce a hint if the given [expression] could have a value of `null`.
+ */
+ void _checkForCanBeNullAfterNullAware(Expression expression) {
+ if (expression is ParenthesizedExpression) {
+ _checkForCanBeNullAfterNullAware(expression.expression);
+ } else if (expression is MethodInvocation) {
+ if (expression.operator?.type == TokenType.QUESTION_PERIOD) {
+ _errorReporter.reportErrorForNode(
+ HintCode.CAN_BE_NULL_AFTER_NULL_AWARE, expression);
+ }
+ } else if (expression is PropertyAccess) {
+ if (expression.operator?.type == TokenType.QUESTION_PERIOD) {
Brian Wilkerson 2015/10/28 22:09:11 I don't think the operator for a property access c
scheglov 2015/10/28 23:45:09 Acknowledged.
+ _errorReporter.reportErrorForNode(
+ HintCode.CAN_BE_NULL_AFTER_NULL_AWARE, expression);
+ }
+ }
+ }
+
+ /**
* Given some [Element], look at the associated metadata and report the use of the member if
* it is declared as deprecated.
*
« no previous file with comments | « pkg/analyzer/lib/src/generated/error.dart ('k') | pkg/analyzer/test/generated/resolver_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698