This repository has been archived by the owner on Aug 5, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 46
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
change java_target_info to jvm_target_info
- Loading branch information
Showing
12 changed files
with
198 additions
and
204 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.