diff options
author | 2018-03-21 21:44:27 -0700 | |
---|---|---|
committer | 2018-03-21 21:46:09 -0700 | |
commit | 6ff110e21fb47ea3acde12c4651c2217a7e25672 (patch) | |
tree | 9d2cc688eec42938c4c4c2ee324b3e540ca1e2f3 /src/main/java/com | |
parent | f572845d04c579e81b2dc78e8efeea12dc7dbee7 (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.java | 17 |
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; |