From 5e34a3d4ea30525971e320ce283ba8cd67c74e3c Mon Sep 17 00:00:00 2001 From: Googler Date: Thu, 3 Dec 2015 15:17:55 +0000 Subject: ASwB aspect: parse java packages during execution -- MOS_MIGRATED_REVID=109305952 --- .../build/lib/ideinfo/AndroidStudioInfoAspect.java | 100 +++++++++++++++++++-- 1 file changed, 91 insertions(+), 9 deletions(-) (limited to 'src/main/java/com/google/devtools/build/lib/ideinfo/AndroidStudioInfoAspect.java') 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 0053bf5e39..cdb90eb9d5 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 @@ -15,12 +15,20 @@ package com.google.devtools.build.lib.ideinfo; import static com.google.common.collect.Iterables.transform; +import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST; +import static com.google.devtools.build.lib.packages.Attribute.attr; +import static com.google.devtools.build.lib.packages.BuildType.LABEL; import com.google.common.base.Function; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; import com.google.common.io.ByteSource; +import com.google.devtools.build.lib.Constants; +import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; import com.google.devtools.build.lib.actions.Root; import com.google.devtools.build.lib.analysis.AnalysisUtils; import com.google.devtools.build.lib.analysis.ConfiguredAspect; @@ -31,7 +39,9 @@ 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.CustomCommandLine; import com.google.devtools.build.lib.analysis.actions.FileWriteAction; +import com.google.devtools.build.lib.analysis.actions.SpawnAction; 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; @@ -66,6 +76,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.List; +import java.util.Set; import javax.annotation.Nullable; @@ -108,10 +119,23 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory { } }; + /** White-list for rules potentially having .java srcs */ + private static final Set JAVA_SRC_RULES = ImmutableSet.of( + Kind.JAVA_LIBRARY, + Kind.JAVA_TEST, + Kind.JAVA_BINARY, + Kind.ANDROID_LIBRARY, + Kind.ANDROID_BINARY, + Kind.ANDROID_TEST, + Kind.ANDROID_ROBOELECTRIC_TEST); + @Override public AspectDefinition getDefinition(AspectParameters aspectParameters) { AspectDefinition.Builder builder = new AspectDefinition.Builder(NAME) - .attributeAspect("runtime_deps", AndroidStudioInfoAspect.class); + .attributeAspect("runtime_deps", AndroidStudioInfoAspect.class) + .add(attr("$packageParser", LABEL).cfg(HOST).exec() + .value(Label.parseAbsoluteUnchecked( + Constants.TOOLS_REPOSITORY + "//tools/android:PackageParser"))); for (PrerequisiteAttr prerequisiteAttr : PREREQUISITE_ATTRS) { builder.attributeAspect(prerequisiteAttr.name, AndroidStudioInfoAspect.class); @@ -233,11 +257,14 @@ public class AndroidStudioInfoAspect implements ConfiguredNativeAspectFactory { NestedSet