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

Unified Diff: pkg/analysis_server/lib/src/services/refactoring/inline_method.dart

Issue 1629533003: Issue 25404. 'Inline Method' should update implicit 'this' and class references. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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/refactoring/inline_method.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
index 3b3c786abc9ec89cd13571f00ca36916d7d34808..4b6140cbb1620a7781bb7351037ecaf0969c05e8 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/inline_method.dart
@@ -102,7 +102,7 @@ String _getMethodSourceForInvocation(
}
});
// replace static field "qualifier" with invocation target
- part._staticFieldOffsets.forEach((String className, List<int> offsets) {
+ part._implicitClassNameOffsets.forEach((String className, List<int> offsets) {
for (int offset in offsets) {
// edits.add(newSourceEdit_range(range, className + '.'));
edits.add(new SourceEdit(offset, 0, className + '.'));
@@ -682,9 +682,9 @@ class _SourcePart {
final List<int> _implicitThisOffsets = [];
/**
- * The offsets of the implicit class references in static field references.
+ * The offsets of the implicit class references in static member references.
*/
- final Map<String, List<int>> _staticFieldOffsets = {};
+ final Map<String, List<int>> _implicitClassNameOffsets = {};
_SourcePart(this._base, this._source, this._prefix);
@@ -692,6 +692,15 @@ class _SourcePart {
_explicitThisOffsets.add(offset - _base);
}
+ void addImplicitClassNameOffset(String className, int offset) {
+ List<int> offsets = _implicitClassNameOffsets[className];
+ if (offsets == null) {
+ offsets = [];
+ _implicitClassNameOffsets[className] = offsets;
+ }
+ offsets.add(offset - _base);
+ }
+
void addImplicitThisOffset(int offset) {
_implicitThisOffsets.add(offset - _base);
}
@@ -709,15 +718,6 @@ class _SourcePart {
}
}
- void addStaticFieldOffset(String className, int offset) {
- List<int> offsets = _staticFieldOffsets[className];
- if (offsets == null) {
- offsets = [];
- _staticFieldOffsets[className] = offsets;
- }
- offsets.add(offset - _base);
- }
-
void addVariable(VariableElement element, SourceRange range) {
List<SourceRange> ranges = _variables[element];
if (ranges == null) {
@@ -765,7 +765,7 @@ class _VariablesVisitor extends GeneralizingAstVisitor {
visitSimpleIdentifier(SimpleIdentifier node) {
SourceRange nodeRange = rangeNode(node);
if (bodyRange.covers(nodeRange)) {
- _addInstanceFieldQualifier(node);
+ _addMemberQualifier(node);
_addParameter(node);
_addVariable(node);
}
@@ -779,19 +779,28 @@ class _VariablesVisitor extends GeneralizingAstVisitor {
}
}
- void _addInstanceFieldQualifier(SimpleIdentifier node) {
- PropertyAccessorElement accessor = getPropertyAccessorElement(node);
- if (isFieldAccessorElement(accessor)) {
- AstNode qualifier = getNodeQualifier(node);
- if (qualifier == null) {
- int offset = node.offset;
- if (accessor.isStatic) {
- String className = accessor.enclosingElement.displayName;
- result.addStaticFieldOffset(className, offset);
- } else {
- result.addImplicitThisOffset(offset);
- }
- }
+ void _addMemberQualifier(SimpleIdentifier node) {
+ // should be unqualified
+ AstNode qualifier = getNodeQualifier(node);
+ if (qualifier != null) {
+ return;
+ }
+ // should be a method or field reference
+ Element element = node.staticElement;
+ if (!(element is MethodElement || element is PropertyAccessorElement)) {
+ return;
+ }
+ if (element.enclosingElement is! ClassElement) {
+ return;
+ }
+ // record the implicit static or instance reference
+ ExecutableElement member = element;
+ int offset = node.offset;
+ if (member.isStatic) {
+ String className = member.enclosingElement.displayName;
+ result.addImplicitClassNameOffset(className, offset);
+ } else {
+ result.addImplicitThisOffset(offset);
}
}

Powered by Google App Engine
This is Rietveld 408576698