Skip to content
This repository has been archived by the owner on Aug 5, 2024. It is now read-only.

Commit

Permalink
[maintenance] change kotlin and scala providers, rename `JavaTargetIn…
Browse files Browse the repository at this point in the history
…fo` to `JvmTargetInfo`

checking rule kind

add checking for JavaInfo in target

Revert "add that comma back"

This reverts commit 0695724.

add that comma back

change java_target_info to jvm_target_info

remove that scala thing

change kotlin and scala providers, add toolchains to extensions.bzl file


Merge-request: BAZEL-MR-473
Merged-by: Katarzyna Mielnik <katarzyna.anna.mielnik@jetbrains.com>
  • Loading branch information
mielnikk authored and qodana-bot committed Aug 30, 2023
1 parent c4a6701 commit edcfd4b
Show file tree
Hide file tree
Showing 15 changed files with 235 additions and 250 deletions.
5 changes: 2 additions & 3 deletions aspects/core.bzl
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
load("//aspects:utils/utils.bzl", "abs", "create_struct", "file_location", "get_aspect_ids", "update_sync_output_groups")
load("//aspects:rules/java/java_info.bzl", "JAVA_RUNTIME_TOOLCHAIN_TYPE")
load("//aspects:extensions.bzl", "EXTENSIONS")
load("//aspects:extensions.bzl", "EXTENSIONS", "TOOLCHAINS")

def create_all_extension_info(target, ctx, output_groups, dep_targets):
info = [create_extension_info(target = target, ctx = ctx, output_groups = output_groups, dep_targets = dep_targets) for create_extension_info in EXTENSIONS]
Expand Down Expand Up @@ -186,5 +185,5 @@ bsp_target_info_aspect = aspect(
implementation = _bsp_target_info_aspect_impl,
required_aspect_providers = [[JavaInfo]],
attr_aspects = ALL_DEPS,
toolchains = [JAVA_RUNTIME_TOOLCHAIN_TYPE],
toolchains = TOOLCHAINS,
)
3 changes: 2 additions & 1 deletion aspects/extensions.bzl
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# This file is supposed to be overwritten with extensions relevant to the project.
# This file is supposed to be overwritten with extensions and toolchains relevant to the project.
EXTENSIONS = []
TOOLCHAINS = []
146 changes: 1 addition & 145 deletions aspects/rules/java/java_info.bzl
Original file line number Diff line number Diff line change
@@ -1,148 +1,4 @@
load("//aspects:utils/java_utils.bzl", "get_java_provider")
load("//aspects:utils/utils.bzl", "create_proto", "create_struct", "file_location", "is_external", "map", "to_file_location", "update_sync_output_groups")

def map_with_resolve_files(f, xs):
results = []
resolve_files = []

for x in xs:
if x != None:
res = f(x)
if res != None:
a, b = res
if a != None:
results.append(a)
if b != None:
resolve_files += b

return results, resolve_files

def get_interface_jars(output):
if hasattr(output, "compile_jar") and output.compile_jar:
return [output.compile_jar]
elif hasattr(output, "ijar") and output.ijar:
return [output.ijar]
else:
return []

def get_source_jars(output):
if hasattr(output, "source_jars"):
return output.source_jars
if hasattr(output, "source_jar"):
return [output.source_jar]
return []

def get_generated_jars(provider):
if hasattr(provider, "java_outputs"):
return map_with_resolve_files(to_generated_jvm_outputs, provider.java_outputs)

if hasattr(provider, "annotation_processing") and provider.annotation_processing and provider.annotation_processing.enabled:
class_jar = provider.annotation_processing.class_jar
source_jar = provider.annotation_processing.source_jar
output = struct(
binary_jars = [file_location(class_jar)],
source_jars = [file_location(source_jar)],
)
resolve_files = [class_jar, source_jar]
return [output], resolve_files

return [], []

def to_generated_jvm_outputs(output):
if output == None or output.generated_class_jar == None:
return None

class_jar = output.generated_class_jar
source_jar = output.generated_source_jar

output = struct(
binary_jars = [file_location(class_jar)],
source_jars = [file_location(source_jar)],
)
resolve_files = [class_jar, source_jar]
return output, resolve_files

def to_jvm_outputs(output):
if output == None or output.class_jar == None:
return None

binary_jars = [output.class_jar]
interface_jars = get_interface_jars(output)
source_jars = get_source_jars(output)
output = struct(
binary_jars = map(file_location, binary_jars),
interface_jars = map(file_location, interface_jars),
source_jars = map(file_location, source_jars),
)
resolve_files = binary_jars + interface_jars + source_jars
return output, resolve_files

