Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: build/android/pylib/utils/proguard.py

Issue 824073005: [Android] Change proguard newline handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import os 5 import os
6 import re 6 import re
7 import tempfile 7 import tempfile
8 8
9 from pylib import constants 9 from pylib import constants
10 from pylib import cmd_helper 10 from pylib import cmd_helper
11 11
12 12
13 _PROGUARD_CLASS_RE = re.compile(r'\s*?- Program class:\s*([\S]+)$') 13 _PROGUARD_CLASS_RE = re.compile(r'\s*?- Program class:\s*([\S]+)$')
14 _PROGUARD_SUPERCLASS_RE = re.compile(r'\s*? Superclass:\s*([\S]+)$') 14 _PROGUARD_SUPERCLASS_RE = re.compile(r'\s*? Superclass:\s*([\S]+)$')
15 _PROGUARD_SECTION_RE = re.compile(
16 r'^(?:Interfaces|Constant Pool|Fields|Methods|Class file attributes) '
17 r'\(count = \d+\):$')
15 _PROGUARD_METHOD_RE = re.compile(r'\s*?- Method:\s*(\S*)[(].*$') 18 _PROGUARD_METHOD_RE = re.compile(r'\s*?- Method:\s*(\S*)[(].*$')
16 _PROGUARD_ANNOTATION_RE = re.compile(r'\s*?- Annotation \[L(\S*);\]:$') 19 _PROGUARD_ANNOTATION_RE = re.compile(r'\s*?- Annotation \[L(\S*);\]:$')
17 _PROGUARD_ANNOTATION_CONST_RE = ( 20 _PROGUARD_ANNOTATION_CONST_RE = (
18 re.compile(r'\s*?- Constant element value.*$')) 21 re.compile(r'\s*?- Constant element value.*$'))
19 _PROGUARD_ANNOTATION_VALUE_RE = re.compile(r'\s*?- \S+? \[(.*)\]$') 22 _PROGUARD_ANNOTATION_VALUE_RE = re.compile(r'\s*?- \S+? \[(.*)\]$')
20 23
21 _PROGUARD_PATH_SDK = os.path.join( 24 _PROGUARD_PATH_SDK = os.path.join(
22 constants.ANDROID_SDK_ROOT, 'tools', 'proguard', 'lib', 'proguard.jar') 25 constants.ANDROID_SDK_ROOT, 'tools', 'proguard', 'lib', 'proguard.jar')
23 _PROGUARD_PATH_BUILT = ( 26 _PROGUARD_PATH_BUILT = (
24 os.path.join(os.environ['ANDROID_BUILD_TOP'], 'external', 'proguard', 27 os.path.join(os.environ['ANDROID_BUILD_TOP'], 'external', 'proguard',
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } 74 }
72 75
73 annotation = None 76 annotation = None
74 annotation_has_value = False 77 annotation_has_value = False
75 class_result = None 78 class_result = None
76 method_result = None 79 method_result = None
77 80
78 for line in proguard_output: 81 for line in proguard_output:
79 line = line.strip('\r\n') 82 line = line.strip('\r\n')
80 83
81 if len(line) == 0:
82 annotation = None
83 annotation_has_value = False
84 method_result = None
85 continue
86
87 m = _PROGUARD_CLASS_RE.match(line) 84 m = _PROGUARD_CLASS_RE.match(line)
88 if m: 85 if m:
89 class_result = { 86 class_result = {
90 'class': m.group(1).replace('/', '.'), 87 'class': m.group(1).replace('/', '.'),
91 'superclass': '', 88 'superclass': '',
92 'annotations': {}, 89 'annotations': {},
93 'methods': [], 90 'methods': [],
94 } 91 }
95 results['classes'].append(class_result) 92 results['classes'].append(class_result)
96 annotation = None 93 annotation = None
97 annotation_has_value = False 94 annotation_has_value = False
98 method_result = None 95 method_result = None
99 continue 96 continue
100 97
101 if not class_result: 98 if not class_result:
102 continue 99 continue
103 100
104 m = _PROGUARD_SUPERCLASS_RE.match(line) 101 m = _PROGUARD_SUPERCLASS_RE.match(line)
105 if m: 102 if m:
106 class_result['superclass'] = m.group(1).replace('/', '.') 103 class_result['superclass'] = m.group(1).replace('/', '.')
107 continue 104 continue
108 105
106 m = _PROGUARD_SECTION_RE.match(line)
107 if m:
108 annotation = None
109 annotation_has_value = False
110 method_result = None
111 continue
112
109 m = _PROGUARD_METHOD_RE.match(line) 113 m = _PROGUARD_METHOD_RE.match(line)
110 if m: 114 if m:
111 method_result = { 115 method_result = {
112 'method': m.group(1), 116 'method': m.group(1),
113 'annotations': {}, 117 'annotations': {},
114 } 118 }
115 class_result['methods'].append(method_result) 119 class_result['methods'].append(method_result)
116 annotation = None 120 annotation = None
117 annotation_has_value = False 121 annotation_has_value = False
118 continue 122 continue
(...skipping 16 matching lines...) Expand all
135 m = _PROGUARD_ANNOTATION_VALUE_RE.match(line) 139 m = _PROGUARD_ANNOTATION_VALUE_RE.match(line)
136 if m: 140 if m:
137 if method_result: 141 if method_result:
138 method_result['annotations'][annotation] = m.group(1) 142 method_result['annotations'][annotation] = m.group(1)
139 else: 143 else:
140 class_result['annotations'][annotation] = m.group(1) 144 class_result['annotations'][annotation] = m.group(1)
141 annotation_has_value = None 145 annotation_has_value = None
142 146
143 return results 147 return results
144 148
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698