resolveKernelCacheDir function

Directory resolveKernelCacheDir(
  1. FileSystem fs,
  2. Directory projectRoot
)

Resolves a shared kernel cache directory for projectRoot.

Prefer REVALI_KERNEL_CACHE, then test_suite/.revali_kernel_cache when under the monorepo test suite, else <project>/.dart_tool/revali_kernels.

Implementation

Directory resolveKernelCacheDir(FileSystem fs, Directory projectRoot) {
  final env = io.Platform.environment['REVALI_KERNEL_CACHE'];
  if (env != null && env.isNotEmpty) {
    return fs.directory(env);
  }

  var dir = projectRoot;
  while (true) {
    if (dir.basename == 'test_suite' &&
        dir.childDirectory('constructs').existsSync()) {
      return dir.childDirectory('.revali_kernel_cache');
    }
    final parent = dir.parent;
    if (parent.path == dir.path) {
      break;
    }
    dir = parent;
  }

  return projectRoot
      .childDirectory('.dart_tool')
      .childDirectory('revali_kernels');
}