Commit 8e87c012 authored by Mohamed Heikal's avatar Mohamed Heikal Committed by Commit Bot

Enforce that all java protos explicitly specify java_package

Also:
- updates build/protoc_java.py to use argparse instead of optparse.
- removes deprecated references to proto nano

Bug: 1114836
Change-Id: I184e6e262159ecb79cdf980a8c48e9d7f28c7d12
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2434908
Auto-Submit: Mohamed Heikal <mheikal@chromium.org>
Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Commit-Queue: Mohamed Heikal <mheikal@chromium.org>
Cr-Commit-Position: refs/heads/master@{#811662}
parent a4a66153
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
"""Generate java source files from protobuf files. """Generate java source files from protobuf files.
This is a helper file for the genproto_java action in protoc_java.gypi. This is the action script for the proto_java_library template.
It performs the following steps: It performs the following steps:
1. Deletes all old sources (ensures deleted classes are not part of new jars). 1. Deletes all old sources (ensures deleted classes are not part of new jars).
...@@ -17,51 +17,63 @@ It performs the following steps: ...@@ -17,51 +17,63 @@ It performs the following steps:
from __future__ import print_function from __future__ import print_function
import argparse
import os import os
import optparse
import shutil import shutil
import subprocess import subprocess
import sys import sys
sys.path.append(os.path.join(os.path.dirname(__file__), "android", "gyp")) sys.path.append(os.path.join(os.path.dirname(__file__), 'android', 'gyp'))
from util import build_utils from util import build_utils
def _HasJavaPackage(proto_lines):
return any(line.strip().startswith('option java_package')
for line in proto_lines)
def _EnforceJavaPackage(proto_srcs):
for proto_path in proto_srcs:
with open(proto_path) as in_proto:
if not _HasJavaPackage(in_proto.readlines()):
raise Exception('Proto files for java must contain a "java_package" '
'line: {}'.format(proto_path))
def main(argv): def main(argv):
parser = optparse.OptionParser() parser = argparse.ArgumentParser()
build_utils.AddDepfileOption(parser) build_utils.AddDepfileOption(parser)
parser.add_option("--protoc", help="Path to protoc binary.") parser.add_argument('--protoc', required=True, help='Path to protoc binary.')
parser.add_option("--proto-path", help="Path to proto directory.") parser.add_argument('--proto-path',
parser.add_option("--java-out-dir", required=True,
help="Path to output directory for java files.") help='Path to proto directory.')
parser.add_option("--srcjar", help="Path to output srcjar.") parser.add_argument('--java-out-dir',
parser.add_option("--stamp", help="File to touch on success.") help='Path to output directory for java files.')
parser.add_option("--nano", parser.add_argument('--srcjar', help='Path to output srcjar.')
help="Use to generate nano protos.", action='store_true') parser.add_argument('--stamp', help='File to touch on success.')
parser.add_option("--import-dir", action="append", default=[], parser.add_argument(
help="Extra import directory for protos, can be repeated.") '--import-dir',
options, args = parser.parse_args(argv) action='append',
default=[],
build_utils.CheckOptions(options, parser, ['protoc', 'proto_path']) help='Extra import directory for protos, can be repeated.')
parser.add_argument('protos', nargs='+', help='proto source files')
options = parser.parse_args(argv)
if not options.java_out_dir and not options.srcjar: if not options.java_out_dir and not options.srcjar:
print('One of --java-out-dir or --srcjar must be specified.') raise Exception('One of --java-out-dir or --srcjar must be specified.')
return 1
proto_path_args = ['--proto_path', options.proto_path] _EnforceJavaPackage(options.protos)
for path in options.import_dir:
proto_path_args += ["--proto_path", path]
with build_utils.TempDir() as temp_dir: with build_utils.TempDir() as temp_dir:
if options.nano: out_arg = '--java_out=lite:' + temp_dir
# Specify arguments to the generator.
generator_args = ['optional_field_style=reftypes', proto_path_args = ['--proto_path', options.proto_path]
'store_unknown_fields=true'] for path in options.import_dir:
out_arg = '--javanano_out=' + ','.join(generator_args) + ':' + temp_dir proto_path_args += ["--proto_path", path]
else:
out_arg = '--java_out=lite:' + temp_dir
# Generate Java files using protoc. # Generate Java files using protoc.
build_utils.CheckOutput( build_utils.CheckOutput(
[options.protoc] + proto_path_args + [out_arg] + args, [options.protoc] + proto_path_args + [out_arg] + options.protos,
# protoc generates superfluous warnings about LITE_RUNTIME deprecation # protoc generates superfluous warnings about LITE_RUNTIME deprecation
# even though we are using the new non-deprecated method. # even though we are using the new non-deprecated method.
stderr_filter=lambda output: build_utils.FilterLines( stderr_filter=lambda output: build_utils.FilterLines(
...@@ -76,7 +88,7 @@ def main(argv): ...@@ -76,7 +88,7 @@ def main(argv):
if options.depfile: if options.depfile:
assert options.srcjar assert options.srcjar
deps = args + [options.protoc] deps = options.protos + [options.protoc]
build_utils.WriteDepfile(options.depfile, options.srcjar, deps) build_utils.WriteDepfile(options.depfile, options.srcjar, deps)
if options.stamp: if options.stamp:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment