comparison mxtool/mx.py @ 8439:39c7142e7aef

added support for projects that extend a package defined in another project when canonicalizing projects
author Doug Simon <doug.simon@oracle.com>
date Fri, 22 Mar 2013 11:48:42 +0100
parents d1d486c03e8a
children b6b9ab1fde62
comparison
equal deleted inserted replaced
8438:79539d508429 8439:39c7142e7aef
348 return classes 348 return classes
349 349
350 def _init_packages_and_imports(self): 350 def _init_packages_and_imports(self):
351 if not hasattr(self, '_defined_java_packages'): 351 if not hasattr(self, '_defined_java_packages'):
352 packages = set() 352 packages = set()
353 extendedPackages = set()
353 depPackages = set() 354 depPackages = set()
354 for d in self.all_deps([], includeLibs=False, includeSelf=False): 355 for d in self.all_deps([], includeLibs=False, includeSelf=False):
355 depPackages.update(d.defined_java_packages()) 356 depPackages.update(d.defined_java_packages())
356 imports = set() 357 imports = set()
357 importRe = re.compile(r'import\s+(?:static\s+)?([^;]+);') 358 importRe = re.compile(r'import\s+(?:static\s+)?([^;]+);')
361 if len(javaSources) != 0: 362 if len(javaSources) != 0:
362 pkg = root[len(sourceDir) + 1:].replace(os.sep,'.') 363 pkg = root[len(sourceDir) + 1:].replace(os.sep,'.')
363 if not pkg in depPackages: 364 if not pkg in depPackages:
364 packages.add(pkg) 365 packages.add(pkg)
365 else: 366 else:
366 # A project imports a package already defined by one of it dependencies 367 # A project extends a package already defined by one of it dependencies
368 extendedPackages.add(pkg)
367 imports.add(pkg) 369 imports.add(pkg)
368 370
369 for n in javaSources: 371 for n in javaSources:
370 with open(join(root, n)) as fp: 372 with open(join(root, n)) as fp:
371 content = fp.read() 373 content = fp.read()
372 imports.update(importRe.findall(content)) 374 imports.update(importRe.findall(content))
373 self._defined_java_packages = frozenset(packages) 375 self._defined_java_packages = frozenset(packages)
376 self._extended_java_packages = frozenset(extendedPackages)
374 377
375 importedPackages = set() 378 importedPackages = set()
376 for imp in imports: 379 for imp in imports:
377 name = imp 380 name = imp
378 while not name in depPackages and len(name) > 0: 381 while not name in depPackages and len(name) > 0:
388 def defined_java_packages(self): 391 def defined_java_packages(self):
389 """Get the immutable set of Java packages defined by the Java sources of this project""" 392 """Get the immutable set of Java packages defined by the Java sources of this project"""
390 self._init_packages_and_imports() 393 self._init_packages_and_imports()
391 return self._defined_java_packages 394 return self._defined_java_packages
392 395
396 def extended_java_packages(self):
397 """Get the immutable set of Java packages extended by the Java sources of this project"""
398 self._init_packages_and_imports()
399 return self._extended_java_packages
400
393 def imported_java_packages(self): 401 def imported_java_packages(self):
394 """Get the immutable set of Java packages defined by other Java projects that are 402 """Get the immutable set of Java packages defined by other Java projects that are
395 imported by the Java sources of this project.""" 403 imported by the Java sources of this project."""
396 self._init_packages_and_imports() 404 self._init_packages_and_imports()
397 return self._imported_java_packages 405 return self._imported_java_packages
1717 dep = project(name, False) 1725 dep = project(name, False)
1718 if dep is None: 1726 if dep is None:
1719 ignoredDeps.discard(name) 1727 ignoredDeps.discard(name)
1720 else: 1728 else:
1721 if pkg in dep.defined_java_packages(): 1729 if pkg in dep.defined_java_packages():
1730 ignoredDeps.discard(name)
1731 if pkg in dep.extended_java_packages():
1722 ignoredDeps.discard(name) 1732 ignoredDeps.discard(name)
1723 if len(ignoredDeps) != 0: 1733 if len(ignoredDeps) != 0:
1724 candidates = set(); 1734 candidates = set();
1725 # Compute dependencies based on projects required by p 1735 # Compute dependencies based on projects required by p
1726 for d in sorted_deps(): 1736 for d in sorted_deps():