aboutsummaryrefslogtreecommitdiff
path: root/rules/intellij.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'rules/intellij.bzl')
-rw-r--r--rules/intellij.bzl165
1 files changed, 165 insertions, 0 deletions
diff --git a/rules/intellij.bzl b/rules/intellij.bzl
new file mode 100644
index 0000000..c870b1b
--- /dev/null
+++ b/rules/intellij.bzl
@@ -0,0 +1,165 @@
+# Copyright 2018 The Bazel Authors. All rights reserved.
+#
+# 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.
+
+"""Common methods for use by the IntelliJ Aspect."""
+
+load(":java.bzl", _java = "java")
+load(":utils.bzl", _utils = "utils")
+
+def _extract_idl_jars(
+ ctx,
+ idl_java_srcs = [],
+ jar = None,
+ manifest_proto = None,
+ out_srcjar = None,
+ out_jar = None,
+ idlclass = None,
+ host_javabase = None):
+ """Extracts the idl class and src jars."""
+ args = ctx.actions.args()
+ args.add("--class_jar", jar)
+ args.add("--manifest_proto", manifest_proto)
+ args.add("--output_class_jar", out_jar)
+ args.add("--output_source_jar", out_srcjar)
+ args.add("--temp_dir", out_jar.dirname)
+ args.add_all(idl_java_srcs)
+
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = idlclass,
+ arguments = [args],
+ inputs = idl_java_srcs + [jar, manifest_proto],
+ outputs = [out_srcjar, out_jar],
+ mnemonic = "AndroidIdlJars",
+ progress_message = "Building idl jars %s" % out_jar.path,
+ )
+
+def _make_android_ide_info(
+ ctx,
+ idl_ctx = None,
+ resources_ctx = None,
+ defines_resources = False,
+ java_package = None,
+ manifest = None,
+ merged_manifest = None,
+ resources_apk = None,
+ idl_import_root = None,
+ idl_srcs = [],
+ idl_java_srcs = [],
+ java_info = None,
+ r_jar = None,
+ signed_apk = None,
+ aar = None,
+ apks_under_test = [],
+ native_libs = dict(),
+ idlclass = None,
+ host_javabase = None):
+ # TODO(b/154513292): Clean up bad usages of context objects.
+ if idl_ctx:
+ idl_import_root = idl_ctx.idl_import_root
+ idl_srcs = idl_ctx.idl_srcs
+ idl_java_srcs = idl_ctx.idl_java_srcs
+ if resources_ctx:
+ defines_resources = resources_ctx.defines_resources
+ merged_manifest = resources_ctx.merged_manifest
+ resources_apk = resources_ctx.resources_apk
+
+ if not defines_resources:
+ java_package = None
+ merged_manifest = None
+
+ # Extracts idl related classes from the jar and creates a src jar
+ # for the idl generated java.
+ idl_jar = None
+ idl_srcjar = None
+
+ # TODO(djwhang): JavaInfo.outputs.jar.manifest_proto is not created by
+ # Kotlin compile. Determine if this is the same manifest_proto produced
+ # by turbine, this could be pulled during annotation processing.
+ jar = _utils.only(java_info.outputs.jars)
+ if idl_java_srcs and jar.manifest_proto:
+ idl_jar = ctx.actions.declare_file("lib%s-idl.jar" % ctx.label.name)
+ idl_srcjar = \
+ ctx.actions.declare_file("lib%s-idl.srcjar" % ctx.label.name)
+
+ jar = _utils.only(java_info.outputs.jars)
+ _extract_idl_jars(
+ ctx,
+ idl_java_srcs = idl_java_srcs,
+ jar = jar.class_jar,
+ manifest_proto = jar.manifest_proto,
+ out_jar = idl_jar,
+ out_srcjar = idl_srcjar,
+ idlclass = idlclass,
+ host_javabase = host_javabase,
+ )
+
+ return AndroidIdeInfo(
+ java_package,
+ manifest,
+ merged_manifest,
+ idl_import_root,
+ idl_srcs,
+ idl_java_srcs,
+ idl_srcjar,
+ idl_jar,
+ defines_resources,
+ r_jar,
+ resources_apk,
+ signed_apk,
+ aar,
+ apks_under_test,
+ native_libs,
+ )
+
+def _make_legacy_android_provider(android_ide_info):
+ # Create the ClassJar "object" for the target.android.idl.output field.
+ if android_ide_info.idl_class_jar:
+ idl_class_jar = struct(
+ class_jar = android_ide_info.idl_class_jar,
+ ijar = None,
+ source_jar = android_ide_info.idl_source_jar,
+ )
+ else:
+ idl_class_jar = None
+
+ return struct(
+ aar = android_ide_info.aar,
+ apk = android_ide_info.signed_apk,
+ apks_under_test = android_ide_info.apks_under_test,
+ defines_resources = android_ide_info.defines_android_resources,
+ idl = struct(
+ import_root = android_ide_info.idl_import_root,
+ sources = android_ide_info.idl_srcs,
+ generated_java_files = android_ide_info.idl_generated_java_files,
+ output = idl_class_jar,
+ ),
+ java_package = android_ide_info.java_package,
+ manifest = android_ide_info.manifest,
+ merged_manifest = android_ide_info.generated_manifest,
+ native_libs = android_ide_info.native_libs,
+ resource_apk = android_ide_info.resource_apk,
+ resource_jar = android_ide_info.resource_jar,
+ )
+
+intellij = struct(
+ make_android_ide_info = _make_android_ide_info,
+ make_legacy_android_provider = _make_legacy_android_provider,
+)
+
+# Only visible for testing.
+testing = struct(
+ extract_idl_jars = _extract_idl_jars,
+)