comparison mxtool/mx.py @ 9854:394f38496856

made projects inherit annotation processors from dependencies
author Doug Simon <doug.simon@oracle.com>
date Tue, 04 Jun 2013 00:33:42 +0200
parents 931f9ced42ad
children 719a290b8a23
comparison
equal deleted inserted replaced
9853:e45c7720b46b 9854:394f38496856
217 """ 217 """
218 Add the transitive set of dependencies for this project, including 218 Add the transitive set of dependencies for this project, including
219 libraries if 'includeLibs' is true, to the 'deps' list. 219 libraries if 'includeLibs' is true, to the 'deps' list.
220 """ 220 """
221 childDeps = list(self.deps) 221 childDeps = list(self.deps)
222 if includeAnnotationProcessors and hasattr(self, 'annotationProcessors') and len(self.annotationProcessors) > 0: 222 if includeAnnotationProcessors and len(self.annotation_processors()) > 0:
223 childDeps = self.annotationProcessors + childDeps 223 childDeps = self.annotation_processors() + childDeps
224 if self in deps: 224 if self in deps:
225 return deps 225 return deps
226 for name in childDeps: 226 for name in childDeps:
227 assert name != self.name 227 assert name != self.name
228 dep = _libs.get(name, None) 228 dep = _libs.get(name, None)
406 """Get the immutable set of Java packages defined by other Java projects that are 406 """Get the immutable set of Java packages defined by other Java projects that are
407 imported by the Java sources of this project.""" 407 imported by the Java sources of this project."""
408 self._init_packages_and_imports() 408 self._init_packages_and_imports()
409 return self._imported_java_packages 409 return self._imported_java_packages
410 410
411 def annotation_processors(self):
412 if not hasattr(self, '_transitiveAnnotationProcessors'):
413 ap = set()
414 if hasattr(self, '_annotationProcessors'):
415 ap = set(self._annotationProcessors)
416 for name in self.deps:
417 dep = _projects.get(name, None)
418 if dep is not None:
419 ap.update(dep.annotation_processors())
420 self._transitiveAnnotationProcessors = list(ap)
421 return self._transitiveAnnotationProcessors
411 422
412 class Library(Dependency): 423 class Library(Dependency):
413 def __init__(self, suite, name, path, mustExist, urls, sourcePath, sourceUrls): 424 def __init__(self, suite, name, path, mustExist, urls, sourcePath, sourceUrls):
414 Dependency.__init__(self, suite, name) 425 Dependency.__init__(self, suite, name)
415 self.path = path.replace('/', os.sep) 426 self.path = path.replace('/', os.sep)
525 p.checkstyleProj = attrs.pop('checkstyle', name) 536 p.checkstyleProj = attrs.pop('checkstyle', name)
526 p.native = attrs.pop('native', '') == 'true' 537 p.native = attrs.pop('native', '') == 'true'
527 if not p.native and p.javaCompliance is None: 538 if not p.native and p.javaCompliance is None:
528 abort('javaCompliance property required for non-native project ' + name) 539 abort('javaCompliance property required for non-native project ' + name)
529 if len(ap) > 0: 540 if len(ap) > 0:
530 p.annotationProcessors = ap 541 p._annotationProcessors = ap
531 p.__dict__.update(attrs) 542 p.__dict__.update(attrs)
532 self.projects.append(p) 543 self.projects.append(p)
533 544
534 for name, attrs in libsMap.iteritems(): 545 for name, attrs in libsMap.iteritems():
535 path = attrs.pop('path') 546 path = attrs.pop('path')
1513 1524
1514 javacArgs = [] 1525 javacArgs = []
1515 if java().debug_port is not None: 1526 if java().debug_port is not None:
1516 javacArgs += ['-J-Xdebug', '-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=' + str(java().debug_port)] 1527 javacArgs += ['-J-Xdebug', '-J-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=' + str(java().debug_port)]
1517 1528
1518 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 1529 ap = p.annotation_processors()
1519 processorPath = classpath(p.annotationProcessors, resolve=True) 1530 if len(ap) > 0:
1531 processorPath = classpath(ap, resolve=True)
1520 genDir = p.source_gen_dir(); 1532 genDir = p.source_gen_dir();
1521 if exists(genDir): 1533 if exists(genDir):
1522 shutil.rmtree(genDir) 1534 shutil.rmtree(genDir)
1523 os.mkdir(genDir) 1535 os.mkdir(genDir)
1524 javacArgs += ['-processorpath', join(processorPath), '-s', genDir] 1536 javacArgs += ['-processorpath', join(processorPath), '-s', genDir]
2170 srcDir = join(p.dir, src) 2182 srcDir = join(p.dir, src)
2171 if not exists(srcDir): 2183 if not exists(srcDir):
2172 os.mkdir(srcDir) 2184 os.mkdir(srcDir)
2173 out.element('classpathentry', {'kind' : 'src', 'path' : src}) 2185 out.element('classpathentry', {'kind' : 'src', 'path' : src})
2174 2186
2175 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2187 if len(p.annotation_processors()) > 0:
2176 genDir = p.source_gen_dir(); 2188 genDir = p.source_gen_dir();
2177 if not exists(genDir): 2189 if not exists(genDir):
2178 os.mkdir(genDir) 2190 os.mkdir(genDir)
2179 out.element('classpathentry', {'kind' : 'src', 'path' : 'src_gen'}) 2191 out.element('classpathentry', {'kind' : 'src', 'path' : 'src_gen'})
2180 2192
2294 os.mkdir(settingsDir) 2306 os.mkdir(settingsDir)
2295 2307
2296 eclipseSettingsDir = join(suite.dir, 'mx', 'eclipse-settings') 2308 eclipseSettingsDir = join(suite.dir, 'mx', 'eclipse-settings')
2297 if exists(eclipseSettingsDir): 2309 if exists(eclipseSettingsDir):
2298 for name in os.listdir(eclipseSettingsDir): 2310 for name in os.listdir(eclipseSettingsDir):
2299 if name == "org.eclipse.jdt.apt.core.prefs" and not (hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0): 2311 if name == "org.eclipse.jdt.apt.core.prefs" and not len(p.annotation_processors()) > 0:
2300 continue 2312 continue
2301 path = join(eclipseSettingsDir, name) 2313 path = join(eclipseSettingsDir, name)
2302 if isfile(path): 2314 if isfile(path):
2303 with open(join(eclipseSettingsDir, name)) as f: 2315 with open(join(eclipseSettingsDir, name)) as f:
2304 content = f.read() 2316 content = f.read()
2305 content = content.replace('${javaCompliance}', str(p.javaCompliance)) 2317 content = content.replace('${javaCompliance}', str(p.javaCompliance))
2306 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2318 if len(p.annotation_processors()) > 0:
2307 content = content.replace('org.eclipse.jdt.core.compiler.processAnnotations=disabled', 'org.eclipse.jdt.core.compiler.processAnnotations=enabled') 2319 content = content.replace('org.eclipse.jdt.core.compiler.processAnnotations=disabled', 'org.eclipse.jdt.core.compiler.processAnnotations=enabled')
2308 update_file(join(settingsDir, name), content) 2320 update_file(join(settingsDir, name), content)
2309 2321
2310 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2322 if len(p.annotation_processors()) > 0:
2311 out = XMLDoc() 2323 out = XMLDoc()
2312 out.open('factorypath') 2324 out.open('factorypath')
2313 out.element('factorypathentry', {'kind' : 'PLUGIN', 'id' : 'org.eclipse.jst.ws.annotations.core', 'enabled' : 'true', 'runInBatchMode' : 'false'}) 2325 out.element('factorypathentry', {'kind' : 'PLUGIN', 'id' : 'org.eclipse.jst.ws.annotations.core', 'enabled' : 'true', 'runInBatchMode' : 'false'})
2314 for ap in p.annotationProcessors: 2326 for ap in p.annotation_processors():
2315 apProject = project(ap) 2327 apProject = project(ap)
2316 for dep in apProject.all_deps([], True): 2328 for dep in apProject.all_deps([], True):
2317 if dep.isLibrary(): 2329 if dep.isLibrary():
2318 if not hasattr(dep, 'eclipse.container') and not hasattr(dep, 'eclipse.project'): 2330 if not hasattr(dep, 'eclipse.container') and not hasattr(dep, 'eclipse.project'):
2319 if dep.mustExist: 2331 if dep.mustExist:
2337 Determines if a given project is part of an annotation processor. 2349 Determines if a given project is part of an annotation processor.
2338 """ 2350 """
2339 processors = set() 2351 processors = set()
2340 2352
2341 for otherProject in projects(): 2353 for otherProject in projects():
2342 if hasattr(otherProject, 'annotationProcessors') and len(otherProject.annotationProcessors) > 0: 2354 if len(p.annotation_processors()) > 0:
2343 for processorName in otherProject.annotationProcessors: 2355 for processorName in otherProject.annotation_processors():
2344 processors.add(project(processorName, fatalIfMissing=True)) 2356 processors.add(project(processorName, fatalIfMissing=True))
2345 2357
2346 if p in processors: 2358 if p in processors:
2347 return True 2359 return True
2348 2360
2444 out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'}) 2456 out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'})
2445 out.element('name', data=p.name) 2457 out.element('name', data=p.name)
2446 out.element('explicit-platform', {'explicit-source-supported' : 'true'}) 2458 out.element('explicit-platform', {'explicit-source-supported' : 'true'})
2447 out.open('source-roots') 2459 out.open('source-roots')
2448 out.element('root', {'id' : 'src.dir'}) 2460 out.element('root', {'id' : 'src.dir'})
2449 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2461 if len(p.annotation_processors()) > 0:
2450 out.element('root', {'id' : 'src.ap-source-output.dir'}) 2462 out.element('root', {'id' : 'src.ap-source-output.dir'})
2451 out.close('source-roots') 2463 out.close('source-roots')
2452 out.open('test-roots') 2464 out.open('test-roots')
2453 out.close('test-roots') 2465 out.close('test-roots')
2454 out.close('data') 2466 out.close('data')
2484 jdkPlatform = 'JDK_' + str(java().version) 2496 jdkPlatform = 'JDK_' + str(java().version)
2485 2497
2486 annotationProcessorEnabled = "false" 2498 annotationProcessorEnabled = "false"
2487 annotationProcessorReferences = "" 2499 annotationProcessorReferences = ""
2488 annotationProcessorSrcFolder = "" 2500 annotationProcessorSrcFolder = ""
2489 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2501 if len(p.annotation_processors()) > 0:
2490 annotationProcessorEnabled = "true" 2502 annotationProcessorEnabled = "true"
2491 annotationProcessorSrcFolder = "src.ap-source-output.dir=${build.generated.sources.dir}/ap-source-output" 2503 annotationProcessorSrcFolder = "src.ap-source-output.dir=${build.generated.sources.dir}/ap-source-output"
2492 2504
2493 content = """ 2505 content = """
2494 annotation.processing.enabled=""" + annotationProcessorEnabled + """ 2506 annotation.processing.enabled=""" + annotationProcessorEnabled + """
2576 2588
2577 javacClasspath = [] 2589 javacClasspath = []
2578 2590
2579 deps = p.all_deps([], True) 2591 deps = p.all_deps([], True)
2580 annotationProcessorOnlyDeps = [] 2592 annotationProcessorOnlyDeps = []
2581 if hasattr(p, 'annotationProcessors') and len(p.annotationProcessors) > 0: 2593 if len(p.annotation_processors()) > 0:
2582 for ap in p.annotationProcessors: 2594 for ap in p.annotation_processors():
2583 apProject = project(ap) 2595 apProject = project(ap)
2584 if not apProject in deps: 2596 if not apProject in deps:
2585 deps.append(apProject) 2597 deps.append(apProject)
2586 annotationProcessorOnlyDeps.append(apProject) 2598 annotationProcessorOnlyDeps.append(apProject)
2587 2599