Mercurial > hg > truffle
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(): |