# Copyright 2021 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/android/android_nocompile.gni")
import("//build/config/android/rules.gni")

missing_symbol_generated_importer_template_nocompile_source =
    "//build/android/java/test/missing_symbol/Importer.template"

template("missing_symbol_test") {
  # Not named "_java" to prevent target from being considered a classpath dep.
  _helper_target_name = string_replace("${target_name}__helper", "java", "")

  group(_helper_target_name) {
    # Make group() depend on dependencies that |target_name| cannot find so that
    # the missing symbol resolver can find and suggest the missing GN dep.
    deps = invoker.deps
  }

  android_library(target_name) {
    sources = [ "//tools/android/errorprone_plugin/test/src/org/chromium/tools/errorprone/plugin/Empty.java" ]
    not_needed(invoker,
               [
                 "sources",
                 "importer_srcjar_deps",
               ])
    if (enable_android_nocompile_tests) {
      if (defined(invoker.sources)) {
        sources += invoker.sources
      }
      if (defined(invoker.importer_srcjar_deps)) {
        srcjar_deps = invoker.importer_srcjar_deps
      }
    }

    deps = [ ":${_helper_target_name}" ]
  }
}

# missing_symbol_test() template wrapper which generates importer class.
template("missing_symbol_generated_importer_test") {
  _importer_generator_target = "${target_name}__importer_javagen"
  java_cpp_template(_importer_generator_target) {
    sources = [ missing_symbol_generated_importer_template_nocompile_source ]
    defines = [
      "_IMPORTER_PACKAGE=${invoker.importer_package}",
      "_IMPORTEE_PACKAGE=${invoker.imported_package}",
      "_IMPORTEE_CLASS_NAME=${invoker.imported_class_name}",
    ]
  }

  missing_symbol_test(target_name) {
    importer_srcjar_deps = [ ":${_importer_generator_target}" ]
    forward_variables_from(invoker, [ "deps" ])
  }
}
