# Copyright (C) 2013 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Current Buck version lacks support to overwrite Java version
# in .buckconfig file, under Java section, e. g.:
#
# [java]
#   src_roots = java, resources
#   source = 7
#   target = 7
#
# Instead, the documentaion suggests to provide Java version in
# each and every java_library() call.
#
# This bucklet overwrites the definition of original java_library
# and java_test rules.
#
# Example: this bucklet must be used in .buckconfig file, under
# include section to ensure, that this file is seen before others:
#
# [buildfile]
#   includes = //bucklets/java7.bucklet
#
# @See https://github.com/facebook/buck/pull/67
#
original_java_library = java_library
def java_library(
    name,
    srcs=[],
    resources=[],
    source='7',
    target='7',
    proguard_config=None,
    deps=[],
    exported_deps=[],
    visibility=[],
    ):
  original_java_library(
    name=name,
    srcs=srcs,
    resources=resources,
    source=source,
    target=target,
    proguard_config=proguard_config,
    deps=deps,
    exported_deps=exported_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,
    vm_args=vm_args,
    source_under_test=source_under_test,
    contacts=contacts,
    deps=deps,
    visibility=visibility,
  )
