| Index: base/android/jni_generator/jni_generator.py
|
| diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
|
| index 456f3de6d914b0fc7938be2460dd3a2ad0c4af87..02e22326d1e122f33f5cca4974c59a79a10f5e03 100755
|
| --- a/base/android/jni_generator/jni_generator.py
|
| +++ b/base/android/jni_generator/jni_generator.py
|
| @@ -451,11 +451,22 @@ class JNIFromJavaSource(object):
|
| self.content = inl_header_file_generator.GetContent()
|
|
|
| def _RemoveComments(self, contents):
|
| - ret = []
|
| - for c in [c.strip() for c in contents.split('\n')]:
|
| - if not c.startswith('//'):
|
| - ret += [c]
|
| - return '\n'.join(ret)
|
| + # We need to support both inline and block comments, and we need to handle
|
| + # strings that contain '//' or '/*'. Rather than trying to do all that with
|
| + # regexps, we just pipe the contents through the C preprocessor. We tell cpp
|
| + # the file has already been preprocessed, so it just removes comments and
|
| + # doesn't try to parse #include, #pragma etc.
|
| + #
|
| + # TODO(husky): This is a bit hacky. It would be cleaner to use a real Java
|
| + # parser. Maybe we could ditch JNIFromJavaSource and just always use
|
| + # JNIFromJavaP; or maybe we could rewrite this script in Java and use APT.
|
| + # http://code.google.com/p/chromium/issues/detail?id=138941
|
| + p = subprocess.Popen(args=['cpp', '-fpreprocessed'],
|
| + stdin=subprocess.PIPE,
|
| + stdout=subprocess.PIPE,
|
| + stderr=subprocess.PIPE)
|
| + stdout, _ = p.communicate(contents)
|
| + return stdout
|
|
|
| def GetContent(self):
|
| return self.content
|
|
|