aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-03-28 11:42:37 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-28 11:43:53 -0700
commit84efb0967b00cc91ad74c0f263bbeedd98abb03c (patch)
tree5493530f63ddd624a96ea46b969b0a8c14c38fd7 /src/main/java/com/google/devtools/build/lib/analysis
parent9c4fa4a8e987ab4b1c90ab5ce2683bf21b9624fe (diff)
Add codecs needed to fully serialize Attributes.
PiperOrigin-RevId: 190805577
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkLateBoundDefault.java27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkLateBoundDefault.java b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkLateBoundDefault.java
index 52d316259e..93fe96e32e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkLateBoundDefault.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/skylark/SkylarkLateBoundDefault.java
@@ -26,6 +26,7 @@ import com.google.devtools.build.lib.packages.Attribute.AbstractLabelLateBoundDe
import com.google.devtools.build.lib.packages.Attribute.LateBoundDefault;
import com.google.devtools.build.lib.packages.AttributeMap;
import com.google.devtools.build.lib.packages.Rule;
+import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
import com.google.devtools.build.lib.skylarkinterface.SkylarkValue;
@@ -47,6 +48,7 @@ import javax.annotation.concurrent.Immutable;
* target configuration.
*/
@Immutable
+@AutoCodec
public class SkylarkLateBoundDefault<FragmentT> extends AbstractLabelLateBoundDefault<FragmentT>
implements SkylarkValue {
@@ -82,13 +84,26 @@ public class SkylarkLateBoundDefault<FragmentT> extends AbstractLabelLateBoundDe
private SkylarkLateBoundDefault(SkylarkConfigurationField annotation,
Class<FragmentT> fragmentClass, String fragmentName, Method method, String toolsRepository) {
- super(false /* don't use host configuration */,
+ this(
+ getDefaultLabel(annotation, toolsRepository),
fragmentClass,
- getDefaultLabel(annotation, toolsRepository));
+ method,
+ fragmentName,
+ annotation.name());
+ }
+ @AutoCodec.VisibleForSerialization
+ @AutoCodec.Instantiator
+ SkylarkLateBoundDefault(
+ Label defaultVal,
+ Class<FragmentT> fragmentClass,
+ Method method,
+ String fragmentName,
+ String fragmentFieldName) {
+ super(/*useHostConfiguration=*/ false, fragmentClass, defaultVal);
this.method = method;
this.fragmentName = fragmentName;
- this.fragmentFieldName = annotation.name();
+ this.fragmentFieldName = fragmentFieldName;
}
/**
@@ -111,6 +126,12 @@ public class SkylarkLateBoundDefault<FragmentT> extends AbstractLabelLateBoundDe
printer.format("<late-bound default>");
}
+ /** For use by @AutoCodec since the {@link #defaultValue} field is hard for it to process. */
+ @AutoCodec.VisibleForSerialization
+ Label getDefaultVal() {
+ return getDefault();
+ }
+
/**
* An exception thrown if a user specifies an invalid configuration field identifier.
*