def extract_runtime_jars(target, provider):
compilation_info = getattr(provider, "compilation_info", None)

if compilation_info:
return compilation_info.runtime_classpath

return getattr(provider, "transitive_runtime_jars", target[JavaInfo].transitive_runtime_jars)

def extract_compile_jars(provider):
compilation_info = getattr(provider, "compilation_info", None)
transitive_compile_time_jars = getattr(provider, "transitive_compile_time_jars", depset())

return compilation_info.compilation_classpath if compilation_info else transitive_compile_time_jars

def extract_java_info(target, ctx, output_groups, **kwargs):
provider = get_java_provider(target)
if not provider:
return None, None

if hasattr(provider, "java_outputs") and provider.java_outputs:
java_outputs = provider.java_outputs
elif hasattr(provider, "outputs") and provider.outputs:
java_outputs = provider.outputs.jars
else:
return None, None

resolve_files = []

jars, resolve_files_jars = map_with_resolve_files(to_jvm_outputs, java_outputs)
resolve_files += resolve_files_jars

generated_jars, resolve_files_generated_jars = get_generated_jars(provider)
resolve_files += resolve_files_generated_jars

runtime_jars = extract_runtime_jars(target, provider).to_list()
compile_jars = extract_compile_jars(provider).to_list()
source_jars = getattr(provider, "transitive_source_jars", depset()).to_list()
resolve_files += runtime_jars
resolve_files += compile_jars
resolve_files += source_jars

runtime_classpath = map(file_location, runtime_jars)
compile_classpath = map(file_location, compile_jars)
source_classpath = map(file_location, source_jars)

javac_opts = getattr(ctx.rule.attr, "javacopts", [])
jvm_flags = getattr(ctx.rule.attr, "jvm_flags", [])
args = getattr(ctx.rule.attr, "args", [])
main_class = getattr(ctx.rule.attr, "main_class", None)

if (is_external(target)):
update_sync_output_groups(output_groups, "external-deps-resolve", depset(resolve_files))

info = create_struct(
jars = jars,
generated_jars = generated_jars,
runtime_classpath = runtime_classpath,
compile_classpath = compile_classpath,
source_classpath = source_classpath,
javac_opts = javac_opts,
jvm_flags = jvm_flags,
main_class = main_class,
args = args,
)

return create_proto(target, ctx, info, "java_target_info"), None
load("//aspects:utils/utils.bzl", "create_proto", "create_struct", "to_file_location")

def extract_java_toolchain(target, ctx, dep_targets, **kwargs):
toolchain = None
Expand Down
153 changes: 153 additions & 0 deletions aspects/rules/jvm/jvm_info.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
load("//aspects:utils/utils.bzl", "create_proto", "create_struct", "file_location", "is_external", "map", "update_sync_output_groups")

def map_with_resolve_files(f, xs):
results = []
resolve_files = []

for x in xs:
if x != None:
res = f(x)
if res != None:
a, b = res
if a != None:
results.append(a)
if b != None:
resolve_files += b

return results, resolve_files

def get_interface_jars(output):
if hasattr(output, "compile_jar") and output.compile_jar:
return [output.compile_jar]
elif hasattr(output, "ijar") and output.ijar:
return [output.ijar]
else:
return []

def get_source_jars(output):
if hasattr(output, "source_jars"):
return output.source_jars
if hasattr(output, "source_jar"):
return [output.source_jar]
return []

def to_generated_jvm_outputs(output):
if output == None or output.generated_class_jar == None:
return None

class_jar = output.generated_class_jar
source_jar = output.generated_source_jar

output = struct(
binary_jars = [file_location(class_jar)],
source_jars = [file_location(source_jar)],
)
resolve_files = [class_jar, source_jar]
return output, resolve_files

def get_generated_jars(provider):
if hasattr(provider, "java_outputs"):
return map_with_resolve_files(to_generated_jvm_outputs, provider.java_outputs)

if hasattr(provider, "annotation_processing") and provider.annotation_processing and provider.annotation_processing.enabled:
class_jar = provider.annotation_processing.class_jar
source_jar = provider.annotation_processing.source_jar
output = struct(
binary_jars = [file_location(class_jar)],
source_jars = [file_location(source_jar)],
)
resolve_files = [class_jar, source_jar]
return [output], resolve_files

return [], []

def to_jvm_outputs(output):
if output == None or output.class_jar == None:
return None

