protected static boolean isFileExecutable(@NotNull String fullPath, @Nullable TargetEnvironmentConfiguration targetEnvConfig) {
    var id = getIdForCache(fullPath, targetEnvConfig);
    Boolean executable = ourExecutableFiles.getIfPresent(id);
    if (executable != null) {
      return executable;
    }
    var error = getErrorIfNotExecutable(fullPath, targetEnvConfig);
    if (error != null) {
      Logger.getInstance(PythonSdkFlavor.class).warn(String.format("%s is not executable: %s", fullPath, error));
    }
    var newValue = error == null;
    ourExecutableFiles.put(id, newValue);
    return newValue;
  }
protected static boolean isFileExecutable(@NotNull String fullPath, @Nullable TargetEnvironmentConfiguration targetEnvConfig)