diff options
5 files changed, 65 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java index 9a7087be25..ca8b241b6e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompilationArgsProvider.java @@ -91,4 +91,26 @@ public final class JavaCompilationArgsProvider implements TransitiveInfoProvider public NestedSet<Artifact> getRunTimeJavaDependencyArtifacts() { return runTimeJavaDepArtifacts; } + + public static JavaCompilationArgsProvider merge(Iterable<JavaCompilationArgsProvider> providers) { + JavaCompilationArgs.Builder javaCompilationArgs = JavaCompilationArgs.builder(); + JavaCompilationArgs.Builder recursiveJavaCompilationArgs = JavaCompilationArgs.builder(); + NestedSetBuilder<Artifact> compileTimeJavaDepArtifacts = NestedSetBuilder.stableOrder(); + NestedSetBuilder<Artifact> runTimeJavaDepArtifacts = NestedSetBuilder.stableOrder(); + + for (JavaCompilationArgsProvider provider : providers) { + javaCompilationArgs.addTransitiveArgs( + provider.getJavaCompilationArgs(), JavaCompilationArgs.ClasspathType.BOTH); + recursiveJavaCompilationArgs.addTransitiveArgs( + provider.getRecursiveJavaCompilationArgs(), JavaCompilationArgs.ClasspathType.BOTH); + compileTimeJavaDepArtifacts.addTransitive(provider.getCompileTimeJavaDependencyArtifacts()); + runTimeJavaDepArtifacts.addTransitive(provider.getRunTimeJavaDependencyArtifacts()); + } + + return new JavaCompilationArgsProvider( + javaCompilationArgs.build(), + recursiveJavaCompilationArgs.build(), + compileTimeJavaDepArtifacts.build(), + runTimeJavaDepArtifacts.build()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java index bcabcb7e24..cd28afe9e6 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaNativeLibraryProvider.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.java; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.rules.cpp.LinkerInput; @@ -40,4 +41,14 @@ public final class JavaNativeLibraryProvider implements TransitiveInfoProvider { public NestedSet<LinkerInput> getTransitiveJavaNativeLibraries() { return transitiveJavaNativeLibraries; } + + public static JavaNativeLibraryProvider merge(Iterable<JavaNativeLibraryProvider> deps) { + NestedSetBuilder<LinkerInput> transitiveSourceJars = NestedSetBuilder.stableOrder(); + + for (JavaNativeLibraryProvider wrapper : deps) { + transitiveSourceJars.addTransitive(wrapper.getTransitiveJavaNativeLibraries()); + } + return new JavaNativeLibraryProvider(transitiveSourceJars.build()); + } + } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java index cc137d0a6b..33cfb4019f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeJarProvider.java @@ -39,4 +39,13 @@ public final class JavaRuntimeJarProvider implements TransitiveInfoProvider { public ImmutableList<Artifact> getRuntimeJars() { return runtimeJars; } + + public static JavaRuntimeJarProvider merge(Iterable<JavaRuntimeJarProvider> deps) { + ImmutableList.Builder<Artifact> runtimeJars = ImmutableList.builder(); + for (JavaRuntimeJarProvider wrapper : deps) { + runtimeJars.addAll(wrapper.getRuntimeJars()); + } + return new JavaRuntimeJarProvider(runtimeJars.build()); + } + } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java index 1ae67741ea..0f5365408d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaSourceJarsProvider.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; /** @@ -49,4 +50,16 @@ public final class JavaSourceJarsProvider implements TransitiveInfoProvider { public ImmutableList<Artifact> getSourceJars() { return sourceJars; } + + public static JavaSourceJarsProvider merge(Iterable<JavaSourceJarsProvider> providers) { + NestedSetBuilder<Artifact> transitiveSourceJars = NestedSetBuilder.stableOrder(); + ImmutableList.Builder<Artifact> sourceJars = ImmutableList.builder(); + + for (JavaSourceJarsProvider provider : providers) { + transitiveSourceJars.addTransitive(provider.getTransitiveSourceJars()); + sourceJars.addAll(provider.getSourceJars()); + } + return new JavaSourceJarsProvider(transitiveSourceJars.build(), sourceJars.build()); + } + } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java index afde15c724..0a360b1b19 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardSpecProvider.java @@ -16,6 +16,7 @@ package com.google.devtools.build.lib.rules.java; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.TransitiveInfoProvider; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; /** @@ -33,4 +34,13 @@ public final class ProguardSpecProvider implements TransitiveInfoProvider { public NestedSet<Artifact> getTransitiveProguardSpecs() { return transitiveProguardSpecs; } + + public static ProguardSpecProvider merge(Iterable<ProguardSpecProvider> providers) { + NestedSetBuilder<Artifact> specs = NestedSetBuilder.stableOrder(); + for (ProguardSpecProvider wrapper : providers) { + specs.addTransitive(wrapper.getTransitiveProguardSpecs()); + } + return new ProguardSpecProvider(specs.build()); + } + } |