binary_jars = [output.class_jar]
interface_jars = get_interface_jars(output)
source_jars = get_source_jars(output)
output = struct(
binary_jars = map(file_location, binary_jars),
interface_jars = map(file_location, interface_jars),
source_jars = map(file_location, source_jars),
)
resolve_files = binary_jars + interface_jars + source_jars
return output, resolve_files

def extract_runtime_jars(target, provider):
compilation_info = getattr(provider, "compilation_info", None)

if compilation_info:
return compilation_info.runtime_classpath

return getattr(provider, "transitive_runtime_jars", target[JavaInfo].transitive_runtime_jars)

def extract_compile_jars(provider):
compilation_info = getattr(provider, "compilation_info", None)
transitive_compile_time_jars = getattr(provider, "transitive_compile_time_jars", depset())

return compilation_info.compilation_classpath if compilation_info else transitive_compile_time_jars

def get_jvm_provider(target):
if hasattr(target, "scala"):
return target.scala
if hasattr(target, "kt") and hasattr(target.kt, "outputs"):
return target.kt
if JavaInfo in target:
return target[JavaInfo]
return None

def extract_jvm_info(target, ctx, output_groups, **kwargs):
provider = get_jvm_provider(target)
if not provider:
return None, None

if hasattr(provider, "java_outputs") and provider.java_outputs:
java_outputs = provider.java_outputs
elif hasattr(provider, "outputs") and provider.outputs:
java_outputs = provider.outputs.jars
else:
return None, None

resolve_files = []

jars, resolve_files_jars = map_with_resolve_files(to_jvm_outputs, java_outputs)
resolve_files += resolve_files_jars

generated_jars, resolve_files_generated_jars = get_generated_jars(provider)
resolve_files += resolve_files_generated_jars

runtime_jars = extract_runtime_jars(target, provider).to_list()
compile_jars = extract_compile_jars(provider).to_list()
source_jars = getattr(provider, "transitive_source_jars", depset()).to_list()
resolve_files += runtime_jars
resolve_files += compile_jars
resolve_files += source_jars

runtime_classpath = map(file_location, runtime_jars)
compile_classpath = map(file_location, compile_jars)
source_classpath = map(file_location, source_jars)

javac_opts = getattr(ctx.rule.attr, "javacopts", [])
jvm_flags = getattr(ctx.rule.attr, "jvm_flags", [])
args = getattr(ctx.rule.attr, "args", [])
main_class = getattr(ctx.rule.attr, "main_class", None)

if (is_external(target)):
update_sync_output_groups(output_groups, "external-deps-resolve", depset(resolve_files))

info = create_struct(
jars = jars,
generated_jars = generated_jars,
runtime_classpath = runtime_classpath,
compile_classpath = compile_classpath,
source_classpath = source_classpath,
javac_opts = javac_opts,
jvm_flags = jvm_flags,
main_class = main_class,
args = args,
)

return create_proto(target, ctx, info, "jvm_target_info"), None
17 changes: 7 additions & 10 deletions aspects/rules/kt/kt_info.bzl
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
load("@io_bazel_rules_kotlin//kotlin/internal:defs.bzl", "KtJvmInfo")
load("@io_bazel_rules_kotlin//kotlin/internal:opts.bzl", "KotlincOptions")
load("//aspects:utils/utils.bzl", "create_proto", "create_struct")

def extract_kotlin_info(target, ctx, **kwargs):
# if KtJvmInfo not in target:
# return None, None

# provider = target[KtJvmInfo]

if not hasattr(target, "kt"):
if KtJvmInfo not in target:
return None, None

provider = target.kt
provider = target[KtJvmInfo]

# Only supports JVM platform now
if not hasattr(provider, "language_version"):
Expand All @@ -20,10 +17,10 @@ def extract_kotlin_info(target, ctx, **kwargs):
associates = getattr(ctx.rule.attr, "associates", [])
associates_labels = [str(associate.label) for associate in associates]

# kotlinc_opts_target = getattr(ctx.rule.attr, "kotlinc_opts", None)
kotlinc_opts_target = getattr(ctx.rule.attr, "kotlinc_opts", None)
kotlinc_opts = None
# if kotlinc_opts_target != None and KotlincOptions in kotlinc_opts_target:
# kotlinc_opts = kotlinc_opts_target[KotlincOptions]
if kotlinc_opts_target != None and KotlincOptions in kotlinc_opts_target:
kotlinc_opts = kotlinc_opts_target[KotlincOptions]

kotlin_info = dict(
language_version = language_version,
Expand Down
Loading

0 comments on commit edcfd4b

Please sign in to comment.