blob: a614c74bb9d0bb6f33bce0a9826ae9d0c48eaf0a [file] [log] [blame]
# 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
)