|
|
|
sources = glob(['**/*.java','**/*.json'])
|
|
|
|
|
|
|
|
dependencies = [
|
|
|
|
'//dependencies/java/android/support/v4:android-support-v4',
|
|
|
|
'//infer/annotations:annotations',
|
|
|
|
'//infer/lib/java/android:android',
|
|
|
|
]
|
|
|
|
|
|
|
|
java_library(
|
|
|
|
name = 'checkers',
|
|
|
|
srcs = sources,
|
|
|
|
deps = dependencies,
|
|
|
|
visibility = [
|
|
|
|
'PUBLIC'
|
|
|
|
]
|
|
|
|
)
|
|
|
|
|
|
|
|
out = 'infer-out'
|
|
|
|
inferconfig_file = '$(location //infer/tests/codetoanalyze/java:inferconfig)'
|
|
|
|
copy_inferconfig = ' '.join(['cp', inferconfig_file, '$SRCDIR'])
|
|
|
|
clean_cmd = ' '.join(['rm', '-rf', out])
|
|
|
|
classpath = ':'.join([('$(classpath ' + path + ')') for path in dependencies])
|
|
|
|
|
|
|
|
def mk_infer_cmd(tag, srcs, stacktrace):
|
|
|
|
infer_cmd_main = ' '.join([
|
|
|
|
'infer',
|
|
|
|
'--no-progress-bar',
|
|
|
|
'--absolute-paths',
|
|
|
|
'-a', 'crashcontext',
|
|
|
|
'--stacktrace', stacktrace,
|
|
|
|
'--',
|
|
|
|
'javac',
|
|
|
|
'-cp', classpath,
|
|
|
|
srcs])
|
|
|
|
out_rename = ' '.join(['cp',
|
|
|
|
out + '/crashcontext/crashcontext.json',
|
|
|
|
'$OUT' + "." + tag])
|
|
|
|
return ' && '.join([infer_cmd_main, out_rename])
|
|
|
|
|
|
|
|
infer_cmds = [
|
|
|
|
mk_infer_cmd(
|
|
|
|
"MinimalCrashExample",
|
|
|
|
"MinimalCrashExample.java",
|
|
|
|
"MinimalCrashExample.stacktrace.json"
|
|
|
|
),
|
|
|
|
mk_infer_cmd(
|
|
|
|
"MultiStackFrameCrashExample",
|
|
|
|
"MultiStackFrameCrashExample.java",
|
|
|
|
"MultiStackFrameCrashExample.stacktrace.json"
|
|
|
|
),
|
|
|
|
mk_infer_cmd(
|
|
|
|
"BranchingCallsExample",
|
|
|
|
"BranchingCallsExample.java",
|
|
|
|
"BranchingCallsExample.stacktrace.json"
|
|
|
|
),
|
|
|
|
mk_infer_cmd(
|
|
|
|
"MethodNameClashExample",
|
|
|
|
"MethodNameClashExample.java",
|
|
|
|
"MethodNameClashExample.stacktrace.json"
|
|
|
|
),
|
|
|
|
mk_infer_cmd(
|
|
|
|
"NativeMethodExample",
|
|
|
|
"NativeMethodExample.java",
|
|
|
|
"NativeMethodExample.stacktrace.json"
|
|
|
|
)
|
|
|
|
]
|
|
|
|
|
|
|
|
# Copy the last crashcontext.json because buck expects it as the output file.
|
|
|
|
# This will only contain the results for the last run infer_cmd above.
|
|
|
|
copy_cmd = ' '.join(['cp', out + '/crashcontext/crashcontext.json', '$OUT'])
|
|
|
|
command = ' && '.join([clean_cmd, copy_inferconfig, ' && '.join(infer_cmds), copy_cmd])
|
|
|
|
|
|
|
|
genrule(
|
|
|
|
name = 'analyze',
|
|
|
|
srcs = sources,
|
|
|
|
out = 'crashcontext.json',
|
|
|
|
cmd = command,
|
|
|
|
deps = dependencies + [':checkers'],
|
|
|
|
visibility = [
|
|
|
|
'PUBLIC',
|
|
|
|
]
|
|
|
|
)
|