# 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,
    srcs=[],
    resources=[],
    export_deps=False,
    source='7',
    target='7',
    proguard_config=None,
    deps=[],
    visibility=[],
    ):
  original_java_library(
    name=name,
    srcs=srcs,
    resources=resources,
    export_deps=export_deps,
    source=source,
    target=target,
    proguard_config=proguard_config,
    deps=deps,
    visibility=visibility,
    )
    
original_java_test = java_test
def java_test(
    name,
    srcs=[],
    labels=[],
    resources=[],
    source='7',
    target='7',
    vm_args=[],
    source_under_test=[],
    contacts=[],
    deps=[],
    visibility=[],
    ):
  original_java_test(
    name=name,
    srcs=srcs,
    labels=labels,
    resources=resources,
    source=source,
    target=target,
    # Add -XX:-UseSplitVerifier by default to work around:
    # http://arihantwin.blogspot.com/2012/08/getting-error-illegal-local-variable.html
    vm_args=['-XX:-UseSplitVerifier'] + vm_args,
    source_under_test=source_under_test,
    contacts=contacts,
    deps=deps,
    visibility=visibility,
    )
