Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 11da220

Browse files
dslomovbuchgr
authored andcommitted
Assert that declared providers are not TransitiveInfoProviders.
Also fix the remaining violations. RELNOTES: None. PiperOrigin-RevId: 163391215
1 parent da4c959 commit 11da220

25 files changed

Lines changed: 46 additions & 70 deletions

src/main/java/com/google/devtools/build/lib/analysis/AbstractConfiguredTarget.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public final ImmutableCollection<String> getKeys() {
161161
LABEL_FIELD,
162162
FILES_FIELD,
163163
FilesToRunProvider.SKYLARK_NAME));
164-
if (getProvider(OutputGroupProvider.class) != null) {
164+
if (get(OutputGroupProvider.SKYLARK_CONSTRUCTOR) != null) {
165165
result.add(OutputGroupProvider.SKYLARK_NAME);
166166
}
167167
addExtraSkylarkKeys(result::add);
@@ -190,9 +190,6 @@ public final SkylarkClassObject get(ClassObjectConstructor.Key providerKey) {
190190
if (providerKey.equals(DefaultProvider.SKYLARK_CONSTRUCTOR.getKey())) {
191191
return getDefaultProvider();
192192
}
193-
if (providerKey.equals(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey())) {
194-
return OutputGroupProvider.get(this);
195-
}
196193
return rawGetSkylarkProvider(providerKey);
197194
}
198195

@@ -207,7 +204,7 @@ protected abstract SkylarkClassObject rawGetSkylarkProvider(
207204
@Override
208205
public final Object get(String providerKey) {
209206
if (OutputGroupProvider.SKYLARK_NAME.equals(providerKey)) {
210-
return getProvider(OutputGroupProvider.class);
207+
return get(OutputGroupProvider.SKYLARK_CONSTRUCTOR);
211208
}
212209
return rawGetSkylarkProvider(providerKey);
213210
}

src/main/java/com/google/devtools/build/lib/analysis/ConfiguredAspect.java

Lines changed: 6 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@
2929
import com.google.devtools.build.lib.packages.AspectDescriptor;
3030
import com.google.devtools.build.lib.packages.AspectParameters;
3131
import com.google.devtools.build.lib.packages.ClassObjectConstructor;
32-
import com.google.devtools.build.lib.packages.ClassObjectConstructor.Key;
3332
import com.google.devtools.build.lib.packages.SkylarkClassObject;
3433
import com.google.devtools.build.lib.packages.SkylarkProviderIdentifier;
3534
import com.google.devtools.build.lib.syntax.EvalException;
3635
import com.google.devtools.build.lib.util.Preconditions;
3736
import java.util.Arrays;
38-
import java.util.LinkedHashMap;
3937
import java.util.Map;
4038
import java.util.TreeMap;
4139
import javax.annotation.Nullable;
@@ -100,15 +98,12 @@ public Object getProvider(SkylarkProviderIdentifier id) {
10098
}
10199

102100
public SkylarkClassObject get(ClassObjectConstructor.Key key) {
103-
if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
104-
return getProvider(OutputGroupProvider.class);
105-
}
106101
return providers.getProvider(key);
107102
}
108103

109104
public Object get(String legacyKey) {
110105
if (OutputGroupProvider.SKYLARK_NAME.equals(legacyKey)) {
111-
return getProvider(OutputGroupProvider.class);
106+
return get(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey());
112107
}
113108
return providers.getProvider(legacyKey);
114109
}
@@ -133,10 +128,6 @@ public static class Builder {
133128
private final TransitiveInfoProviderMapBuilder providers =
134129
new TransitiveInfoProviderMapBuilder();
135130
private final Map<String, NestedSetBuilder<Artifact>> outputGroupBuilders = new TreeMap<>();
136-
private final ImmutableMap.Builder<String, Object> skylarkProviderBuilder =
137-
ImmutableMap.builder();
138-
private final LinkedHashMap<Key, SkylarkClassObject>
139-
skylarkDeclaredProvidersBuilder = new LinkedHashMap<>();
140131
private final RuleContext ruleContext;
141132
private final AspectDescriptor descriptor;
142133

@@ -221,23 +212,18 @@ public Builder addSkylarkDeclaredProvider(SkylarkClassObject declaredProvider, L
221212
throw new EvalException(
222213
constructor.getLocation(), "All providers must be top level values");
223214
}
224-
ClassObjectConstructor.Key key = constructor.getKey();
225-
addDeclaredProvider(key, declaredProvider);
215+
addDeclaredProvider(declaredProvider);
226216
return this;
227217
}
228218

229-
private void addDeclaredProvider(Key key, SkylarkClassObject declaredProvider) {
230-
if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(key)) {
231-
addProvider(OutputGroupProvider.class, (OutputGroupProvider) declaredProvider);
232-
} else {
233-
providers.put(declaredProvider);
234-
}
219+
private void addDeclaredProvider(SkylarkClassObject declaredProvider) {
220+
providers.put(declaredProvider);
235221
}
236222

237223
public Builder addNativeDeclaredProvider(SkylarkClassObject declaredProvider) {
238224
ClassObjectConstructor constructor = declaredProvider.getConstructor();
239225
Preconditions.checkState(constructor.isExported());
240-
addDeclaredProvider(constructor.getKey(), declaredProvider);
226+
addDeclaredProvider(declaredProvider);
241227
return this;
242228
}
243229

@@ -253,8 +239,7 @@ public ConfiguredAspect build() {
253239
throw new IllegalStateException(
254240
"OutputGroupProvider was provided explicitly; do not use addOutputGroup");
255241
}
256-
addDeclaredProvider(OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey(),
257-
new OutputGroupProvider(outputGroups.build()));
242+
addDeclaredProvider(new OutputGroupProvider(outputGroups.build()));
258243
}
259244

