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

Unified Diff: pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart

Issue 2916923002: Update a few more methods in FixProcessor, and fix some bugs in ChangeBuilder (Closed)
Patch Set: Created 3 years, 7 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/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 7100c76c47292de336d81ffcf4effb1eb0e8ab7d..fd05cca29dc50ccec8456521162f8a6a766f93ee 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
@@ -219,8 +219,9 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
write(' ');
}
if (returnType != null) {
- writeType(returnType, groupName: returnTypeGroupName);
- write(' ');
+ if (writeType(returnType, groupName: returnTypeGroupName)) {
+ write(' ');
+ }
}
if (nameGroupName != null) {
addLinkedEdit(nameGroupName, (LinkedEditBuilder builder) {
@@ -258,8 +259,9 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
write(' ');
}
if (returnType != null && !returnType.isDynamic) {
- writeType(returnType, groupName: returnTypeGroupName);
- write(' ');
+ if (writeType(returnType, groupName: returnTypeGroupName)) {
+ write(' ');
+ }
}
write(Keyword.GET.lexeme);
write(' ');
@@ -296,7 +298,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
if (type != null) {
if (!typeRequired) {
- // The type is required unless we're written a keyword.
+ // The type is required unless we've written a keyword.
write(' ');
}
writeType(type, groupName: typeGroupName);
@@ -339,9 +341,11 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
writeln('@override');
write(prefix);
// return type
- bool shouldReturn =
- writeType(member.type.returnType, groupName: returnTypeGroupName);
- write(' ');
+ bool shouldReturn = writeType(member.type.returnType,
+ groupName: returnTypeGroupName, methodBeingCopied: member);
+ if (shouldReturn) {
+ write(' ');
+ }
if (isGetter) {
write(Keyword.GET.lexeme);
write(' ');
@@ -359,7 +363,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
writeln(' => null;');
} else {
List<ParameterElement> parameters = member.parameters;
- writeParameters(parameters);
+ writeParameters(parameters, methodBeingCopied: member);
writeln(' {');
// TO-DO
write(prefix2);
@@ -399,7 +403,8 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
@override
- void writeParameters(Iterable<ParameterElement> parameters) {
+ void writeParameters(Iterable<ParameterElement> parameters,
+ {ExecutableElement methodBeingCopied}) {
write('(');
bool sawNamed = false;
bool sawPositional = false;
@@ -423,7 +428,8 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
}
// parameter
- writeParameterSource(parameter.type, parameter.name);
+ writeParameterSource(parameter.type, parameter.name,
+ methodBeingCopied: methodBeingCopied);
// default value
String defaultCode = parameter.defaultValueCode;
if (defaultCode != null) {
@@ -469,11 +475,13 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
@override
- void writeParameterSource(DartType type, String name) {
+ void writeParameterSource(DartType type, String name,
+ {ExecutableElement methodBeingCopied}) {
_EnclosingElementFinder finder = new _EnclosingElementFinder();
finder.find(dartFileEditBuilder.unit, offset);
String parameterSource = _getParameterSource(
- type, name, finder.enclosingClass, finder.enclosingExecutable);
+ type, name, finder.enclosingClass, finder.enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
write(parameterSource);
}
@@ -481,12 +489,14 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
bool writeType(DartType type,
{bool addSupertypeProposals: false,
String groupName,
+ ExecutableElement methodBeingCopied,
bool required: false}) {
if (type != null && !type.isDynamic) {
_EnclosingElementFinder finder = new _EnclosingElementFinder();
finder.find(dartFileEditBuilder.unit, offset);
String typeSource = _getTypeSource(
- type, finder.enclosingClass, finder.enclosingExecutable);
+ type, finder.enclosingClass, finder.enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
if (typeSource != 'dynamic') {
if (groupName != null) {
addLinkedEdit(groupName, (LinkedEditBuilder builder) {
@@ -535,7 +545,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
/**
* 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
+ * by a [prefix]. If the list of [types] is `null` or does not contain any
* types, then nothing will be written.
*/
void writeTypes(Iterable<DartType> types, {String prefix}) {
@@ -749,7 +759,8 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
* Return the source for the parameter with the given [type] and [name].
*/
String _getParameterSource(DartType type, String name,
- ClassElement enclosingClass, ExecutableElement enclosingExecutable) {
+ ClassElement enclosingClass, ExecutableElement enclosingExecutable,
+ {ExecutableElement methodBeingCopied}) {
// no type
if (type == null || type.isDynamic) {
return name;
@@ -757,36 +768,43 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
// function type
if (type is FunctionType && type.element.isSynthetic) {
FunctionType functionType = type;
- StringBuffer sb = new StringBuffer();
+ StringBuffer buffer = new StringBuffer();
// return type
DartType returnType = functionType.returnType;
if (returnType != null && !returnType.isDynamic) {
- String returnTypeSource =
- _getTypeSource(returnType, enclosingClass, enclosingExecutable);
- sb.write(returnTypeSource);
- sb.write(' ');
+ String returnTypeSource = _getTypeSource(
+ returnType, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
+ if (returnTypeSource.isNotEmpty) {
+ buffer.write(returnTypeSource);
+ buffer.write(' ');
+ }
}
// parameter name
- sb.write(name);
+ buffer.write(name);
// parameters
- sb.write('(');
+ buffer.write('(');
List<ParameterElement> fParameters = functionType.parameters;
for (int i = 0; i < fParameters.length; i++) {
ParameterElement fParameter = fParameters[i];
if (i != 0) {
- sb.write(", ");
+ buffer.write(", ");
}
- sb.write(_getParameterSource(fParameter.type, fParameter.name,
+ buffer.write(_getParameterSource(fParameter.type, fParameter.name,
enclosingClass, enclosingExecutable));
}
- sb.write(')');
+ buffer.write(')');
// done
- return sb.toString();
+ return buffer.toString();
}
// simple type
- String typeSource =
- _getTypeSource(type, enclosingClass, enclosingExecutable);
- return '$typeSource $name';
+ String typeSource = _getTypeSource(
+ type, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
+ if (typeSource.isNotEmpty) {
+ return '$typeSource $name';
+ }
+ return name;
}
/**
@@ -797,21 +815,23 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
*/
String _getTypeSource(DartType type, ClassElement enclosingClass,
ExecutableElement enclosingExecutable,
- {StringBuffer parametersBuffer}) {
- StringBuffer sb = new StringBuffer();
+ {ExecutableElement methodBeingCopied, StringBuffer parametersBuffer}) {
+ StringBuffer buffer = new StringBuffer();
// type parameter
- if (!_isTypeVisible(type, enclosingClass, enclosingExecutable)) {
+ if (!_isTypeVisible(type, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied)) {
return 'dynamic';
}
// just a Function, not FunctionTypeAliasElement
if (type is FunctionType && type.element is! FunctionTypeAliasElement) {
if (parametersBuffer == null) {
- return "Function";
+ return 'Function';
}
parametersBuffer.write('(');
for (ParameterElement parameter in type.parameters) {
- String parameterType =
- _getTypeSource(parameter.type, enclosingClass, enclosingExecutable);
+ String parameterType = _getTypeSource(
+ parameter.type, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
if (parametersBuffer.length != 1) {
parametersBuffer.write(', ');
}
@@ -821,7 +841,8 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
parametersBuffer.write(')');
return _getTypeSource(
- type.returnType, enclosingClass, enclosingExecutable);
+ type.returnType, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
}
// <Bottom>, Null
if (type.isBottom || type.isDartCoreNull) {
@@ -841,15 +862,15 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
if (definingLibrary != null && definingLibrary != importingLibrary) {
// no source, if private
if (element.isPrivate) {
- return null;
+ return '';
}
// ensure import
ImportElement importElement =
_getImportElement(element, importingLibrary);
if (importElement != null) {
if (importElement.prefix != null) {
- sb.write(importElement.prefix.displayName);
- sb.write(".");
+ buffer.write(importElement.prefix.displayName);
+ buffer.write(".");
}
} else {
importLibrary(definingLibrary.source);
@@ -857,7 +878,7 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
}
// append simple name
String name = element.displayName;
- sb.write(name);
+ buffer.write(name);
// may be type arguments
if (type is ParameterizedType) {
List<DartType> arguments = type.typeArguments;
@@ -867,29 +888,31 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
for (DartType argument in arguments) {
hasArguments = hasArguments || !argument.isDynamic;
allArgumentsVisible = allArgumentsVisible &&
- _isTypeVisible(argument, enclosingClass, enclosingExecutable);
+ _isTypeVisible(argument, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
}
// append type arguments
if (hasArguments && allArgumentsVisible) {
- sb.write("<");
+ buffer.write("<");
for (int i = 0; i < arguments.length; i++) {
DartType argument = arguments[i];
if (i != 0) {
- sb.write(", ");
+ buffer.write(", ");
}
- String argumentSrc =
- _getTypeSource(argument, enclosingClass, enclosingExecutable);
+ String argumentSrc = _getTypeSource(
+ argument, enclosingClass, enclosingExecutable,
+ methodBeingCopied: methodBeingCopied);
if (argumentSrc != null) {
- sb.write(argumentSrc);
+ buffer.write(argumentSrc);
} else {
return null;
}
}
- sb.write(">");
+ buffer.write(">");
}
}
// done
- return sb.toString();
+ return buffer.toString();
}
/**
@@ -936,15 +959,17 @@ class DartEditBuilderImpl extends EditBuilderImpl implements DartEditBuilder {
* [enclosingClass].
*/
bool _isTypeVisible(DartType type, ClassElement enclosingClass,
- ExecutableElement enclosingExecutable) {
+ ExecutableElement enclosingExecutable,
+ {ExecutableElement methodBeingCopied}) {
if (type is TypeParameterType) {
TypeParameterElement parameterElement = type.element;
Element parameterParent = parameterElement.enclosingElement;
// TODO(brianwilkerson) This needs to compare the parameterParent with
// each of the parents of the enclosingElement. (That means that we only
// need the most closely enclosing element.)
- return identical(parameterParent, enclosingExecutable) ||
- identical(parameterParent, enclosingClass);
+ return parameterParent == enclosingExecutable ||
+ parameterParent == enclosingClass ||
+ parameterParent == methodBeingCopied;
}
return true;
}

Powered by Google App Engine
This is Rietveld 408576698