diff options
Diffstat (limited to 'src/main/java/com/google/devtools')
6 files changed, 73 insertions, 59 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/AbstractRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/pkgcache/AbstractRecursivePackageProvider.java new file mode 100644 index 0000000000..4252f1d44c --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/AbstractRecursivePackageProvider.java @@ -0,0 +1,61 @@ +// Copyright 2018 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.pkgcache; + +import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.events.ExtendedEventHandler; +import com.google.devtools.build.lib.packages.NoSuchPackageException; +import com.google.devtools.build.lib.packages.NoSuchTargetException; +import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.vfs.Path; + +/** Partial implementation of RecursivePackageProvider to provide some common methods. */ +public abstract class AbstractRecursivePackageProvider implements RecursivePackageProvider { + + private final PathPackageLocator pkgPath; + + protected AbstractRecursivePackageProvider(PathPackageLocator pkgPath) { + this.pkgPath = pkgPath; + } + + @Override + public Path getBuildFileForPackage(PackageIdentifier packageName) { + try { + return pkgPath.getPackageBuildFile(packageName); + } catch (NoSuchPackageException e) { + return null; + } + } + + public PathPackageLocator getPkgPath() { + return pkgPath; + } + + + @Override + public Target getTarget(ExtendedEventHandler eventHandler, Label label) + throws NoSuchPackageException, NoSuchTargetException, InterruptedException { + return getPackage(eventHandler, label.getPackageIdentifier()).getTarget(label.getName()); + } + + /** + * Indicates that a missing dependency is needed before target parsing can proceed. Currently + * used only in skyframe to notify the framework of missing dependencies. Caught by the compute + * method in {@link com.google.devtools.build.lib.skyframe.TargetPatternFunction}, which then + * returns null in accordance with the skyframe missing dependency policy. + */ + public static class MissingDepException extends RuntimeException { + } +} diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java index ccbc126098..6244cc45d3 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java @@ -18,20 +18,17 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.BuildFileContainsErrorsException; import com.google.devtools.build.lib.packages.NoSuchPackageException; -import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; -import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.pkgcache.AbstractRecursivePackageProvider; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.pkgcache.RecursivePackageProvider; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; -import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.RootedPath; @@ -50,14 +47,14 @@ import java.util.Map; * <p>This implementation never emits events through the {@link ExtendedEventHandler}s passed to its * methods. Instead, it emits events through its environment's {@link Environment#getListener()}. */ -public final class EnvironmentBackedRecursivePackageProvider implements RecursivePackageProvider { +public final class EnvironmentBackedRecursivePackageProvider + extends AbstractRecursivePackageProvider { private final Environment env; - private final PathPackageLocator pkgPath; - public EnvironmentBackedRecursivePackageProvider(Environment env, PathPackageLocator pkgPath) { + EnvironmentBackedRecursivePackageProvider(Environment env, PathPackageLocator pkgPath) { + super(pkgPath); this.env = env; - this.pkgPath = pkgPath; } @Override @@ -97,15 +94,6 @@ public final class EnvironmentBackedRecursivePackageProvider implements Recursiv } @Override - public Path getBuildFileForPackage(PackageIdentifier packageName) { - try { - return pkgPath.getPackageBuildFile(packageName); - } catch (NoSuchPackageException e) { - return null; - } - } - - @Override public boolean isPackage(ExtendedEventHandler eventHandler, PackageIdentifier packageId) throws MissingDepException, InterruptedException { SkyKey packageLookupKey = PackageLookupValue.key(packageId); @@ -187,20 +175,4 @@ public final class EnvironmentBackedRecursivePackageProvider implements Recursiv return packageNames; } - - @Override - public Target getTarget(ExtendedEventHandler eventHandler, Label label) - throws NoSuchPackageException, NoSuchTargetException, MissingDepException, - InterruptedException { - return getPackage(eventHandler, label.getPackageIdentifier()).getTarget(label.getName()); - } - - /** - * Indicates that a missing dependency is needed before target parsing can proceed. Currently - * used only in skyframe to notify the framework of missing dependencies. Caught by the compute - * method in {@link com.google.devtools.build.lib.skyframe.TargetPatternFunction}, which then - * returns null in accordance with the skyframe missing dependency policy. - */ - static class MissingDepException extends RuntimeException { - } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java index e926ffab8d..aa22453702 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java @@ -26,7 +26,6 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.google.common.collect.Sets.SetView; -import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.cmdline.TargetPattern; @@ -35,14 +34,12 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.ExtendedEventHandler; import com.google.devtools.build.lib.packages.BuildFileNotFoundException; import com.google.devtools.build.lib.packages.NoSuchPackageException; -import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.Package; -import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.pkgcache.AbstractRecursivePackageProvider; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.pkgcache.RecursivePackageProvider; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey; -import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.lib.vfs.Root; import com.google.devtools.build.lib.vfs.RootedPath; @@ -61,10 +58,9 @@ import java.util.logging.Logger; * preloaded in {@code graph}. */ @ThreadSafe -public final class GraphBackedRecursivePackageProvider implements RecursivePackageProvider { +public final class GraphBackedRecursivePackageProvider extends AbstractRecursivePackageProvider { private final WalkableGraph graph; - private final PathPackageLocator pkgPath; private final ImmutableList<TargetPatternKey> universeTargetPatternKeys; private static final Logger logger = Logger.getLogger( @@ -73,7 +69,7 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka public GraphBackedRecursivePackageProvider(WalkableGraph graph, ImmutableList<TargetPatternKey> universeTargetPatternKeys, PathPackageLocator pkgPath) { - this.pkgPath = pkgPath; + super(pkgPath); this.graph = Preconditions.checkNotNull(graph); this.universeTargetPatternKeys = Preconditions.checkNotNull(universeTargetPatternKeys); } @@ -135,15 +131,6 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka } @Override - public Path getBuildFileForPackage(PackageIdentifier packageName) { - try { - return pkgPath.getPackageBuildFile(packageName); - } catch (NoSuchPackageException e) { - return null; - } - } - - @Override public boolean isPackage(ExtendedEventHandler eventHandler, PackageIdentifier packageName) throws InterruptedException { SkyKey packageLookupKey = PackageLookupValue.key(packageName); @@ -205,7 +192,7 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka List<Root> roots = new ArrayList<>(); if (repository.isMain()) { - roots.addAll(pkgPath.getPathEntries()); + roots.addAll(getPkgPath().getPathEntries()); } else { RepositoryDirectoryValue repositoryValue = (RepositoryDirectoryValue) graph.getValue(RepositoryDirectoryValue.key(repository)); @@ -297,12 +284,6 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka } } - @Override - public Target getTarget(ExtendedEventHandler eventHandler, Label label) - throws NoSuchPackageException, NoSuchTargetException, InterruptedException { - return getPackage(eventHandler, label.getPackageIdentifier()).getTarget(label.getName()); - } - private static final class TraversalInfo { private final RootedPath rootedDir; // Set of blacklisted directories. The graph is assumed to be prepopulated with diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java index 0eab83286b..e8a59d958f 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java @@ -29,12 +29,12 @@ import com.google.devtools.build.lib.packages.NoSuchTargetException; import com.google.devtools.build.lib.packages.NoSuchThingException; import com.google.devtools.build.lib.packages.Package; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.pkgcache.AbstractRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.pkgcache.FilteringPolicies; import com.google.devtools.build.lib.pkgcache.FilteringPolicy; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.pkgcache.TargetPatternResolverUtil; import com.google.devtools.build.lib.rules.repository.RepositoryDirectoryValue; -import com.google.devtools.build.lib.skyframe.EnvironmentBackedRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.util.BatchCallback; import com.google.devtools.build.lib.util.BatchCallback.NullCallback; import com.google.devtools.build.lib.vfs.PathFragment; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java index b4a012fcdc..a590cf5b49 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java @@ -24,9 +24,9 @@ import com.google.devtools.build.lib.cmdline.TargetPattern; import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet; import com.google.devtools.build.lib.concurrent.MultisetSemaphore; import com.google.devtools.build.lib.packages.Target; +import com.google.devtools.build.lib.pkgcache.AbstractRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; -import com.google.devtools.build.lib.skyframe.EnvironmentBackedRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.util.BatchCallback; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.SkyFunction; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java index 2e0c286c27..0bca5204f5 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java @@ -24,6 +24,7 @@ import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.packages.NoSuchPackageException; import com.google.devtools.build.lib.packages.Target; import com.google.devtools.build.lib.packages.TargetUtils; +import com.google.devtools.build.lib.pkgcache.AbstractRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.pkgcache.CompileOneDependencyTransformer; import com.google.devtools.build.lib.pkgcache.FilteringPolicies; import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner; @@ -32,7 +33,6 @@ import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent; import com.google.devtools.build.lib.pkgcache.TargetProvider; import com.google.devtools.build.lib.pkgcache.TestFilter; -import com.google.devtools.build.lib.skyframe.EnvironmentBackedRecursivePackageProvider.MissingDepException; import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue.TargetPatternPhaseKey; import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey; import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternSkyKeyOrException; |