OLD | NEW |
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 Loading... |
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 } | |
OLD | NEW |