# Copyright 2017 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/rules.gni")

java_binary("bytecode_processor") {
  main_class = "org.chromium.bytecode.ByteCodeProcessor"
  wrapper_script_name = "helper/bytecode_processor"
  deps = [ ":bytecode_processor_java" ]
}

java_library("bytecode_processor_java") {
  sources = [
    "java/org/chromium/bytecode/ByteCodeProcessor.java",
    "java/org/chromium/bytecode/ClassPathValidator.java",
    "java/org/chromium/bytecode/TypeUtils.java",
  ]
  deps = [
    "//third_party/android_deps:org_ow2_asm_asm_java",
    "//third_party/android_deps:org_ow2_asm_asm_util_java",
  ]
  enable_bytecode_checks = false
}

# A bytecode rewriter that replaces all calls to
# `FragmentActivity Fragment.getActivity()` with
# `Activity Fragment.getActivity()`.
java_binary("fragment_activity_replacer") {
  main_class = "org.chromium.bytecode.FragmentActivityReplacer"
  deps = [ ":fragment_activity_replacer_java" ]
  wrapper_script_name = "helper/fragment_activity_replacer"
}

# A bytecode rewriter that replaces all calls to
# `FragmentActivity Fragment.getActivity()` with
# `Activity Fragment.getActivity()`  followed by a cast to FragmentActivity.
# Prefer :fragment_activity_replacer. This rewriter should only be used for
# libraries that rely on getActivity() returning a FragmentActivity *and* are
# not going to be used in an app that contains multiple copies of the AndroidX
# Fragment library (i.e. WebLayer).
java_binary("fragment_activity_replacer_single_androidx") {
  main_class = "org.chromium.bytecode.FragmentActivityReplacer"
  deps = [ ":fragment_activity_replacer_java" ]
  wrapper_script_name = "helper/fragment_activity_replacer_single_androidx"
  wrapper_script_args = [ "--single-androidx" ]
}

java_library("fragment_activity_replacer_java") {
  visibility = [ ":*" ]
  sources = [
    "java/org/chromium/bytecode/ByteCodeRewriter.java",
    "java/org/chromium/bytecode/FragmentActivityReplacer.java",
  ]
  deps = [
    "//third_party/android_deps:org_ow2_asm_asm_commons_java",
    "//third_party/android_deps:org_ow2_asm_asm_java",
    "//third_party/android_deps:org_ow2_asm_asm_util_java",
  ]
}

java_binary("trace_event_adder") {
  main_class = "org.chromium.bytecode.TraceEventAdder"
  deps = [ ":trace_event_adder_java" ]
  wrapper_script_name = "helper/trace_event_adder"
}

java_library("trace_event_adder_java") {
  visibility = [ ":*" ]
  sources = [
    "java/org/chromium/bytecode/ByteCodeRewriter.java",
    "java/org/chromium/bytecode/EmptyOverrideGeneratorClassAdapter.java",
    "java/org/chromium/bytecode/MethodCheckerClassAdapter.java",
    "java/org/chromium/bytecode/MethodDescription.java",
    "java/org/chromium/bytecode/ParentMethodCheckerClassAdapter.java",
    "java/org/chromium/bytecode/TraceEventAdder.java",
    "java/org/chromium/bytecode/TraceEventAdderClassAdapter.java",
    "java/org/chromium/bytecode/TraceEventAdderMethodAdapter.java",
  ]
  deps = [
    ":bytecode_processor_java",
    "//third_party/android_deps:org_ow2_asm_asm_commons_java",
    "//third_party/android_deps:org_ow2_asm_asm_java",
    "//third_party/android_deps:org_ow2_asm_asm_util_java",
  ]
}
