gn2bp: Create `java_genrule` from java actions

* Actions whose outputs are "srcjar" and ".java" files only are converted into a `java_genrule` instead of `cc_genrule`. The only exception to this is the jni_registration_module which produces a header file and a srcjar, it's kept a cc_genrule but deep-copied by create_java_module to have a java_genrule copy.

Test: None
Change-Id: I07270c9a7984a8fd26a53ca614287a3a646d65d6
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index 54ad140..ca8d2a0 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -2331,7 +2331,7 @@
 }
 
 // GN: //base:base_android_java_enums_srcjar
-cc_genrule {
+java_genrule {
     name: "cronet_aml_base_base_android_java_enums_srcjar",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/base/base_android_java_enums_srcjar.srcjar " +
@@ -2357,13 +2357,10 @@
         "base/task/task_traits.h",
         "build/android/gyp/java_cpp_enum.py",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //base:base_java_aidl
-cc_genrule {
+java_genrule {
     name: "cronet_aml_base_base_java_aidl",
     cmd: "$(location build/android/gyp/aidl.py) --aidl-path " +
          "../../third_party/android_sdk/public/build-tools/33.0.0/aidl " +
@@ -2385,9 +2382,6 @@
         "base/android/java/src/org/chromium/base/process_launcher/IParentProcess.aidl",
         "build/android/gyp/aidl.py",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //base:base_jni_headers__android_arm
@@ -4229,7 +4223,7 @@
 }
 
 // GN: //base:java_features_srcjar
-cc_genrule {
+java_genrule {
     name: "cronet_aml_base_java_features_srcjar",
     srcs: [
         "base/android/base_features.cc",
@@ -4250,13 +4244,10 @@
         "base/android/java/src/org/chromium/base/BaseFeatures.java.tmpl",
         "build/android/gyp/java_cpp_features.py",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //base:java_switches_srcjar
-cc_genrule {
+java_genrule {
     name: "cronet_aml_base_java_switches_srcjar",
     srcs: [
         "base/base_switches.cc",
@@ -4273,9 +4264,6 @@
         "base/android/java/src/org/chromium/base/BaseSwitches.java.tmpl",
         "build/android/gyp/java_cpp_strings.py",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //base:logging_buildflags__android_arm
@@ -5696,7 +5684,7 @@
 }
 
 // GN: //build/android:build_config_gen
-cc_genrule {
+java_genrule {
     name: "cronet_aml_build_android_build_config_gen",
     cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
          "["../../", "gen"] " +
@@ -5712,13 +5700,10 @@
         "build/android/gyp/gcc_preprocess.py",
         "build/android/java/templates/BuildConfig.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //build/android:native_libraries_gen
-cc_genrule {
+java_genrule {
     name: "cronet_aml_build_android_native_libraries_gen",
     cmd: "$(location build/android/gyp/write_native_libraries_java.py) --output " +
          "gen/build/android/native_libraries_gen.srcjar " +
@@ -5733,9 +5718,6 @@
         "build/android/gyp/write_native_libraries_java.py",
         "build/gn_helpers.py",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //build:branding_buildflags__android_arm
@@ -7532,7 +7514,7 @@
 }
 
 // GN: //components/cronet/android:http_cache_type_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_http_cache_type_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/http_cache_type_java.srcjar " +
@@ -7544,13 +7526,10 @@
         "build/android/gyp/java_cpp_enum.py",
         "components/cronet/url_request_context_config.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:implementation_api_version
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_implementation_api_version",
     cmd: "$(location build/util/version.py) -f " +
          "$(location chrome/VERSION) " +
@@ -7571,13 +7550,10 @@
         "chrome/VERSION",
         "components/cronet/android/java/src/org/chromium/net/impl/ImplVersion.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:integrated_mode_state
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_integrated_mode_state",
     cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
          "["../../", "gen"] " +
@@ -7591,13 +7567,10 @@
         "build/android/gyp/gcc_preprocess.py",
         "components/cronet/android/java/src/org/chromium/net/impl/IntegratedModeState.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:interface_api_version
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_interface_api_version",
     cmd: "$(location build/util/version.py) -f " +
          "$(location chrome/VERSION) " +
@@ -7618,13 +7591,10 @@
         "chrome/VERSION",
         "components/cronet/android/api/src/org/chromium/net/ApiVersion.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:load_states_list
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_load_states_list",
     cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
          "["../../", "gen"] " +
@@ -7638,13 +7608,10 @@
         "build/android/gyp/gcc_preprocess.py",
         "components/cronet/android/java/src/org/chromium/net/impl/LoadState.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:net_idempotency_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_net_idempotency_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/net_idempotency_java.srcjar " +
@@ -7656,13 +7623,10 @@
         "build/android/gyp/java_cpp_enum.py",
         "net/base/idempotency.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:net_request_priority_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_net_request_priority_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/net_request_priority_java.srcjar " +
@@ -7674,13 +7638,10 @@
         "build/android/gyp/java_cpp_enum.py",
         "net/base/request_priority.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:network_quality_observation_source_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_network_quality_observation_source_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/network_quality_observation_source_java.srcjar " +
@@ -7692,13 +7653,10 @@
         "build/android/gyp/java_cpp_enum.py",
         "net/nqe/network_quality_observation_source.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:rtt_throughput_values_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_rtt_throughput_values_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/rtt_throughput_values_java.srcjar " +
@@ -7710,13 +7668,10 @@
         "build/android/gyp/java_cpp_enum.py",
         "net/nqe/network_quality.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet/android:url_request_error_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_components_cronet_android_url_request_error_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/components/cronet/android/url_request_error_java.srcjar " +
@@ -7728,9 +7683,6 @@
         "build/android/gyp/java_cpp_enum.py",
         "components/cronet/android/url_request_error.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //components/cronet:cronet_buildflags__android_arm
@@ -9488,7 +9440,7 @@
 }
 
 // GN: //net/android:net_android_java_enums_srcjar
-cc_genrule {
+java_genrule {
     name: "cronet_aml_net_android_net_android_java_enums_srcjar",
     srcs: [
         "net/android/network_change_notifier_android.cc",
@@ -9512,13 +9464,10 @@
         "net/android/keystore.h",
         "net/base/network_change_notifier.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //net/android:net_errors_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_net_android_net_errors_java",
     cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
          "["../../", "gen"] " +
@@ -9532,9 +9481,6 @@
         "build/android/gyp/gcc_preprocess.py",
         "net/android/java/NetError.template",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //net/base/registry_controlled_domains:registry_controlled_domains__android_arm
@@ -10829,7 +10775,7 @@
 }
 
 // GN: //net:effective_connection_type_java
-cc_genrule {
+java_genrule {
     name: "cronet_aml_net_effective_connection_type_java",
     cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
          "gen/net/effective_connection_type_java.srcjar " +
@@ -10841,9 +10787,6 @@
         "build/android/gyp/java_cpp_enum.py",
         "net/nqe/effective_connection_type.h",
     ],
-    apex_available: [
-        "com.android.tethering",
-    ],
 }
 
 // GN: //net/http:transport_security_state_generated_files
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index d120199..e54cb31 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -397,7 +397,7 @@
     return write_blueprint_key_value(output, name, value, sort)
 
   def is_compiled(self):
-    return self.type not in ('cc_genrule', 'filegroup', 'cc_defaults')
+    return self.type not in ('cc_genrule', 'filegroup', 'java_genrule')
 
   def is_genrule(self):
     return self.type == "cc_genrule"
@@ -830,11 +830,11 @@
         new_args.append(arg)
 
   target.args = new_args
-  return create_action_module(blueprint, target)
+  return create_action_module(blueprint, target, 'cc_genrule')
 
-def create_action_module(blueprint, target):
+def create_action_module(blueprint, target, type):
   bp_module_name = label_to_module_name(target.name)
-  module = Module('cc_genrule', bp_module_name, target.name)
+  module = Module(type, bp_module_name, target.name)
 
   sanitizer = get_action_sanitizer(target)
   target.args = sanitizer.get_args()
@@ -964,7 +964,6 @@
                                  for d in include_dirs
                                  if not re.match('^//out/.*', d)])
 
-
 def create_modules_from_target(blueprint, gn, gn_target_name):
   """Generate module(s) for a given GN target.
 
@@ -1004,7 +1003,15 @@
     if module is None:
       return None
   elif target.type == 'action':
-    module = create_action_module(blueprint, target)
+    if gn_utils.is_java_action(target.script, target.outputs) and \
+        target.name != "//components/cronet/android:cronet_jni_registration":
+      # This is a cc_genrule that generates both a c++ header file and
+      # srcjar for java. Treat it as a cc_genrule for the time being while
+      # making anothe deep copy of the module and append _java to it for
+      # the java_library.
+      module = create_action_module(blueprint, target, 'java_genrule')
+    else:
+      module = create_action_module(blueprint, target, 'cc_genrule')
   elif target.type == 'action_foreach':
     module = create_action_foreach_modules(blueprint, target)
   elif target.type == 'copy':