| # This is a quick hack to make it so that all Java rules build using Java 7. |
| # TODO(mbolin): Find a less hacky way to do this, likely something in .buckconfig. |
| |
| original_java_library = java_library |
| def java_library( |
| name, |
| source='7', |
| target='7', |
| **kwargs |
| ): |
| original_java_library( |
| name, |
| source=source, |
| target=target, |
| **kwargs |
| ) |
| |
| def java_immutables_library( |
| name, |
| source='7', |
| target='7', |
| **kwargs |
| ): |
| deps = kwargs.get('deps', []) |
| needed_deps = [ |
| '//src/com/facebook/buck/util/immutables:immutables', |
| '//third-party/java/immutables:annotations', |
| '//third-party/java/guava:guava', |
| '//third-party/java/jsr:jsr305', |
| ] |
| for dep in needed_deps: |
| if not dep in deps: |
| deps.append(dep) |
| annotation_processors = kwargs.get('annotation_processors', []) |
| if not 'org.immutables.value.internal.processor.Processor' in annotation_processors: |
| annotation_processors.append('org.immutables.value.internal.processor.Processor') |
| annotation_processor_deps = kwargs.get('annotation_processor_deps', []) |
| if not '//third-party/java/immutables:processor' in annotation_processor_deps: |
| annotation_processor_deps.append('//third-party/java/immutables:processor') |
| keys_to_remove = ['deps', 'annotation_processors', 'annotation_processor_deps'] |
| args = {} |
| for k in kwargs: |
| if not k in keys_to_remove: |
| args[k] = kwargs[k] |
| return java_library( |
| name, |
| source=source, |
| target=target, |
| deps=deps, |
| annotation_processors=annotation_processors, |
| annotation_processor_deps=annotation_processor_deps, |
| **args) |
| |
| original_java_test = java_test |
| def java_test( |
| name, |
| source='7', |
| target='7', |
| vm_args=[], |
| **kwargs |
| ): |
| original_java_test( |
| name, |
| source=source, |
| target=target, |
| vm_args=[ |
| # Add -XX:-UseSplitVerifier by default to work around: |
| # http://arihantwin.blogspot.com/2012/08/getting-error-illegal-local-variable.html |
| '-XX:-UseSplitVerifier', |
| |
| # Add -Dsun.zip.disableMemoryMapping=true to work around a JDK issue |
| # related to modifying JAR/ZIP files that have been loaded into memory: |
| # |
| # http://bugs.sun.com/view_bug.do?bug_id=7129299 |
| # |
| # This has been observed to cause a problem in integration tests such as |
| # CachedTestIntegrationTest where `buck build //:test` is run repeatedly |
| # such that a corresponding `test.jar` file is overwritten several times. |
| # The CompiledClassFileFinder in JavaTestRule creates a java.util.zip.ZipFile |
| # to enumerate the zip entries in order to find the set of .class files |
| # in `test.jar`. This interleaving of reads and writes appears to match |
| # the conditions to trigger the issue reported on bugs.sun.com. |
| # |
| # Currently, we do not set this flag in bin/buck_common, as Buck does not |
| # normally modify the contents of buck-out after they are loaded into |
| # memory. However, we may need to use this flag when running buckd where |
| # references to zip files may be long-lived. |
| # |
| # Finally, note that when you specify this flag, |
| # `System.getProperty("sun.zip.disableMemoryMapping")` will return `null` |
| # even though you have specified the flag correctly. Apparently sun.misc.VM |
| # (http://www.docjar.com/html/api/sun/misc/VM.java.html) saves the property |
| # internally, but removes it from the set of system properties that are |
| # publicly accessible. |
| '-Dsun.zip.disableMemoryMapping=true', |
| ] + vm_args, |
| **kwargs |
| ) |