aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-08-24 19:54:34 +0200
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-08-25 12:53:35 +0200
commitc79ed5dec0beda5465a3200b6a1139a3d29a8da6 (patch)
tree26b7b657056029164818e504d35f5a60052e5533 /src/main/java/com/google
parent23bb662af090602971aa86ad59827810dafcb70f (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.java78
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}.
*/