Fix for getFilesForPath() for a generated file.

This causes exceptions for internal users.
Not fatal, other files analysis is fine.

R=brianwilkerson@google.com
BUG=

Review-Url: https://codereview.chromium.org/2655373002 .
This commit is contained in:
Konstantin Shcheglov 2017-01-26 12:12:58 -08:00
parent 9761ff14d4
commit 2d318065b0
3 changed files with 32 additions and 2 deletions

View file

@ -74,7 +74,7 @@ class AnalysisDriver {
/**
* The version of data format, should be incremented on every format change.
*/
static const int DATA_VERSION = 12;
static const int DATA_VERSION = 13;
/**
* The name of the driver, e.g. the name of the folder.

View file

@ -592,7 +592,7 @@ class FileSystemState {
// Try to get the existing instance.
file = _uriToFile[uri];
// If we have a file, call it the canonical one and return it.
if (file != null) {
if (file != null && file.path == path) {
_pathToCanonicalFile[path] = file;
return file;
}

View file

@ -20,6 +20,7 @@ import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'package:typed_mock/typed_mock.dart';
import '../../context/mock_sdk.dart';
@ -38,6 +39,7 @@ class FileSystemStateTest {
final FileContentOverlay contentOverlay = new FileContentOverlay();
final StringBuffer logBuffer = new StringBuffer();
final UriResolver generatedUriResolver = new _GeneratedUriResolverMock();
SourceFactory sourceFactory;
PerformanceLog logger;
@ -48,6 +50,7 @@ class FileSystemStateTest {
sdk = new MockSdk(resourceProvider: provider);
sourceFactory = new SourceFactory([
new DartUriResolver(sdk),
generatedUriResolver,
new PackageMapUriResolver(provider, <String, List<Folder>>{
'aaa': [provider.getFolder(_p('/aaa/lib'))],
'bbb': [provider.getFolder(_p('/bbb/lib'))],
@ -272,6 +275,29 @@ class A2 {}
expect(file.unlinked.classes, isEmpty);
}
test_getFileForPath_generatedFile() {
Uri uri = Uri.parse('package:aaa/foo.dart');
String templatePath = _p('/aaa/lib/foo.dart');
String generatedPath = _p('/generated/aaa/lib/foo.dart');
Source generatedSource = new _SourceMock();
when(generatedSource.fullName).thenReturn(generatedPath);
when(generatedSource.uri).thenReturn(uri);
when(generatedUriResolver.resolveAbsolute(uri, uri))
.thenReturn(generatedSource);
FileState generatedFile = fileSystemState.getFileForUri(uri);
expect(generatedFile.path, generatedPath);
expect(generatedFile.uri, uri);
FileState templateFile = fileSystemState.getFileForPath(templatePath);
expect(templateFile.path, templatePath);
expect(templateFile.uri, uri);
expect(fileSystemState.getFilesForPath(templatePath), [templateFile]);
}
test_getFileForPath_library() {
String a1 = _p('/aaa/lib/a1.dart');
String a2 = _p('/aaa/lib/a2.dart');
@ -704,3 +730,7 @@ set _V3(_) {}
return hex.encode(md5.convert(UTF8.encode(content)).bytes);
}
}
class _GeneratedUriResolverMock extends TypedMock implements UriResolver {}
class _SourceMock extends TypedMock implements Source {}