| 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.
|
| */
|
|
|