diff options
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.java | 27 |
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. * |