aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
diff options
context:
space:
mode:
authorGravatar mjhalupka <mjhalupka@google.com>2018-03-12 12:43:15 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-12 12:45:18 -0700
commitcfa0bb7393c030682ee263586ea974f6f0b4bb5c (patch)
treed0fcd3dc5f4aaa2b199902995322028270863399 /src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkRuleClassFunctions.java
parentbff3472e4013c053e452fad7948ad68c5cbd5692 (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.java34
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