diff options
author | 2016-07-21 18:36:42 +0000 | |
---|---|---|
committer | 2016-07-21 20:38:03 +0000 | |
commit | 86b72161663131b04336a3ee037de5d98e31c8d4 (patch) | |
tree | 1decc3b8a456cf109d3d302cdc3d37330615dabc /src/main/java | |
parent | a3fa96dd6964afa9c722f42614220d0273078de3 (diff) |
When telling JavaBuilder what label produced a certain jar, also provide the Aspect's name that participated, if there is one.
RELNOTES:
--
MOS_MIGRATED_REVID=128085414
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index 2508d1d810..028e9d1810 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -30,6 +30,7 @@ import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionExecutionException; import com.google.devtools.build.lib.actions.ActionOwner; import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.actions.ArtifactOwner; import com.google.devtools.build.lib.actions.BaseSpawn; import com.google.devtools.build.lib.actions.ExecException; import com.google.devtools.build.lib.actions.Executor; @@ -56,12 +57,12 @@ import com.google.devtools.build.lib.collect.nestedset.Order; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible; import com.google.devtools.build.lib.rules.java.JavaConfiguration.JavaClasspathMode; +import com.google.devtools.build.lib.skyframe.AspectValue; import com.google.devtools.build.lib.util.Fingerprint; import com.google.devtools.build.lib.util.Preconditions; import com.google.devtools.build.lib.util.ShellEscaper; import com.google.devtools.build.lib.util.StringCanonicalizer; import com.google.devtools.build.lib.vfs.PathFragment; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -680,11 +681,13 @@ public final class JavaCompileAction extends AbstractAction { /** * Builds the list of mappings between jars on the classpath and their originating targets names. */ - static class JarsToTargetsArgv extends CustomMultiArgv { + @VisibleForTesting + public static class JarsToTargetsArgv extends CustomMultiArgv { private final NestedSet<Artifact> classpath; private final NestedSet<Artifact> directJars; - JarsToTargetsArgv(NestedSet<Artifact> classpath, NestedSet<Artifact> directJars) { + @VisibleForTesting + public JarsToTargetsArgv(NestedSet<Artifact> classpath, NestedSet<Artifact> directJars) { this.classpath = classpath; this.directJars = directJars; } @@ -696,26 +699,29 @@ public final class JavaCompileAction extends AbstractAction { for (Artifact jar : classpath) { builder.add(directJarSet.contains(jar) ? "--direct_dependency" : "--indirect_dependency"); builder.add(jar.getExecPathString()); - Label label = getTargetName(jar); - builder.add( - label.getPackageIdentifier().getRepository().isDefault() - || label.getPackageIdentifier().getRepository().isMain() - ? label.toString() - // Escape '@' prefix for .params file. - : "@" + label); + builder.add(getArtifactOwnerGeneralizedLabel(jar)); } return builder.build(); } - } - /** - * Gets the name of the target that produced the given jar artifact. - * - * <p>When specifying jars directly in the "srcs" attribute of a rule (mostly for third_party - * libraries), there is no generating action, so we just return the jar name in label form. - */ - private static Label getTargetName(Artifact jar) { - return checkNotNull(jar.getOwner(), jar); + private String getArtifactOwnerGeneralizedLabel(Artifact artifact) { + ArtifactOwner owner = checkNotNull(artifact.getArtifactOwner(), artifact); + StringBuilder result = new StringBuilder(); + Label label = owner.getLabel(); + result.append( + label.getPackageIdentifier().getRepository().isDefault() + || label.getPackageIdentifier().getRepository().isMain() + ? label.toString() + // Escape '@' prefix for .params file. + : "@" + label); + + if (owner instanceof AspectValue.AspectKey) { + AspectValue.AspectKey aspectOwner = (AspectValue.AspectKey) owner; + result.append(" ").append(aspectOwner.getAspectClass().getName()); + } + + return result.toString(); + } } /** |