# HG changeset patch # User Doug Simon # Date 1364976522 -7200 # Node ID c7672a325fafa7cae55d2ef0861dc9d194dc3d2e # Parent f00f02691677ede3d9b64b8c71382afa7b4392bf search for classes containing annotations returns source file as well as class name diff -r f00f02691677 -r c7672a325faf mx/commands.py --- a/mx/commands.py Wed Apr 03 00:20:46 2013 +0200 +++ b/mx/commands.py Wed Apr 03 10:08:42 2013 +0200 @@ -690,8 +690,8 @@ # Exclude all compiler tests and snippets excludes = ['com.oracle.graal.compiler.tests.*', 'com.oracle.graal.jtt.*'] for p in mx.projects(): - excludes += _find_classes_with_annotations(p, None, ['@Snippet', '@ClassSubstitution', '@Test'], includeInnerClasses=True) - excludes += p.find_classes_with_matching_source_line(None, lambda line: 'JaCoCo Exclude' in line, includeInnerClasses=True) + excludes += _find_classes_with_annotations(p, None, ['@Snippet', '@ClassSubstitution', '@Test'], includeInnerClasses=True).keys() + excludes += p.find_classes_with_matching_source_line(None, lambda line: 'JaCoCo Exclude' in line, includeInnerClasses=True).keys() includes = ['com.oracle.graal.*', 'com.oracle.max.*'] agentOptions = { @@ -732,7 +732,7 @@ classes = [] for p in mx.projects(): - classes += _find_classes_with_annotations(p, None, annotations) + classes += _find_classes_with_annotations(p, None, annotations).keys() if len(pos) != 0: classes = [c for c in classes if containsAny(c, pos)] diff -r f00f02691677 -r c7672a325faf mxtool/mx.py --- a/mxtool/mx.py Wed Apr 03 00:20:46 2013 +0200 +++ b/mxtool/mx.py Wed Apr 03 10:08:42 2013 +0200 @@ -311,10 +311,10 @@ def find_classes_with_matching_source_line(self, pkgRoot, function, includeInnerClasses=False): """ Scan the sources of this project for Java source files containing a line for which - 'function' returns true. The fully qualified class name of each existing class - corresponding to a matched source file is returned in a list. + 'function' returns true. A map from class name to source file path for each existing class + corresponding to a matched source file is returned. """ - classes = [] + result = dict() pkgDecl = re.compile(r"^package\s+([a-zA-Z_][\w\.]*)\s*;$") for srcDir in self.source_dirs(): outputDir = self.output_dir() @@ -322,7 +322,8 @@ for name in files: if name.endswith('.java') and name != 'package-info.java': matchFound = False - with open(join(root, name)) as f: + source = join(root, name) + with open(source) as f: pkg = None for line in f: if line.startswith("package "): @@ -342,10 +343,12 @@ for e in os.listdir(pkgOutputDir): if includeInnerClasses: if e.endswith('.class') and (e.startswith(basename) or e.startswith(basename + '$')): - classes.append(pkg + '.' + e[:-len('.class')]) + className = pkg + '.' + e[:-len('.class')] + result[className] = source elif e == basename + '.class': - classes.append(pkg + '.' + basename) - return classes + className = pkg + '.' + basename + result[className] = source + return result def _init_packages_and_imports(self): if not hasattr(self, '_defined_java_packages'):