diff options
author | elenairina <elenairina@google.com> | 2017-12-01 05:51:04 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2017-12-01 05:53:06 -0800 |
commit | 49008a3c90e65bc4abf5292af823a931b8f4e096 (patch) | |
tree | 0896c007b16fe2ad6fc8d9bdfde11c73e997b34d /src/main/java/com/google/devtools/build | |
parent | 9c97bf96f794e2bea6fcb7fe240a64b3e605e292 (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.java | 44 |
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( |