aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/packages
diff options
context:
space:
mode:
authorGravatar dslomov <dslomov@google.com>2017-07-31 21:07:51 +0200
committerGravatar Dmitry Lomov <dslomov@google.com>2017-08-01 12:21:52 +0200
commitde965ac47e5dedf9dd43004d7523dbfa5ab64de1 (patch)
tree1bca577a04df1c739807a8d3490296717a3b7d7b /src/main/java/com/google/devtools/build/lib/packages
parent24183314aaa7887d80d6c1b7b9ce613889bea8e5 (diff)
Better names for declared providers-related classes.
Follows https://docs.google.com/document/d/1aAIVWvHPERDz2cv_PCFGwr8dvh5FcAkENFoRsNS4clk/. RELNOTES: None. PiperOrigin-RevId: 163728291
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/packages')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Attribute.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Info.java (renamed from src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObject.java)105
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java (renamed from src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java)78
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/Provider.java (renamed from src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java)53
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java73
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java (renamed from src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java)35
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java3
11 files changed, 186 insertions, 232 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
index 1f1ddd6d85..3f8686b16a 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/AdvertisedProviderSet.java
@@ -164,7 +164,7 @@ public final class AdvertisedProviderSet {
return this;
}
- public Builder addSkylark(ClassObjectConstructor.Key id) {
+ public Builder addSkylark(Provider.Key id) {
skylarkProviders.add(SkylarkProviderIdentifier.forKey(id));
return this;
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
index 7114040300..bd3605627f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Attribute.java
@@ -950,18 +950,18 @@ public final class Attribute implements Comparable<Attribute> {
/**
* If this is a label or label-list attribute, then this sets the allowed rule types with
- * warning for the labels occurring in the attribute. This must be a disjoint set from
- * {@link #allowedRuleClasses}.
+ * warning for the labels occurring in the attribute. This must be a disjoint set from {@link
+ * #allowedRuleClasses}.
*
* <p>If the attribute contains Labels of any other rule type (other than this or those set in
- * allowedRuleClasses()) and they fulfill {@link #getRequiredProviders()}}, the build
- * continues without error. Else the build fails during analysis.
+ * allowedRuleClasses()) and they fulfill {@link #getRequiredProviders()}}, the build continues
+ * without error. Else the build fails during analysis.
*
- * <p>If neither this nor {@link #allowedRuleClassesForLabels} is set, only rules that
- * fulfill {@link #getRequiredProviders()} build without error.
+ * <p>If neither this nor {@link #allowedRuleClassesForLabels} is set, only rules that fulfill
+ * {@link #getRequiredProviders()} build without error.
*
- * <p>This only works on a per-target basis, not on a per-file basis; with other words, it
- * works for 'deps' attributes, but not 'srcs' attributes.
+ * <p>This only works on a per-target basis, not on a per-file basis; with other words, it works
+ * for 'deps' attributes, but not 'srcs' attributes.
*/
public Builder<TYPE> allowedRuleClassesWithWarning(String... allowedRuleClasses) {
return allowedRuleClassesWithWarning(ImmutableSet.copyOf(allowedRuleClasses));
@@ -1514,7 +1514,7 @@ public final class Attribute implements Comparable<Attribute> {
private Object invokeCallback(Map<String, Object> attrValues)
throws EvalException, InterruptedException {
ClassObject attrs =
- NativeClassObjectConstructor.STRUCT.create(
+ NativeProvider.STRUCT.create(
attrValues, "No such regular (non computed) attribute '%s'.");
Object result = callback.call(attrs);
try {
@@ -1792,19 +1792,16 @@ public final class Attribute implements Comparable<Attribute> {
private final ImmutableList<RuleAspect<?>> aspects;
/**
- * Constructs a rule attribute with the specified name, type and default
- * value.
+ * Constructs a rule attribute with the specified name, type and default value.
*
* @param name the name of the attribute
* @param type the type of the attribute
- * @param defaultValue the default value to use for this attribute if none is
- * specified in rule declaration in the BUILD file. Must be null, or of
- * type "type". May be an instance of ComputedDefault, in which case
- * its getDefault() method must return an instance of "type", or null.
- * Must be immutable.
- * @param configTransition the configuration transition for this attribute
- * (which must be of type LABEL, LABEL_LIST, NODEP_LABEL or
- * NODEP_LABEL_LIST).
+ * @param defaultValue the default value to use for this attribute if none is specified in rule
+ * declaration in the BUILD file. Must be null, or of type "type". May be an instance of
+ * ComputedDefault, in which case its getDefault() method must return an instance of "type",
+ * or null. Must be immutable.
+ * @param configTransition the configuration transition for this attribute (which must be of type
+ * LABEL, LABEL_LIST, NODEP_LABEL or NODEP_LABEL_LIST).
*/
private Attribute(
String name,
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
index 525055476c..ecb9cf862f 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/ImplicitOutputsFunction.java
@@ -94,10 +94,11 @@ public abstract class ImplicitOutputsFunction {
attrValues.put(attrName, value == null ? Runtime.NONE : value);
}
}
- ClassObject attrs = NativeClassObjectConstructor.STRUCT.create(
- attrValues,
- "Attribute '%s' either doesn't exist "
- + "or uses a select() (i.e. could have multiple values)");
+ ClassObject attrs =
+ NativeProvider.STRUCT.create(
+ attrValues,
+ "Attribute '%s' either doesn't exist "
+ + "or uses a select() (i.e. could have multiple values)");
try {
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
for (Map.Entry<String, String> entry : castMap(callback.call(attrs),
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObject.java b/src/main/java/com/google/devtools/build/lib/packages/Info.java
index fa84c3eff6..059c55efb2 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObject.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Info.java
@@ -21,7 +21,6 @@ import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import com.google.common.collect.Sets.SetView;
import com.google.devtools.build.lib.events.Location;
-import com.google.devtools.build.lib.packages.NativeClassObjectConstructor.StructConstructor;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
@@ -40,7 +39,7 @@ import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
-/** An implementation class of ClassObject for structs created in Skylark code. */
+/** Represents information provided by a {@link Provider}. */
@SkylarkModule(
name = "struct",
category = SkylarkModuleCategory.BUILTIN,
@@ -49,53 +48,48 @@ import javax.annotation.Nullable;
+ "See the global <a href=\"globals.html#struct\">struct</a> function "
+ "for more details."
)
-public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable, Serializable {
- private final ClassObjectConstructor constructor;
+public class Info implements ClassObject, SkylarkValue, Concatable, Serializable {
+ private final Provider provider;
private final ImmutableMap<String, Object> values;
private final Location creationLoc;
private final String errorMessage;
/** Creates an empty struct with a given location. */
- public SkylarkClassObject(ClassObjectConstructor constructor, Location location) {
- this.constructor = constructor;
+ public Info(Provider provider, Location location) {
+ this.provider = provider;
this.values = ImmutableMap.of();
this.creationLoc = location;
- this.errorMessage = constructor.getErrorMessageFormatForInstances();
+ this.errorMessage = provider.getErrorMessageFormatForInstances();
}
- /**
- * Creates a built-in struct (i.e. without creation loc).
- */
- public SkylarkClassObject(ClassObjectConstructor constructor,
- Map<String, Object> values) {
- this.constructor = constructor;
+ /** Creates a built-in struct (i.e. without creation loc). */
+ public Info(Provider provider, Map<String, Object> values) {
+ this.provider = provider;
this.values = copyValues(values);
this.creationLoc = null;
- this.errorMessage = constructor.getErrorMessageFormatForInstances();
+ this.errorMessage = provider.getErrorMessageFormatForInstances();
}
/**
* Creates a built-in struct (i.e. without creation loc).
*
- * Allows to supply a specific error message.
- * Only used in {@link StructConstructor#create(Map, String)}
- * If you need to override an error message, preferred way is to create a specific
- * {@link NativeClassObjectConstructor}.
+ * <p>Allows to supply a specific error message. Only used in
+ * {@link com.google.devtools.build.lib.packages.NativeProvider.StructConstructor#create(Map,
+ * String)} If you need to override an error message, preferred way is to create a specific {@link
+ * NativeProvider}.
*/
- SkylarkClassObject(ClassObjectConstructor constructor,
- Map<String, Object> values, String errorMessage) {
- this.constructor = constructor;
+ Info(Provider provider, Map<String, Object> values, String errorMessage) {
+ this.provider = provider;
this.values = copyValues(values);
this.creationLoc = null;
this.errorMessage = Preconditions.checkNotNull(errorMessage);
}
- public SkylarkClassObject(ClassObjectConstructor constructor,
- Map<String, Object> values, Location creationLoc) {
- this.constructor = constructor;
+ public Info(Provider provider, Map<String, Object> values, Location creationLoc) {
+ this.provider = provider;
this.values = copyValues(values);
this.creationLoc = Preconditions.checkNotNull(creationLoc);
- this.errorMessage = constructor.getErrorMessageFormatForInstances();
+ this.errorMessage = provider.getErrorMessageFormatForInstances();
}
// Ensure that values are all acceptable to Skylark before to stuff them in a ClassObject
@@ -117,9 +111,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
return values.containsKey(name);
}
- /**
- * Returns a value and try to cast it into specified type
- */
+ /** Returns a value and try to cast it into specified type */
public <TYPE> TYPE getValue(String key, Class<TYPE> type) throws EvalException {
Object obj = values.get(key);
if (obj == null) {
@@ -135,17 +127,16 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
}
public Location getCreationLoc() {
- return Preconditions.checkNotNull(creationLoc,
- "This struct was not created in a Skylark code");
+ return Preconditions.checkNotNull(creationLoc, "This struct was not created in a Skylark code");
}
@Override
public Concatter getConcatter() {
return StructConcatter.INSTANCE;
}
-
- public ClassObjectConstructor getConstructor() {
- return constructor;
+
+ public Provider getProvider() {
+ return provider;
}
@Nullable
@@ -159,27 +150,25 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
private StructConcatter() {}
@Override
- public SkylarkClassObject concat(
- Concatable left, Concatable right, Location loc) throws EvalException {
- SkylarkClassObject lval = (SkylarkClassObject) left;
- SkylarkClassObject rval = (SkylarkClassObject) right;
- if (!lval.constructor.equals(rval.constructor)) {
- throw new EvalException(loc,
- String.format("Cannot concat %s with %s",
- lval.constructor.getPrintableName(),
- rval.constructor.getPrintableName()));
+ public Info concat(Concatable left, Concatable right, Location loc) throws EvalException {
+ Info lval = (Info) left;
+ Info rval = (Info) right;
+ if (!lval.provider.equals(rval.provider)) {
+ throw new EvalException(
+ loc,
+ String.format(
+ "Cannot concat %s with %s",
+ lval.provider.getPrintableName(), rval.provider.getPrintableName()));
}
- SetView<String> commonFields = Sets
- .intersection(lval.values.keySet(), rval.values.keySet());
+ SetView<String> commonFields = Sets.intersection(lval.values.keySet(), rval.values.keySet());
if (!commonFields.isEmpty()) {
- throw new EvalException(loc, "Cannot concat structs with common field(s): "
- + Joiner.on(",").join(commonFields));
+ throw new EvalException(
+ loc,
+ "Cannot concat structs with common field(s): " + Joiner.on(",").join(commonFields));
}
- return new SkylarkClassObject(lval.constructor,
- ImmutableMap.<String, Object>builder()
- .putAll(lval.values)
- .putAll(rval.values)
- .build(),
+ return new Info(
+ lval.provider,
+ ImmutableMap.<String, Object>builder().putAll(lval.values).putAll(rval.values).build(),
loc);
}
}
@@ -194,8 +183,8 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
@Override
public boolean isImmutable() {
- // If the constructor is not yet exported the hash code of the object is subject to change
- if (!constructor.isExported()) {
+ // If the provider is not yet exported the hash code of the object is subject to change
+ if (!provider.isExported()) {
return false;
}
for (Object item : values.values()) {
@@ -208,14 +197,14 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
@Override
public boolean equals(Object otherObject) {
- if (!(otherObject instanceof SkylarkClassObject)) {
+ if (!(otherObject instanceof Info)) {
return false;
}
- SkylarkClassObject other = (SkylarkClassObject) otherObject;
+ Info other = (Info) otherObject;
if (this == other) {
return true;
}
- if (!this.constructor.equals(other.constructor)) {
+ if (!this.provider.equals(other.provider)) {
return false;
}
// Compare objects' keys and values
@@ -235,7 +224,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
List<String> keys = new ArrayList<>(getKeys());
Collections.sort(keys);
List<Object> objectsToHash = new ArrayList<>();
- objectsToHash.add(constructor);
+ objectsToHash.add(provider);
for (String key : keys) {
objectsToHash.add(key);
objectsToHash.add(getValue(key));
@@ -267,7 +256,7 @@ public class SkylarkClassObject implements ClassObject, SkylarkValue, Concatable
@Override
public void reprLegacy(SkylarkPrinter printer) {
boolean first = true;
- printer.append(constructor.getPrintableName());
+ printer.append(provider.getPrintableName());
printer.append("(");
// Sort by key to ensure deterministic output.
for (String key : Ordering.natural().sortedCopy(values.keySet())) {
diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
index 6bcce0fc00..f6f7d8ecb6 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/NativeClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/NativeProvider.java
@@ -23,31 +23,27 @@ import java.util.Map;
import javax.annotation.Nullable;
/**
- * Base class for declared providers {@see ClassObjectConstructor} defined in native code.
+ * Base class for declared providers {@see Provider} defined in native code.
*
- * <p>Every non-abstract derived class of {@link NativeClassObjectConstructor} corresponds to a
- * single declared provider. This is enforced by final {@link #equals(Object)} and {@link
- * #hashCode()}.
+ * <p>Every non-abstract derived class of {@link NativeProvider} corresponds to a single declared
+ * provider. This is enforced by final {@link #equals(Object)} and {@link #hashCode()}.
*
* <p>Typical implementation of a non-constructable from Skylark declared provider is as follows:
*
* <pre>
- * public static final ClassObjectConstructor CC_LINK_PARAMS =
- * new NativeClassObjectConstructor("link_params") { };
+ * public static final Provider CC_LINK_PARAMS =
+ * new NativeProvider("link_params") { };
* </pre>
*
* To allow construction from Skylark and custom construction logic, override {@link
* #createInstanceFromSkylark(Object[], Location)} (see {@link #STRUCT} for an example.
*/
@Immutable
-public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObject>
- extends ClassObjectConstructor {
+public abstract class NativeProvider<VALUE extends Info> extends Provider {
private final NativeKey key;
private final String errorMessageForInstances;
- /**
- * "struct" function.
- */
+ /** "struct" function. */
public static final StructConstructor STRUCT = new StructConstructor();
private final Class<VALUE> valueClass;
@@ -57,13 +53,11 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
}
/**
- * Implement this to mark that a native provider should be exported with
- * certain name to Skylark.
- * Broken: only works for rules, not for aspects.
- * DO NOT USE FOR NEW CODE!
+ * Implement this to mark that a native provider should be exported with certain name to Skylark.
+ * Broken: only works for rules, not for aspects. DO NOT USE FOR NEW CODE!
*
- * Use native declared providers mechanism
- * exclusively to expose providers to both native and Skylark code.
+ * <p>Use native declared providers mechanism exclusively to expose providers to both native and
+ * Skylark code.
*/
@Deprecated
public static interface WithLegacySkylarkName {
@@ -75,36 +69,35 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
*
* <p>Singleton, instance is {@link #STRUCT}.
*/
- public static final class StructConstructor
- extends NativeClassObjectConstructor<SkylarkClassObject> {
+ public static final class StructConstructor extends NativeProvider<Info> {
private StructConstructor() {
- super(SkylarkClassObject.class, "struct");
+ super(Info.class, "struct");
}
@Override
- protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc) {
+ protected Info createInstanceFromSkylark(Object[] args, Location loc) {
@SuppressWarnings("unchecked")
Map<String, Object> kwargs = (Map<String, Object>) args[0];
- return new SkylarkClassObject(this, kwargs, loc);
+ return new Info(this, kwargs, loc);
}
- public SkylarkClassObject create(Map<String, Object> values, String message) {
- return new SkylarkClassObject(this, values, message);
+ public Info create(Map<String, Object> values, String message) {
+ return new Info(this, values, message);
}
- public SkylarkClassObject create(Location loc) {
- return new SkylarkClassObject(this, loc);
+ public Info create(Location loc) {
+ return new Info(this, loc);
}
}
private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE =
FunctionSignature.WithValues.create(FunctionSignature.KWARGS);
- protected NativeClassObjectConstructor(Class<VALUE> clazz, String name) {
+ protected NativeProvider(Class<VALUE> clazz, String name) {
this(clazz, name, SIGNATURE);
}
- protected NativeClassObjectConstructor(
+ protected NativeProvider(
Class<VALUE> valueClass,
String name,
FunctionSignature.WithValues<Object, SkylarkType> signature) {
@@ -117,8 +110,8 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
/**
* equals() implements singleton class semantics.
*
- * Every non-abstract derived class of {@link NativeClassObjectConstructor}
- * corresponds to a single declared provider.
+ * <p>Every non-abstract derived class of {@link NativeProvider} corresponds to a single declared
+ * provider.
*/
@Override
public final boolean equals(@Nullable Object other) {
@@ -128,8 +121,8 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
/**
* hashCode() implements singleton class semantics.
*
- * Every non-abstract derived class of {@link NativeClassObjectConstructor}
- * corresponds to a single declared provider.
+ * <p>Every non-abstract derived class of {@link NativeProvider} corresponds to a single declared
+ * provider.
*/
@Override
public final int hashCode() {
@@ -157,10 +150,9 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
}
@Override
- protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc)
- throws EvalException {
- throw new EvalException(loc,
- String.format("'%s' cannot be constructed from Skylark", getPrintableName()));
+ protected Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException {
+ throw new EvalException(
+ loc, String.format("'%s' cannot be constructed from Skylark", getPrintableName()));
}
public static Pair<String, String> getSerializedRepresentationForNativeKey(NativeKey key) {
@@ -169,26 +161,24 @@ public abstract class NativeClassObjectConstructor<VALUE extends SkylarkClassObj
public static NativeKey getNativeKeyFromSerializedRepresentation(Pair<String, String> serialized)
throws ClassNotFoundException {
- Class<? extends NativeClassObjectConstructor> aClass =
- Class.forName(serialized.second).asSubclass(NativeClassObjectConstructor.class);
+ Class<? extends NativeProvider> aClass =
+ Class.forName(serialized.second).asSubclass(NativeProvider.class);
return new NativeKey(serialized.first, aClass);
}
/**
- * A serializable representation of {@link NativeClassObjectConstructor}.
+ * A serializable representation of {@link NativeProvider}.
*
- * Just a wrapper around its class.
+ * <p>Just a wrapper around its class.
*/
// todo(vladmos,dslomov): when we allow declared providers in `requiredProviders`,
// we will need to serialize this somehow.
@Immutable
public static final class NativeKey extends Key {
private final String name;
- private final Class<? extends NativeClassObjectConstructor> aClass;
+ private final Class<? extends NativeProvider> aClass;
- private NativeKey(
- String name,
- Class<? extends NativeClassObjectConstructor> aClass) {
+ private NativeKey(String name, Class<? extends NativeProvider> aClass) {
this.name = name;
this.aClass = aClass;
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
index 1ca18e2129..b03acc5610 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/PackageFactory.java
@@ -1592,8 +1592,7 @@ public final class PackageFactory {
builder.put(function.getName(), function);
}
}
- return NativeClassObjectConstructor.STRUCT.create(
- builder.build(), "no native function or rule '%s'");
+ return NativeProvider.STRUCT.create(builder.build(), "no native function or rule '%s'");
}
/** @param fakeEnv specify if we declare no-op functions, or real functions. */
diff --git a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
index 2356d7190a..b497b76131 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/ClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Provider.java
@@ -25,16 +25,16 @@ import com.google.devtools.build.lib.syntax.SkylarkType;
import javax.annotation.Nullable;
/**
- * Declared Provider (a constructor for {@link SkylarkClassObject}).
+ * Declared Provider (a constructor for {@link Info}).
*
- * <p>Declared providers can be declared either natively ({@link NativeClassObjectConstructor} or in
- * Skylark {@link SkylarkClassObjectConstructor}.
+ * <p>Declared providers can be declared either natively ({@link NativeProvider} or in Skylark
+ * {@link SkylarkProvider}.
*
- * <p>{@link ClassObjectConstructor} serves both as "type identifier" for declared provider
- * instances and as a function that can be called to construct a provider.
+ * <p>{@link Provider} serves both as "type identifier" for declared provider instances and as a
+ * function that can be called to construct a provider.
*
- * <p>Prefer to use {@link Key} as a serializable identifier of {@link ClassObjectConstructor}. In
- * particular, {@link Key} should be used in all data structures exposed to Skyframe.
+ * <p>Prefer to use {@link Key} as a serializable identifier of {@link Provider}. In particular,
+ * {@link Key} should be used in all data structures exposed to Skyframe.
*/
@SkylarkModule(
name = "Provider",
@@ -60,35 +60,29 @@ import javax.annotation.Nullable;
+ "<a href=\"globals.html#provider\">provider</a> function."
)
@Immutable
-public abstract class ClassObjectConstructor extends BaseFunction {
+public abstract class Provider extends BaseFunction {
- protected ClassObjectConstructor(String name,
- FunctionSignature.WithValues<Object, SkylarkType> signature,
- Location location) {
+ protected Provider(
+ String name, FunctionSignature.WithValues<Object, SkylarkType> signature, Location location) {
super(name, signature, location);
}
/**
- * Has this {@link ClassObjectConstructor} been exported?
- * All native constructors are always exported. Skylark constructors are exported
- * if they are assigned to top-level name in a Skylark module.
+ * Has this {@link Provider} been exported? All native providers are always exported. Skylark
+ * providers are exported if they are assigned to top-level name in a Skylark module.
*/
public abstract boolean isExported();
- /**
- * Returns a serializable representation of this constructor.
- */
+ /** Returns a serializable representation of this {@link Provider}. */
public abstract Key getKey();
- /**
- * Returns a name of this constructor that should be used in error messages.
- */
+ /** Returns a name of this {@link Provider} that should be used in error messages. */
public abstract String getPrintableName();
/**
* Returns an error message format for instances.
*
- * Must contain one '%s' placeholder for field name.
+ * <p>Must contain one '%s' placeholder for field name.
*/
public abstract String getErrorMessageFormatForInstances();
@@ -104,22 +98,17 @@ public abstract class ClassObjectConstructor extends BaseFunction {
}
/**
- * Override this method to provide logic that is used to instantiate a declared provider
- * from Skylark.
+ * Override this method to provide logic that is used to instantiate a declared provider from
+ * Skylark.
*
- * This is a method that is called when a constructor {@code c} is invoked as<br>
+ * <p>This is a method that is called when a constructor {@code c} is invoked as<br>
* {@code c(arg1 = val1, arg2 = val2, ...)}.
*
- * @param args an array of argument values sorted as per the signature
- * ({@see BaseFunction#call})
+ * @param args an array of argument values sorted as per the signature ({@see BaseFunction#call})
*/
- protected abstract SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc)
+ protected abstract Info createInstanceFromSkylark(Object[] args, Location loc)
throws EvalException;
- /**
- * A serializable representation of {@link ClassObjectConstructor}.
- */
- // todo(vladmos,dslomov): when we allow declared providers in `requiredProviders`,
- // we will need to serialize this somehow.
+ /** A serializable representation of {@link Provider}. */
public abstract static class Key {}
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
index e9298bd08c..5b494b7d07 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RequiredProviders.java
@@ -72,7 +72,8 @@ public final class RequiredProviders {
}
@Override
- public boolean satisfies(Predicate<Class<?>> hasNativeProvider,
+ public boolean satisfies(
+ Predicate<Class<?>> hasNativeProvider,
Predicate<SkylarkProviderIdentifier> hasSkylarkProvider,
RequiredProviders requiredProviders,
Builder missingProviders) {
@@ -100,7 +101,8 @@ public final class RequiredProviders {
}
@Override
- public boolean satisfies(Predicate<Class<?>> hasNativeProvider,
+ public boolean satisfies(
+ Predicate<Class<?>> hasNativeProvider,
Predicate<SkylarkProviderIdentifier> hasSkylarkProvider,
RequiredProviders requiredProviders,
Builder missingProviders) {
@@ -121,19 +123,23 @@ public final class RequiredProviders {
/** Accept a dependency that has all providers from one of the sets. */
RESTRICTED {
@Override
- public boolean satisfies(final AdvertisedProviderSet advertisedProviderSet,
- RequiredProviders requiredProviders, Builder missing) {
+ public boolean satisfies(
+ final AdvertisedProviderSet advertisedProviderSet,
+ RequiredProviders requiredProviders,
+ Builder missing) {
if (advertisedProviderSet.canHaveAnyProvider()) {
return true;
}
return satisfies(
advertisedProviderSet.getNativeProviders()::contains,
advertisedProviderSet.getSkylarkProviders()::contains,
- requiredProviders, missing);
+ requiredProviders,
+ missing);
}
@Override
- public boolean satisfies(Predicate<Class<?>> hasNativeProvider,
+ public boolean satisfies(
+ Predicate<Class<?>> hasNativeProvider,
Predicate<SkylarkProviderIdentifier> hasSkylarkProvider,
RequiredProviders requiredProviders,
Builder missingProviders) {
@@ -145,10 +151,11 @@ public final class RequiredProviders {
// Collect missing providers
if (missingProviders != null) {
missingProviders.addNativeSet(
- nativeProviderSet.stream().filter(hasNativeProvider.negate())
+ nativeProviderSet
+ .stream()
+ .filter(hasNativeProvider.negate())
.collect(ImmutableSet.toImmutableSet()));
}
-
}
for (ImmutableSet<SkylarkProviderIdentifier> skylarkProviderSet
@@ -159,7 +166,9 @@ public final class RequiredProviders {
// Collect missing providers
if (missingProviders != null) {
missingProviders.addSkylarkSet(
- skylarkProviderSet.stream().filter(hasSkylarkProvider.negate())
+ skylarkProviderSet
+ .stream()
+ .filter(hasSkylarkProvider.negate())
.collect(ImmutableSet.toImmutableSet()));
}
}
@@ -185,30 +194,28 @@ public final class RequiredProviders {
describe(result, providers.nativeProviders, Class::getSimpleName);
describe(result, providers.skylarkProviders, id -> "'" + id.toString() + "'");
return result.toString();
-
}
};
/** Checks if {@code advertisedProviderSet} satisfies these {@code RequiredProviders} */
- public abstract boolean satisfies(AdvertisedProviderSet advertisedProviderSet,
- RequiredProviders requiredProviders, Builder missing);
+ public abstract boolean satisfies(
+ AdvertisedProviderSet advertisedProviderSet,
+ RequiredProviders requiredProviders,
+ Builder missing);
/**
- * Checks if a set of providers encoded by predicates {@code hasNativeProviders}
- * and {@code hasSkylarkProvider} satisfies these {@code RequiredProviders}
+ * Checks if a set of providers encoded by predicates {@code hasNativeProviders} and {@code
+ * hasSkylarkProvider} satisfies these {@code RequiredProviders}
*/
abstract boolean satisfies(
Predicate<Class<?>> hasNativeProvider,
Predicate<SkylarkProviderIdentifier> hasSkylarkProvider,
RequiredProviders requiredProviders,
- @Nullable
- Builder missingProviders);
+ @Nullable Builder missingProviders);
abstract Builder copyAsBuilder(RequiredProviders providers);
- /**
- * Returns a string describing the providers that can be presented to the user.
- */
+ /** Returns a string describing the providers that can be presented to the user. */
abstract String getDescription(RequiredProviders providers);
}
@@ -228,8 +235,8 @@ public final class RequiredProviders {
}
/**
- * Returns providers that are missing. If none are missing, returns
- * {@code RequiredProviders} that accept anything.
+ * Returns providers that are missing. If none are missing, returns {@code RequiredProviders} that
+ * accept anything.
*/
public RequiredProviders getMissing(
Predicate<Class<?>> hasNativeProvider,
@@ -243,8 +250,8 @@ public final class RequiredProviders {
}
/**
- * Returns providers that are missing. If none are missing, returns
- * {@code RequiredProviders} that accept anything.
+ * Returns providers that are missing. If none are missing, returns {@code RequiredProviders} that
+ * accept anything.
*/
public RequiredProviders getMissing(AdvertisedProviderSet set) {
Builder builder = acceptAnyBuilder();
@@ -255,10 +262,7 @@ public final class RequiredProviders {
return builder.build();
}
-
- /**
- * Returns true if this {@code RequiredProviders} instance accept any set of providers.
- */
+ /** Returns true if this {@code RequiredProviders} instance accept any set of providers. */
public boolean acceptsAny() {
return constraint.equals(Constraint.ANY);
}
@@ -278,11 +282,11 @@ public final class RequiredProviders {
this.skylarkProviders = skylarkProviders;
}
- /**
- * Helper method to describe lists of sets of things.
- */
- private static <T> void describe(StringBuilder result,
- ImmutableList<ImmutableSet<T>> listOfSets, Function<T, String> describeOne) {
+ /** Helper method to describe lists of sets of things. */
+ private static <T> void describe(
+ StringBuilder result,
+ ImmutableList<ImmutableSet<T>> listOfSets,
+ Function<T, String> describeOne) {
Joiner joiner = Joiner.on(", ");
for (ImmutableSet<T> ids : listOfSets) {
if (result.length() > 0) {
@@ -294,7 +298,6 @@ public final class RequiredProviders {
}
}
-
/**
* A builder for {@link RequiredProviders} that accepts any dependency
* unless restriction provider sets are added.
@@ -311,9 +314,7 @@ public final class RequiredProviders {
return new Builder(true);
}
- /**
- * Returns a Builder initialized to the same value as this {@code RequiredProvider}
- */
+ /** Returns a Builder initialized to the same value as this {@code RequiredProvider} */
public Builder copyAsBuilder() {
return constraint.copyAsBuilder(this);
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java
index 8bd600852a..ea341b3171 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkClassObjectConstructor.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProvider.java
@@ -31,40 +31,36 @@ import javax.annotation.Nullable;
* <p>This is a result of calling {@code provider()} function from Skylark ({@link
* com.google.devtools.build.lib.rules.SkylarkRuleClassFunctions#provider}).
*/
-public class SkylarkClassObjectConstructor extends ClassObjectConstructor
- implements SkylarkExportable {
+public class SkylarkProvider extends Provider implements SkylarkExportable {
private static final FunctionSignature.WithValues<Object, SkylarkType> SIGNATURE =
FunctionSignature.WithValues.create(FunctionSignature.KWARGS);
- @Nullable
- private SkylarkKey key;
- @Nullable
- private String errorMessageFormatForInstances;
+ @Nullable private SkylarkKey key;
+ @Nullable private String errorMessageFormatForInstances;
private static final String DEFAULT_ERROR_MESSAFE = "Object has no '%s' attribute.";
/**
- * Creates a Skylark-defined Declared Provider ({@link SkylarkClassObject} constructor).
+ * Creates a Skylark-defined Declared Provider ({@link Info} constructor).
*
- * Needs to be exported later.
+ * <p>Needs to be exported later.
*/
- public SkylarkClassObjectConstructor(String name, Location location) {
+ public SkylarkProvider(String name, Location location) {
this(name, SIGNATURE, location);
}
- public SkylarkClassObjectConstructor(
+ public SkylarkProvider(
String name, FunctionSignature.WithValues<Object, SkylarkType> signature, Location location) {
super(name, signature, location);
this.errorMessageFormatForInstances = DEFAULT_ERROR_MESSAFE;
}
@Override
- protected SkylarkClassObject createInstanceFromSkylark(Object[] args, Location loc)
- throws EvalException {
+ protected Info createInstanceFromSkylark(Object[] args, Location loc) throws EvalException {
@SuppressWarnings("unchecked")
Map<String, Object> kwargs = (Map<String, Object>) args[0];
- return new SkylarkClassObject(this, kwargs, loc);
+ return new Info(this, kwargs, loc);
}
@Override
@@ -92,8 +88,8 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor
public void export(Label extensionLabel, String exportedName) {
Preconditions.checkState(!isExported());
this.key = new SkylarkKey(extensionLabel, exportedName);
- this.errorMessageFormatForInstances = String.format(
- "'%s' object has no attribute '%%s'", exportedName);
+ this.errorMessageFormatForInstances =
+ String.format("'%s' object has no attribute '%%s'", exportedName);
}
@Override
@@ -106,10 +102,10 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor
@Override
public boolean equals(@Nullable Object otherObject) {
- if (!(otherObject instanceof SkylarkClassObjectConstructor)) {
+ if (!(otherObject instanceof SkylarkProvider)) {
return false;
}
- SkylarkClassObjectConstructor other = (SkylarkClassObjectConstructor) otherObject;
+ SkylarkProvider other = (SkylarkProvider) otherObject;
if (this.isExported() && other.isExported()) {
return this.getKey().equals(other.getKey());
@@ -130,9 +126,8 @@ public class SkylarkClassObjectConstructor extends ClassObjectConstructor
}
/**
- * A serializable representation of Skylark-defined {@link SkylarkClassObjectConstructor}
- * that uniquely identifies all {@link SkylarkClassObjectConstructor}s that
- * are exposed to SkyFrame.
+ * A serializable representation of Skylark-defined {@link SkylarkProvider} that uniquely
+ * identifies all {@link SkylarkProvider}s that are exposed to SkyFrame.
*/
public static class SkylarkKey extends Key {
private final Label extensionLabel;
diff --git a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java
index d9e663c43c..34b507af88 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/SkylarkProviderIdentifier.java
@@ -19,21 +19,17 @@ import java.util.Objects;
import javax.annotation.Nullable;
/**
- * A wrapper around Skylark provider identifier,
- * representing either a declared provider ({@see SkylarkClassObjectConstructor})
- * or a "legacy" string identifier.
+ * A wrapper around Skylark provider identifier, representing either a declared provider ({@see
+ * SkylarkProvider}) or a "legacy" string identifier.
*/
public final class SkylarkProviderIdentifier {
@Nullable
private final String legacyId;
- @Nullable
- private final ClassObjectConstructor.Key key;
+ @Nullable private final Provider.Key key;
- /**
- * Creates an id for a declared provider with a given key ({@see SkylarkClassObjectConstructor}).
- */
- public static SkylarkProviderIdentifier forKey(ClassObjectConstructor.Key key) {
+ /** Creates an id for a declared provider with a given key ({@see SkylarkProvider}). */
+ public static SkylarkProviderIdentifier forKey(Provider.Key key) {
return new SkylarkProviderIdentifier(key);
}
@@ -49,7 +45,7 @@ public final class SkylarkProviderIdentifier {
this.key = null;
}
- private SkylarkProviderIdentifier(ClassObjectConstructor.Key key) {
+ private SkylarkProviderIdentifier(Provider.Key key) {
this.legacyId = null;
this.key = key;
}
@@ -70,10 +66,8 @@ public final class SkylarkProviderIdentifier {
return legacyId;
}
- /**
- * Returns a key identifying the declared provider (only for non-legacy providers).
- */
- public ClassObjectConstructor.Key getKey() {
+ /** Returns a key identifying the declared provider (only for non-legacy providers). */
+ public Provider.Key getKey() {
Preconditions.checkState(!isLegacy(), "Check !isLegacy() first");
return key;
}
diff --git a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
index ccb81e1201..292ce4d635 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/WorkspaceFactory.java
@@ -528,8 +528,7 @@ public class WorkspaceFactory {
}
builder.put("bazel_version", version);
- return NativeClassObjectConstructor.STRUCT.create(
- builder.build(), "no native function or rule '%s'");
+ return NativeProvider.STRUCT.create(builder.build(), "no native function or rule '%s'");
}
static ClassObject newNativeModule(RuleClassProvider ruleClassProvider, String version) {