diff options
Diffstat (limited to 'bin/flycheck-android-java.py')
| -rw-r--r-- | bin/flycheck-android-java.py | 117 |
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)) |
