From ca2ee182bbf8b581fe1eea44dc737e98881dc3b1 Mon Sep 17 00:00:00 2001 From: Googler Date: Mon, 26 Oct 2015 15:05:42 +0000 Subject: Support proto_library in AndroidStudioInfoAspect. -- MOS_MIGRATED_REVID=106300290 --- .../build/lib/ideinfo/AndroidStudioInfoAspect.java | 44 +++++++----- .../build/lib/rules/android/AndroidCommon.java | 4 +- .../devtools/build/lib/rules/java/JavaBinary.java | 4 +- .../devtools/build/lib/rules/java/JavaLibrary.java | 4 +- .../lib/rules/java/JavaRuleOutputJarsProvider.java | 81 +++++++++++++++++----- 5 files changed, 94 insertions(+), 43 deletions(-) (limited to 'src') diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java index 0da356094a..fa67df1a45 100644 --- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java +++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java @@ -54,6 +54,7 @@ import com.google.devtools.build.lib.rules.android.AndroidSdkProvider; import com.google.devtools.build.lib.rules.java.JavaExportsProvider; import com.google.devtools.build.lib.rules.java.JavaGenJarsProvider; import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider; +import com.google.devtools.build.lib.rules.java.JavaRuleOutputJarsProvider.OutputJar; import com.google.devtools.build.lib.rules.java.JavaSourceInfoProvider; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; @@ -225,7 +226,8 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { || ruleKind == Kind.ANDROID_LIBRARY || ruleKind == Kind.ANDROID_BINARY || ruleKind == Kind.ANDROID_TEST - || ruleKind == Kind.ANDROID_ROBOELECTRIC_TEST) { + || ruleKind == Kind.ANDROID_ROBOELECTRIC_TEST + || ruleKind == Kind.PROTO_LIBRARY) { outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base, ruleContext, ideResolveArtifacts)); } if (ruleKind == Kind.ANDROID_LIBRARY @@ -435,25 +437,27 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { NestedSetBuilder ideResolveArtifacts, JavaRuleOutputJarsProvider outputJarsProvider) { LibraryArtifact.Builder jarsBuilder = LibraryArtifact.newBuilder(); - Artifact classJar = outputJarsProvider.getClassJar(); - if (classJar != null) { - jarsBuilder.setJar(makeArtifactLocation(classJar)); - ideResolveArtifacts.add(classJar); - } - Artifact iJar = outputJarsProvider.getIJar(); - if (iJar != null) { - jarsBuilder.setInterfaceJar(makeArtifactLocation(iJar)); - ideResolveArtifacts.add(iJar); - } - Artifact srcJar = outputJarsProvider.getSrcJar(); - if (srcJar != null) { - jarsBuilder.setSourceJar(makeArtifactLocation(srcJar)); - ideResolveArtifacts.add(srcJar); - } + for (OutputJar outputJar : outputJarsProvider.getOutputJars()) { + Artifact classJar = outputJar.getClassJar(); + if (classJar != null) { + jarsBuilder.setJar(makeArtifactLocation(classJar)); + ideResolveArtifacts.add(classJar); + } + Artifact iJar = outputJar.getIJar(); + if (iJar != null) { + jarsBuilder.setInterfaceJar(makeArtifactLocation(iJar)); + ideResolveArtifacts.add(iJar); + } + Artifact srcJar = outputJar.getSrcJar(); + if (srcJar != null) { + jarsBuilder.setSourceJar(makeArtifactLocation(srcJar)); + ideResolveArtifacts.add(srcJar); + } - // We don't want to add anything that doesn't have a class jar - if (classJar != null) { - builder.addJars(jarsBuilder.build()); + // We don't want to add anything that doesn't have a class jar + if (classJar != null) { + builder.addJars(jarsBuilder.build()); + } } } @@ -512,6 +516,8 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory { return Kind.ANDROID_TEST; case "android_robolectric_test": return Kind.ANDROID_ROBOELECTRIC_TEST; + case "proto_library": + return Kind.PROTO_LIBRARY; default: { if (base.getProvider(AndroidSdkProvider.class) != null) { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java index 2712eb298e..7516032def 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidCommon.java @@ -561,8 +561,8 @@ public class AndroidCommon { return builder .setFilesToBuild(filesToBuild) - .add(JavaRuleOutputJarsProvider.class, new JavaRuleOutputJarsProvider( - classJar, iJar, srcJar)) + .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder() + .addOutputJar(classJar, iJar, srcJar).build()) .add( JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(javaCommon.getJavaCompilationArtifacts().getRuntimeJars())) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java index 9996cd9226..fb55436e9e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaBinary.java @@ -281,8 +281,8 @@ public class JavaBinary implements RuleConfiguredTargetFactory { return builder .setFilesToBuild(filesToBuild) - .add(JavaRuleOutputJarsProvider.class, new JavaRuleOutputJarsProvider( - classJar, null /* iJar */, srcJar)) + .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder() + .addOutputJar(classJar, null /* iJar */, srcJar).build()) .add(RunfilesProvider.class, runfilesProvider) .setRunfilesSupport(runfilesSupport, executable) .add( diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java index 38b3b697a3..da1ef8ced5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaLibrary.java @@ -229,8 +229,8 @@ public class JavaLibrary implements RuleConfiguredTargetFactory { NestedSet proguardSpecs = new ProguardLibrary(ruleContext).collectProguardSpecs(); builder - .add(JavaRuleOutputJarsProvider.class, new JavaRuleOutputJarsProvider( - classJar, iJar, srcJar)) + .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder() + .addOutputJar(classJar, iJar, srcJar).build()) .add(JavaRuntimeJarProvider.class, new JavaRuntimeJarProvider(common.getJavaCompilationArtifacts().getRuntimeJars())) .add(RunfilesProvider.class, RunfilesProvider.simple(runfiles)) diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java index 2196ecc49f..e5c956c639 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuleOutputJarsProvider.java @@ -14,6 +14,8 @@ package com.google.devtools.build.lib.rules.java; +import com.google.common.base.Preconditions; +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.concurrent.ThreadSafety.Immutable; @@ -25,29 +27,72 @@ import javax.annotation.Nullable; */ @Immutable public final class JavaRuleOutputJarsProvider implements TransitiveInfoProvider { - @Nullable private final Artifact classJar; - @Nullable private final Artifact iJar; - @Nullable private final Artifact srcJar; - - public JavaRuleOutputJarsProvider( - @Nullable Artifact classJar, @Nullable Artifact iJar, @Nullable Artifact srcJar) { - this.classJar = classJar; - this.iJar = iJar; - this.srcJar = srcJar; + + public static final JavaRuleOutputJarsProvider EMPTY = + new JavaRuleOutputJarsProvider(ImmutableList.of()); + + /** + * A collection of artifacts associated with a jar output. + */ + public static class OutputJar { + @Nullable private final Artifact classJar; + @Nullable private final Artifact iJar; + @Nullable private final Artifact srcJar; + + private OutputJar( + @Nullable Artifact classJar, @Nullable Artifact iJar, @Nullable Artifact srcJar) { + this.classJar = classJar; + this.iJar = iJar; + this.srcJar = srcJar; + } + + @Nullable + public Artifact getClassJar() { + return classJar; + } + + @Nullable + public Artifact getIJar() { + return iJar; + } + + @Nullable + public Artifact getSrcJar() { + return srcJar; + } } - @Nullable - public Artifact getClassJar() { - return classJar; + final Iterable outputJars; + + private JavaRuleOutputJarsProvider(Iterable outputJars) { + this.outputJars = outputJars; + } + + public Iterable getOutputJars() { + return outputJars; } - @Nullable - public Artifact getIJar() { - return iJar; + public static Builder builder() { + return new Builder(); } - @Nullable - public Artifact getSrcJar() { - return srcJar; + /** + * Builderassociated. + */ + public static class Builder { + ImmutableList.Builder outputJars = ImmutableList.builder(); + + public Builder addOutputJar( + @Nullable Artifact classJar, + @Nullable Artifact iJar, + @Nullable Artifact sourceJar) { + Preconditions.checkState(classJar != null || iJar != null || sourceJar != null); + outputJars.add(new OutputJar(classJar, iJar, sourceJar)); + return this; + } + + public JavaRuleOutputJarsProvider build() { + return new JavaRuleOutputJarsProvider(outputJars.build()); + } } } -- cgit v1.2.3