Split DependencyKind and InconsistentAspectOrderException into their own classes. This removes dependency cycles between analysis and skyframe code. PiperOrigin-RevId: 306237789
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java index 9b16bf3..4b09813 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/AspectResolver.java
@@ -15,7 +15,6 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget; import com.google.devtools.build.lib.causes.LabelCause; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java index de6c5de..bc50066 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredTargetFactory.java
@@ -26,7 +26,6 @@ import com.google.devtools.build.lib.actions.ArtifactFactory; import com.google.devtools.build.lib.actions.FailAction; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment; import com.google.devtools.build.lib.analysis.config.ConfigMatchingProvider;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyKind.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKind.java new file mode 100644 index 0000000..9543d90 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyKind.java
@@ -0,0 +1,44 @@ +// Copyright 2020 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.analysis; + +import com.google.devtools.build.lib.packages.AspectClass; +import com.google.devtools.build.lib.packages.Attribute; +import javax.annotation.Nullable; + +/** + * A kind of dependency, used extensively in {@link DependencyResolver}. + * + * <p>Usually an attribute, but other special-cased kinds exist, for example, for visibility or + * toolchains. + */ +public interface DependencyKind { + + /** + * The attribute through which a dependency arises. + * + * <p>Returns {@code null} for visibility, the dependency pointing from an output file to its + * generating rule and toolchain dependencies. + */ + @Nullable + Attribute getAttribute(); + + /** + * The aspect owning the attribute through which the dependency arises. + * + * <p>Should only be called for dependency kinds representing an attribute. + */ + @Nullable + AspectClass getOwningAspect(); +}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java index f441740..0ee20e6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DependencyResolver.java
@@ -48,7 +48,6 @@ import com.google.devtools.build.lib.packages.RuleClass; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.syntax.EvalException; -import com.google.devtools.build.lib.syntax.Location; import com.google.devtools.build.lib.util.OrderedSetMultimap; import java.util.ArrayList; import java.util.Collection; @@ -64,32 +63,6 @@ */ public abstract class DependencyResolver { - /** - * A kind of dependency. - * - * <p>Usually an attribute, but other special-cased kinds exist, for example, for visibility or - * toolchains. - */ - public interface DependencyKind { - - /** - * The attribute through which a dependency arises. - * - * <p>Returns {@code null} for visibility, the dependency pointing from an output file to its - * generating rule and toolchain dependencies. - */ - @Nullable - Attribute getAttribute(); - - /** - * The aspect owning the attribute through which the dependency arises. - * - * <p>Should only be called for dependency kinds representing an attribute. - */ - @Nullable - AspectClass getOwningAspect(); - } - /** A dependency caused by something that's not an attribute. Special cases enumerated below. */ private static final class NonAttributeDependencyKind implements DependencyKind { private final String name; @@ -737,22 +710,4 @@ NestedSetBuilder<Cause> rootCauses) throws InterruptedException; - /** - * Signals an inconsistency on aspect path: an aspect occurs twice on the path and - * the second occurrence sees a different set of aspects. - * - * {@see AspectCycleOnPathException} - */ - public class InconsistentAspectOrderException extends Exception { - private final Location location; - - public InconsistentAspectOrderException(Target target, AspectCycleOnPathException e) { - super(String.format("%s (when propagating to %s)", e.getMessage(), target.getLabel())); - this.location = target.getLocation(); - } - - public Location getLocation() { - return location; - } - } }
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java new file mode 100644 index 0000000..87b6503 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/analysis/InconsistentAspectOrderException.java
@@ -0,0 +1,37 @@ +// Copyright 2020 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.lib.analysis; + +import com.google.devtools.build.lib.analysis.AspectCollection.AspectCycleOnPathException; +import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.syntax.Location; + +/** + * Signals an inconsistency on an aspect path: an aspect occurs twice on the path and the second + * occurrence sees a different set of aspects. + * + * <p>{@see AspectCycleOnPathException} + */ +public class InconsistentAspectOrderException extends Exception { + private final Location location; + + public InconsistentAspectOrderException(Target target, AspectCycleOnPathException e) { + super(String.format("%s (when propagating to %s)", e.getMessage(), target.getLabel())); + this.location = target.getLocation(); + } + + public Location getLocation() { + return location; + } +}
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java index fa3cd7b..e5832c6 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ConfigurationResolver.java
@@ -26,7 +26,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.google.devtools.build.lib.analysis.Dependency; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.PlatformOptions; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.transitions.ConfigurationTransition;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/DependencyEvaluationException.java b/src/main/java/com/google/devtools/build/lib/analysis/config/DependencyEvaluationException.java index 3781c48..f62e531 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/DependencyEvaluationException.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/DependencyEvaluationException.java
@@ -13,7 +13,7 @@ // limitations under the License. package com.google.devtools.build.lib.analysis.config; -import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException; +import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.skylark.StarlarkTransition.TransitionException; import com.google.devtools.build.lib.skyframe.ConfiguredValueCreationException;
diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java index 58f280c..ab54d2c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/TransitionsOutputFormatterCallback.java
@@ -18,9 +18,9 @@ import com.google.common.collect.Maps; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.Dependency; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; -import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException; +import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.ToolchainCollection; import com.google.devtools.build.lib.analysis.ToolchainContext;
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 3d2e5ed..3954b69 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
@@ -26,10 +26,10 @@ import com.google.devtools.build.lib.analysis.ConfiguredAspect; import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory; import com.google.devtools.build.lib.analysis.ConfiguredTarget; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; -import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.DuplicateException; +import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.ToolchainCollection;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java index 2e9f565..cd261c3 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java
@@ -31,11 +31,11 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.Dependency; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; -import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.DuplicateException; import com.google.devtools.build.lib.analysis.EmptyConfiguredTarget; +import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.PlatformConfiguration; import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java index 52be517..a303ae7 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -42,7 +42,7 @@ import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.ConfiguredTargetFactory; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.ToolchainCollection; import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeDependencyResolver.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeDependencyResolver.java index b72e89a..b6f7e72 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeDependencyResolver.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeDependencyResolver.java
@@ -16,6 +16,7 @@ import static com.google.devtools.build.lib.cmdline.LabelConstants.EXTERNAL_PACKAGE_IDENTIFIER; import com.google.common.collect.Maps; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.causes.Cause;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java index a546f28..9cfd909 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/DependencyResolverTest.java
@@ -17,7 +17,6 @@ import static com.google.common.truth.Truth.assertWithMessage; import com.google.common.collect.ImmutableMap; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; import com.google.devtools.build.lib.analysis.util.AnalysisTestCase; import com.google.devtools.build.lib.analysis.util.TestAspects; import com.google.devtools.build.lib.causes.Cause;
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java index b92687d..b9b27f2 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewForTesting.java
@@ -35,9 +35,9 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.ConfiguredTargetFactory; import com.google.devtools.build.lib.analysis.Dependency; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; -import com.google.devtools.build.lib.analysis.DependencyResolver.InconsistentAspectOrderException; +import com.google.devtools.build.lib.analysis.InconsistentAspectOrderException; import com.google.devtools.build.lib.analysis.ResolvedToolchainContext; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TargetAndConfiguration;
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java index d0d73a4..d6d58a6 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/ConfigurationsForTargetsTest.java
@@ -32,8 +32,8 @@ import com.google.devtools.build.lib.analysis.BlazeDirectories; import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.Dependency; +import com.google.devtools.build.lib.analysis.DependencyKind; import com.google.devtools.build.lib.analysis.DependencyResolver; -import com.google.devtools.build.lib.analysis.DependencyResolver.DependencyKind; import com.google.devtools.build.lib.analysis.TargetAndConfiguration; import com.google.devtools.build.lib.analysis.config.BuildConfiguration; import com.google.devtools.build.lib.analysis.config.BuildOptions; @@ -57,7 +57,6 @@ import com.google.devtools.build.skyframe.AbstractSkyKey; import com.google.devtools.build.skyframe.EvaluationResult; import com.google.devtools.build.skyframe.SkyFunction; -import com.google.devtools.build.skyframe.SkyFunction.Environment; import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyFunctionName; import com.google.devtools.build.skyframe.SkyKey;