import 'package:analyzer/file_system/overlay_file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart';
import 'package:analyzer/src/dart/analysis/byte_store.dart';

void main() async {
  {
    var byteStore = MemoryByteStore();

    var resourceProvider = OverlayResourceProvider(
      PhysicalResourceProvider.INSTANCE,
    );

    var analysisOptionsPath =
        '/Users/scheglov/Source/Dart/analysis_options.yaml';
    resourceProvider.setOverlay(
      analysisOptionsPath,
      content: r'''
analyzer:
  enable-experiment:
    - macros
''',
      modificationStamp: -1,
    );

    var collection = AnalysisContextCollectionImpl(
      resourceProvider: resourceProvider,
      includedPaths: [
        '/Users/scheglov/Source/Dart/sdk.git/sdk/pkg/analyzer',
      ],
      byteStore: byteStore,
      optionsFile: analysisOptionsPath,
    );

    var timer = Stopwatch()..start();
    for (var analysisContext in collection.contexts) {
      print(analysisContext.contextRoot.root.path);
      var analysisSession = analysisContext.currentSession;
      for (var path in analysisContext.contextRoot.analyzedFiles()) {
        if (path.endsWith('.dart')) {
          await analysisSession.getUnitElement(path);
        }
      }
    }
    print('[time: ${timer.elapsedMilliseconds} ms]');

    await collection.dispose();
  }
}
