aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
diff options
context:
space:
mode:
authorGravatar Mark Schaller <mschaller@google.com>2015-07-07 16:36:09 +0000
committerGravatar Han-Wen Nienhuys <hanwen@google.com>2015-07-08 11:40:48 +0000
commitd7311e0ddaf66857d5d7f332a6fad58e0bf7becb (patch)
treea011b8e8264d788e4d97baca22974edc3b2eb78f /src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
parent1314570a4d9094c6157f8e1cfe4b31e61b01a1fb (diff)
Activate interleaved package and transitive target loading
Hooks up the recently introduced interleaved loading functions to normal graph loading. -- MOS_MIGRATED_REVID=97679451
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java63
1 files changed, 22 insertions, 41 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
index 6653c48933..26d1e3094d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunction.java
@@ -13,27 +13,22 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.common.base.Function;
import com.google.common.base.Preconditions;
-import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.lib.cmdline.ResolvedTargets;
+import com.google.common.collect.Iterables;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
-import com.google.devtools.build.lib.packages.NoSuchPackageException;
-import com.google.devtools.build.lib.packages.NoSuchTargetException;
import com.google.devtools.build.lib.pkgcache.ParseFailureListener;
+import com.google.devtools.build.lib.skyframe.PrepareDepsOfPatternValue.PrepareDepsOfPatternSkyKeyOrException;
import com.google.devtools.build.lib.skyframe.PrepareDepsOfPatternsValue.TargetPatternSequence;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
-import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternSkyKeyOrException;
-import com.google.devtools.build.lib.syntax.Label;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.ValueOrException;
-import java.util.ArrayList;
-import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
@@ -55,12 +50,13 @@ public class PrepareDepsOfPatternsFunction implements SkyFunction {
EventHandler eventHandler = env.getListener();
boolean handlerIsParseFailureListener = eventHandler instanceof ParseFailureListener;
TargetPatternSequence targetPatternSequence = (TargetPatternSequence) skyKey.argument();
- Iterable<TargetPatternSkyKeyOrException> keysMaybe =
- TargetPatternValue.keys(targetPatternSequence.getPatterns(),
- targetPatternSequence.getPolicy(), targetPatternSequence.getOffset());
+
+ Iterable<PrepareDepsOfPatternSkyKeyOrException> keysMaybe =
+ PrepareDepsOfPatternValue.keys(targetPatternSequence.getPatterns(),
+ targetPatternSequence.getOffset());
ImmutableList.Builder<SkyKey> skyKeyBuilder = ImmutableList.builder();
- for (TargetPatternSkyKeyOrException skyKeyOrException : keysMaybe) {
+ for (PrepareDepsOfPatternSkyKeyOrException skyKeyOrException : keysMaybe) {
try {
skyKeyBuilder.add(skyKeyOrException.getSkyKey());
} catch (TargetParsingException e) {
@@ -70,48 +66,33 @@ public class PrepareDepsOfPatternsFunction implements SkyFunction {
}
ImmutableList<SkyKey> skyKeys = skyKeyBuilder.build();
- Map<SkyKey, ValueOrException<TargetParsingException>> targetPatternValuesByKey =
+ Map<SkyKey, ValueOrException<TargetParsingException>> tokensByKey =
env.getValuesOrThrow(skyKeys, TargetParsingException.class);
if (env.valuesMissing()) {
return null;
}
- ResolvedTargets.Builder<Label> builder = ResolvedTargets.builder();
for (SkyKey key : skyKeys) {
try {
- // The only exception type throwable by TargetPatternFunction is TargetParsingException.
- // Therefore all ValueOrException values in the map will either be non-null or throw
- // TargetParsingException when get is called.
- TargetPatternValue resultValue = Preconditions.checkNotNull(
- (TargetPatternValue) targetPatternValuesByKey.get(key).get());
- ResolvedTargets<Label> results = resultValue.getTargets();
- if (((TargetPatternKey) key.argument()).isNegative()) {
- builder.filter(Predicates.not(Predicates.in(results.getTargets())));
- } else {
- builder.merge(results);
- }
+ // The only exception type throwable by PrepareDepsOfPatternFunction is
+ // TargetParsingException. Therefore all ValueOrException values in the map will either
+ // be non-null or throw TargetParsingException when get is called.
+ Preconditions.checkNotNull(tokensByKey.get(key).get());
} catch (TargetParsingException e) {
// If a target pattern can't be evaluated, notify the user of the problem and keep going.
handleTargetParsingException(eventHandler, handlerIsParseFailureListener, key, e);
}
}
- ResolvedTargets<Label> resolvedTargets = builder.build();
-
- List<SkyKey> targetKeys = new ArrayList<>();
- for (Label target : resolvedTargets.getTargets()) {
- targetKeys.add(TransitiveTargetValue.key(target));
- }
-
- // TransitiveTargetFunction can produce exceptions of types NoSuchPackageException and
- // NoSuchTargetException. However, PrepareDepsOfPatternsFunction doesn't care about any errors
- // found during transitive target loading--it just wants the graph to have loaded whatever
- // transitive target values are available.
- env.getValuesOrThrow(targetKeys, NoSuchPackageException.class, NoSuchTargetException.class);
- if (env.valuesMissing()) {
- return null;
- }
- return PrepareDepsOfPatternsValue.INSTANCE;
+ ImmutableList<TargetPatternKey> targetPatternKeys =
+ ImmutableList.copyOf(Iterables.transform(skyKeys,
+ new Function<SkyKey, TargetPatternKey>() {
+ @Override
+ public TargetPatternKey apply(SkyKey skyKey) {
+ return (TargetPatternKey) skyKey.argument();
+ }
+ }));
+ return new PrepareDepsOfPatternsValue(targetPatternKeys);
}
private static void handleTargetParsingException(EventHandler eventHandler,