diff options
author | 2017-08-24 19:54:34 +0200 | |
---|---|---|
committer | 2017-08-25 12:53:35 +0200 | |
commit | c79ed5dec0beda5465a3200b6a1139a3d29a8da6 (patch) | |
tree | 26b7b657056029164818e504d35f5a60052e5533 /src/main/java/com/google | |
parent | 23bb662af090602971aa86ad59827810dafcb70f (diff) |
Refactor JavaInfo.
Convert implementation from populating an immutable map to a set of
SkylarkCallables. That saves memory and allows specifying documentation.
Also properly implements equals() and hashCode().
RELNOTES: None.
PiperOrigin-RevId: 166364059
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java | 78 |
1 files changed, 63 insertions, 15 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index 46c45c6e05..f50fae3012 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.java; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.Runfiles; @@ -26,6 +25,9 @@ import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMapBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import com.google.devtools.build.lib.syntax.SkylarkNestedSet; import java.util.ArrayList; import java.util.LinkedList; @@ -33,6 +35,11 @@ import java.util.List; import javax.annotation.Nullable; /** A Skylark declared provider that encapsulates all providers that are needed by Java rules. */ +@SkylarkModule( + name = "java_common.provider", + doc = "Encapsulates all information provided by Java rules", + category = SkylarkModuleCategory.PROVIDER +) @Immutable public final class JavaInfo extends NativeInfo { @@ -175,23 +182,64 @@ public final class JavaInfo extends NativeInfo { } private JavaInfo(TransitiveInfoProviderMap providers) { - super(PROVIDER, ImmutableMap.<String, Object>of( - "transitive_runtime_jars", SkylarkNestedSet.of( - Artifact.class, - providers.getProvider(JavaCompilationArgsProvider.class) - .getRecursiveJavaCompilationArgs().getRuntimeJars()), - "transitive_compile_time_jars", SkylarkNestedSet.of( - Artifact.class, - providers.getProvider(JavaCompilationArgsProvider.class) - .getRecursiveJavaCompilationArgs().getCompileTimeJars()), - "compile_jars", SkylarkNestedSet.of( - Artifact.class, - providers.getProvider(JavaCompilationArgsProvider.class) - .getJavaCompilationArgs().getCompileTimeJars()) - )); + super(PROVIDER); this.providers = providers; } + @SkylarkCallable( + name = "transitive_runtime_jars", + doc = "Depset of runtime jars required by this target", + structField = true + ) + public SkylarkNestedSet getTransitiveRuntimeJars() { + return SkylarkNestedSet.of( + Artifact.class, + providers.getProvider(JavaCompilationArgsProvider.class) + .getRecursiveJavaCompilationArgs().getRuntimeJars()); + } + + @SkylarkCallable( + name = "transitive_compile_time_jars", + doc = "Depset of compile time jars recusrively required by this target", + structField = true + ) + public SkylarkNestedSet getTransitiveCompileTimeJars() { + return SkylarkNestedSet.of( + Artifact.class, + providers.getProvider(JavaCompilationArgsProvider.class) + .getRecursiveJavaCompilationArgs().getCompileTimeJars()); + } + + @SkylarkCallable( + name = "compile_jars", + doc = "Depset of compile time jars required by this target directly", + structField = true + ) + public SkylarkNestedSet getCompileTimeJars() { + return SkylarkNestedSet.of( + Artifact.class, + providers.getProvider(JavaCompilationArgsProvider.class) + .getJavaCompilationArgs().getCompileTimeJars()); + } + + @Override + public boolean equals(Object otherObject) { + if (this == otherObject) { + return true; + } + if (!(otherObject instanceof JavaInfo)) { + return false; + } + + JavaInfo other = (JavaInfo) otherObject; + return providers.equals(other.providers); + } + + @Override + public int hashCode() { + return providers.hashCode(); + } + /** * A Builder for {@link JavaInfo}. */ |