diff options
Diffstat (limited to 'src/main/java/com/google/devtools')
4 files changed, 19 insertions, 10 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java index 3f018d37eb..2037dbbb38 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java @@ -97,7 +97,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { public void validate( RuleContext.Builder contextBuilder, ConfiguredTarget prerequisite, Attribute attribute) { validateDirectPrerequisiteForDeprecation( - contextBuilder, contextBuilder.getRule(), prerequisite); + contextBuilder, contextBuilder.getRule(), prerequisite, contextBuilder.forAspect()); } /** @@ -128,18 +128,22 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { /** Returns whether a deprecation warning should be printed for the prerequisite described. */ private static boolean shouldEmitDeprecationWarningFor( String thisDeprecation, PackageIdentifier thisPackage, - String prerequisiteDeprecation, PackageIdentifier prerequisitePackage) { + String prerequisiteDeprecation, PackageIdentifier prerequisitePackage, + boolean forAspect) { // Don't report deprecation edges from javatests to java or within a package; // otherwise tests of deprecated code generate nuisance warnings. - // Don't report deprecation if the current target is also deprecated. - return (prerequisiteDeprecation != null + // Don't report deprecation if the current target is also deprecated, + // or if the current context is evaluating an aspect, + // as the base target would have already printed the deprecation warnings. + return (!forAspect + && prerequisiteDeprecation != null && !isSameLogicalPackage(thisPackage, prerequisitePackage) && thisDeprecation == null); } /** Checks if the given prerequisite is deprecated and prints a warning if so. */ public static void validateDirectPrerequisiteForDeprecation( - RuleErrorConsumer errors, Rule rule, ConfiguredTarget prerequisite) { + RuleErrorConsumer errors, Rule rule, ConfiguredTarget prerequisite, boolean forAspect) { Target prerequisiteTarget = prerequisite.getTarget(); Label prerequisiteLabel = prerequisiteTarget.getLabel(); PackageIdentifier thatPackage = prerequisiteLabel.getPackageIdentifier(); @@ -152,7 +156,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { String thatDeprecation = NonconfigurableAttributeMapper.of(prerequisiteRule).get("deprecation", Type.STRING); if (shouldEmitDeprecationWarningFor( - thisDeprecation, thisPackage, thatDeprecation, thatPackage)) { + thisDeprecation, thisPackage, thatDeprecation, thatPackage, forAspect)) { errors.ruleWarning("target '" + rule.getLabel() + "' depends on deprecated target '" + prerequisiteLabel + "': " + thatDeprecation); } @@ -165,7 +169,7 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider { String thatDeprecation = NonconfigurableAttributeMapper.of(generatingRule).get("deprecation", Type.STRING); if (shouldEmitDeprecationWarningFor( - thisDeprecation, thisPackage, thatDeprecation, thatPackage)) { + thisDeprecation, thisPackage, thatDeprecation, thatPackage, forAspect)) { errors.ruleWarning("target '" + rule.getLabel() + "' depends on the output file " + prerequisiteLabel + " of a deprecated rule " + generatingRule.getLabel() + "': " + thatDeprecation); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java index b988b4d195..f160424223 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleContext.java @@ -1711,6 +1711,11 @@ public final class RuleContext extends TargetContext } } + /** Returns whether the context being constructed is for the evaluation of an aspect. */ + public boolean forAspect() { + return aspectName != null; + } + public Rule getRule() { return rule; } diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index 90b064a929..755c246f37 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -183,7 +183,7 @@ public class BazelRuleClassProvider { ConfiguredTarget prerequisite, Attribute attribute) { validateDirectPrerequisiteVisibility(context, prerequisite, attribute.getName()); DeprecationValidator.validateDirectPrerequisiteForDeprecation( - context, context.getRule(), prerequisite); + context, context.getRule(), prerequisite, context.forAspect()); } private void validateDirectPrerequisiteVisibility( diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java index 4035242c4e..ba84c5b7fb 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectFunction.java @@ -376,10 +376,10 @@ public final class AspectFunction implements SkyFunction { transitivePackages.build()); } - @Nullable @Override public String extractTag(SkyKey skyKey) { - return null; + AspectKey aspectKey = (AspectKey) skyKey.argument(); + return Label.print(aspectKey.getLabel()); } /** |