summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
-rw-r--r--bin/flycheck-android-java.py117
1 files changed, 72 insertions, 45 deletions
diff --git a/bin/flycheck-android-java.py b/bin/flycheck-android-java.py
index d4a54ca..9bbb31a 100644
--- a/bin/flycheck-android-java.py
+++ b/bin/flycheck-android-java.py
@@ -121,7 +121,7 @@ Otherwise return None."""
return None
def figure_out_java_compilation(sessiondir, sourcefile, tempfile, checkstyle,
- force=False):
+ variant, force=False):
"""Get options for Java compilation from gradle project and run javac."""
(cmd, mtime, projectdir) = get_gradle_command_and_project_mtime(
os.path.dirname(sourcefile))
@@ -158,40 +158,26 @@ def figure_out_java_compilation(sessiondir, sourcefile, tempfile, checkstyle,
output = output.split('\n')
- generate = None
- all_generate = []
-
- for line in output:
- if line == '***' or line == '!!!':
- if generate:
- all_generate.extend(generate)
-
- generate = [] if line == '!!!' else None
- elif generate != None:
- generate.append(line)
-
- if all_generate:
- subprocess.call(cmd + ['-q'] + all_generate)
-
data = None
- first = None
+ data_type = None
+ variants = []
+ gen = []
ret = 0
compiled = False
for line in output:
if line == '***' or line == '!!!':
- if data:
- if not first:
- first = data
- files = file_in_list(sourcefile, data['files'])
- if files:
- ret = run_javac(data['encoding'], data['source'],
- data['target'], data['bootcp'],
- data['cp'], files, data['output'],
- data['args'], tempfile, outdir)
- compiled = True
- break
- data = {} if line == '***' else None
- elif data != None:
+ if data_type == '*':
+ variants.append({'data': data, 'gen': len(gen)})
+ elif data_type == '!' and variants:
+ gen.append(data)
+ data_type = line[0]
+ if data_type == '*':
+ data = {}
+ else:
+ data = []
+ elif data_type == '*':
+ if line.startswith('variant='):
+ data['variant'] = line[8:]
if line.startswith('args='):
data['args'] = line[6:-1].split(', ')
elif line.startswith('encoding='):
@@ -208,28 +194,68 @@ def figure_out_java_compilation(sessiondir, sourcefile, tempfile, checkstyle,
data['files'] = line[6:].split(':')
elif line.startswith('output='):
data['output'] = line[7:]
+ elif data_type == '!':
+ data.append(line)
- if not compiled and data:
- if not first:
- first = data
- files = file_in_list(sourcefile, data['files'])
- if files:
- ret = run_javac(data['encoding'], data['source'], data['target'],
- data['bootcp'], data['cp'], files, data['output'],
- data['args'], tempfile, outdir)
- compiled = True
+ if data_type == '*':
+ variants.append({'data': data, 'gen': len(gen)})
+ elif data_type == '!' and variants:
+ gen.append(data)
+
+ fallback = None
+
+ if variant:
+ for v in variants:
+ data = v['data']
+ if 'variant' in data and data['variant'] == variant:
+ if not fallback:
+ fallback = data
+ files = file_in_list(sourcefile, data['files'])
+ if files:
+ if v['gen'] < len(gen):
+ subprocess.call(cmd + ['-q'] + gen[v['gen']])
+
+ ret = run_javac(data['encoding'], data['source'],
+ data['target'], data['bootcp'],
+ data['cp'], files, data['output'],
+ data['args'], tempfile, outdir)
+ compiled = True
+ break
+
+ if not compiled and variants:
+ data = variants[0]['data']
+ first = data['variant'] if 'variant' in data else None
+ for v in variants:
+ data = v['data']
+ if first and 'variant' in data and data['variant'] == first:
+ if not fallback:
+ fallback = data
+ files = file_in_list(sourcefile, data['files'])
+ if files:
+ if v['gen'] < len(gen):
+ subprocess.call(cmd + ['-q'] + gen[v['gen']])
+
+ ret = run_javac(data['encoding'], data['source'],
+ data['target'], data['bootcp'],
+ data['cp'], files, data['output'],
+ data['args'], tempfile, outdir)
+ compiled = True
+ break
if not compiled:
# Probably need to rerun gradle to find group for sourcefile
if cached and os.path.exists(sourcefile):
return figure_out_java_compilation(sessiondir, sourcefile,
- tempfile, checkstyle, force=True)
+ tempfile, checkstyle, variant,
+ force=True)
# OK, perhaps file doesn't exist yet or not yet added to gradle,
# whatever, assume the first group is good enough
- if first:
- ret = run_javac(first['encoding'], first['source'], first['target'],
- first['bootcp'], first['cp'], first['files'],
- first['output'], first['args'], tempfile, outdir)
+ if fallback:
+ ret = run_javac(fallback['encoding'], fallback['source'],
+ fallback['target'], fallback['bootcp'],
+ fallback['cp'], fallback['files'],
+ fallback['output'], fallback['args'],
+ tempfile, outdir)
compiled = True
if not ret and checkstyle:
@@ -263,6 +289,7 @@ def main(argv):
parser.add_argument('--checkstyle-path')
parser.add_argument('--checkstyle-config')
parser.add_argument('--checkstyle-properties')
+ parser.add_argument('--variant')
parser.add_argument('sessiondir', nargs='?')
parser.add_argument('sourcefile')
parser.add_argument('tempfile', nargs='?')
@@ -280,6 +307,6 @@ def main(argv):
sourcefile = os.path.abspath(sourcefile)
return figure_out_java_compilation(args.sessiondir, sourcefile, tempfile,
- checkstyle)
+ checkstyle, args.variant)
sys.exit(main(sys.argv))