initialize method

Future<void> initialize({
  1. required String root,
})

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;
}