aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-21 21:44:27 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-21 21:46:09 -0700
commit6ff110e21fb47ea3acde12c4651c2217a7e25672 (patch)
tree9d2cc688eec42938c4c4c2ee324b3e540ca1e2f3 /src/main/java/com
parentf572845d04c579e81b2dc78e8efeea12dc7dbee7 (diff)
Store RuleClassType in RuleClass. Shouldn't use much more memory, and allows serialization to preserve the type when reconstituting the RuleClass.
PiperOrigin-RevId: 190015323
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/packages/RuleClass.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
index 34e246f30e..b78ba49d60 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/RuleClass.java
@@ -41,6 +41,7 @@ import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTe
import com.google.devtools.build.lib.packages.Attribute.SkylarkComputedDefaultTemplate.CannotPrecomputeDefaultsException;
import com.google.devtools.build.lib.packages.BuildType.SelectorList;
import com.google.devtools.build.lib.packages.ConfigurationFragmentPolicy.MissingFragmentPolicy;
+import com.google.devtools.build.lib.packages.RuleClass.Builder.RuleClassType;
import com.google.devtools.build.lib.packages.RuleFactory.AttributeValues;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization;
@@ -685,7 +686,12 @@ public class RuleClass {
skylark && (type == RuleClassType.NORMAL || type == RuleClassType.TEST);
Preconditions.checkState(
(type == RuleClassType.ABSTRACT)
- == (configuredTargetFactory == null && configuredTargetFunction == null));
+ == (configuredTargetFactory == null && configuredTargetFunction == null),
+ "Bad combo for %s: %s %s %s",
+ name,
+ type,
+ configuredTargetFactory,
+ configuredTargetFunction);
if (!workspaceOnly) {
Preconditions.checkState(skylarkExecutable == (configuredTargetFunction != null));
Preconditions.checkState(skylarkExecutable == (ruleDefinitionEnvironment != null));
@@ -697,6 +703,7 @@ public class RuleClass {
return new RuleClass(
name,
key,
+ type,
skylark,
skylarkExecutable,
skylarkTestable,
@@ -1184,6 +1191,7 @@ public class RuleClass {
*/
private final String targetKind;
+ private final RuleClassType type;
private final boolean isSkylark;
private final boolean skylarkExecutable;
private final boolean skylarkTestable;
@@ -1305,6 +1313,7 @@ public class RuleClass {
RuleClass(
String name,
String key,
+ RuleClassType type,
boolean isSkylark,
boolean skylarkExecutable,
boolean skylarkTestable,
@@ -1333,6 +1342,7 @@ public class RuleClass {
Attribute... attributes) {
this.name = name;
this.key = key;
+ this.type = type;
this.isSkylark = isSkylark;
this.targetKind = name + Rule.targetKindSuffix();
this.skylarkExecutable = skylarkExecutable;
@@ -1432,6 +1442,11 @@ public class RuleClass {
return name;
}
+ /** Returns the type of rule that this RuleClass represents. Only for use during serialization. */
+ public RuleClassType getRuleClassType() {
+ return type;
+ }
+
/** Returns a unique key. Used for profiling purposes. */
public String getKey() {
return key;