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

Unified Diff: pkg/analysis_server/lib/src/utilities/change_builder_dart.dart

Issue 2790173003: Bug fixes and added support for creating source edits (Closed)
Patch Set: Created 3 years, 9 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
« no previous file with comments | « pkg/analysis_server/lib/src/utilities/change_builder_core.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/utilities/change_builder_dart.dart
diff --git a/pkg/analysis_server/lib/src/utilities/change_builder_dart.dart b/pkg/analysis_server/lib/src/utilities/change_builder_dart.dart
index f9dfbef4f734157dfb2d707650a6639cf137a1b0..49378d120b2dabcb575f7ba70aa30ad8403d54c0 100644
--- a/pkg/analysis_server/lib/src/utilities/change_builder_dart.dart
+++ b/pkg/analysis_server/lib/src/utilities/change_builder_dart.dart
@@ -4,7 +4,8 @@
import 'dart:async';
-import 'package:analysis_server/plugin/protocol/protocol.dart' hide ElementKind;
+import 'package:analysis_server/plugin/protocol/protocol.dart'
+ hide Element, ElementKind;
import 'package:analysis_server/src/provisional/edit/utilities/change_builder_core.dart';
import 'package:analysis_server/src/provisional/edit/utilities/change_builder_dart.dart';
import 'package:analysis_server/src/services/correction/name_suggestion.dart';
@@ -62,10 +63,34 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
DartFileEditBuilderImpl get dartFileEditBuilder => fileEditBuilder;
@override
+ void set targetClassElement(ClassElement element) {
+ utils.targetClassElement = element;
+ }
+
+ @override
LinkedEditBuilderImpl createLinkedEditBuilder() {
return new DartLinkedEditBuilderImpl(this);
}
+ /**
+ * Returns the indentation with the given [level].
+ */
+ String getIndent(int level) => ' ' * level;
+
+// /**
+// * Arrange to have imports added for each of the given [libraries].
+// */
+// void importLibraries(Iterable<Source> libraries) {
+// dartFileEditBuilder.importLibraries(libraries);
+// }
scheglov 2017/04/03 17:06:06 Should this be removed?
Brian Wilkerson 2017/04/03 17:14:41 Probably. I'll catch it in the next CL.
+
+ /**
+ * Arrange to have an import added for the given [library].
+ */
+ void importLibrary(Source library) {
+ dartFileEditBuilder.librariesToImport.add(library);
+ }
+
@override
void writeClassDeclaration(String name,
{Iterable<DartType> interfaces,
@@ -74,7 +99,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
Iterable<DartType> mixins,
String nameGroupName,
DartType superclass,
- String superclassGroupName: DartEditBuilder.SUPERCLASS_GROUP_ID}) {
+ String superclassGroupName}) {
// TODO(brianwilkerson) Add support for type parameters, probably as a
// parameterWriter parameter.
if (isAbstract) {
@@ -85,7 +110,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
if (nameGroupName == null) {
write(name);
} else {
- addLinkedEdit(DartEditBuilder.NAME_GROUP_ID, (LinkedEditBuilder builder) {
+ addLinkedEdit(nameGroupName, (LinkedEditBuilder builder) {
write(name);
});
}
@@ -106,43 +131,41 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
write('}');
}
- //@override
- void writeConstructorDeclaration(ClassElement classElement,
+ @override
+ void writeConstructorDeclaration(String className,
{ArgumentList argumentList,
SimpleIdentifier constructorName,
+ String constructorNameGroupName,
+ List<String> fieldNames,
bool isConst: false}) {
- // TODO(brianwilkerson) Clean up the API and add it to the public API.
- //
- // TODO(brianwilkerson) Support passing a list of final fields rather than
- // an argument list.
if (isConst) {
write(Keyword.CONST.syntax);
write(' ');
}
- write(classElement.name);
- write('.');
+ write(className);
if (constructorName != null) {
- addLinkedEdit(DartEditBuilder.NAME_GROUP_ID, (LinkedEditBuilder builder) {
+ write('.');
+ if (constructorNameGroupName == null) {
write(constructorName.name);
- });
- CompilationUnit unit = constructorName
- .getAncestor((AstNode node) => node is CompilationUnit);
- if (unit != null) {
- CompilationUnitElement element = unit.element;
- if (element != null) {
- String referenceFile = element.source.fullName;
- if (referenceFile == dartFileEditBuilder.fileEdit.file) {
- dartFileEditBuilder.addLinkedPosition(constructorName.offset,
- constructorName.length, DartEditBuilder.NAME_GROUP_ID);
- }
- }
+ } else {
+ addLinkedEdit(constructorNameGroupName, (LinkedEditBuilder builder) {
+ write(constructorName.name);
+ });
}
}
write('(');
if (argumentList != null) {
writeParametersMatchingArguments(argumentList);
+ } else if (fieldNames != null) {
+ for (int i = 0; i < fieldNames.length; i++) {
+ if (i > 0) {
+ write(', ');
+ }
+ write('this.');
+ write(fieldNames[i]);
+ }
}
- writeln(');');
+ write(');');
}
@override
@@ -167,7 +190,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
typeRequired = false;
}
if (type != null) {
- writeType(type, groupName: typeGroupName);
+ writeType(type, groupName: typeGroupName, required: true);
} else if (typeRequired) {
write(Keyword.VAR.syntax);
}
@@ -237,7 +260,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
write(Keyword.STATIC.syntax);
write(' ');
}
- if (returnType != null) {
+ if (returnType != null && !returnType.isDynamic) {
writeType(returnType, groupName: returnTypeGroupName);
write(' ');
}
@@ -299,11 +322,12 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
@override
- void writeOverrideOfInheritedMember(ExecutableElement member) {
+ void writeOverrideOfInheritedMember(ExecutableElement member,
+ {String returnTypeGroupName}) {
// prepare environment
- String prefix = utils.getIndent(1);
+ String prefix = getIndent(1);
// may be property
- String prefix2 = utils.getIndent(2);
+ String prefix2 = getIndent(2);
ElementKind elementKind = member.kind;
bool isGetter = elementKind == ElementKind.GETTER;
bool isSetter = elementKind == ElementKind.SETTER;
@@ -318,9 +342,8 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
writeln('@override');
write(prefix);
// return type
- // REVIEW: Added groupId
- bool shouldReturn = writeType(member.type.returnType,
- groupName: DartEditBuilder.RETURN_TYPE_GROUP_ID);
+ bool shouldReturn =
+ writeType(member.type.returnType, groupName: returnTypeGroupName);
write(' ');
if (isGetter) {
write(Keyword.GET.syntax);
@@ -484,6 +507,31 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
return false;
}
+ @override
+ void writeTypeParameter(TypeParameterElement typeParameter) {
+ write(typeParameter.name);
+ if (typeParameter.bound != null) {
+ write(' extends ');
+ writeType(typeParameter.bound);
+ }
+ }
+
+ @override
+ void writeTypeParameters(List<TypeParameterElement> typeParameters) {
+ if (typeParameters.isNotEmpty) {
+ write('<');
+ bool isFirst = true;
+ for (TypeParameterElement typeParameter in typeParameters) {
+ if (!isFirst) {
+ write(', ');
+ }
+ isFirst = false;
+ writeTypeParameter(typeParameter);
+ }
+ write('>');
+ }
+ }
+
/**
* Write the code for a comma-separated list of [types], optionally prefixed
* by a [prefix]. If the list of [types] is `null` or does not return any
@@ -591,6 +639,17 @@ class DartFileEditBuilderImpl extends FileEditBuilderImpl
}
@override
+ void finalize() {
+ addLibraryImports(
+ changeBuilder.sourceChange, unit.element.library, librariesToImport);
+ }
+
+ @override
+ void importLibraries(Iterable<Source> libraries) {
+ librariesToImport.addAll(libraries);
+ }
+
+ @override
void replaceTypeWithFuture(
TypeAnnotation typeAnnotation, TypeProvider typeProvider) {
InterfaceType futureType = typeProvider.futureType;
« no previous file with comments | « pkg/analysis_server/lib/src/utilities/change_builder_core.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698