260245
addProvider(

src/main/java/com/google/devtools/build/lib/analysis/MergedConfiguredTarget.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ public static ConfiguredTarget of(ConfiguredTarget base, Iterable<ConfiguredAspe
111111

112112
TransitiveInfoProviderMapBuilder aspectProviders = new TransitiveInfoProviderMapBuilder();
113113
if (mergedOutputGroupProvider != null) {
114-
aspectProviders.add(mergedOutputGroupProvider);
114+
aspectProviders.put(mergedOutputGroupProvider);
115115
}
116116
if (mergedExtraActionProviders != null) {
117117
aspectProviders.add(mergedExtraActionProviders);
@@ -121,7 +121,7 @@ public static ConfiguredTarget of(ConfiguredTarget base, Iterable<ConfiguredAspe
121121
TransitiveInfoProviderMap providers = aspect.getProviders();
122122
for (int i = 0; i < providers.getProviderCount(); ++i) {
123123
Object providerKey = providers.getProviderKeyAt(i);
124-
if (OutputGroupProvider.class.equals(providerKey)
124+
if (OutputGroupProvider.SKYLARK_CONSTRUCTOR.getKey().equals(providerKey)
125125
|| ExtraActionArtifactsProvider.class.equals(providerKey)) {
126126
continue;
127127
}
@@ -163,7 +163,7 @@ private static ImmutableList<OutputGroupProvider> getAllOutputGroupProviders(
163163
}
164164

165165
for (ConfiguredAspect configuredAspect : aspects) {
166-
OutputGroupProvider aspectProvider = OutputGroupProvider.get(configuredAspect);;
166+
OutputGroupProvider aspectProvider = OutputGroupProvider.get(configuredAspect);
167167
if (aspectProvider == null) {
168168
continue;
169169
}

src/main/java/com/google/devtools/build/lib/analysis/OutputGroupProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
*/
5959
@Immutable
6060
public final class OutputGroupProvider extends SkylarkClassObject
61-
implements TransitiveInfoProvider, SkylarkIndexable, Iterable<String> {
61+
implements SkylarkIndexable, Iterable<String> {
6262
public static final String SKYLARK_NAME = "output_groups";
6363

6464
public static NativeClassObjectConstructor<OutputGroupProvider> SKYLARK_CONSTRUCTOR =
@@ -128,7 +128,7 @@ public OutputGroupProvider(ImmutableMap<String, NestedSet<Artifact>> outputGroup
128128

129129
@Nullable
130130
public static OutputGroupProvider get(TransitiveInfoCollection collection) {
131-
return collection.getProvider(OutputGroupProvider.class);
131+
return collection.get(OutputGroupProvider.SKYLARK_CONSTRUCTOR);
132132
}
133133

134134
@Nullable

src/main/java/com/google/devtools/build/lib/analysis/RuleConfiguredTargetBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public ConfiguredTarget build() {
128128
}
129129

130130
OutputGroupProvider outputGroupProvider = new OutputGroupProvider(outputGroups.build());
131-
addProvider(OutputGroupProvider.class, outputGroupProvider);
131+
addNativeDeclaredProvider(outputGroupProvider);
132132
}
133133

134134
TransitiveInfoProviderMap providers = providersBuilder.build();

src/main/java/com/google/devtools/build/lib/analysis/TransitiveInfoProviderMapBuilder.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ public <T extends TransitiveInfoProvider> TransitiveInfoProviderMapBuilder put(
4848
Class<? extends T> providerClass, T provider) {
4949
Preconditions.checkNotNull(providerClass);
5050
Preconditions.checkNotNull(provider);
51+
Preconditions.checkState(!(provider instanceof SkylarkClassObject),
52+
"Expose %s as native declared provider",
53+
providerClass);
54+
5155
// TODO(arielb): throw an exception if the providerClass is already present?
5256
// This is enforced by aspects but RuleConfiguredTarget presents violations
5357
// particularly around LicensesProvider
@@ -57,6 +61,10 @@ public <T extends TransitiveInfoProvider> TransitiveInfoProviderMapBuilder put(
5761

5862
public TransitiveInfoProviderMapBuilder put(SkylarkClassObject classObject) {
5963
Preconditions.checkNotNull(classObject);
64+
Preconditions.checkState(!(classObject instanceof TransitiveInfoProvider),
65+
"Declared provider %s should not implement TransitiveInfoProvider",
66+
classObject.getClass());
67+
6068
providers.put(classObject.getConstructor().getKey(), classObject);
6169
return this;
6270
}

src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import com.google.common.collect.ImmutableMap;
1717
import com.google.devtools.build.lib.actions.Artifact;
18-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
1918
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
2019
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
2120
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
@@ -26,12 +25,11 @@
2625
* android_instrumentation_test}.
2726
*/
2827
@Immutable
29-
public class AndroidDeviceScriptFixtureInfoProvider extends SkylarkClassObject
30-
implements TransitiveInfoProvider {
28+
public class AndroidDeviceScriptFixtureInfoProvider extends SkylarkClassObject {
3129

3230
private static final String SKYLARK_NAME = "DeviceScriptFixtureInfo";
3331
public static final NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider>
34-
ANDROID_DEVICE_SCRIPT_FIXTURE_INFO =
32+
SKYLARK_CONSTRUCTOR =
3533
new NativeClassObjectConstructor<AndroidDeviceScriptFixtureInfoProvider>(
3634
AndroidDeviceScriptFixtureInfoProvider.class, SKYLARK_NAME) {};
3735

@@ -42,7 +40,7 @@ public class AndroidDeviceScriptFixtureInfoProvider extends SkylarkClassObject
4240

4341
public AndroidDeviceScriptFixtureInfoProvider(
4442
Artifact fixtureScript, NestedSet<Artifact> supportApks, boolean daemon, boolean strictExit) {
45-
super(ANDROID_DEVICE_SCRIPT_FIXTURE_INFO, ImmutableMap.<String, Object>of());
43+
super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of());
4644
this.fixtureScript = fixtureScript;
4745
this.supportApks = supportApks;
4846
this.daemon = daemon;

src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import com.google.common.collect.ImmutableList;
1717
import com.google.common.collect.ImmutableMap;
1818
import com.google.devtools.build.lib.actions.Artifact;
19-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
2019
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
2120
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
2221
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
@@ -27,8 +26,7 @@
2726
* android_instrumentation_test}.
2827
*/
2928
@Immutable
30-
public class AndroidHostServiceFixtureInfoProvider extends SkylarkClassObject
31-
implements TransitiveInfoProvider {
29+
public class AndroidHostServiceFixtureInfoProvider extends SkylarkClassObject {
3230

3331
private static final String SKYLARK_NAME = "HostServiceFixtureInfo";
3432
static final NativeClassObjectConstructor<AndroidHostServiceFixtureInfoProvider>

src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationInfoProvider.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import com.google.common.collect.ImmutableMap;
1717
import com.google.devtools.build.lib.actions.Artifact;
18-
import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
1918
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
2019
import com.google.devtools.build.lib.packages.NativeClassObjectConstructor;
2120
import com.google.devtools.build.lib.packages.SkylarkClassObject;
@@ -25,8 +24,7 @@
2524
* AndroidInstrumentationTest}.
2625
*/
2726
@Immutable
28-
public class AndroidInstrumentationInfoProvider extends SkylarkClassObject
29-
implements TransitiveInfoProvider {
27+
public class AndroidInstrumentationInfoProvider extends SkylarkClassObject {
3028

3129
private static final String SKYLARK_NAME = "AndroidInstrumentationInfo";
3230
static final NativeClassObjectConstructor<AndroidInstrumentationInfoProvider>

src/main/java/com/google/devtools/build/lib/rules/android/AndroidInstrumentationTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ private static NestedSet<Artifact> getAllSupportApks(RuleContext ruleContext) {
208208
.addTransitive(AndroidCommon.getSupportApks(ruleContext));
209209
for (AndroidDeviceScriptFixtureInfoProvider fixture :
210210
ruleContext.getPrerequisites(
211-
"fixtures", Mode.TARGET, AndroidDeviceScriptFixtureInfoProvider.class)) {
211+
"fixtures", Mode.TARGET, AndroidDeviceScriptFixtureInfoProvider.SKYLARK_CONSTRUCTOR)) {
212212
allSupportApks.addTransitive(fixture.getSupportApks());
213213
}
214214
for (AndroidHostServiceFixtureInfoProvider fixture :
@@ -281,7 +281,7 @@ private static Iterable<AndroidDeviceScriptFixtureInfoProvider> getDeviceScriptF
281281
return ruleContext.getPrerequisites(
282282
"fixtures",
283283
Mode.TARGET,
284-
AndroidDeviceScriptFixtureInfoProvider.ANDROID_DEVICE_SCRIPT_FIXTURE_INFO);
284+
AndroidDeviceScriptFixtureInfoProvider.SKYLARK_CONSTRUCTOR);
285285
}
286286

287287
private static String getDeviceBrokerType(RuleContext ruleContext) {

0 commit comments

Comments
 (0)