Index: pkg/analysis_server/lib/src/services/correction/name_suggestion.dart |
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart |
index 4c10fec3c1e5871c8a9068e9ebcb208ee36198db..b96d7cf0acd5927b78f3666859ce12fc1a275ac1 100644 |
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart |
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart |
@@ -136,27 +136,49 @@ void _addSingleCharacterName(Set<String> excluded, Set<String> result, int c) { |
} |
String _getBaseNameFromExpression(Expression expression) { |
- String name = null; |
- // e as Type |
if (expression is AsExpression) { |
- AsExpression asExpression = expression as AsExpression; |
- expression = asExpression.expression; |
+ return _getBaseNameFromExpression(expression.expression); |
+ } else if (expression is ParenthesizedExpression) { |
+ return _getBaseNameFromExpression(expression.expression); |
} |
+ return _getBaseNameFromUnwrappedExpression(expression); |
+} |
+ |
+String _getBaseNameFromLocationInParent(Expression expression) { |
+ // value in named expression |
+ if (expression.parent is NamedExpression) { |
+ NamedExpression namedExpression = expression.parent as NamedExpression; |
+ if (namedExpression.expression == expression) { |
+ return namedExpression.name.label.name; |
+ } |
+ } |
+ // positional argument |
+ { |
+ ParameterElement parameter = expression.propagatedParameterElement; |
+ if (parameter == null) { |
+ parameter = expression.staticParameterElement; |
+ } |
+ if (parameter != null) { |
+ return parameter.displayName; |
+ } |
+ } |
+ // unknown |
+ return null; |
+} |
+ |
+String _getBaseNameFromUnwrappedExpression(Expression expression) { |
+ String name = null; |
// analyze expressions |
if (expression is SimpleIdentifier) { |
- SimpleIdentifier node = expression; |
- return node.name; |
+ return expression.name; |
} else if (expression is PrefixedIdentifier) { |
- PrefixedIdentifier node = expression; |
- return node.identifier.name; |
+ return expression.identifier.name; |
} else if (expression is PropertyAccess) { |
- PropertyAccess node = expression; |
- return node.propertyName.name; |
+ return expression.propertyName.name; |
} else if (expression is MethodInvocation) { |
name = expression.methodName.name; |
} else if (expression is InstanceCreationExpression) { |
- InstanceCreationExpression creation = expression; |
- ConstructorName constructorName = creation.constructorName; |
+ ConstructorName constructorName = expression.constructorName; |
TypeName typeName = constructorName.type; |
if (typeName != null) { |
Identifier typeNameIdentifier = typeName.name; |
@@ -175,6 +197,13 @@ String _getBaseNameFromExpression(Expression expression) { |
return prefixed.prefix.name; |
} |
} |
+ } else if (expression is IndexExpression) { |
+ name = _getBaseNameFromExpression(expression.realTarget); |
+ if (name.endsWith('es')) { |
+ name = name.substring(0, name.length - 2); |
+ } else if (name.endsWith('s')) { |
+ name = name.substring(0, name.length - 1); |
+ } |
} |
// strip known prefixes |
if (name != null) { |
@@ -192,25 +221,3 @@ String _getBaseNameFromExpression(Expression expression) { |
// done |
return name; |
} |
- |
-String _getBaseNameFromLocationInParent(Expression expression) { |
- // value in named expression |
- if (expression.parent is NamedExpression) { |
- NamedExpression namedExpression = expression.parent as NamedExpression; |
- if (namedExpression.expression == expression) { |
- return namedExpression.name.label.name; |
- } |
- } |
- // positional argument |
- { |
- ParameterElement parameter = expression.propagatedParameterElement; |
- if (parameter == null) { |
- parameter = expression.staticParameterElement; |
- } |
- if (parameter != null) { |
- return parameter.displayName; |
- } |
- } |
- // unknown |
- return null; |
-} |