aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar elenairina <elenairina@google.com>2017-12-01 05:51:04 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-12-01 05:53:06 -0800
commit49008a3c90e65bc4abf5292af823a931b8f4e096 (patch)
tree0896c007b16fe2ad6fc8d9bdfde11c73e997b34d /src/main/java/com/google/devtools/build
parent9c97bf96f794e2bea6fcb7fe240a64b3e605e292 (diff)
Avoid NPEs when providers are not found in JavaInfo.
Fixes #4173. RELNOTES: None. PiperOrigin-RevId: 177582228
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java44
1 files changed, 26 insertions, 18 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 d93f4ba52c..7a6815c2fc 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
@@ -49,6 +49,8 @@ public final class JavaInfo extends NativeInfo {
public static final NativeProvider<JavaInfo> PROVIDER =
new NativeProvider<JavaInfo>(JavaInfo.class, "JavaInfo") {};
+ public static final JavaInfo EMPTY = JavaInfo.Builder.create().build();
+
private static final ImmutableSet<Class<? extends TransitiveInfoProvider>> ALLOWED_PROVIDERS =
ImmutableSet.of(
JavaCompilationArgsProvider.class,
@@ -207,10 +209,11 @@ public final class JavaInfo extends NativeInfo {
structField = true
)
public SkylarkNestedSet getTransitiveRuntimeJars() {
- return SkylarkNestedSet.of(
- Artifact.class,
- providers.getProvider(JavaCompilationArgsProvider.class)
- .getRecursiveJavaCompilationArgs().getRuntimeJars());
+ JavaCompilationArgsProvider provider = getProvider(JavaCompilationArgsProvider.class);
+ NestedSet<Artifact> runtimeJars = provider == null
+ ? NestedSetBuilder.<Artifact>stableOrder().build()
+ : provider.getRecursiveJavaCompilationArgs().getRuntimeJars();
+ return SkylarkNestedSet.of(Artifact.class, runtimeJars);
}
@SkylarkCallable(
@@ -220,10 +223,11 @@ public final class JavaInfo extends NativeInfo {
structField = true
)
public SkylarkNestedSet getTransitiveCompileTimeJars() {
- return SkylarkNestedSet.of(
- Artifact.class,
- providers.getProvider(JavaCompilationArgsProvider.class)
- .getRecursiveJavaCompilationArgs().getCompileTimeJars());
+ JavaCompilationArgsProvider provider = getProvider(JavaCompilationArgsProvider.class);
+ NestedSet<Artifact> compileTimeJars = provider == null
+ ? NestedSetBuilder.<Artifact>stableOrder().build()
+ : provider.getRecursiveJavaCompilationArgs().getCompileTimeJars();
+ return SkylarkNestedSet.of(Artifact.class, compileTimeJars);
}
@SkylarkCallable(
@@ -238,10 +242,11 @@ public final class JavaInfo extends NativeInfo {
structField = true
)
public SkylarkNestedSet getCompileTimeJars() {
- return SkylarkNestedSet.of(
- Artifact.class,
- providers.getProvider(JavaCompilationArgsProvider.class)
- .getJavaCompilationArgs().getCompileTimeJars());
+ JavaCompilationArgsProvider provider = getProvider(JavaCompilationArgsProvider.class);
+ NestedSet<Artifact> compileTimeJars = provider == null
+ ? NestedSetBuilder.<Artifact>stableOrder().build()
+ : provider.getJavaCompilationArgs().getCompileTimeJars();
+ return SkylarkNestedSet.of(Artifact.class, compileTimeJars);
}
@SkylarkCallable(
@@ -255,10 +260,11 @@ public final class JavaInfo extends NativeInfo {
structField = true
)
public SkylarkNestedSet getFullCompileTimeJars() {
- return SkylarkNestedSet.of(
- Artifact.class,
- providers.getProvider(JavaCompilationArgsProvider.class)
- .getJavaCompilationArgs().getFullCompileTimeJars());
+ JavaCompilationArgsProvider provider = getProvider(JavaCompilationArgsProvider.class);
+ NestedSet<Artifact> fullCompileTimeJars = provider == null
+ ? NestedSetBuilder.<Artifact>stableOrder().build()
+ : provider.getJavaCompilationArgs().getFullCompileTimeJars();
+ return SkylarkNestedSet.of(Artifact.class, fullCompileTimeJars);
}
@SkylarkCallable(
@@ -269,8 +275,10 @@ public final class JavaInfo extends NativeInfo {
structField = true
)
public SkylarkList<Artifact> getSourceJars() {
- return SkylarkList.createImmutable(
- providers.getProvider(JavaSourceJarsProvider.class).getSourceJars());
+ JavaSourceJarsProvider provider = providers.getProvider(JavaSourceJarsProvider.class);
+ ImmutableList<Artifact> sourceJars =
+ provider == null ? ImmutableList.of() : provider.getSourceJars();
+ return SkylarkList.createImmutable(sourceJars);
}
@SkylarkCallable(