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

Side by Side Diff: pkg/analysis_server/lib/src/services/correction/name_suggestion.dart

Issue 2990793002: Improve name generation for indexed expressions (Closed)
Patch Set: Created 3 years, 4 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 unified diff | Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/abstract_context.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:analysis_server/src/services/correction/strings.dart'; 5 import 'package:analysis_server/src/services/correction/strings.dart';
6 import 'package:analyzer/dart/ast/ast.dart'; 6 import 'package:analyzer/dart/ast/ast.dart';
7 import 'package:analyzer/dart/element/element.dart'; 7 import 'package:analyzer/dart/element/element.dart';
8 import 'package:analyzer/dart/element/type.dart'; 8 import 'package:analyzer/dart/element/type.dart';
9 import 'package:analyzer_plugin/src/utilities/string_utilities.dart'; 9 import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
10 10
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 if (!excluded.contains(name)) { 129 if (!excluded.contains(name)) {
130 result.add(name); 130 result.add(name);
131 break; 131 break;
132 } 132 }
133 // next character 133 // next character
134 c = c + 1; 134 c = c + 1;
135 } 135 }
136 } 136 }
137 137
138 String _getBaseNameFromExpression(Expression expression) { 138 String _getBaseNameFromExpression(Expression expression) {
139 if (expression is AsExpression) {
140 return _getBaseNameFromExpression(expression.expression);
141 } else if (expression is ParenthesizedExpression) {
142 return _getBaseNameFromExpression(expression.expression);
143 }
144 return _getBaseNameFromUnwrappedExpression(expression);
145 }
146
147 String _getBaseNameFromLocationInParent(Expression expression) {
148 // value in named expression
149 if (expression.parent is NamedExpression) {
150 NamedExpression namedExpression = expression.parent as NamedExpression;
151 if (namedExpression.expression == expression) {
152 return namedExpression.name.label.name;
153 }
154 }
155 // positional argument
156 {
157 ParameterElement parameter = expression.propagatedParameterElement;
158 if (parameter == null) {
159 parameter = expression.staticParameterElement;
160 }
161 if (parameter != null) {
162 return parameter.displayName;
163 }
164 }
165 // unknown
166 return null;
167 }
168
169 String _getBaseNameFromUnwrappedExpression(Expression expression) {
139 String name = null; 170 String name = null;
140 // e as Type
141 if (expression is AsExpression) {
142 AsExpression asExpression = expression as AsExpression;
143 expression = asExpression.expression;
144 }
145 // analyze expressions 171 // analyze expressions
146 if (expression is SimpleIdentifier) { 172 if (expression is SimpleIdentifier) {
147 SimpleIdentifier node = expression; 173 return expression.name;
148 return node.name;
149 } else if (expression is PrefixedIdentifier) { 174 } else if (expression is PrefixedIdentifier) {
150 PrefixedIdentifier node = expression; 175 return expression.identifier.name;
151 return node.identifier.name;
152 } else if (expression is PropertyAccess) { 176 } else if (expression is PropertyAccess) {
153 PropertyAccess node = expression; 177 return expression.propertyName.name;
154 return node.propertyName.name;
155 } else if (expression is MethodInvocation) { 178 } else if (expression is MethodInvocation) {
156 name = expression.methodName.name; 179 name = expression.methodName.name;
157 } else if (expression is InstanceCreationExpression) { 180 } else if (expression is InstanceCreationExpression) {
158 InstanceCreationExpression creation = expression; 181 ConstructorName constructorName = expression.constructorName;
159 ConstructorName constructorName = creation.constructorName;
160 TypeName typeName = constructorName.type; 182 TypeName typeName = constructorName.type;
161 if (typeName != null) { 183 if (typeName != null) {
162 Identifier typeNameIdentifier = typeName.name; 184 Identifier typeNameIdentifier = typeName.name;
163 // new ClassName() 185 // new ClassName()
164 if (typeNameIdentifier is SimpleIdentifier) { 186 if (typeNameIdentifier is SimpleIdentifier) {
165 return typeNameIdentifier.name; 187 return typeNameIdentifier.name;
166 } 188 }
167 // new prefix.name(); 189 // new prefix.name();
168 if (typeNameIdentifier is PrefixedIdentifier) { 190 if (typeNameIdentifier is PrefixedIdentifier) {
169 PrefixedIdentifier prefixed = typeNameIdentifier; 191 PrefixedIdentifier prefixed = typeNameIdentifier;
170 // new prefix.ClassName() 192 // new prefix.ClassName()
171 if (prefixed.prefix.staticElement is PrefixElement) { 193 if (prefixed.prefix.staticElement is PrefixElement) {
172 return prefixed.identifier.name; 194 return prefixed.identifier.name;
173 } 195 }
174 // new ClassName.constructorName() 196 // new ClassName.constructorName()
175 return prefixed.prefix.name; 197 return prefixed.prefix.name;
176 } 198 }
177 } 199 }
200 } else if (expression is IndexExpression) {
201 name = _getBaseNameFromExpression(expression.realTarget);
202 if (name.endsWith('es')) {
203 name = name.substring(0, name.length - 2);
204 } else if (name.endsWith('s')) {
205 name = name.substring(0, name.length - 1);
206 }
178 } 207 }
179 // strip known prefixes 208 // strip known prefixes
180 if (name != null) { 209 if (name != null) {
181 for (int i = 0; i < _KNOWN_METHOD_NAME_PREFIXES.length; i++) { 210 for (int i = 0; i < _KNOWN_METHOD_NAME_PREFIXES.length; i++) {
182 String curr = _KNOWN_METHOD_NAME_PREFIXES[i]; 211 String curr = _KNOWN_METHOD_NAME_PREFIXES[i];
183 if (name.startsWith(curr)) { 212 if (name.startsWith(curr)) {
184 if (name == curr) { 213 if (name == curr) {
185 return null; 214 return null;
186 } else if (isUpperCase(name.codeUnitAt(curr.length))) { 215 } else if (isUpperCase(name.codeUnitAt(curr.length))) {
187 return name.substring(curr.length); 216 return name.substring(curr.length);
188 } 217 }
189 } 218 }
190 } 219 }
191 } 220 }
192 // done 221 // done
193 return name; 222 return name;
194 } 223 }
195
196 String _getBaseNameFromLocationInParent(Expression expression) {
197 // value in named expression
198 if (expression.parent is NamedExpression) {
199 NamedExpression namedExpression = expression.parent as NamedExpression;
200 if (namedExpression.expression == expression) {
201 return namedExpression.name.label.name;
202 }
203 }
204 // positional argument
205 {
206 ParameterElement parameter = expression.propagatedParameterElement;
207 if (parameter == null) {
208 parameter = expression.staticParameterElement;
209 }
210 if (parameter != null) {
211 return parameter.displayName;
212 }
213 }
214 // unknown
215 return null;
216 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/test/abstract_context.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698