v1_files = glob([ '**/*.java.v1'])
v2_files = glob(['**/*.java.v2'])
normal_files = glob(['**/*.java'])
sources = v1_files + v2_files + normal_files

java_library(
  name = 'child_changed',
  srcs = sources,
  deps = [],
  visibility = [
      'PUBLIC'
  ]
)

def copy_files_strip_suffix_cmd(sfx, files):
    return ' && '.join([' '.join(['cp', f, f.replace(sfx, '')]) for f in files])

out = 'out'
clean_cmd = ' '.join(['rm', '-rf', out])
stripped_suffix_files = map(lambda f: f.replace('.v1', ''), v1_files)
to_compile = ' '.join(normal_files + stripped_suffix_files)
infer_cmd = ' '.join([
    'infer',
    '--no-progress-bar',
    '-i',
    '--absolute-paths',
    '-o', out,
    '-a', 'infer',
    '--',
    'javac',
    to_compile
])
v1_copy_cmd = copy_files_strip_suffix_cmd('.v1', v1_files)
v2_copy_cmd = copy_files_strip_suffix_cmd('.v2', v2_files)
stats_copy_cmd = ' '.join(['cp', out + '/stats.json', '$OUT'])
command = ' && '.join([clean_cmd, v1_copy_cmd, infer_cmd, v2_copy_cmd, infer_cmd, stats_copy_cmd])

genrule(
    name = 'analyze',
    srcs = sources,
    out = 'stats.json',
    cmd = command,
    deps = [':child_changed'],
    visibility = [
        'PUBLIC',
    ]
)