Future init()

in lib/src/analysis_server.dart [79:125]


  Future<void> init() async {
    if (_isInitialized) {
      throw StateError('AnalysisServerWrapper is already initialized');
    }

    _isInitialized = true;

    void onRead(String str) {
      if (dumpServerMessages) _logger.info('<-- $str');
    }

    void onWrite(String str) {
      if (dumpServerMessages) _logger.info('--> $str');
    }

    final serverArgs = <String>[
      '--client-id=DartPad',
      '--client-version=$_sdkVersion',
    ];
    _logger.info('Starting server; sdk: `$sdkPath`, args: $serverArgs');

    analysisServer = await AnalysisServer.create(
      onRead: onRead,
      onWrite: onWrite,
      sdkPath: sdkPath,
      serverArgs: serverArgs,
    );

    try {
      analysisServer.server.onError.listen((ServerError error) {
        _logger.severe('server error${error.isFatal ? ' (fatal)' : ''}',
            error.message, StackTrace.fromString(error.stackTrace));
      });
      await analysisServer.server.onConnected.first;
      await analysisServer.server.setSubscriptions(<String>['STATUS']);

      listenForCompletions();

      await analysisServer.analysis.setAnalysisRoots([_sourceDirPath], []);
      // Warmup.
      await _sendAddOverlays({mainPath: _warmupSrc});
      await _sendRemoveOverlays();
    } catch (err, st) {
      _logger.severe('Error starting analysis server ($sdkPath): $err.\n$st');
      rethrow;
    }
  }