mirror of
https://github.com/dart-lang/sdk
synced 2024-09-18 21:11:19 +00:00
Fix regression for import suggestions
Imports weren't being suggested for implicit source files, for example files from other analysis roots. BUG= R=brianwilkerson@google.com, scheglov@google.com Review URL: https://codereview.chromium.org/1759333002 .
This commit is contained in:
parent
e85ac19134
commit
ae009e0870
|
@ -1528,7 +1528,7 @@ class FixProcessor {
|
|||
}
|
||||
// prepare LibraryElement
|
||||
LibraryElement libraryElement =
|
||||
context.getResult(librarySource, LIBRARY_ELEMENT8);
|
||||
context.getResult(librarySource, LIBRARY_ELEMENT4);
|
||||
if (libraryElement == null) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -64,6 +64,9 @@ class AbstractAnalysisTest {
|
|||
|
||||
AbstractAnalysisTest();
|
||||
|
||||
AnalysisDomainHandler get analysisHandler => server.handlers
|
||||
.singleWhere((handler) => handler is AnalysisDomainHandler);
|
||||
|
||||
void addAnalysisSubscription(AnalysisService service, String file) {
|
||||
// add file to subscription
|
||||
var files = analysisSubscriptions[service];
|
||||
|
@ -143,7 +146,7 @@ class AbstractAnalysisTest {
|
|||
resourceProvider.newFolder(projectPath);
|
||||
Request request =
|
||||
new AnalysisSetAnalysisRootsParams([projectPath], []).toRequest('0');
|
||||
handleSuccessfulRequest(request);
|
||||
handleSuccessfulRequest(request, handler: analysisHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -171,7 +174,8 @@ class AbstractAnalysisTest {
|
|||
/**
|
||||
* Validates that the given [request] is handled successfully.
|
||||
*/
|
||||
Response handleSuccessfulRequest(Request request) {
|
||||
Response handleSuccessfulRequest(Request request, {RequestHandler handler}) {
|
||||
handler ??= this.handler;
|
||||
Response response = handler.handleRequest(request);
|
||||
expect(response, isResponseSuccess(request.id));
|
||||
return response;
|
||||
|
@ -203,8 +207,7 @@ class AbstractAnalysisTest {
|
|||
packageMapProvider = new MockPackageMapProvider();
|
||||
Index index = createIndex();
|
||||
server = createAnalysisServer(index);
|
||||
handler = server.handlers
|
||||
.singleWhere((handler) => handler is AnalysisDomainHandler);
|
||||
handler = analysisHandler;
|
||||
// listen for notifications
|
||||
Stream<Notification> notificationStream =
|
||||
serverChannel.notificationController.stream;
|
||||
|
|
|
@ -27,13 +27,13 @@ class FixesTest extends AbstractAnalysisTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
createProject();
|
||||
ExtensionManager manager = new ExtensionManager();
|
||||
manager.processPlugins([server.serverPlugin]);
|
||||
handler = new EditDomainHandler(server);
|
||||
}
|
||||
|
||||
test_fixUndefinedClass() async {
|
||||
createProject();
|
||||
addTestFile('''
|
||||
main() {
|
||||
Future<String> x = null;
|
||||
|
@ -52,6 +52,7 @@ main() {
|
|||
}
|
||||
|
||||
test_hasFixes() async {
|
||||
createProject();
|
||||
addTestFile('''
|
||||
foo() {
|
||||
print(1)
|
||||
|
@ -77,19 +78,13 @@ bar() {
|
|||
}
|
||||
|
||||
test_overlayOnlyFile() async {
|
||||
// add an overlay-only file
|
||||
{
|
||||
testCode = '''
|
||||
createProject();
|
||||
testCode = '''
|
||||
main() {
|
||||
print(1)
|
||||
print(1)
|
||||
}
|
||||
''';
|
||||
Request request = new AnalysisUpdateContentParams(
|
||||
{testFile: new AddContentOverlay(testCode)}).toRequest('0');
|
||||
Response response =
|
||||
new AnalysisDomainHandler(server).handleRequest(request);
|
||||
expect(response, isResponseSuccess('0'));
|
||||
}
|
||||
_addOverlay(testFile, testCode);
|
||||
// ask for fixes
|
||||
await waitForTasksFinished();
|
||||
List<AnalysisErrorFixes> errorFixes = await _getFixesAt('print(1)');
|
||||
|
@ -97,6 +92,40 @@ main() {
|
|||
_isSyntacticErrorWithSingleFix(errorFixes[0]);
|
||||
}
|
||||
|
||||
test_suggestImportFromDifferentAnalysisRoot() async {
|
||||
// Set up two projects.
|
||||
resourceProvider..newFolder("/project1")..newFolder("/project2");
|
||||
handleSuccessfulRequest(
|
||||
new AnalysisSetAnalysisRootsParams(["/project1", "/project2"], [])
|
||||
.toRequest('0'),
|
||||
handler: analysisHandler);
|
||||
|
||||
// Set up files.
|
||||
testFile = "/project1/main.dart";
|
||||
testCode = "main() { print(new Foo()); }";
|
||||
_addOverlay(testFile, testCode);
|
||||
// Add another file in the same project that imports the target file.
|
||||
// This ensures it will be analyzed as an implicit Source.
|
||||
_addOverlay("/project1/another.dart", 'import "../project2/target.dart";');
|
||||
_addOverlay("/project2/target.dart", "class Foo() {}");
|
||||
|
||||
await waitForTasksFinished();
|
||||
|
||||
List<String> fixes = (await _getFixesAt('Foo()'))
|
||||
.single
|
||||
.fixes
|
||||
.map((f) => f.message)
|
||||
.toList();
|
||||
expect(fixes, contains("Import library '../project2/target.dart'"));
|
||||
}
|
||||
|
||||
void _addOverlay(String name, String contents) {
|
||||
Request request =
|
||||
new AnalysisUpdateContentParams({name: new AddContentOverlay(contents)})
|
||||
.toRequest('0');
|
||||
handleSuccessfulRequest(request, handler: analysisHandler);
|
||||
}
|
||||
|
||||
Future<List<AnalysisErrorFixes>> _getFixes(int offset) async {
|
||||
Request request = new EditGetFixesParams(testFile, offset).toRequest('0');
|
||||
Response response = await waitResponse(request);
|
||||
|
|
|
@ -94,8 +94,8 @@ class AbstractSearchDomainTest extends AbstractAnalysisTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
server.handlers = [new SearchDomainHandler(server),];
|
||||
createProject();
|
||||
server.handlers = [new SearchDomainHandler(server),];
|
||||
}
|
||||
|
||||
Future waitForSearchResults() {
|
||||
|
|
|
@ -33,8 +33,8 @@ class GetTypeHierarchyTest extends AbstractAnalysisTest {
|
|||
@override
|
||||
void setUp() {
|
||||
super.setUp();
|
||||
server.handlers = [new SearchDomainHandler(server),];
|
||||
createProject();
|
||||
server.handlers = [new SearchDomainHandler(server),];
|
||||
}
|
||||
|
||||
test_bad_function() async {
|
||||
|
|
Loading…
Reference in a new issue