Use ChangeWorkspace to limit where DartChangeBuilder(s) can edit.
R=brianwilkerson@google.com
Bug: https://github.com/dart-lang/sdk/issues/35402
Change-Id: If5f78b44b69f01d9ddc235401f70cc4aefd3ca37
Reviewed-on: https://dart-review.googlesource.com/c/87382
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
index f338cc5..08fe4f3 100644
--- a/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
+++ b/pkg/analysis_server/lib/plugin/edit/assist/assist_dart.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
/**
* An object used to provide context information for Dart assist contributors.
@@ -24,4 +25,9 @@
* The start of the selection.
*/
int get selectionOffset;
+
+ /**
+ * The workspace in which the fix contributor operates.
+ */
+ ChangeWorkspace get workspace;
}
diff --git a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart b/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
index 2ac36c5..1d115fa 100644
--- a/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
+++ b/pkg/analysis_server/lib/plugin/edit/fix/fix_dart.dart
@@ -4,6 +4,7 @@
import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
/**
* An object used to provide context information for [DartFixContributor]s.
@@ -15,4 +16,9 @@
* The resolution result in which fix operates.
*/
ResolvedUnitResult get resolveResult;
+
+ /**
+ * The workspace in which the fix contributor operates.
+ */
+ ChangeWorkspace get workspace;
}
diff --git a/pkg/analysis_server/lib/src/analysis_server_abstract.dart b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
index 247d137..8a5b5fd 100644
--- a/pkg/analysis_server/lib/src/analysis_server_abstract.dart
+++ b/pkg/analysis_server/lib/src/analysis_server_abstract.dart
@@ -9,6 +9,7 @@
import 'package:analysis_server/src/services/correction/namespace.dart';
import 'package:analysis_server/src/services/search/element_visitors.dart';
import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/exception/exception.dart';
@@ -73,6 +74,11 @@
return _analyzedFilesGlobs;
}
+ /// The list of current analysis sessions in all contexts.
+ List<AnalysisSession> get currentSessions {
+ return driverMap.values.map((driver) => driver.currentSession).toList();
+ }
+
/// A table mapping [Folder]s to the [AnalysisDriver]s associated with them.
Map<Folder, nd.AnalysisDriver> get driverMap => contextManager.driverMap;
diff --git a/pkg/analysis_server/lib/src/edit/edit_dartfix.dart b/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
index b53afae..073e434 100644
--- a/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_dartfix.dart
@@ -8,6 +8,7 @@
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/edit/fix/prefer_int_literals_fix.dart';
import 'package:analysis_server/src/edit/fix/prefer_mixin_fix.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analyzer/dart/analysis/results.dart';
@@ -212,7 +213,8 @@
return false;
}
- final dartContext = new DartFixContextImpl(result, error);
+ final workspace = DartChangeWorkspace(server.currentSessions);
+ final dartContext = new DartFixContextImpl(workspace, result, error);
final processor = new FixProcessor(dartContext);
Fix fix = await processor.computeFix();
final location = locationFor(result, error.offset, error.length);
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index fbf18b4..730c071 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -19,6 +19,7 @@
import 'package:analysis_server/src/services/completion/statement/statement_completion.dart';
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analysis_server/src/services/correction/organize_directives.dart';
@@ -183,7 +184,12 @@
//
ResolvedUnitResult result = await server.getResolvedUnit(file);
if (result != null) {
- var context = new DartAssistContextImpl(result, offset, length);
+ var context = new DartAssistContextImpl(
+ DartChangeWorkspace(server.currentSessions),
+ result,
+ offset,
+ length,
+ );
try {
AssistProcessor processor = new AssistProcessor(context);
List<Assist> assists = await processor.compute();
@@ -528,7 +534,8 @@
for (engine.AnalysisError error in result.errors) {
int errorLine = lineInfo.getLocation(error.offset).lineNumber;
if (errorLine == requestLine) {
- var context = new DartFixContextImpl(result, error);
+ var workspace = DartChangeWorkspace(server.currentSessions);
+ var context = new DartFixContextImpl(workspace, result, error);
List<Fix> fixes =
await new DartFixContributor().computeFixes(context);
if (fixes.isNotEmpty) {
diff --git a/pkg/analysis_server/lib/src/edit/fix/prefer_int_literals_fix.dart b/pkg/analysis_server/lib/src/edit/fix/prefer_int_literals_fix.dart
index fa2ba99..619cad3 100644
--- a/pkg/analysis_server/lib/src/edit/fix/prefer_int_literals_fix.dart
+++ b/pkg/analysis_server/lib/src/edit/fix/prefer_int_literals_fix.dart
@@ -6,6 +6,7 @@
import 'package:analysis_server/src/edit/edit_dartfix.dart';
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/error/error.dart';
@@ -20,7 +21,12 @@
while (literalsToConvert.isNotEmpty) {
DoubleLiteral literal = literalsToConvert.removeLast();
AssistProcessor processor = new AssistProcessor(
- new DartAssistContextImpl(result, literal.offset, 0),
+ new DartAssistContextImpl(
+ DartChangeWorkspace(dartFix.server.currentSessions),
+ result,
+ literal.offset,
+ 0,
+ ),
);
List<Assist> assists =
await processor.computeAssist(DartAssistKind.CONVERT_TO_INT_LITERAL);
diff --git a/pkg/analysis_server/lib/src/edit/fix/prefer_mixin_fix.dart b/pkg/analysis_server/lib/src/edit/fix/prefer_mixin_fix.dart
index c929ff1..7f66a47 100644
--- a/pkg/analysis_server/lib/src/edit/fix/prefer_mixin_fix.dart
+++ b/pkg/analysis_server/lib/src/edit/fix/prefer_mixin_fix.dart
@@ -6,6 +6,7 @@
import 'package:analysis_server/src/edit/edit_dartfix.dart';
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
@@ -37,7 +38,11 @@
if (declaration is ClassOrMixinDeclaration &&
declaration.name.name == elem.name) {
AssistProcessor processor = new AssistProcessor(
- new DartAssistContextImpl(result, declaration.name.offset, 0),
+ new DartAssistContextImpl(
+ DartChangeWorkspace(dartFix.server.currentSessions),
+ result,
+ declaration.name.offset,
+ 0),
);
List<Assist> assists = await processor
.computeAssist(DartAssistKind.CONVERT_CLASS_TO_MIXIN);
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
index b4b5dc0..7b00028 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_code_actions.dart
@@ -17,6 +17,7 @@
import 'package:analysis_server/src/protocol_server.dart' show SourceChange;
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analyzer/dart/analysis/results.dart';
@@ -128,7 +129,12 @@
}
try {
- var context = new DartAssistContextImpl(unit, offset, length);
+ var context = new DartAssistContextImpl(
+ DartChangeWorkspace(server.currentSessions),
+ unit,
+ offset,
+ length,
+ );
final processor = new AssistProcessor(context);
final assists = await processor.compute();
assists.sort(Assist.SORT_BY_RELEVANCE);
@@ -184,7 +190,8 @@
// Server lineNumber is one-based so subtract one.
int errorLine = lineInfo.getLocation(error.offset).lineNumber - 1;
if (errorLine >= range.start.line && errorLine <= range.end.line) {
- var context = new DartFixContextImpl(unit, error);
+ var workspace = DartChangeWorkspace(server.currentSessions);
+ var context = new DartFixContextImpl(workspace, unit, error);
final fixes = await fixContributor.computeFixes(context);
if (fixes.isNotEmpty) {
fixes.sort(Fix.SORT_BY_RELEVANCE);
diff --git a/pkg/analysis_server/lib/src/services/correction/assist.dart b/pkg/analysis_server/lib/src/services/correction/assist.dart
index 0d09721..08a56a1 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist.dart
@@ -5,12 +5,16 @@
import 'package:analysis_server/plugin/edit/assist/assist_dart.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
/**
* The implementation of [DartAssistContext].
*/
class DartAssistContextImpl implements DartAssistContext {
@override
+ final ChangeWorkspace workspace;
+
+ @override
final ResolvedUnitResult resolveResult;
@override
@@ -19,8 +23,8 @@
@override
final int selectionLength;
- DartAssistContextImpl(
- this.resolveResult, this.selectionOffset, this.selectionLength);
+ DartAssistContextImpl(this.workspace, this.resolveResult,
+ this.selectionOffset, this.selectionLength);
}
/**
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 0f9124d..05e9455 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -27,6 +27,7 @@
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' hide Element;
+import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart'
hide AssistContributor;
import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
@@ -3353,8 +3354,7 @@
}
DartChangeBuilder _newDartChangeBuilder() {
- DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
- return changeBuilder;
+ return new DartChangeBuilderImpl.forWorkspace(context.workspace);
}
bool _setupCompute() {
diff --git a/pkg/analysis_server/lib/src/services/correction/change_workspace.dart b/pkg/analysis_server/lib/src/services/correction/change_workspace.dart
new file mode 100644
index 0000000..b7a2a23
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/correction/change_workspace.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
+
+/// [ChangeWorkspace] based on sessions.
+class DartChangeWorkspace implements ChangeWorkspace {
+ final List<AnalysisSession> sessions;
+
+ DartChangeWorkspace(this.sessions);
+
+ @override
+ bool containsFile(String path) {
+ for (var session in sessions) {
+ if (session.analysisContext.contextRoot.isAnalyzed(path)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @override
+ AnalysisSession getSession(String path) {
+ for (var session in sessions) {
+ if (session.analysisContext.contextRoot.isAnalyzed(path)) {
+ return session;
+ }
+ }
+ throw StateError('Not in a context root: $path');
+ }
+}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index 796ae49..4487fbc 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -8,6 +8,7 @@
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/parser.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
/**
@@ -88,16 +89,15 @@
*/
class DartFixContextImpl implements DartFixContext {
@override
+ final ChangeWorkspace workspace;
+
+ @override
final ResolvedUnitResult resolveResult;
@override
final AnalysisError error;
- DartFixContextImpl(this.resolveResult, this.error);
-
- DartFixContextImpl.from(DartFixContext other)
- : resolveResult = other.resolveResult,
- error = other.error;
+ DartFixContextImpl(this.workspace, this.resolveResult, this.error);
}
/**
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 55c429c..150fb99 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -43,6 +43,7 @@
import 'package:analyzer/src/hint/sdk_constraint_extractor.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
hide AnalysisError, Element, ElementKind;
+import 'package:analyzer_plugin/src/utilities/change_builder/change_builder_dart.dart';
import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart' hide FixContributor;
@@ -101,8 +102,8 @@
// one.
// For each fix, put the fix into the HashMap.
for (int i = 0; i < allAnalysisErrors.length; i++) {
- final FixContext fixContextI =
- new DartFixContextImpl(context.resolveResult, allAnalysisErrors[i]);
+ final FixContext fixContextI = new DartFixContextImpl(
+ context.workspace, context.resolveResult, allAnalysisErrors[i]);
final FixProcessor processorI = new FixProcessor(fixContextI);
final List<Fix> fixesListI = await processorI.compute();
for (Fix f in fixesListI) {
@@ -3964,8 +3965,7 @@
}
DartChangeBuilder _newDartChangeBuilder() {
- DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
- return changeBuilder;
+ return new DartChangeBuilderImpl.forWorkspace(context.workspace);
}
/**
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 29146c6..2d94d63 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -4,6 +4,8 @@
import 'dart:async';
+import 'package:analyzer/dart/analysis/analysis_context.dart';
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
@@ -13,7 +15,7 @@
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer/src/dart/analysis/file_state.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart' show AnalysisEngine;
import 'package:analyzer/src/generated/source_io.dart';
import 'package:analyzer/src/test_utilities/mock_sdk.dart';
import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
@@ -44,6 +46,8 @@
class AbstractContextTest with ResourceProviderMixin {
FileContentOverlay fileContentOverlay = new FileContentOverlay();
+
+ AnalysisContextCollection _analysisContextCollection;
AnalysisDriver _driver;
AnalysisDriver get driver => _driver;
@@ -56,7 +60,7 @@
void addFlutterPackage() {
addMetaPackage();
Folder libFolder = configureFlutterPackage(resourceProvider);
- _addTestPackageDependency('flutter', libFolder.parent.path);
+ addTestPackageDependency('flutter', libFolder.parent.path);
}
void addMetaPackage() {
@@ -89,7 +93,7 @@
/// [packageName].
File addPackageFile(String packageName, String pathInLib, String content) {
var packagePath = '/.pub-cache/$packageName';
- _addTestPackageDependency(packageName, packagePath);
+ addTestPackageDependency(packageName, packagePath);
return newFile('$packagePath/lib/$pathInLib', content: content);
}
@@ -101,6 +105,53 @@
return source;
}
+ void addTestPackageDependency(String name, String rootPath) {
+ var packagesFile = getFile('/home/test/.packages');
+ var packagesContent = packagesFile.readAsStringSync();
+
+ // Ignore if there is already the same package dependency.
+ if (packagesContent.contains('$name:file://')) {
+ return;
+ }
+
+ rootPath = convertPath(rootPath);
+ packagesContent += '$name:${toUri('$rootPath/lib')}\n';
+
+ packagesFile.writeAsStringSync(packagesContent);
+
+ createAnalysisContexts();
+ }
+
+ /// Create all analysis contexts in `/home`.
+ void createAnalysisContexts() {
+ _analysisContextCollection = AnalysisContextCollectionImpl(
+ includedPaths: [convertPath('/home')],
+ enableIndex: true,
+ fileContentOverlay: fileContentOverlay,
+ resourceProvider: resourceProvider,
+ sdkPath: convertPath('/sdk'),
+ );
+
+ var testPath = convertPath('/home/test');
+ _driver = getDriver(testPath);
+ }
+
+ /// Return the existing analysis context that should be used to analyze the
+ /// given [path], or throw [StateError] if the [path] is not analyzed in any
+ /// of the created analysis contexts.
+ AnalysisContext getContext(String path) {
+ path = convertPath(path);
+ return _analysisContextCollection.contextFor(path);
+ }
+
+ /// Return the existing analysis driver that should be used to analyze the
+ /// given [path], or throw [StateError] if the [path] is not analyzed in any
+ /// of the created analysis contexts.
+ AnalysisDriver getDriver(String path) {
+ DriverBasedAnalysisContext context = getContext(path);
+ return context.driver;
+ }
+
Future<CompilationUnit> resolveLibraryUnit(Source source) async {
var resolveResult = await session.getResolvedUnit(source.fullName);
return resolveResult.unit;
@@ -116,7 +167,7 @@
test:file:///home/test/lib
''');
- _createDriver();
+ createAnalysisContexts();
}
void setupResourceProvider() {}
@@ -129,38 +180,7 @@
/// Update `/home/test/pubspec.yaml` and create the driver.
void updateTestPubspecFile(String content) {
newFile(testPubspecPath, content: content);
- _createDriver();
- }
-
- void _addTestPackageDependency(String name, String rootPath) {
- var packagesFile = getFile('/home/test/.packages');
- var packagesContent = packagesFile.readAsStringSync();
-
- // Ignore if there is already the same package dependency.
- if (packagesContent.contains('$name:file://')) {
- return;
- }
-
- packagesContent += '$name:${toUri('$rootPath/lib')}\n';
-
- packagesFile.writeAsStringSync(packagesContent);
-
- _createDriver();
- }
-
- void _createDriver() {
- var collection = AnalysisContextCollectionImpl(
- includedPaths: [convertPath('/home')],
- enableIndex: true,
- fileContentOverlay: fileContentOverlay,
- resourceProvider: resourceProvider,
- sdkPath: convertPath('/sdk'),
- );
-
- var testPath = convertPath('/home/test');
- DriverBasedAnalysisContext context = collection.contextFor(testPath);
-
- _driver = context.driver;
+ createAnalysisContexts();
}
}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
index 450bc7e..1ff780c 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/assist_processor.dart
@@ -7,10 +7,12 @@
import 'package:analysis_server/plugin/edit/assist/assist_core.dart';
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
hide AnalysisError;
import 'package:analyzer_plugin/protocol/protocol_common.dart';
import 'package:analyzer_plugin/utilities/assist/assist.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:test/test.dart';
import '../../../../abstract_single_unit.dart';
@@ -26,6 +28,11 @@
/// Return the kind of assist expected by this class.
AssistKind get kind;
+ /// The workspace in which fixes contributor operates.
+ ChangeWorkspace get workspace {
+ return DartChangeWorkspace([session]);
+ }
+
void assertExitPosition({String before, String after}) {
Position exitPosition = _change.selection;
expect(exitPosition, isNotNull);
@@ -142,6 +149,7 @@
Future<List<Assist>> _computeAssists() async {
var context = new DartAssistContextImpl(
+ workspace,
testAnalysisResult,
_offset,
_length,
diff --git a/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart b/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
index 381e803..0dc747a 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/convert_part_of_to_uri_test.dart
@@ -20,11 +20,11 @@
AssistKind get kind => DartAssistKind.CONVERT_PART_OF_TO_URI;
test_nonSibling() async {
- addSource('/pkg/lib/foo.dart', '''
+ addSource('/home/test/lib/foo.dart', '''
library foo;
part 'src/bar.dart';
''');
- testFile = convertPath('/pkg/lib/src/bar.dart');
+ testFile = convertPath('/home/test/lib/src/bar.dart');
await resolveTestUnit('''
part of foo;
''');
@@ -34,11 +34,11 @@
}
test_sibling() async {
- addSource('/pkg/foo.dart', '''
+ addSource('/home/test/lib/foo.dart', '''
library foo;
part 'bar.dart';
''');
- testFile = convertPath('/pkg/bar.dart');
+ testFile = convertPath('/home/test/lib/bar.dart');
await resolveTestUnit('''
part of foo;
''');
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
index 7e4dbdf..b66930d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_parameter_required_test.dart
@@ -2,7 +2,9 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -11,6 +13,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AddMissingParameterRequiredTest);
+ defineReflectiveTests(AddMissingParameterRequiredTest_Workspace);
});
}
@@ -140,3 +143,59 @@
''');
}
}
+
+@reflectiveTest
+class AddMissingParameterRequiredTest_Workspace
+ extends AddMissingParameterRequiredTest {
+ ChangeWorkspace _workspace;
+
+ @override
+ ChangeWorkspace get workspace {
+ return _workspace ?? super.workspace;
+ }
+
+ test_function_inPackage_inWorkspace() async {
+ newFile('/home/aaa/lib/a.dart', content: 'void test() {}');
+ addTestPackageDependency('aaa', '/home/aaa');
+
+ _workspace = DartChangeWorkspace([
+ session,
+ getContext('/home/aaa').currentSession,
+ ]);
+
+ await resolveTestUnit('''
+import 'package:aaa/a.dart';
+
+main() {
+ test(42);
+}
+''');
+
+ await assertHasFix(
+ 'void test(int i) {}',
+ target: '/home/aaa/lib/a.dart',
+ );
+ }
+
+ test_function_inPackage_outsideWorkspace() async {
+ addPackageFile('bbb', 'b.dart', 'void test() {}');
+
+ await resolveTestUnit('''
+import 'package:bbb/b.dart';
+
+main() {
+ test(42);
+}
+''');
+ await assertNoFix();
+ }
+
+ test_method_inSdk() async {
+ await resolveTestUnit('''
+main() {
+ 42.abs(true);
+}
+''');
+ await assertNoFix();
+ }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
index 76cc4ce..e9b5fa2 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/fix_processor.dart
@@ -5,12 +5,14 @@
import 'dart:async';
import 'package:analysis_server/plugin/edit/fix/fix_core.dart';
+import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix_internal.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/src/dart/error/lint_codes.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
hide AnalysisError;
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:test/test.dart';
@@ -54,6 +56,11 @@
/// Return the kind of fixes being tested by this test class.
FixKind get kind;
+ /// The workspace in which fixes contributor operates.
+ ChangeWorkspace get workspace {
+ return DartChangeWorkspace([session]);
+ }
+
Future<void> assertHasFix(String expected,
{bool Function(AnalysisError) errorFilter,
int length,
@@ -213,7 +220,7 @@
/// Computes fixes for the given [error] in [testUnit].
Future<List<Fix>> _computeFixes(AnalysisError error) async {
- var context = new DartFixContextImpl(testAnalysisResult, error);
+ var context = new DartFixContextImpl(workspace, testAnalysisResult, error);
return await new DartFixContributor().computeFixes(context);
}
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
index 2b61d17..298c22c 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_core.dart
@@ -66,6 +66,10 @@
// TODO(brianwilkerson) Determine whether this await is necessary.
await null;
FileEditBuilderImpl builder = await createFileEditBuilder(path);
+ if (builder == null) {
+ return;
+ }
+
buildFileEdit(builder);
if (builder.hasEdits) {
_change.addFileEdit(builder.fileEdit);
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 8a9eba3..d1ab672 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
@@ -21,6 +21,7 @@
import 'package:analyzer_plugin/src/utilities/string_utilities.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_dart.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
import 'package:charcode/ascii.dart';
@@ -30,14 +31,17 @@
class DartChangeBuilderImpl extends ChangeBuilderImpl
implements DartChangeBuilder {
/**
- * The analysis session in which the files being edited were analyzed.
+ * The analysis session in which the files are analyzed and edited.
*/
- final AnalysisSession session;
+ final ChangeWorkspace workspace;
/**
* Initialize a newly created change builder.
*/
- DartChangeBuilderImpl(this.session);
+ DartChangeBuilderImpl(AnalysisSession session)
+ : this.forWorkspace(_SingleSessionWorkspace(session));
+
+ DartChangeBuilderImpl.forWorkspace(this.workspace);
@override
Future<void> addFileEdit(
@@ -54,13 +58,19 @@
Future<DartFileEditBuilderImpl> createFileEditBuilder(String path) async {
// TODO(brianwilkerson) Determine whether this await is necessary.
await null;
+
+ if (!workspace.containsFile(path)) {
+ return null;
+ }
+
+ var session = workspace.getSession(path);
ResolvedUnitResult result = await session.getResolvedUnit(path);
ResultState state = result?.state ?? ResultState.INVALID_FILE_TYPE;
if (state == ResultState.INVALID_FILE_TYPE) {
throw new AnalysisException('Cannot analyze "$path"');
}
int timeStamp = state == ResultState.VALID ? 0 : -1;
- return new DartFileEditBuilderImpl(this, path, timeStamp, result.unit);
+ return DartFileEditBuilderImpl(this, path, timeStamp, session, result.unit);
}
}
@@ -1096,6 +1106,11 @@
class DartFileEditBuilderImpl extends FileEditBuilderImpl
implements DartFileEditBuilder {
/**
+ * The session that analyzed this file.
+ */
+ final AnalysisSession session;
+
+ /**
* The compilation unit to which the code will be added.
*/
final CompilationUnit unit;
@@ -1122,7 +1137,7 @@
* the given [path] and [timeStamp], and the given fully resolved [unit].
*/
DartFileEditBuilderImpl(DartChangeBuilderImpl changeBuilder, String path,
- int timeStamp, this.unit)
+ int timeStamp, this.session, this.unit)
: libraryElement = unit.declaredElement.library,
super(changeBuilder, path, timeStamp);
@@ -1404,7 +1419,6 @@
*/
String _getLibraryUriText(Uri what) {
if (what.scheme == 'file') {
- var session = (changeBuilder as DartChangeBuilderImpl).session;
var pathContext = session.resourceProvider.pathContext;
String whatPath = pathContext.fromUri(what);
String libraryPath = libraryElement.source.fullName;
@@ -1539,3 +1553,24 @@
other.prefix == prefix;
}
}
+
+/// Workspace that wraps a single [AnalysisSession].
+class _SingleSessionWorkspace extends ChangeWorkspace {
+ final AnalysisSession session;
+
+ _SingleSessionWorkspace(this.session);
+
+ @override
+ bool containsFile(String path) {
+ var analysisContext = session.analysisContext;
+ return analysisContext.contextRoot.isAnalyzed(path);
+ }
+
+ @override
+ AnalysisSession getSession(String path) {
+ if (containsFile(path)) {
+ return session;
+ }
+ throw StateError('Not in a context root: $path');
+ }
+}
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
index 90b4794..25932c0 100644
--- a/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_builder_dart.dart
@@ -26,6 +26,8 @@
abstract class DartChangeBuilder implements ChangeBuilder {
/**
* Initialize a newly created change builder.
+ *
+ * TODO(scheglov) Replace this constructor with using workspace.
*/
factory DartChangeBuilder(AnalysisSession session) = DartChangeBuilderImpl;
diff --git a/pkg/analyzer_plugin/lib/utilities/change_builder/change_workspace.dart b/pkg/analyzer_plugin/lib/utilities/change_builder/change_workspace.dart
new file mode 100644
index 0000000..a0f4469
--- /dev/null
+++ b/pkg/analyzer_plugin/lib/utilities/change_builder/change_workspace.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/session.dart';
+
+/// Information about the workspace in which change builders operate.
+abstract class ChangeWorkspace {
+ /// Return `true` if the file with the given [path] is in a context root.
+ bool containsFile(String path);
+
+ /// Return the session that should analyze the given [path], or throw
+ /// [StateError] if the [path] does not belong to a context root.
+ AnalysisSession getSession(String path);
+}
diff --git a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
index 34ec98d..1ed1d1d 100644
--- a/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
+++ b/pkg/analyzer_plugin/test/src/utilities/change_builder/change_builder_dart_test.dart
@@ -63,7 +63,7 @@
class DartChangeBuilderImplTest extends AbstractContextTest
with BuilderTestMixin {
test_createFileEditBuilder() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'library test;');
DartChangeBuilderImpl builder = newBuilder();
DartFileEditBuilderImpl fileEditBuilder =
@@ -390,7 +390,7 @@
}
test_writeClassDeclaration_interfaces() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {}');
DartType typeA = await _getType(path, 'A');
@@ -407,7 +407,7 @@
}
test_writeClassDeclaration_isAbstract() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '');
DartChangeBuilderImpl builder = newBuilder();
@@ -422,7 +422,7 @@
}
test_writeClassDeclaration_memberWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '');
DartChangeBuilderImpl builder = newBuilder();
@@ -439,7 +439,7 @@
}
test_writeClassDeclaration_mixins_noSuperclass() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {}');
DartType typeA = await _getType(path, 'A');
@@ -456,7 +456,7 @@
}
test_writeClassDeclaration_mixins_superclass() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {} class B {}');
DartType typeA = await _getType(path, 'A');
DartType typeB = await _getType(path, 'B');
@@ -474,7 +474,7 @@
}
test_writeClassDeclaration_nameGroupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '');
DartChangeBuilderImpl builder = newBuilder();
@@ -496,7 +496,7 @@
}
test_writeClassDeclaration_superclass() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class B {}');
DartType typeB = await _getType(path, 'B');
@@ -519,7 +519,7 @@
}
test_writeConstructorDeclaration_bodyWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class C {}');
DartChangeBuilderImpl builder = newBuilder();
@@ -535,7 +535,7 @@
}
test_writeConstructorDeclaration_fieldNames() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, r'''
class C {
final int a;
@@ -554,7 +554,7 @@
}
test_writeConstructorDeclaration_initializerWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class C {}');
DartChangeBuilderImpl builder = newBuilder();
@@ -570,7 +570,7 @@
}
test_writeConstructorDeclaration_parameterWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class C {}');
DartChangeBuilderImpl builder = newBuilder();
@@ -586,7 +586,7 @@
}
test_writeFieldDeclaration_initializerWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -604,7 +604,7 @@
}
test_writeFieldDeclaration_isConst() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -619,7 +619,7 @@
}
test_writeFieldDeclaration_isConst_isFinal() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -635,7 +635,7 @@
}
test_writeFieldDeclaration_isConst_type() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -652,7 +652,7 @@
}
test_writeFieldDeclaration_isFinal() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -667,7 +667,7 @@
}
test_writeFieldDeclaration_isFinal_type() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -684,7 +684,7 @@
}
test_writeFieldDeclaration_isStatic() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -699,7 +699,7 @@
}
test_writeFieldDeclaration_nameGroupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -724,7 +724,7 @@
}
test_writeFieldDeclaration_type_typeGroupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -750,7 +750,7 @@
}
test_writeFunctionDeclaration_noReturnType_noParams_body() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '';
addSource(path, content);
@@ -768,7 +768,7 @@
}
test_writeFunctionDeclaration_noReturnType_noParams_noBody() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '';
addSource(path, content);
@@ -791,7 +791,7 @@
}
test_writeFunctionDeclaration_noReturnType_params_noBody() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '';
addSource(path, content);
@@ -809,7 +809,7 @@
}
test_writeFunctionDeclaration_returnType_noParams_noBody() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -834,7 +834,7 @@
}
test_writeGetterDeclaration_bodyWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -852,7 +852,7 @@
}
test_writeGetterDeclaration_isStatic() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -868,7 +868,7 @@
}
test_writeGetterDeclaration_nameGroupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -893,7 +893,7 @@
}
test_writeGetterDeclaration_returnType() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -919,7 +919,7 @@
}
test_writeLocalVariableDeclaration_noType_initializer() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -941,7 +941,7 @@
}
test_writeLocalVariableDeclaration_noType_noInitializer() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -968,7 +968,7 @@
}
test_writeLocalVariableDeclaration_noType_noInitializer_const() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -988,7 +988,7 @@
}
test_writeLocalVariableDeclaration_noType_noInitializer_final() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -1008,7 +1008,7 @@
}
test_writeLocalVariableDeclaration_type_initializer() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -1033,7 +1033,7 @@
}
test_writeLocalVariableDeclaration_type_noInitializer() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -1063,7 +1063,7 @@
}
test_writeLocalVariableDeclaration_type_noInitializer_final() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
void f() {
@@ -1093,7 +1093,7 @@
}
test_writeMixinDeclaration_interfaces() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {}');
DartType typeA = await _getType(path, 'A');
@@ -1110,7 +1110,7 @@
}
test_writeMixinDeclaration_interfacesAndSuperclassConstraints() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {} class B {}');
DartType typeA = await _getType(path, 'A');
DartType typeB = await _getType(path, 'B');
@@ -1128,7 +1128,7 @@
}
test_writeMixinDeclaration_memberWriter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '');
DartChangeBuilderImpl builder = newBuilder();
@@ -1145,7 +1145,7 @@
}
test_writeMixinDeclaration_nameGroupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '');
DartChangeBuilderImpl builder = newBuilder();
@@ -1167,7 +1167,7 @@
}
test_writeMixinDeclaration_superclassConstraints() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'class A {}');
DartType typeA = await _getType(path, 'A');
@@ -1641,7 +1641,7 @@
}
test_writeParameter() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -1656,7 +1656,7 @@
}
test_writeParameter_type() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -1672,7 +1672,7 @@
}
test_writeParameterMatchingArgument() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = r'''
f() {}
g() {
@@ -1701,7 +1701,7 @@
}
test_writeParameters_named() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'f(int a, {bool b = false, String c}) {}';
addSource(path, content);
@@ -1723,7 +1723,7 @@
}
test_writeParameters_positional() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'f(int a, [bool b = false, String c]) {}';
addSource(path, content);
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -1744,7 +1744,7 @@
}
test_writeParameters_required() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'f(int i, String s) {}';
addSource(path, content);
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -1764,7 +1764,7 @@
}
test_writeParametersMatchingArguments_named() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
f(int i, String s) {
g(s, index: i);
@@ -1789,7 +1789,7 @@
}
test_writeParametersMatchingArguments_required() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '''
f(int i, String s) {
g(s, i);
@@ -1821,7 +1821,7 @@
}
''');
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = r'''
import 'a.dart';
''';
@@ -1841,10 +1841,10 @@
}
test_writeReference_topLevel_hasImport_noPrefix() async {
- String aPath = convertPath('/a.dart');
+ String aPath = convertPath('/home/test/lib/a.dart');
addSource(aPath, 'const a = 42;');
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = r'''
import 'a.dart';
''';
@@ -1863,10 +1863,10 @@
}
test_writeReference_topLevel_hasImport_prefix() async {
- String aPath = convertPath('/a.dart');
+ String aPath = convertPath('/home/test/lib/a.dart');
addSource(aPath, 'const a = 42;');
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = r'''
import 'a.dart' as p;
''';
@@ -1885,10 +1885,10 @@
}
test_writeReference_topLevel_noImport() async {
- String aPath = convertPath('/a.dart');
+ String aPath = convertPath('/home/test/bin/a.dart');
addSource(aPath, 'const a = 42;');
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/bin/test.dart');
String content = '';
addSource(path, content);
@@ -1907,7 +1907,7 @@
}
test_writeType_dynamic() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -1953,7 +1953,7 @@
}
test_writeType_genericType() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B<E> {}';
addSource(path, content);
InterfaceType typeA = await _getType(path, 'A');
@@ -1970,7 +1970,7 @@
}
test_writeType_groupName() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B extends A {} class C extends B {}';
addSource(path, content);
DartType typeC = await _getType(path, 'C');
@@ -1992,7 +1992,7 @@
}
test_writeType_groupName_addSupertypeProposals() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B extends A {} class C extends B {}';
addSource(path, content);
DartType typeC = await _getType(path, 'C');
@@ -2025,7 +2025,7 @@
}
test_writeType_groupName_invalidType() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A<T> {}';
addSource(path, content);
@@ -2052,7 +2052,7 @@
}
test_writeType_null() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -2067,8 +2067,8 @@
}
test_writeType_prefixGenerator() async {
- String aPath = convertPath('/a.dart');
- String bPath = convertPath('/b.dart');
+ String aPath = convertPath('/home/test/lib/a.dart');
+ String bPath = convertPath('/home/test/lib/b.dart');
addSource(aPath, r'''
class A1 {}
@@ -2078,7 +2078,7 @@
class B {}
''');
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = '';
addSource(path, content);
@@ -2108,8 +2108,8 @@
expect(edits, hasLength(2));
expect(
edits[0].replacement,
- equalsIgnoringWhitespace(
- "import 'a.dart' as _prefix0; import 'b.dart' as _prefix1;"));
+ equalsIgnoringWhitespace("import 'package:test/a.dart' as _prefix0; "
+ "import 'package:test/b.dart' as _prefix1;"));
expect(
edits[1].replacement,
equalsIgnoringWhitespace(
@@ -2117,7 +2117,7 @@
}
test_writeType_required_dynamic() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -2139,7 +2139,7 @@
}
test_writeType_required_notNull() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -2155,7 +2155,7 @@
}
test_writeType_required_null() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -2170,7 +2170,7 @@
}
test_writeType_simpleType() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -2195,7 +2195,7 @@
}
test_writeTypes_empty() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -2210,7 +2210,7 @@
}
test_writeTypes_noPrefix() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -2227,7 +2227,7 @@
}
test_writeTypes_null() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {}';
addSource(path, content);
@@ -2242,7 +2242,7 @@
}
test_writeTypes_prefix() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = 'class A {} class B {}';
addSource(path, content);
DartType typeA = await _getType(path, 'A');
@@ -2261,7 +2261,7 @@
Future<void> _assertImportLibrary(
String initialCode, List<String> newUris, String expectedCode) async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, initialCode);
DartChangeBuilderImpl builder = newBuilder();
await builder.addFileEdit(path, (DartFileEditBuilder builder) {
@@ -2294,7 +2294,7 @@
String displayText,
SourceRange selection,
}) async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, content);
TypeSystem typeSystem = await session.typeSystem;
@@ -2327,7 +2327,7 @@
}
Future<void> _assertWriteType(String typeCode, {String declarations}) async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
String content = (declarations ?? '') + '$typeCode v;';
addSource(path, content);
@@ -2368,7 +2368,7 @@
}
test_convertFunctionFromSyncToAsync_closure() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '''var f = () {}''');
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -2389,7 +2389,7 @@
}
test_convertFunctionFromSyncToAsync_topLevelFunction() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'String f() {}');
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -2408,7 +2408,7 @@
}
test_createEditBuilder() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'library test;');
DartChangeBuilderImpl builder = newBuilder();
await builder.addFileEdit(path, (FileEditBuilder builder) {
@@ -2425,7 +2425,7 @@
}
test_replaceTypeWithFuture() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, 'String f() {}');
CompilationUnit unit = (await driver.getResult(path))?.unit;
@@ -2446,7 +2446,7 @@
@reflectiveTest
class DartLinkedEditBuilderImplTest extends AbstractContextTest {
test_addSuperTypesAsSuggestions() async {
- String path = convertPath('/test.dart');
+ String path = convertPath('/home/test/lib/test.dart');
addSource(path, '''
class A {}
class B extends A {}