Index: pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart |
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart |
index 1ba794a3ca9213d4fb41a93e3c1ce91b63040055..e1c881a4c07f5a9f3de3ae0cad73aef3d2f3013a 100644 |
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart |
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart |
@@ -612,27 +612,48 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder { |
} |
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; |
@@ -651,6 +672,13 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder { |
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) { |
@@ -669,27 +697,6 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder { |
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; |
- } |
- |
/** |
* Returns all variants of names by removing leading words one by one. |
*/ |