aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java74
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java34
-rw-r--r--src/main/protobuf/android_studio_ide_info.proto3
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java142
-rw-r--r--src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java51
5 files changed, 251 insertions, 53 deletions
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 cf16f33aad..45f6653b5f 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
@@ -71,8 +71,9 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
public static final String NAME = "AndroidStudioInfoAspect";
// Output groups.
+
+ public static final String IDE_INFO = "ide-info";
public static final String IDE_RESOLVE = "ide-resolve";
- public static final String IDE_BUILD = "ide-build";
// File suffixes.
public static final String ASWB_BUILD_SUFFIX = ".aswb-build";
@@ -118,9 +119,9 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
provider = providerBuilder.build();
}
- NestedSet<Artifact> ideInfoFiles = provider.getIdeBuildFiles();
builder
- .addOutputGroup(IDE_BUILD, ideInfoFiles)
+ .addOutputGroup(IDE_INFO, provider.getIdeInfoFiles())
+ .addOutputGroup(IDE_RESOLVE, provider.getIdeResolveFiles())
.addProvider(
AndroidStudioInfoFilesProvider.class,
provider);
@@ -146,7 +147,8 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
AnalysisUtils.getProviders(prerequisites, AndroidStudioInfoFilesProvider.class)) {
dependenciesBuilder.addTransitive(depProvider.getExportedDeps());
- providerBuilder.ideBuildFilesBuilder().addTransitive(depProvider.getIdeBuildFiles());
+ providerBuilder.ideInfoFilesBuilder().addTransitive(depProvider.getIdeInfoFiles());
+ providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
providerBuilder.transitiveDependenciesBuilder().addTransitive(
depProvider.getTransitiveDependencies());
providerBuilder.transitiveResourcesBuilder().addTransitive(
@@ -203,11 +205,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
PathFragment ideBuildFilePath = getOutputFilePath(base, ruleContext);
Root genfilesDirectory = ruleContext.getConfiguration().getGenfilesDirectory();
- Artifact ideBuildFile =
+ Artifact ideInfoFile =
ruleContext
.getAnalysisEnvironment()
.getDerivedArtifact(ideBuildFilePath, genfilesDirectory);
- providerBuilder.ideBuildFilesBuilder().add(ideBuildFile);
+ providerBuilder.ideInfoFilesBuilder().add(ideInfoFile);
+ NestedSetBuilder<Artifact> ideResolveArtifacts = providerBuilder.ideResolveFilesBuilder();
RuleIdeInfo.Builder outputBuilder = RuleIdeInfo.newBuilder();
@@ -223,7 +226,6 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
outputBuilder.setKind(ruleKind);
-
if (ruleKind == Kind.JAVA_LIBRARY
|| ruleKind == Kind.JAVA_IMPORT
|| ruleKind == Kind.JAVA_TEST
@@ -232,13 +234,13 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
|| ruleKind == Kind.ANDROID_BINARY
|| ruleKind == Kind.ANDROID_TEST
|| ruleKind == Kind.ANDROID_ROBOELECTRIC_TEST) {
- outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base));
+ outputBuilder.setJavaRuleIdeInfo(makeJavaRuleIdeInfo(base, ideResolveArtifacts));
}
if (ruleKind == Kind.ANDROID_LIBRARY
|| ruleKind == Kind.ANDROID_BINARY
|| ruleKind == Kind.ANDROID_TEST) {
outputBuilder.setAndroidRuleIdeInfo(
- makeAndroidRuleIdeInfo(ruleContext, base, providerBuilder));
+ makeAndroidRuleIdeInfo(ruleContext, base, ideResolveArtifacts, providerBuilder));
}
if (ruleKind == Kind.ANDROID_SDK) {
outputBuilder.setAndroidSdkRuleInfo(
@@ -255,7 +257,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
final RuleIdeInfo ruleIdeInfo = outputBuilder.build();
ruleContext.registerAction(
- makeProtoWriteAction(ruleContext.getActionOwner(), ruleIdeInfo, ideBuildFile));
+ makeProtoWriteAction(ruleContext.getActionOwner(), ruleIdeInfo, ideInfoFile));
return provider;
}
@@ -263,6 +265,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
private static AndroidRuleIdeInfo makeAndroidRuleIdeInfo(
RuleContext ruleContext,
ConfiguredTarget base,
+ NestedSetBuilder<Artifact> ideResolveArtifacts,
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
AndroidRuleIdeInfo.Builder builder = AndroidRuleIdeInfo.newBuilder();
AndroidIdeInfoProvider provider = base.getProvider(AndroidIdeInfoProvider.class);
@@ -270,12 +273,13 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
builder.setApk(makeArtifactLocation(provider.getSignedApk()));
}
- if (provider.getManifest() != null) {
- builder.setManifest(makeArtifactLocation(provider.getManifest()));
- }
+ Artifact manifest = provider.getManifest();
+ if (manifest != null) {
+ builder.setManifest(makeArtifactLocation(manifest));
- if (provider.getGeneratedManifest() != null) {
- builder.setGeneratedManifest(makeArtifactLocation(provider.getGeneratedManifest()));
+ if (!manifest.isSourceArtifact()) {
+ ideResolveArtifacts.add(manifest);
+ }
}
for (Artifact artifact : provider.getApksUnderTest()) {
@@ -301,10 +305,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
Artifact idlClassJar = provider.getIdlClassJar();
if (idlClassJar != null) {
jarBuilder.setJar(makeArtifactLocation(idlClassJar));
+ ideResolveArtifacts.add(idlClassJar);
}
Artifact idlSourceJar = provider.getIdlSourceJar();
if (idlSourceJar != null) {
jarBuilder.setSourceJar(makeArtifactLocation(idlSourceJar));
+ ideResolveArtifacts.add(idlSourceJar);
}
if (idlClassJar != null) {
builder.setIdlJar(jarBuilder.build());
@@ -342,25 +348,27 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
.build();
}
- private static JavaRuleIdeInfo makeJavaRuleIdeInfo(ConfiguredTarget base) {
+ private static JavaRuleIdeInfo makeJavaRuleIdeInfo(
+ ConfiguredTarget base,
+ NestedSetBuilder<Artifact> ideResolveArtifacts) {
JavaRuleIdeInfo.Builder builder = JavaRuleIdeInfo.newBuilder();
JavaRuleOutputJarsProvider outputJarsProvider =
base.getProvider(JavaRuleOutputJarsProvider.class);
if (outputJarsProvider != null) {
// java_library
- collectJarsFromOutputJarsProvider(builder, outputJarsProvider);
+ collectJarsFromOutputJarsProvider(builder, ideResolveArtifacts, outputJarsProvider);
} else {
JavaSourceInfoProvider provider = base.getProvider(JavaSourceInfoProvider.class);
if (provider != null) {
// java_import
- collectJarsFromSourceInfoProvider(builder, provider);
+ collectJarsFromSourceInfoProvider(builder, ideResolveArtifacts, provider);
}
}
JavaGenJarsProvider genJarsProvider =
base.getProvider(JavaGenJarsProvider.class);
if (genJarsProvider != null) {
- collectGenJars(builder, genJarsProvider);
+ collectGenJars(builder, ideResolveArtifacts, genJarsProvider);
}
Collection<Artifact> sourceFiles = getSources(base);
@@ -373,7 +381,9 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
}
private static void collectJarsFromSourceInfoProvider(
- JavaRuleIdeInfo.Builder builder, JavaSourceInfoProvider provider) {
+ JavaRuleIdeInfo.Builder builder,
+ NestedSetBuilder<Artifact> ideResolveArtifacts,
+ JavaSourceInfoProvider provider) {
Collection<Artifact> sourceJarsForJarFiles = provider.getSourceJarsForJarFiles();
// For java_import rule, we always have only one source jar specified.
// The intent is that that source jar provides sources for all imported jars,
@@ -391,27 +401,43 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
for (Artifact artifact : provider.getJarFiles()) {
LibraryArtifact.Builder libraryBuilder = LibraryArtifact.newBuilder();
libraryBuilder.setJar(makeArtifactLocation(artifact));
+
+ if (!artifact.isSourceArtifact()) {
+ ideResolveArtifacts.add(artifact);
+ }
+
if (sourceJar != null) {
libraryBuilder.setSourceJar(makeArtifactLocation(sourceJar));
}
builder.addJars(libraryBuilder.build());
}
+
+ if (sourceJar != null) {
+ if (!sourceJar.isSourceArtifact()) {
+ ideResolveArtifacts.add(sourceJar);
+ }
+ }
}
private static void collectJarsFromOutputJarsProvider(
- JavaRuleIdeInfo.Builder builder, JavaRuleOutputJarsProvider outputJarsProvider) {
+ JavaRuleIdeInfo.Builder builder,
+ NestedSetBuilder<Artifact> 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);
}
// We don't want to add anything that doesn't have a class jar
@@ -420,7 +446,9 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
}
}
- private static void collectGenJars(JavaRuleIdeInfo.Builder builder,
+ private static void collectGenJars(
+ JavaRuleIdeInfo.Builder builder,
+ NestedSetBuilder<Artifact> ideResolveArtifacts,
JavaGenJarsProvider genJarsProvider) {
LibraryArtifact.Builder genjarsBuilder = LibraryArtifact.newBuilder();
@@ -428,10 +456,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
Artifact genClassJar = genJarsProvider.getGenClassJar();
if (genClassJar != null) {
genjarsBuilder.setJar(makeArtifactLocation(genClassJar));
+ ideResolveArtifacts.add(genClassJar);
}
Artifact gensrcJar = genJarsProvider.getGenSourceJar();
if (gensrcJar != null) {
genjarsBuilder.setSourceJar(makeArtifactLocation(gensrcJar));
+ ideResolveArtifacts.add(gensrcJar);
}
if (genjarsBuilder.hasJar()) {
builder.addGeneratedJars(genjarsBuilder.build());
diff --git a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
index 408d377922..6e0c2e33be 100644
--- a/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java
@@ -28,7 +28,8 @@ import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.Source
*/
@Immutable
public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvider {
- private final NestedSet<Artifact> ideBuildFiles;
+ private final NestedSet<Artifact> ideInfoFiles;
+ private final NestedSet<Artifact> ideResolveFiles;
private final NestedSet<Label> transitiveDependencies;
private final NestedSet<Label> exportedDeps;
private final NestedSet<AndroidIdeInfoProvider.SourceDirectory> transitiveResources;
@@ -37,22 +38,28 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
* Builder class for {@link AndroidStudioInfoFilesProvider}
*/
public static class Builder {
- private final NestedSetBuilder<Artifact> ideBuildFilesBuilder;
+ private final NestedSetBuilder<Artifact> ideInfoFilesBuilder;
+ private final NestedSetBuilder<Artifact> ideResolveFilesBuilder;
private final NestedSetBuilder<Label> transitiveDependenciesBuilder;
private NestedSetBuilder<Label> exportedDepsBuilder;
private NestedSetBuilder<AndroidIdeInfoProvider.SourceDirectory> transitiveResourcesBuilder;
private NestedSet<AndroidIdeInfoProvider.SourceDirectory> transitiveResources;
public Builder() {
- ideBuildFilesBuilder = NestedSetBuilder.stableOrder();
+ ideInfoFilesBuilder = NestedSetBuilder.stableOrder();
+ ideResolveFilesBuilder = NestedSetBuilder.stableOrder();
transitiveDependenciesBuilder = NestedSetBuilder.stableOrder();
exportedDepsBuilder = NestedSetBuilder.stableOrder();
transitiveResourcesBuilder = NestedSetBuilder.stableOrder();
transitiveResources = null;
}
- public NestedSetBuilder<Artifact> ideBuildFilesBuilder() {
- return ideBuildFilesBuilder;
+ public NestedSetBuilder<Artifact> ideInfoFilesBuilder() {
+ return ideInfoFilesBuilder;
+ }
+
+ public NestedSetBuilder<Artifact> ideResolveFilesBuilder() {
+ return ideResolveFilesBuilder;
}
public NestedSetBuilder<Label> transitiveDependenciesBuilder() {
@@ -82,7 +89,8 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
public AndroidStudioInfoFilesProvider build() {
return new AndroidStudioInfoFilesProvider(
- ideBuildFilesBuilder.build(),
+ ideInfoFilesBuilder.build(),
+ ideResolveFilesBuilder.build(),
transitiveDependenciesBuilder.build(),
exportedDepsBuilder.build(),
getTransitiveResources()
@@ -91,18 +99,24 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
}
private AndroidStudioInfoFilesProvider(
- NestedSet<Artifact> ideBuildFiles,
+ NestedSet<Artifact> ideInfoFiles,
+ NestedSet<Artifact> ideResolveFiles,
NestedSet<Label> transitiveDependencies,
NestedSet<Label> exportedDeps,
NestedSet<SourceDirectory> transitiveResources) {
- this.ideBuildFiles = ideBuildFiles;
+ this.ideInfoFiles = ideInfoFiles;
+ this.ideResolveFiles = ideResolveFiles;
this.transitiveDependencies = transitiveDependencies;
this.exportedDeps = exportedDeps;
this.transitiveResources = transitiveResources;
}
- public NestedSet<Artifact> getIdeBuildFiles() {
- return ideBuildFiles;
+ public NestedSet<Artifact> getIdeInfoFiles() {
+ return ideInfoFiles;
+ }
+
+ public NestedSet<Artifact> getIdeResolveFiles() {
+ return ideResolveFiles;
}
public NestedSet<Label> getTransitiveDependencies() {
diff --git a/src/main/protobuf/android_studio_ide_info.proto b/src/main/protobuf/android_studio_ide_info.proto
index 70f876154d..3c4d3f5c2e 100644
--- a/src/main/protobuf/android_studio_ide_info.proto
+++ b/src/main/protobuf/android_studio_ide_info.proto
@@ -42,8 +42,7 @@ message AndroidRuleIdeInfo {
repeated ArtifactLocation transitive_resources = 2;
ArtifactLocation apk = 3;
repeated ArtifactLocation dependency_apk = 4;
- ArtifactLocation manifest = 5;
- ArtifactLocation generated_manifest = 6;
+ ArtifactLocation manifest= 5;
string java_package = 7;
bool has_idl_sources = 8;
LibraryArtifact idl_jar = 9;
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
index e88b0ec608..887ff944fd 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTest.java
@@ -35,11 +35,6 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"java_library(",
" name = 'simple',",
" srcs = ['simple/Simple.java']",
- ")",
- "java_library(",
- " name = 'complex',",
- " srcs = ['complex/Complex.java'],",
- " deps = [':simple']",
")");
Map<String, RuleIdeInfo> ruleIdeInfos = buildRuleIdeInfo("//com/google/example:simple");
assertThat(ruleIdeInfos.size()).isEqualTo(1);
@@ -54,6 +49,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
transform(ruleIdeInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(jarString("com/google/example",
"libsimple.jar", "libsimple-ijar.jar", "libsimple-src.jar"));
+
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libsimple.jar",
+ "com/google/example/libsimple-ijar.jar",
+ "com/google/example/libsimple-src.jar"
+ );
}
public void testJavaLibraryProtoWithDependencies() throws Exception {
@@ -119,6 +120,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(extraComplexRuleIdeInfo.getTransitiveDependenciesList())
.containsExactly("//com/google/example:simple", "//com/google/example:complex")
.inOrder();
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libextracomplex.jar",
+ "com/google/example/libextracomplex-ijar.jar",
+ "com/google/example/libextracomplex-src.jar",
+ "com/google/example/libcomplex.jar",
+ "com/google/example/libcomplex-ijar.jar",
+ "com/google/example/libcomplex-src.jar",
+ "com/google/example/libsimple.jar",
+ "com/google/example/libsimple-ijar.jar",
+ "com/google/example/libsimple-src.jar"
+ );
}
public void testJavaLibraryWithDiamondDependencies() throws Exception {
@@ -207,6 +219,17 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"//com/google/example:simple",
"//com/google/example:complex")
.inOrder();
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libextracomplex.jar",
+ "com/google/example/libextracomplex-ijar.jar",
+ "com/google/example/libextracomplex-src.jar",
+ "com/google/example/libcomplex.jar",
+ "com/google/example/libcomplex-ijar.jar",
+ "com/google/example/libcomplex-src.jar",
+ "com/google/example/libsimple.jar",
+ "com/google/example/libsimple-ijar.jar",
+ "com/google/example/libsimple-src.jar"
+ );
}
public void testJavaLibraryWithTransitiveExports() throws Exception {
@@ -286,6 +309,12 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
jarString("com/google/example", "a.jar", null, "impsrc.jar"),
jarString("com/google/example", "b.jar", null, "impsrc.jar"))
.inOrder();
+
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/liblib.jar",
+ "com/google/example/liblib-ijar.jar",
+ "com/google/example/liblib-src.jar"
+ );
}
public void testJavaImportWithExports() throws Exception {
@@ -318,6 +347,31 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
.inOrder();
}
+ public void testGeneratedJavaImportFilesAreAddedToOutputGroup() throws Exception {
+ scratch.file(
+ "com/google/example/BUILD",
+ "java_import(",
+ " name = 'imp',",
+ " jars = [':gen_jar'],",
+ " srcjar = ':gen_srcjar',",
+ ")",
+ "genrule(",
+ " name = 'gen_jar',",
+ " outs = ['gen_jar.jar'],",
+ " cmd = '',",
+ ")",
+ "genrule(",
+ " name = 'gen_srcjar',",
+ " outs = ['gen_srcjar.jar'],",
+ " cmd = '',",
+ ")");
+ buildTarget("//com/google/example:imp");
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/gen_jar.jar",
+ "com/google/example/gen_srcjar.jar"
+ );
+ }
+
public void testAspectIsPropagatedAcrossExports() throws Exception {
scratch.file(
"com/google/example/BUILD",
@@ -359,6 +413,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(transform(testInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(jarString("java/com/google/example",
"FooBarTest.jar", null, "FooBarTest-src.jar"));
+
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "java/com/google/example/libfoobar.jar",
+ "java/com/google/example/libfoobar-ijar.jar",
+ "java/com/google/example/libfoobar-src.jar",
+ "java/com/google/example/FooBarTest.jar",
+ "java/com/google/example/FooBarTest-src.jar"
+ );
}
public void testJavaBinary() throws Exception {
@@ -384,6 +446,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
assertThat(transform(binaryInfo.getJavaRuleIdeInfo().getJarsList(), LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(jarString("com/google/example",
"foobar-exe.jar", null, "foobar-exe-src.jar"));
+
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libfoobar.jar",
+ "com/google/example/libfoobar-ijar.jar",
+ "com/google/example/libfoobar-src.jar",
+ "com/google/example/foobar-exe.jar",
+ "com/google/example/foobar-exe-src.jar"
+ );
}
public void testAndroidLibrary() throws Exception {
@@ -425,6 +495,14 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
ARTIFACT_TO_RELATIVE_PATH))
.containsExactly("com/google/example/r1", "com/google/example/res")
.inOrder();
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libl.jar",
+ "com/google/example/libl-ijar.jar",
+ "com/google/example/libl-src.jar",
+ "com/google/example/libl1.jar",
+ "com/google/example/libl1-ijar.jar",
+ "com/google/example/libl1-src.jar"
+ );
}
public void testAndroidBinary() throws Exception {
@@ -468,6 +546,15 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
ARTIFACT_TO_RELATIVE_PATH))
.containsExactly("com/google/example/r1", "com/google/example/res")
.inOrder();
+
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/libb.jar",
+ "com/google/example/libb-ijar.jar",
+ "com/google/example/libb-src.jar",
+ "com/google/example/libl1.jar",
+ "com/google/example/libl1-ijar.jar",
+ "com/google/example/libl1-src.jar"
+ );
}
public void testAndroidInferredPackage() throws Exception {
@@ -524,6 +611,35 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"libhas_idl-idl.jar", null, "libhas_idl-idl.srcjar"));
assertThat(relativePathsForSourcesOf(idlRuleInfo))
.isEmpty();
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "java/com/google/example/libhas_idl.jar",
+ "java/com/google/example/libhas_idl-ijar.jar",
+ "java/com/google/example/libhas_idl-src.jar",
+ "java/com/google/example/libhas_idl-idl.jar",
+ "java/com/google/example/libhas_idl-idl.srcjar"
+ );
+ }
+
+ public void testAndroidLibraryGeneratedManifestIsAddedToOutputGroup() throws Exception {
+ scratch.file(
+ "com/google/example/BUILD",
+ "android_library(",
+ " name = 'lib',",
+ " manifest = ':manifest',",
+ " custom_package = 'com.google.example',",
+ ")",
+ "genrule(",
+ " name = 'manifest',",
+ " outs = ['AndroidManifest.xml'],",
+ " cmd = '',",
+ ")");
+ buildTarget("//com/google/example:lib");
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "com/google/example/liblib.jar",
+ "com/google/example/liblib-ijar.jar",
+ "com/google/example/liblib-src.jar",
+ "com/google/example/AndroidManifest.xml"
+ );
}
public void testJavaLibraryWithoutGeneratedSourcesHasNoGenJars() throws Exception {
@@ -547,6 +663,7 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
"java/com/google/example/BUILD",
"java_library(",
" name = 'test',",
+ " srcs = ['Test.java'],",
" plugins = [':plugin']",
")",
"java_plugin(",
@@ -563,13 +680,18 @@ public class AndroidStudioInfoAspectTest extends AndroidStudioInfoAspectTestBase
RuleIdeInfo ruleIdeInfo = getRuleInfoAndVerifyLabel(
"//java/com/google/example:test", ruleIdeInfos);
- assertThat(
- transform(ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(),
- LIBRARY_ARTIFACT_TO_STRING))
+ assertThat(transform(
+ ruleIdeInfo.getJavaRuleIdeInfo().getGeneratedJarsList(),
+ LIBRARY_ARTIFACT_TO_STRING))
.containsExactly(jarString("java/com/google/example",
"libtest-gen.jar", null, "libtest-gensrc.jar"));
- assertThat(relativePathsForSourcesOf(ruleIdeInfo))
- .isEmpty();
+ assertThat(getIdeResolveFiles()).containsExactly(
+ "java/com/google/example/libtest.jar",
+ "java/com/google/example/libtest-ijar.jar",
+ "java/com/google/example/libtest-src.jar",
+ "java/com/google/example/libtest-gen.jar",
+ "java/com/google/example/libtest-gensrc.jar"
+ );
}
public void testNonConformingPackageName() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java
index 772321ec54..4c6e7797ae 100644
--- a/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java
+++ b/src/test/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspectTestBase.java
@@ -19,17 +19,22 @@ import static com.google.common.truth.Truth.assertThat;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.analysis.Aspect;
import com.google.devtools.build.lib.analysis.BuildView.AnalysisResult;
+import com.google.devtools.build.lib.analysis.OutputGroupProvider;
import com.google.devtools.build.lib.analysis.actions.BinaryFileWriteAction;
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.ArtifactLocation;
import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.LibraryArtifact;
import com.google.devtools.build.lib.ideinfo.androidstudio.AndroidStudioIdeInfo.RuleIdeInfo;
import com.google.devtools.build.lib.skyframe.AspectValue;
import java.util.Collection;
+import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -39,7 +44,7 @@ import javax.annotation.Nullable;
*/
abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
- public static final Function<ArtifactLocation, String> ARTIFACT_TO_RELATIVE_PATH =
+ protected static final Function<ArtifactLocation, String> ARTIFACT_TO_RELATIVE_PATH =
new Function<ArtifactLocation, String>() {
@Nullable
@Override
@@ -47,7 +52,7 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
return artifactLocation.getRelativePath();
}
};
- public static final Function<LibraryArtifact, String> LIBRARY_ARTIFACT_TO_STRING =
+ protected static final Function<LibraryArtifact, String> LIBRARY_ARTIFACT_TO_STRING =
new Function<LibraryArtifact, String>() {
@Override
public String apply(LibraryArtifact libraryArtifact) {
@@ -72,7 +77,10 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
}
};
- static String jarString(String base, String jar, String iJar, String sourceJar) {
+ private AnalysisResult analysisResult;
+ private Aspect aspect;
+
+ protected static String jarString(String base, String jar, String iJar, String sourceJar) {
StringBuilder sb = new StringBuilder();
if (jar != null) {
sb.append("<jar:" + base + "/" + jar + ">");
@@ -97,8 +105,8 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
return ruleIdeInfo;
}
- protected Map<String, RuleIdeInfo> buildRuleIdeInfo(String target) throws Exception {
- AnalysisResult analysisResult =
+ protected void buildTarget(String target) throws Exception {
+ this.analysisResult =
update(
ImmutableList.of(target),
ImmutableList.of(AndroidStudioInfoAspect.NAME),
@@ -109,17 +117,42 @@ abstract class AndroidStudioInfoAspectTestBase extends BuildViewTestCase {
Collection<AspectValue> aspects = analysisResult.getAspects();
assertThat(aspects.size()).isEqualTo(1);
AspectValue value = aspects.iterator().next();
- assertThat(value.getAspect().getName()).isEqualTo(AndroidStudioInfoAspect.NAME);
+ this.aspect = value.getAspect();
+ assertThat(aspect.getName()).isEqualTo(AndroidStudioInfoAspect.NAME);
+ }
+
+ protected Map<String, RuleIdeInfo> buildRuleIdeInfo(String target) throws Exception {
+ buildTarget(target);
AndroidStudioInfoFilesProvider provider =
- value.getAspect().getProvider(AndroidStudioInfoFilesProvider.class);
- Iterable<Artifact> artifacts = provider.getIdeBuildFiles();
+ aspect.getProvider(AndroidStudioInfoFilesProvider.class);
+ Iterable<Artifact> artifacts = provider.getIdeInfoFiles();
ImmutableMap.Builder<String, RuleIdeInfo> builder = ImmutableMap.builder();
for (Artifact artifact : artifacts) {
BinaryFileWriteAction generatingAction =
- (BinaryFileWriteAction) getGeneratingAction(artifact);
+ (BinaryFileWriteAction) getGeneratingAction(artifact);
RuleIdeInfo ruleIdeInfo = RuleIdeInfo.parseFrom(generatingAction.getSource().openStream());
builder.put(ruleIdeInfo.getLabel(), ruleIdeInfo);
}
return builder.build();
}
+
+ protected List<String> getOutputGroupResult(String outputGroup) {
+ OutputGroupProvider outputGroupProvider = this.aspect.getProvider(OutputGroupProvider.class);
+ assert outputGroupProvider != null;
+ NestedSet<Artifact> artifacts = outputGroupProvider.getOutputGroup(outputGroup);
+
+ for (Artifact artifact : artifacts) {
+ assertThat(getGeneratingAction(artifact)).isNotNull();
+ }
+
+ List<String> artifactRelativePaths = Lists.newArrayList();
+ for (Artifact artifact : artifacts) {
+ artifactRelativePaths.add(artifact.getRootRelativePathString());
+ }
+ return artifactRelativePaths;
+ }
+
+ protected List<String> getIdeResolveFiles() {
+ return getOutputGroupResult(AndroidStudioInfoAspect.IDE_RESOLVE);
+ }
}