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

Unified Diff: pkg/analysis_server/lib/src/services/correction/fix_internal.dart

Issue 563333002: Issue 19799. Merge getter/setter pairs into fields when create missing overrides. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Tweak for number of generated elements. Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/services/correction/fix_internal.dart
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 3a358d35a3498bb73bd8252b61f8537cdbfc2fa6..edd08626d30abb5d8388b9df6dd21e9e95c91091 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -596,46 +596,77 @@ class FixProcessor {
}
}
- void
- _addFix_createMissingOverrides(List<ExecutableElement> missingOverrides) {
- // sort by name
- missingOverrides.sort((Element firstElement, Element secondElement) {
- return compareStrings(
- firstElement.displayName,
- secondElement.displayName);
+ void _addFix_createMissingOverrides(List<ExecutableElement> elements) {
+ elements = elements.toList();
+ int numElements = elements.length;
+ // sort by name, getters before setters
+ elements.sort((Element a, Element b) {
+ int names = compareStrings(a.displayName, b.displayName);
+ if (names != 0) {
+ return names;
+ }
+ if (a.kind == ElementKind.GETTER) {
+ return -1;
+ }
+ return 1;
});
ClassDeclaration targetClass = node.parent as ClassDeclaration;
int insertOffset = targetClass.end - 1;
SourceBuilder sb = new SourceBuilder(file, insertOffset);
- // add elements
+ // EOL management
bool isFirst = true;
- for (ExecutableElement missingOverride in missingOverrides) {
+ void addEolIfNotFirst() {
if (!isFirst || !targetClass.members.isEmpty) {
sb.append(eol);
}
- _addFix_createMissingOverrides_single(sb, targetClass, missingOverride);
isFirst = false;
}
+ // merge getter/setter pairs into fields
+ for (int i = 0; i < elements.length; i++) {
+ ExecutableElement element = elements[i];
+ if (element.kind == ElementKind.GETTER && i + 1 < elements.length) {
+ ExecutableElement nextElement = elements[i + 1];
+ if (nextElement.kind == ElementKind.SETTER) {
+ // remove this and the next elements, adjust iterator
+ elements.removeAt(i + 1);
+ elements.removeAt(i);
+ i--;
+ numElements--;
+ // add field
+ addEolIfNotFirst();
+ sb.append(utils.getIndent(1));
+ _appendType(sb, element.type.returnType);
+ sb.append(element.name);
+ sb.append(';');
+ sb.append(eol);
+ }
+ }
+ }
+ // add elements
+ for (ExecutableElement element in elements) {
+ addEolIfNotFirst();
+ _addFix_createMissingOverrides_single(sb, targetClass, element);
+ }
// add proposal
exitPosition = new Position(file, insertOffset);
_insertBuilder(sb);
- _addFix(FixKind.CREATE_MISSING_OVERRIDES, [missingOverrides.length]);
+ _addFix(FixKind.CREATE_MISSING_OVERRIDES, [numElements]);
}
void _addFix_createMissingOverrides_single(SourceBuilder sb,
- ClassDeclaration targetClass, ExecutableElement missingOverride) {
+ ClassDeclaration targetClass, ExecutableElement element) {
// prepare environment
String prefix = utils.getIndent(1);
String prefix2 = utils.getIndent(2);
// may be property
- ElementKind elementKind = missingOverride.kind;
+ ElementKind elementKind = element.kind;
bool isGetter = elementKind == ElementKind.GETTER;
bool isSetter = elementKind == ElementKind.SETTER;
bool isMethod = elementKind == ElementKind.METHOD;
- bool isOperator = isMethod && (missingOverride as MethodElement).isOperator;
+ bool isOperator = isMethod && (element as MethodElement).isOperator;
sb.append(prefix);
if (isGetter) {
- sb.append('// TODO: implement ${missingOverride.displayName}');
+ sb.append('// TODO: implement ${element.displayName}');
sb.append(eol);
sb.append(prefix);
}
@@ -646,7 +677,7 @@ class FixProcessor {
sb.append(prefix);
}
// return type
- _appendType(sb, missingOverride.type.returnType);
+ _appendType(sb, element.type.returnType);
if (isGetter) {
sb.append('get ');
} else if (isSetter) {
@@ -655,18 +686,18 @@ class FixProcessor {
sb.append('operator ');
}
// name
- sb.append(missingOverride.displayName);
+ sb.append(element.displayName);
// parameters + body
if (isGetter) {
sb.append(' => null;');
} else {
- List<ParameterElement> parameters = missingOverride.parameters;
+ List<ParameterElement> parameters = element.parameters;
_appendParameters(sb, parameters, _getDefaultValueMap(parameters));
sb.append(' {');
// TO-DO
sb.append(eol);
sb.append(prefix2);
- sb.append('// TODO: implement ${missingOverride.displayName}');
+ sb.append('// TODO: implement ${element.displayName}');
sb.append(eol);
// close method
sb.append(prefix);
@@ -976,12 +1007,6 @@ class FixProcessor {
_addFix(FixKind.REMOVE_UNUSED_IMPORT, []);
}
- void _addFix_replaceVarWithDynamic() {
- SourceRange range = rf.rangeError(error);
- _addReplaceEdit(range, "dynamic");
- _addFix(FixKind.REPLACE_VAR_WITH_DYNAMIC, []);
- }
-
void _addFix_replaceImportUri() {
if (node is SimpleStringLiteral) {
SimpleStringLiteral stringLiteral = node;
@@ -1009,6 +1034,12 @@ class FixProcessor {
}
}
+ void _addFix_replaceVarWithDynamic() {
+ SourceRange range = rf.rangeError(error);
+ _addReplaceEdit(range, "dynamic");
+ _addFix(FixKind.REPLACE_VAR_WITH_DYNAMIC, []);
+ }
+
void _addFix_replaceWithConstInstanceCreation() {
if (coveredNode is InstanceCreationExpression) {
var instanceCreation = coveredNode as InstanceCreationExpression;
« no previous file with comments | « pkg/analysis_server/lib/src/services/correction/fix.dart ('k') | pkg/analysis_server/test/services/correction/fix_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698