compileFixtures function

Directory compileFixtures({
  1. String name = 'basic',
})

Compiles fixtures/java/<name>/src with javac --release 17 -g into a fresh temporary directory and returns it.

Implementation

Directory compileFixtures({String name = 'basic'}) {
  final src = p.join(findRepoRoot(), 'fixtures', 'java', name, 'src');
  final files = [
    for (final f in Directory(src).listSync(recursive: true))
      if (f is File && f.path.endsWith('.java')) f.path,
  ]..sort();
  final out = Directory.systemTemp.createTempSync('nab_fixtures_');
  // Compile-time stubs (kotlin.coroutines.Continuation) live outside the
  // fixture output so they never shadow the real classes at run time.
  final stubs = compileKotlinStubs();
  try {
    final r = Process.runSync('javac', [
      '--release',
      '17',
      '-g',
      '-encoding',
      'UTF-8',
      '-cp',
      stubs.path,
      '-d',
      out.path,
      ...files,
    ]);
    if (r.exitCode != 0) {
      throw StateError('javac failed:\n${r.stderr}');
    }
  } finally {
    stubs.deleteSync(recursive: true);
  }
  return out;
}