initialize method
Implementation
Future<void> initialize({required String root}) async {
if (_isInitialized) {
return;
}
final normalizedRoot = fs.path.normalize(root);
final projectRoot = await fs.directory(root).getRoot();
_root = fs.path.normalize(projectRoot?.path ?? normalizedRoot);
logger.detail(
'Initializing analyzer: input=$normalizedRoot, '
'projectRoot=${projectRoot?.path}, resolvedRoot=$_root, '
'cwd=${fs.currentDirectory.path}',
);
try {
await _createVirtualWorkspace(_root!);
final dependencies = switch (_packageConfig) {
final String packageConfig => await _getDependencyFiles(
packageConfig,
pathDependenciesOnly: true,
directoryOnly: true,
),
null => <String>[],
};
final cachePath = _ensureCacheDirectory(_root!);
_analysisCollection = AnalysisContextCollectionImpl(
includedPaths: [_root!, ...dependencies],
resourceProvider: _memoryProvider,
sdkPath: await sdkPath,
byteStore: MemoryCachingByteStore(
EvictingFileByteStore(cachePath, _byteStoreMaxSizeBytes),
_memoryCacheMaxSizeBytes,
),
fileContentCache: FileContentCache(_memoryProvider),
// Improves incremental re-analysis for long-lived `dev` sessions.
withFineDependencies: true,
);
} catch (e, st) {
logger
..err('Error initializing analyzer')
..info('$e');
if (_packageConfigDiagnostics case final diagnostics?) {
logger.info('Package config diagnostics:\n${diagnostics.join('\n')}');
}
logger.detail('$st');
rethrow;
}
_isInitialized = true;
}