diff options
author | mjhalupka <mjhalupka@google.com> | 2018-03-12 12:43:15 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-03-12 12:45:18 -0700 |
commit | cfa0bb7393c030682ee263586ea974f6f0b4bb5c (patch) | |
tree | d0fcd3dc5f4aaa2b199902995322028270863399 /src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java | |
parent | bff3472e4013c053e452fad7948ad68c5cbd5692 (diff) |
Tag Attribute, SkylarkDefinedAspect and some other Skylark classes with
@AutoCodec. Remove Environment from SkylarkDefinedAspect.
Add a note to BuiltInFunction that we shouldn't need to serialize it because
all instances should be constant.
PiperOrigin-RevId: 188763259
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java index c689435365..fd60a1835b 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java @@ -70,6 +70,8 @@ import com.google.devtools.build.lib.packages.SkylarkExportable; import com.google.devtools.build.lib.packages.SkylarkProvider; import com.google.devtools.build.lib.packages.TargetUtils; import com.google.devtools.build.lib.packages.TestSize; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; +import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec.VisibleForSerialization; import com.google.devtools.build.lib.skylarkinterface.Param; import com.google.devtools.build.lib.skylarkinterface.ParamType; import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter; @@ -844,12 +846,16 @@ public class SkylarkRuleClassFunctions { ImmutableSet.copyOf(fragments.getContents(String.class, "fragments")), HostTransition.INSTANCE, ImmutableSet.copyOf(hostFragments.getContents(String.class, "host_fragments")), - collectToolchainLabels(toolchains, ast), - funcallEnv); + collectToolchainLabels(toolchains, ast)); } }; - /** The implementation for the magic function "rule" that creates Skylark rule classes */ + /** + * The implementation for the magic function "rule" that creates Skylark rule classes. + * + * <p>Exactly one of {@link #builder} or {@link #ruleClass} is null except inside {@link #export}. + */ + @AutoCodec public static final class SkylarkRuleFunction extends BaseFunction implements SkylarkExportable, RuleFunction { private RuleClass.Builder builder; @@ -872,6 +878,28 @@ public class SkylarkRuleClassFunctions { this.definitionLocation = definitionLocation; } + /** This is for post-export reconstruction for serialization. */ + @VisibleForSerialization + @AutoCodec.Instantiator + SkylarkRuleFunction( + RuleClass ruleClass, + RuleClassType type, + Location definitionLocation, + Label skylarkLabel + ) { + super("rule", FunctionSignature.KWARGS); + Preconditions.checkNotNull( + ruleClass, + "RuleClass must be non-null as this SkylarkRuleFunction should have been exported."); + Preconditions.checkNotNull( + skylarkLabel, + "Label must be non-null as this SkylarkRuleFunction should have been exported."); + this.ruleClass = ruleClass; + this.type = type; + this.definitionLocation = definitionLocation; + this.skylarkLabel = skylarkLabel; + } + @Override @SuppressWarnings("unchecked") // the magic hidden $pkg_context variable is guaranteed // to be a PackageContext |