Damien Martin-Guillerez | f88f4d8 | 2015-09-25 13:56:55 +0000 | [diff] [blame] | 1 | // Copyright 2014 The Bazel Authors. All rights reserved. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 2 | // |
| 3 | // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 | // you may not use this file except in compliance with the License. |
| 5 | // You may obtain a copy of the License at |
| 6 | // |
| 7 | // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 | // |
| 9 | // Unless required by applicable law or agreed to in writing, software |
| 10 | // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | // See the License for the specific language governing permissions and |
| 13 | // limitations under the License. |
| 14 | |
| 15 | package com.google.devtools.build.lib.analysis; |
| 16 | |
Carmi Grushko | eaaa9d0d | 2015-11-17 01:54:45 +0000 | [diff] [blame] | 17 | import static com.google.devtools.build.lib.analysis.ExtraActionUtils.createExtraActionProvider; |
| 18 | |
tomlu | a155b53 | 2017-11-08 20:12:47 +0100 | [diff] [blame] | 19 | import com.google.common.base.Preconditions; |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 20 | import com.google.common.collect.ImmutableList; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 21 | import com.google.common.collect.ImmutableMap; |
Carmi Grushko | 4076e44 | 2016-01-21 20:05:42 +0000 | [diff] [blame] | 22 | import com.google.common.collect.ImmutableSet; |
Rumou Duan | 33bab46 | 2016-04-25 17:55:12 +0000 | [diff] [blame] | 23 | import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 24 | import com.google.devtools.build.lib.actions.Actions; |
| 25 | import com.google.devtools.build.lib.actions.Actions.GeneratingActions; |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 26 | import com.google.devtools.build.lib.actions.Artifact; |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 27 | import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; |
gregce | 130feba | 2020-02-06 13:55:08 -0800 | [diff] [blame] | 28 | import com.google.devtools.build.lib.analysis.config.CoreOptions; |
gregce | eefc91c | 2020-06-19 13:33:43 -0700 | [diff] [blame] | 29 | import com.google.devtools.build.lib.analysis.starlark.StarlarkApiProvider; |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 30 | import com.google.devtools.build.lib.collect.nestedset.NestedSet; |
| 31 | import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 32 | import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; |
adonovan | a11e2d0 | 2019-12-06 07:11:35 -0800 | [diff] [blame] | 33 | import com.google.devtools.build.lib.packages.Info; |
dslomov | de965ac | 2017-07-31 21:07:51 +0200 | [diff] [blame] | 34 | import com.google.devtools.build.lib.packages.Provider; |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 35 | import com.google.errorprone.annotations.CanIgnoreReturnValue; |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 36 | import java.util.Arrays; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 37 | import java.util.Map; |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 38 | import java.util.TreeMap; |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 39 | import javax.annotation.Nullable; |
adonovan | 450c7ad | 2020-09-14 13:00:21 -0700 | [diff] [blame] | 40 | import net.starlark.java.eval.EvalException; |
adonovan | a278c8f | 2021-01-11 08:34:20 -0800 | [diff] [blame] | 41 | import net.starlark.java.eval.Starlark; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 42 | |
| 43 | /** |
| 44 | * Extra information about a configured target computed on request of a dependent. |
| 45 | * |
| 46 | * <p>Analogous to {@link ConfiguredTarget}: contains a bunch of transitive info providers, which |
Googler | 4e0a5cb | 2017-04-09 17:58:18 -0400 | [diff] [blame] | 47 | * are merged with the providers of the associated configured target before they are passed to the |
| 48 | * configured target factories that depend on the configured target to which this aspect is added. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 49 | * |
| 50 | * <p>Aspects are created alongside configured targets on request from dependents. |
Lukacs Berki | 2300cd6 | 2016-05-19 11:06:37 +0000 | [diff] [blame] | 51 | * |
Googler | 4e0a5cb | 2017-04-09 17:58:18 -0400 | [diff] [blame] | 52 | * <p>For more information about aspects, see {@link |
| 53 | * com.google.devtools.build.lib.packages.AspectClass}. |
Lukacs Berki | 2300cd6 | 2016-05-19 11:06:37 +0000 | [diff] [blame] | 54 | * |
ulfjack | 26d0e49 | 2017-08-07 13:42:33 +0200 | [diff] [blame] | 55 | * @see com.google.devtools.build.lib.analysis.RuleConfiguredTargetFactory |
Lukacs Berki | 2300cd6 | 2016-05-19 11:06:37 +0000 | [diff] [blame] | 56 | * @see com.google.devtools.build.lib.packages.AspectClass |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 57 | */ |
| 58 | @Immutable |
janakr | 6d185b8 | 2020-03-30 14:08:01 -0700 | [diff] [blame] | 59 | public final class ConfiguredAspect implements ProviderCollection { |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 60 | private final ImmutableList<ActionAnalysisMetadata> actions; |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 61 | private final TransitiveInfoProviderMap providers; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 62 | |
janakr | f15d08d | 2020-04-22 12:53:03 -0700 | [diff] [blame] | 63 | private ConfiguredAspect( |
| 64 | ImmutableList<ActionAnalysisMetadata> actions, TransitiveInfoProviderMap providers) { |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 65 | this.actions = actions; |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 66 | this.providers = providers; |
tomlu | 64416ce | 2018-10-02 12:46:08 -0700 | [diff] [blame] | 67 | |
gregce | 5c8a5f5 | 2020-05-13 10:35:36 -0700 | [diff] [blame] | 68 | // Initialize every StarlarkApiProvider |
tomlu | 64416ce | 2018-10-02 12:46:08 -0700 | [diff] [blame] | 69 | for (int i = 0; i < providers.getProviderCount(); i++) { |
| 70 | Object obj = providers.getProviderInstanceAt(i); |
gregce | 4893ee3 | 2020-04-27 11:53:54 -0700 | [diff] [blame] | 71 | if (obj instanceof StarlarkApiProvider) { |
| 72 | ((StarlarkApiProvider) obj).init(providers); |
tomlu | 64416ce | 2018-10-02 12:46:08 -0700 | [diff] [blame] | 73 | } |
| 74 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 75 | } |
| 76 | |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 77 | public ImmutableList<ActionAnalysisMetadata> getActions() { |
| 78 | return actions; |
| 79 | } |
| 80 | |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 81 | /** Returns the providers created by the aspect. */ |
| 82 | public TransitiveInfoProviderMap getProviders() { |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 83 | return providers; |
| 84 | } |
| 85 | |
janakr | 6d185b8 | 2020-03-30 14:08:01 -0700 | [diff] [blame] | 86 | @Override |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 87 | @Nullable |
Dmitry Lomov | 2473b9f | 2015-09-14 08:53:10 +0000 | [diff] [blame] | 88 | public <P extends TransitiveInfoProvider> P getProvider(Class<P> providerClass) { |
dslomov | 211a3ba | 2017-05-16 00:21:22 +0200 | [diff] [blame] | 89 | AnalysisUtils.checkProvider(providerClass); |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 90 | return providers.getProvider(providerClass); |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 91 | } |
| 92 | |
janakr | 6d185b8 | 2020-03-30 14:08:01 -0700 | [diff] [blame] | 93 | @Override |
adonovan | a11e2d0 | 2019-12-06 07:11:35 -0800 | [diff] [blame] | 94 | public Info get(Provider.Key key) { |
tomlu | 64416ce | 2018-10-02 12:46:08 -0700 | [diff] [blame] | 95 | return providers.get(key); |
dslomov | ea7d482 | 2017-05-03 13:01:27 +0200 | [diff] [blame] | 96 | } |
| 97 | |
janakr | 6d185b8 | 2020-03-30 14:08:01 -0700 | [diff] [blame] | 98 | @Override |
dslomov | ea7d482 | 2017-05-03 13:01:27 +0200 | [diff] [blame] | 99 | public Object get(String legacyKey) { |
gregce | 773b95f | 2020-05-19 09:51:09 -0700 | [diff] [blame] | 100 | if (OutputGroupInfo.STARLARK_NAME.equals(legacyKey)) { |
| 101 | return get(OutputGroupInfo.STARLARK_CONSTRUCTOR.getKey()); |
dslomov | ea7d482 | 2017-05-03 13:01:27 +0200 | [diff] [blame] | 102 | } |
tomlu | 64416ce | 2018-10-02 12:46:08 -0700 | [diff] [blame] | 103 | return providers.get(legacyKey); |
dslomov | ea7d482 | 2017-05-03 13:01:27 +0200 | [diff] [blame] | 104 | } |
| 105 | |
Lukacs Berki | 549bfce | 2016-04-22 15:29:12 +0000 | [diff] [blame] | 106 | public static ConfiguredAspect forAlias(ConfiguredAspect real) { |
jhorvitz | b659082 | 2021-08-13 15:18:27 -0700 | [diff] [blame] | 107 | return new ConfiguredAspect(real.actions, real.providers); |
Lukacs Berki | 549bfce | 2016-04-22 15:29:12 +0000 | [diff] [blame] | 108 | } |
| 109 | |
janakr | f15d08d | 2020-04-22 12:53:03 -0700 | [diff] [blame] | 110 | public static ConfiguredAspect forNonapplicableTarget() { |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 111 | return new ConfiguredAspect( |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 112 | ImmutableList.of(), |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 113 | new TransitiveInfoProviderMapBuilder().add().build()); |
Dmitry Lomov | 6cd9897 | 2017-03-01 15:44:00 +0000 | [diff] [blame] | 114 | } |
| 115 | |
janakr | f15d08d | 2020-04-22 12:53:03 -0700 | [diff] [blame] | 116 | public static Builder builder(RuleContext ruleContext) { |
| 117 | return new Builder(ruleContext); |
dslomov | 99ea6b4 | 2017-04-25 17:46:17 +0200 | [diff] [blame] | 118 | } |
| 119 | |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 120 | /** |
Dmitry Lomov | b487ac6 | 2015-11-09 13:09:12 +0000 | [diff] [blame] | 121 | * Builder for {@link ConfiguredAspect}. |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 122 | */ |
| 123 | public static class Builder { |
Googler | 4b7aae4 | 2017-05-04 17:16:09 -0400 | [diff] [blame] | 124 | private final TransitiveInfoProviderMapBuilder providers = |
| 125 | new TransitiveInfoProviderMapBuilder(); |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 126 | private final Map<String, NestedSetBuilder<Artifact>> outputGroupBuilders = new TreeMap<>(); |
Carmi Grushko | eaaa9d0d | 2015-11-17 01:54:45 +0000 | [diff] [blame] | 127 | private final RuleContext ruleContext; |
jhorvitz | a44313a | 2021-08-18 17:59:02 -0700 | [diff] [blame] | 128 | |
janakr | f15d08d | 2020-04-22 12:53:03 -0700 | [diff] [blame] | 129 | public Builder(RuleContext ruleContext) { |
Carmi Grushko | eaaa9d0d | 2015-11-17 01:54:45 +0000 | [diff] [blame] | 130 | this.ruleContext = ruleContext; |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 131 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 132 | |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 133 | @CanIgnoreReturnValue |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 134 | public <T extends TransitiveInfoProvider> Builder addProvider( |
| 135 | Class<? extends T> providerClass, T provider) { |
| 136 | Preconditions.checkNotNull(provider); |
| 137 | checkProviderClass(providerClass); |
| 138 | providers.put(providerClass, provider); |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 139 | return this; |
| 140 | } |
| 141 | |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 142 | /** Adds a provider to the aspect. */ |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 143 | @CanIgnoreReturnValue |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 144 | public Builder addProvider(TransitiveInfoProvider provider) { |
| 145 | Preconditions.checkNotNull(provider); |
Googler | 4b7aae4 | 2017-05-04 17:16:09 -0400 | [diff] [blame] | 146 | addProvider(TransitiveInfoProviderEffectiveClassHelper.get(provider), provider); |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 147 | return this; |
| 148 | } |
| 149 | |
jhorvitz | b659082 | 2021-08-13 15:18:27 -0700 | [diff] [blame] | 150 | private static void checkProviderClass(Class<? extends TransitiveInfoProvider> providerClass) { |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 151 | Preconditions.checkNotNull(providerClass); |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 152 | } |
| 153 | |
| 154 | /** Adds providers to the aspect. */ |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 155 | @CanIgnoreReturnValue |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 156 | public Builder addProviders(TransitiveInfoProviderMap providers) { |
dslomov | f6a7e5a | 2017-07-05 07:23:31 -0400 | [diff] [blame] | 157 | this.providers.addAll(providers); |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 158 | return this; |
| 159 | } |
| 160 | |
| 161 | /** Adds providers to the aspect. */ |
| 162 | public Builder addProviders(TransitiveInfoProvider... providers) { |
| 163 | return addProviders(Arrays.asList(providers)); |
| 164 | } |
| 165 | |
| 166 | /** Adds providers to the aspect. */ |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 167 | @CanIgnoreReturnValue |
Googler | 94d35de | 2016-09-16 15:21:39 +0000 | [diff] [blame] | 168 | public Builder addProviders(Iterable<TransitiveInfoProvider> providers) { |
| 169 | for (TransitiveInfoProvider provider : providers) { |
| 170 | addProvider(provider); |
Carmi Grushko | b8f0e86 | 2015-11-23 23:26:15 +0000 | [diff] [blame] | 171 | } |
| 172 | return this; |
| 173 | } |
| 174 | |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 175 | /** Adds a set of files to an output group. */ |
| 176 | @CanIgnoreReturnValue |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 177 | public Builder addOutputGroup(String name, NestedSet<Artifact> artifacts) { |
jhorvitz | b659082 | 2021-08-13 15:18:27 -0700 | [diff] [blame] | 178 | outputGroupBuilders |
| 179 | .computeIfAbsent(name, k -> NestedSetBuilder.stableOrder()) |
| 180 | .addTransitive(artifacts); |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 181 | return this; |
| 182 | } |
| 183 | |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 184 | @CanIgnoreReturnValue |
gregce | 5c8a5f5 | 2020-05-13 10:35:36 -0700 | [diff] [blame] | 185 | public Builder addStarlarkTransitiveInfo(String name, Object value) { |
dslomov | f6a7e5a | 2017-07-05 07:23:31 -0400 | [diff] [blame] | 186 | providers.put(name, value); |
Googler | 63ce8f2 | 2017-01-09 15:32:16 +0000 | [diff] [blame] | 187 | return this; |
| 188 | } |
| 189 | |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 190 | @CanIgnoreReturnValue |
gregce | 5c8a5f5 | 2020-05-13 10:35:36 -0700 | [diff] [blame] | 191 | public Builder addStarlarkDeclaredProvider(Info declaredProvider) throws EvalException { |
dslomov | de965ac | 2017-07-31 21:07:51 +0200 | [diff] [blame] | 192 | Provider constructor = declaredProvider.getProvider(); |
Vladimir Moskva | 6c28fe9 | 2017-03-03 12:55:08 +0000 | [diff] [blame] | 193 | if (!constructor.isExported()) { |
adonovan | a278c8f | 2021-01-11 08:34:20 -0800 | [diff] [blame] | 194 | throw Starlark.errorf( |
| 195 | "aspect function returned an instance of a provider (defined at %s) that is not a" |
| 196 | + " global", |
| 197 | constructor.getLocation()); |
Vladimir Moskva | 6c28fe9 | 2017-03-03 12:55:08 +0000 | [diff] [blame] | 198 | } |
dslomov | 11da220 | 2017-07-27 23:48:56 +0200 | [diff] [blame] | 199 | addDeclaredProvider(declaredProvider); |
Vladimir Moskva | 6c28fe9 | 2017-03-03 12:55:08 +0000 | [diff] [blame] | 200 | return this; |
| 201 | } |
| 202 | |
adonovan | a11e2d0 | 2019-12-06 07:11:35 -0800 | [diff] [blame] | 203 | private void addDeclaredProvider(Info declaredProvider) { |
dslomov | 11da220 | 2017-07-27 23:48:56 +0200 | [diff] [blame] | 204 | providers.put(declaredProvider); |
dslomov | ea7d482 | 2017-05-03 13:01:27 +0200 | [diff] [blame] | 205 | } |
| 206 | |
Kurt Alfred Kluever | 4192ca6 | 2022-07-05 06:30:29 -0700 | [diff] [blame] | 207 | @CanIgnoreReturnValue |
adonovan | a11e2d0 | 2019-12-06 07:11:35 -0800 | [diff] [blame] | 208 | public Builder addNativeDeclaredProvider(Info declaredProvider) { |
dslomov | de965ac | 2017-07-31 21:07:51 +0200 | [diff] [blame] | 209 | Provider constructor = declaredProvider.getProvider(); |
dslomov | f969734 | 2017-05-02 16:26:39 +0200 | [diff] [blame] | 210 | Preconditions.checkState(constructor.isExported()); |
dslomov | 11da220 | 2017-07-27 23:48:56 +0200 | [diff] [blame] | 211 | addDeclaredProvider(declaredProvider); |
dslomov | f969734 | 2017-05-02 16:26:39 +0200 | [diff] [blame] | 212 | return this; |
| 213 | } |
| 214 | |
Googler | 7b649f9 | 2022-07-06 05:12:46 -0700 | [diff] [blame] | 215 | @Nullable |
michajlo | 3ad1580 | 2020-11-18 15:09:41 -0800 | [diff] [blame] | 216 | public ConfiguredAspect build() throws ActionConflictException, InterruptedException { |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 217 | if (!outputGroupBuilders.isEmpty()) { |
| 218 | ImmutableMap.Builder<String, NestedSet<Artifact>> outputGroups = ImmutableMap.builder(); |
| 219 | for (Map.Entry<String, NestedSetBuilder<Artifact>> entry : outputGroupBuilders.entrySet()) { |
| 220 | outputGroups.put(entry.getKey(), entry.getValue().build()); |
| 221 | } |
| 222 | |
gregce | 773b95f | 2020-05-19 09:51:09 -0700 | [diff] [blame] | 223 | if (providers.contains(OutputGroupInfo.STARLARK_CONSTRUCTOR.getKey())) { |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 224 | throw new IllegalStateException( |
dslomov | 69c45f8 | 2017-12-14 11:15:43 -0500 | [diff] [blame] | 225 | "OutputGroupInfo was provided explicitly; do not use addOutputGroup"); |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 226 | } |
Googler | 92ce115 | 2022-02-01 06:37:06 -0800 | [diff] [blame] | 227 | addDeclaredProvider(new OutputGroupInfo(outputGroups.buildOrThrow())); |
Dmitry Lomov | e2033b1 | 2015-08-19 16:57:49 +0000 | [diff] [blame] | 228 | } |
| 229 | |
Carmi Grushko | 4076e44 | 2016-01-21 20:05:42 +0000 | [diff] [blame] | 230 | addProvider( |
jhorvitz | b659082 | 2021-08-13 15:18:27 -0700 | [diff] [blame] | 231 | createExtraActionProvider(/*actionsWithoutExtraAction=*/ ImmutableSet.of(), ruleContext)); |
Carmi Grushko | eaaa9d0d | 2015-11-17 01:54:45 +0000 | [diff] [blame] | 232 | |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 233 | AnalysisEnvironment analysisEnvironment = ruleContext.getAnalysisEnvironment(); |
janakr | 9790a3a | 2022-01-11 09:44:01 -0800 | [diff] [blame] | 234 | GeneratingActions generatingActions; |
| 235 | try { |
| 236 | generatingActions = |
| 237 | Actions.assignOwnersAndFilterSharedActionsAndThrowActionConflict( |
| 238 | analysisEnvironment.getActionKeyContext(), |
| 239 | analysisEnvironment.getRegisteredActions(), |
| 240 | ruleContext.getOwner(), |
| 241 | /*outputFiles=*/ null); |
| 242 | } catch (Actions.ArtifactGeneratedByOtherRuleException e) { |
| 243 | ruleContext.ruleError(e.getMessage()); |
| 244 | return null; |
| 245 | } |
tomlu | 39a0a38 | 2018-06-22 09:43:23 -0700 | [diff] [blame] | 246 | |
gregce | 405a994 | 2020-04-27 09:55:04 -0700 | [diff] [blame] | 247 | maybeAddRequiredConfigFragmentsProvider(); |
| 248 | |
| 249 | return new ConfiguredAspect(generatingActions.getActions(), providers.build()); |
| 250 | } |
| 251 | |
| 252 | /** |
| 253 | * Adds {@link RequiredConfigFragmentsProvider} if {@link |
| 254 | * CoreOptions#includeRequiredConfigFragmentsProvider} isn't {@link |
| 255 | * CoreOptions.IncludeConfigFragmentsEnum#OFF}. |
| 256 | * |
jhorvitz | 7410c80 | 2020-07-22 11:55:07 -0700 | [diff] [blame] | 257 | * <p>See {@link com.google.devtools.build.lib.analysis.config.RequiredFragmentsUtil} for a |
| 258 | * description of the meaning of this provider's content. That class contains methods that |
jhorvitz | ca598d0 | 2021-09-10 11:32:54 -0700 | [diff] [blame] | 259 | * populate the results of {@link RuleContext#getRequiredConfigFragments}. |
gregce | 405a994 | 2020-04-27 09:55:04 -0700 | [diff] [blame] | 260 | */ |
| 261 | private void maybeAddRequiredConfigFragmentsProvider() { |
jhorvitz | 7410c80 | 2020-07-22 11:55:07 -0700 | [diff] [blame] | 262 | if (ruleContext.shouldIncludeRequiredConfigFragmentsProvider()) { |
jhorvitz | ca598d0 | 2021-09-10 11:32:54 -0700 | [diff] [blame] | 263 | addProvider(ruleContext.getRequiredConfigFragments()); |
gregce | 130feba | 2020-02-06 13:55:08 -0800 | [diff] [blame] | 264 | } |
Han-Wen Nienhuys | d08b27f | 2015-02-25 16:45:20 +0100 | [diff] [blame] | 265 | } |
| 266 | } |
Carmi Grushko | 65ac355 | 2015-08-21 16:43:26 +0000 | [diff] [blame] | 267 | } |