aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2015-10-16 18:58:27 +0000
committerGravatar Lukacs Berki <lberki@google.com>2015-10-19 08:20:00 +0000
commite4461a4251131a78d26b5e822e4ba388950c9d48 (patch)
tree9840be78729759c4cdaf74a46c7c1c1b50264876 /src/main
parentb918e1cec08b2e4f8378e51d8096fe19c6a15013 (diff)
Add text output format to Android IDE aspect.
For debugging. Simply serializes the proto to a text file. -- MOS_MIGRATED_REVID=105621279
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoFilesProvider.java14
2 files changed, 53 insertions, 8 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 c3b69bcca7..4ac74cb790 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
@@ -31,6 +31,8 @@ import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
import com.google.devtools.build.lib.analysis.actions.BinaryFileWriteAction;
+import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -73,10 +75,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
// Output groups.
public static final String IDE_INFO = "ide-info";
+ public static final String IDE_INFO_TEXT = "ide-info-text";
public static final String IDE_RESOLVE = "ide-resolve";
// File suffixes.
public static final String ASWB_BUILD_SUFFIX = ".aswb-build";
+ public static final String ASWB_BUILD_TEXT_SUFFIX = ".aswb-build.txt";
public static final Function<Label, String> LABEL_TO_STRING = new Function<Label, String>() {
@Nullable
@Override
@@ -121,6 +125,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
builder
.addOutputGroup(IDE_INFO, provider.getIdeInfoFiles())
+ .addOutputGroup(IDE_INFO_TEXT, provider.getIdeInfoTextFiles())
.addOutputGroup(IDE_RESOLVE, provider.getIdeResolveFiles())
.addProvider(
AndroidStudioInfoFilesProvider.class,
@@ -148,6 +153,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
dependenciesBuilder.addTransitive(depProvider.getExportedDeps());
providerBuilder.ideInfoFilesBuilder().addTransitive(depProvider.getIdeInfoFiles());
+ providerBuilder.ideInfoTextFilesBuilder().addTransitive(depProvider.getIdeInfoTextFiles());
providerBuilder.ideResolveFilesBuilder().addTransitive(depProvider.getIdeResolveFiles());
providerBuilder.transitiveDependenciesBuilder().addTransitive(
depProvider.getTransitiveDependencies());
@@ -196,13 +202,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
Kind ruleKind,
NestedSet<Label> directDependencies,
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
- PathFragment ideBuildFilePath = getOutputFilePath(base, ruleContext);
- Root genfilesDirectory = ruleContext.getConfiguration().getGenfilesDirectory();
- Artifact ideInfoFile =
- ruleContext
- .getAnalysisEnvironment()
- .getDerivedArtifact(ideBuildFilePath, genfilesDirectory);
+
+ Artifact ideInfoFile = ideInfoArtifact(base, ruleContext, ASWB_BUILD_SUFFIX);
+ Artifact ideInfoTextFile = ideInfoArtifact(base, ruleContext, ASWB_BUILD_TEXT_SUFFIX);
+
providerBuilder.ideInfoFilesBuilder().add(ideInfoFile);
+ providerBuilder.ideInfoTextFilesBuilder().add(ideInfoTextFile);
NestedSetBuilder<Artifact> ideResolveArtifacts = providerBuilder.ideResolveFilesBuilder();
RuleIdeInfo.Builder outputBuilder = RuleIdeInfo.newBuilder();
@@ -251,10 +256,25 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
final RuleIdeInfo ruleIdeInfo = outputBuilder.build();
ruleContext.registerAction(
makeProtoWriteAction(ruleContext.getActionOwner(), ruleIdeInfo, ideInfoFile));
+ ruleContext.registerAction(
+ makeProtoTextWriteAction(ruleContext.getActionOwner(), ruleIdeInfo, ideInfoTextFile));
return provider;
}
+ private static Artifact ideInfoArtifact(ConfiguredTarget base, RuleContext ruleContext,
+ String suffix) {
+ BuildConfiguration configuration = ruleContext.getConfiguration();
+ assert configuration != null;
+ Root genfilesDirectory = configuration.getGenfilesDirectory();
+
+ PathFragment ideBuildFilePath =
+ getOutputFilePath(base, ruleContext, suffix);
+
+ return ruleContext.getAnalysisEnvironment().getDerivedArtifact(
+ ideBuildFilePath, genfilesDirectory);
+ }
+
private static AndroidRuleIdeInfo makeAndroidRuleIdeInfo(
RuleContext ruleContext,
ConfiguredTarget base,
@@ -262,6 +282,7 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
AndroidStudioInfoFilesProvider.Builder providerBuilder) {
AndroidRuleIdeInfo.Builder builder = AndroidRuleIdeInfo.newBuilder();
AndroidIdeInfoProvider provider = base.getProvider(AndroidIdeInfoProvider.class);
+ assert provider != null;
if (provider.getSignedApk() != null) {
builder.setApk(makeArtifactLocation(provider.getSignedApk()));
}
@@ -327,6 +348,15 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
/*makeExecutable =*/ false);
}
+ private static FileWriteAction makeProtoTextWriteAction(
+ ActionOwner actionOwner, final MessageLite message, Artifact artifact) {
+ return new FileWriteAction(
+ actionOwner,
+ artifact,
+ message.toString(),
+ /*makeExecutable =*/ false);
+ }
+
private static ArtifactLocation makeArtifactLocation(Artifact artifact) {
return ArtifactLocation.newBuilder()
.setRootPath(artifact.getRoot().getPath().toString())
@@ -484,11 +514,12 @@ public class AndroidStudioInfoAspect implements ConfiguredAspectFactory {
return builder.build();
}
- private PathFragment getOutputFilePath(ConfiguredTarget base, RuleContext ruleContext) {
+ private static PathFragment getOutputFilePath(ConfiguredTarget base, RuleContext ruleContext,
+ String suffix) {
PathFragment packagePathFragment =
ruleContext.getLabel().getPackageIdentifier().getPathFragment();
String name = base.getLabel().getName();
- return new PathFragment(packagePathFragment, new PathFragment(name + ASWB_BUILD_SUFFIX));
+ return new PathFragment(packagePathFragment, new PathFragment(name + suffix));
}
private RuleIdeInfo.Kind getRuleKind(Rule rule, ConfiguredTarget base) {
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 6e0c2e33be..f7e5ce6cc0 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
@@ -29,6 +29,7 @@ import com.google.devtools.build.lib.rules.android.AndroidIdeInfoProvider.Source
@Immutable
public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvider {
private final NestedSet<Artifact> ideInfoFiles;
+ private final NestedSet<Artifact> ideInfoTextFiles;
private final NestedSet<Artifact> ideResolveFiles;
private final NestedSet<Label> transitiveDependencies;
private final NestedSet<Label> exportedDeps;
@@ -39,6 +40,7 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
*/
public static class Builder {
private final NestedSetBuilder<Artifact> ideInfoFilesBuilder;
+ private final NestedSetBuilder<Artifact> ideInfoTextFilesBuilder;
private final NestedSetBuilder<Artifact> ideResolveFilesBuilder;
private final NestedSetBuilder<Label> transitiveDependenciesBuilder;
private NestedSetBuilder<Label> exportedDepsBuilder;
@@ -47,6 +49,7 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
public Builder() {
ideInfoFilesBuilder = NestedSetBuilder.stableOrder();
+ ideInfoTextFilesBuilder = NestedSetBuilder.stableOrder();
ideResolveFilesBuilder = NestedSetBuilder.stableOrder();
transitiveDependenciesBuilder = NestedSetBuilder.stableOrder();
exportedDepsBuilder = NestedSetBuilder.stableOrder();
@@ -58,6 +61,10 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
return ideInfoFilesBuilder;
}
+ public NestedSetBuilder<Artifact> ideInfoTextFilesBuilder() {
+ return ideInfoTextFilesBuilder;
+ }
+
public NestedSetBuilder<Artifact> ideResolveFilesBuilder() {
return ideResolveFilesBuilder;
}
@@ -90,6 +97,7 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
public AndroidStudioInfoFilesProvider build() {
return new AndroidStudioInfoFilesProvider(
ideInfoFilesBuilder.build(),
+ ideInfoTextFilesBuilder.build(),
ideResolveFilesBuilder.build(),
transitiveDependenciesBuilder.build(),
exportedDepsBuilder.build(),
@@ -100,11 +108,13 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
private AndroidStudioInfoFilesProvider(
NestedSet<Artifact> ideInfoFiles,
+ NestedSet<Artifact> ideInfoTextFiles,
NestedSet<Artifact> ideResolveFiles,
NestedSet<Label> transitiveDependencies,
NestedSet<Label> exportedDeps,
NestedSet<SourceDirectory> transitiveResources) {
this.ideInfoFiles = ideInfoFiles;
+ this.ideInfoTextFiles = ideInfoTextFiles;
this.ideResolveFiles = ideResolveFiles;
this.transitiveDependencies = transitiveDependencies;
this.exportedDeps = exportedDeps;
@@ -115,6 +125,10 @@ public final class AndroidStudioInfoFilesProvider implements TransitiveInfoProvi
return ideInfoFiles;
}
+ public NestedSet<Artifact> getIdeInfoTextFiles() {
+ return ideInfoTextFiles;
+ }
+
public NestedSet<Artifact> getIdeResolveFiles() {
return ideResolveFiles;
}