mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 14:51:30 +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
|
// prepare LibraryElement
|
||||||
LibraryElement libraryElement =
|
LibraryElement libraryElement =
|
||||||
context.getResult(librarySource, LIBRARY_ELEMENT8);
|
context.getResult(librarySource, LIBRARY_ELEMENT4);
|
||||||
if (libraryElement == null) {
|
if (libraryElement == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,9 @@ class AbstractAnalysisTest {
|
||||||
|
|
||||||
AbstractAnalysisTest();
|
AbstractAnalysisTest();
|
||||||
|
|
||||||
|
AnalysisDomainHandler get analysisHandler => server.handlers
|
||||||
|
.singleWhere((handler) => handler is AnalysisDomainHandler);
|
||||||
|
|
||||||
void addAnalysisSubscription(AnalysisService service, String file) {
|
void addAnalysisSubscription(AnalysisService service, String file) {
|
||||||
// add file to subscription
|
// add file to subscription
|
||||||
var files = analysisSubscriptions[service];
|
var files = analysisSubscriptions[service];
|
||||||
|
@ -143,7 +146,7 @@ class AbstractAnalysisTest {
|
||||||
resourceProvider.newFolder(projectPath);
|
resourceProvider.newFolder(projectPath);
|
||||||
Request request =
|
Request request =
|
||||||
new AnalysisSetAnalysisRootsParams([projectPath], []).toRequest('0');
|
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.
|
* 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);
|
Response response = handler.handleRequest(request);
|
||||||
expect(response, isResponseSuccess(request.id));
|
expect(response, isResponseSuccess(request.id));
|
||||||
return response;
|
return response;
|
||||||
|
@ -203,8 +207,7 @@ class AbstractAnalysisTest {
|
||||||
packageMapProvider = new MockPackageMapProvider();
|
packageMapProvider = new MockPackageMapProvider();
|
||||||
Index index = createIndex();
|
Index index = createIndex();
|
||||||
server = createAnalysisServer(index);
|
server = createAnalysisServer(index);
|
||||||
handler = server.handlers
|
handler = analysisHandler;
|
||||||
.singleWhere((handler) => handler is AnalysisDomainHandler);
|
|
||||||
// listen for notifications
|
// listen for notifications
|
||||||
Stream<Notification> notificationStream =
|
Stream<Notification> notificationStream =
|
||||||
serverChannel.notificationController.stream;
|
serverChannel.notificationController.stream;
|
||||||
|
|
|
@ -27,13 +27,13 @@ class FixesTest extends AbstractAnalysisTest {
|
||||||
@override
|
@override
|
||||||
void setUp() {
|
void setUp() {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
createProject();
|
|
||||||
ExtensionManager manager = new ExtensionManager();
|
ExtensionManager manager = new ExtensionManager();
|
||||||
manager.processPlugins([server.serverPlugin]);
|
manager.processPlugins([server.serverPlugin]);
|
||||||
handler = new EditDomainHandler(server);
|
handler = new EditDomainHandler(server);
|
||||||
}
|
}
|
||||||
|
|
||||||
test_fixUndefinedClass() async {
|
test_fixUndefinedClass() async {
|
||||||
|
createProject();
|
||||||
addTestFile('''
|
addTestFile('''
|
||||||
main() {
|
main() {
|
||||||
Future<String> x = null;
|
Future<String> x = null;
|
||||||
|
@ -52,6 +52,7 @@ main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
test_hasFixes() async {
|
test_hasFixes() async {
|
||||||
|
createProject();
|
||||||
addTestFile('''
|
addTestFile('''
|
||||||
foo() {
|
foo() {
|
||||||
print(1)
|
print(1)
|
||||||
|
@ -77,19 +78,13 @@ bar() {
|
||||||
}
|
}
|
||||||
|
|
||||||
test_overlayOnlyFile() async {
|
test_overlayOnlyFile() async {
|
||||||
// add an overlay-only file
|
createProject();
|
||||||
{
|
testCode = '''
|
||||||
testCode = '''
|
|
||||||
main() {
|
main() {
|
||||||
print(1)
|
print(1)
|
||||||
}
|
}
|
||||||
''';
|
''';
|
||||||
Request request = new AnalysisUpdateContentParams(
|
_addOverlay(testFile, testCode);
|
||||||
{testFile: new AddContentOverlay(testCode)}).toRequest('0');
|
|
||||||
Response response =
|
|
||||||
new AnalysisDomainHandler(server).handleRequest(request);
|
|
||||||
expect(response, isResponseSuccess('0'));
|
|
||||||
}
|
|
||||||
// ask for fixes
|
// ask for fixes
|
||||||
await waitForTasksFinished();
|
await waitForTasksFinished();
|
||||||
List<AnalysisErrorFixes> errorFixes = await _getFixesAt('print(1)');
|
List<AnalysisErrorFixes> errorFixes = await _getFixesAt('print(1)');
|
||||||
|
@ -97,6 +92,40 @@ main() {
|
||||||
_isSyntacticErrorWithSingleFix(errorFixes[0]);
|
_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 {
|
Future<List<AnalysisErrorFixes>> _getFixes(int offset) async {
|
||||||
Request request = new EditGetFixesParams(testFile, offset).toRequest('0');
|
Request request = new EditGetFixesParams(testFile, offset).toRequest('0');
|
||||||
Response response = await waitResponse(request);
|
Response response = await waitResponse(request);
|
||||||
|
|
|
@ -94,8 +94,8 @@ class AbstractSearchDomainTest extends AbstractAnalysisTest {
|
||||||
@override
|
@override
|
||||||
void setUp() {
|
void setUp() {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
server.handlers = [new SearchDomainHandler(server),];
|
|
||||||
createProject();
|
createProject();
|
||||||
|
server.handlers = [new SearchDomainHandler(server),];
|
||||||
}
|
}
|
||||||
|
|
||||||
Future waitForSearchResults() {
|
Future waitForSearchResults() {
|
||||||
|
|
|
@ -33,8 +33,8 @@ class GetTypeHierarchyTest extends AbstractAnalysisTest {
|
||||||
@override
|
@override
|
||||||
void setUp() {
|
void setUp() {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
server.handlers = [new SearchDomainHandler(server),];
|
|
||||||
createProject();
|
createProject();
|
||||||
|
server.handlers = [new SearchDomainHandler(server),];
|
||||||
}
|
}
|
||||||
|
|
||||||
test_bad_function() async {
|
test_bad_function() async {
|
||||||
|
|
Loading…
Reference in a new issue