aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe
diff options
context:
space:
mode:
authorGravatar Dmitry Lomov <dslomov@google.com>2017-01-10 10:57:17 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-10 11:51:25 +0000
commitb5174c7cac256a2d7a1c642abc03799f33c30423 (patch)
tree4437c18f4b0e34aa685813e3abc5c1bbb929db83 /src/main/java/com/google/devtools/build/lib/skyframe
parent44ecf9a0c7c25496a43f59f1c8f20df9527e12cb (diff)
Encapsulate the required provider logic in RequiredProviders class.
For now, only for aspects, but eventually expand to Attribute's mandatory providers as well. -- PiperOrigin-RevId: 144063369 MOS_MIGRATED_REVID=144063369
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfiguredTargetFunction.java35
1 files changed, 16 insertions, 19 deletions
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 134cea24a8..e481dbd1d9 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
@@ -16,11 +16,11 @@ package com.google.devtools.build.lib.skyframe;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
+import com.google.common.base.Predicate;
import com.google.common.base.Verify;
import com.google.common.base.VerifyException;
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.common.collect.LinkedHashMultimap;
import com.google.common.collect.LinkedListMultimap;
@@ -54,7 +54,6 @@ import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.StoredEventHandler;
import com.google.devtools.build.lib.packages.Aspect;
-import com.google.devtools.build.lib.packages.AspectDefinition;
import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.packages.Attribute;
import com.google.devtools.build.lib.packages.BuildType;
@@ -64,6 +63,7 @@ import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.RawAttributeMapper;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClassProvider;
+import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.packages.TargetUtils;
import com.google.devtools.build.lib.skyframe.AspectFunction.AspectCreationException;
@@ -916,24 +916,21 @@ final class ConfiguredTargetFunction implements SkyFunction {
return key;
}
- private static boolean aspectMatchesConfiguredTarget(ConfiguredTarget dep, Aspect aspect) {
- AspectDefinition aspectDefinition = aspect.getDefinition();
- ImmutableList<ImmutableSet<Class<?>>> providersList = aspectDefinition.getRequiredProviders();
-
- for (ImmutableSet<Class<?>> providers : providersList) {
- boolean matched = true;
- for (Class<?> provider : providers) {
- if (dep.getProvider(provider.asSubclass(TransitiveInfoProvider.class)) == null) {
- matched = false;
- break;
+ private static boolean aspectMatchesConfiguredTarget(final ConfiguredTarget dep, Aspect aspect) {
+ return aspect.getDefinition().getRequiredProviders().isSatisfiedBy(
+ new Predicate<Class<?>>() {
+ @Override
+ public boolean apply(Class<?> provider) {
+ return dep.getProvider(provider.asSubclass(TransitiveInfoProvider.class)) != null;
+ }
+ },
+ new Predicate<SkylarkProviderIdentifier>() {
+ @Override
+ public boolean apply(SkylarkProviderIdentifier skylarkProviderIdentifier) {
+ return dep.get(skylarkProviderIdentifier) != null;
+ }
}
- }
-
- if (matched) {
- return true;
- }
- }
- return false;
+ );
}
/**