Mercurial > hg > graal-jvmci-8
comparison mxtool/mx.py @ 13824:96d5cb754b68
address issue in Eclipse working set generation
author | Michael Haupt <michael.haupt@oracle.com> |
---|---|
date | Thu, 30 Jan 2014 11:02:16 +0100 |
parents | fc5e2c808a23 |
children | 12e1c788c1d5 |
comparison
equal
deleted
inserted
replaced
13821:b16ec83edc73 | 13824:96d5cb754b68 |
---|---|
3293 def __init__(self): | 3293 def __init__(self): |
3294 self.current_ws_name = 'none yet' | 3294 self.current_ws_name = 'none yet' |
3295 self.current_ws = None | 3295 self.current_ws = None |
3296 self.seen_ws = list() | 3296 self.seen_ws = list() |
3297 self.seen_projects = list() | 3297 self.seen_projects = list() |
3298 self.aggregate_ws = False | |
3299 self.nested_ws = False | |
3298 | 3300 |
3299 ps = ParserState() | 3301 ps = ParserState() |
3300 | 3302 |
3301 # parsing logic | 3303 # parsing logic |
3302 def _ws_start(name, attributes): | 3304 def _ws_start(name, attributes): |
3303 if name == 'workingSet': | 3305 if name == 'workingSet': |
3304 ps.current_ws_name = attributes['name'] | 3306 if attributes.has_key('name'): |
3305 if workingSets.has_key(ps.current_ws_name): | 3307 ps.current_ws_name = attributes['name'] |
3306 ps.current_ws = workingSets[ps.current_ws_name] | 3308 if attributes.has_key('aggregate') and attributes['aggregate'] == 'true': |
3307 ps.seen_ws.append(ps.current_ws_name) | 3309 ps.aggregate_ws = True |
3308 ps.seen_projects = list() | 3310 ps.current_ws = None |
3309 else: | 3311 elif workingSets.has_key(ps.current_ws_name): |
3310 ps.current_ws = None | 3312 ps.current_ws = workingSets[ps.current_ws_name] |
3313 ps.seen_ws.append(ps.current_ws_name) | |
3314 ps.seen_projects = list() | |
3315 else: | |
3316 ps.current_ws = None | |
3311 target.open(name, attributes) | 3317 target.open(name, attributes) |
3312 parser.StartElementHandler = _ws_item | 3318 parser.StartElementHandler = _ws_item |
3313 | 3319 |
3314 def _ws_end(name): | 3320 def _ws_end(name): |
3321 closeAndResetHandler = False | |
3315 if name == 'workingSet': | 3322 if name == 'workingSet': |
3316 if not ps.current_ws is None: | 3323 if ps.aggregate_ws: |
3317 for p in ps.current_ws: | 3324 if ps.nested_ws: |
3318 if not p in ps.seen_projects: | 3325 ps.nested_ws = False |
3319 _workingset_element(target, p) | 3326 else: |
3320 target.close('workingSet') | 3327 ps.aggregate_ws = False |
3321 parser.StartElementHandler = _ws_start | 3328 closeAndResetHandler = True |
3329 else: | |
3330 if not ps.current_ws is None: | |
3331 for p in ps.current_ws: | |
3332 if not p in ps.seen_projects: | |
3333 _workingset_element(target, p) | |
3334 closeAndResetHandler = True | |
3335 if closeAndResetHandler: | |
3336 target.close('workingSet') | |
3337 parser.StartElementHandler = _ws_start | |
3322 elif name == 'workingSetManager': | 3338 elif name == 'workingSetManager': |
3323 # process all working sets that are new to the file | 3339 # process all working sets that are new to the file |
3324 for w in sorted(workingSets.keys()): | 3340 for w in sorted(workingSets.keys()): |
3325 if not w in ps.seen_ws: | 3341 if not w in ps.seen_ws: |
3326 _workingset_open(target, w) | 3342 _workingset_open(target, w) |
3334 target.element(name, attributes) | 3350 target.element(name, attributes) |
3335 else: | 3351 else: |
3336 p_name = attributes['elementID'][1:] # strip off the leading '=' | 3352 p_name = attributes['elementID'][1:] # strip off the leading '=' |
3337 _workingset_element(target, p_name) | 3353 _workingset_element(target, p_name) |
3338 ps.seen_projects.append(p_name) | 3354 ps.seen_projects.append(p_name) |
3355 elif name == 'workingSet': | |
3356 ps.nested_ws = True | |
3357 target.element(name, attributes) | |
3339 | 3358 |
3340 # process document | 3359 # process document |
3341 parser.StartElementHandler = _ws_start | 3360 parser.StartElementHandler = _ws_start |
3342 parser.EndElementHandler = _ws_end | 3361 parser.EndElementHandler = _ws_end |
3343 with open(wspath, 'r') as wsfile: | 3362 with open(wspath, 'r') as wsfile: |