diff options
Diffstat (limited to 'src/main/java')
26 files changed, 160 insertions, 110 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java index 9af9811a50..82c04c259e 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/DefaultInfo.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.analysis; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; @@ -62,8 +61,7 @@ public final class DefaultInfo extends NativeInfo { RunfilesProvider runfilesProvider, FileProvider fileProvider, FilesToRunProvider filesToRunProvider) { - // Fields map is not used here to prevent memory regression - super(PROVIDER, ImmutableMap.<String, Object>of()); + super(PROVIDER); this.runfilesProvider = runfilesProvider; this.fileProvider = fileProvider; this.filesToRunProvider = filesToRunProvider; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java index f1c14234f1..9561c91229 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/OutputGroupInfo.java @@ -126,7 +126,7 @@ public final class OutputGroupInfo extends NativeInfo private final ImmutableMap<String, NestedSet<Artifact>> outputGroups; public OutputGroupInfo(ImmutableMap<String, NestedSet<Artifact>> outputGroups) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.outputGroups = outputGroups; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java index 4b3f2f44f7..c2661ad986 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintSettingInfo.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.analysis.platform; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; @@ -75,7 +74,7 @@ public class ConstraintSettingInfo extends NativeInfo { @VisibleForSerialization ConstraintSettingInfo(Label label, Location location) { - super(PROVIDER, ImmutableMap.<String, Object>of("label", label), location); + super(PROVIDER, location); this.label = label; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java index 84f3544428..3a00932a55 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/ConstraintValueInfo.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.analysis.platform; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; @@ -79,9 +78,6 @@ public class ConstraintValueInfo extends NativeInfo { ConstraintValueInfo(ConstraintSettingInfo constraint, Label label, Location location) { super( SKYLARK_CONSTRUCTOR, - ImmutableMap.<String, Object>of( - "constraint", constraint, - "label", label), location); this.constraint = constraint; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java index 3b3462d420..90c8217a0c 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/PlatformInfo.java @@ -113,9 +113,6 @@ public class PlatformInfo extends NativeInfo { Location location) { super( SKYLARK_CONSTRUCTOR, - ImmutableMap.<String, Object>of( - "label", label, - "constraints", constraints.values().asList()), location); this.label = label; @@ -153,7 +150,7 @@ public class PlatformInfo extends NativeInfo { structField = true ) public Iterable<ConstraintValueInfo> constraints() { - return constraints.values(); + return constraints.values().asList(); } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/ExecutionInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/ExecutionInfo.java index 8b60872cea..63c3abf0a4 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/ExecutionInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/ExecutionInfo.java @@ -17,6 +17,7 @@ import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import java.util.Map; /** @@ -33,7 +34,7 @@ public final class ExecutionInfo extends NativeInfo { private final ImmutableMap<String, String> executionInfo; public ExecutionInfo(Map<String, String> requirements) { - super(PROVIDER, ImmutableMap.<String, Object>of("requirements", requirements)); + super(PROVIDER); this.executionInfo = ImmutableMap.copyOf(requirements); } @@ -42,6 +43,11 @@ public final class ExecutionInfo extends NativeInfo { * platforms, etc. Rule tags, such as "requires-XXX", may also be added * as keys to the map. */ + @SkylarkCallable( + name = "requirements", + doc = "A dict indicating special execution requirements, such as hardware platforms.", + structField = true + ) public ImmutableMap<String, String> getExecutionInfo() { return executionInfo; } diff --git a/src/main/java/com/google/devtools/build/lib/analysis/test/TestEnvironmentInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/test/TestEnvironmentInfo.java index 013ff33bb6..858f46adeb 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/test/TestEnvironmentInfo.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/test/TestEnvironmentInfo.java @@ -15,10 +15,10 @@ package com.google.devtools.build.lib.analysis.test; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; import java.util.Map; /** Provider containing any additional environment variables for use in the test action. */ @@ -34,13 +34,18 @@ public final class TestEnvironmentInfo extends NativeInfo { /** Constructs a new provider with the given variable name to variable value mapping. */ public TestEnvironmentInfo(Map<String, String> environment) { - super(PROVIDER, ImmutableMap.<String, Object>of("environment", environment)); + super(PROVIDER); this.environment = Preconditions.checkNotNull(environment); } /** * Returns environment variables which should be set on the test action. */ + @SkylarkCallable( + name = "environment", + doc = "A dict containing environment variables which should be set on the test action.", + structField = true + ) public Map<String, String> getEnvironment() { return environment; } diff --git a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java index 58ea8d3ea0..16d0c642d6 100644 --- a/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java +++ b/src/main/java/com/google/devtools/build/lib/packages/NativeInfo.java @@ -59,16 +59,17 @@ public class NativeInfo extends Info { } public NativeInfo(NativeProvider<?> provider) { - super(provider, Location.BUILTIN); - this.values = ImmutableMap.of(); + this(provider, Location.BUILTIN); } + public NativeInfo(NativeProvider<?> provider, Location loc) { + this(provider, ImmutableMap.of(), loc); + } + + // TODO(cparsons): Remove this constructor once DefaultInfo and ToolchainInfo stop using it. + @Deprecated public NativeInfo(NativeProvider<?> provider, Map<String, Object> values, Location loc) { super(provider, loc); this.values = copyValues(values); } - - public NativeInfo(NativeProvider<?> provider, Map<String, Object> values) { - this(provider, values, Location.BUILTIN); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java index 6333adc016..9400d37f4c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidDeviceScriptFixtureInfoProvider.java @@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -39,7 +38,7 @@ public class AndroidDeviceScriptFixtureInfoProvider extends NativeInfo { public AndroidDeviceScriptFixtureInfoProvider( Artifact fixtureScript, NestedSet<Artifact> supportApks, boolean daemon, boolean strictExit) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.fixtureScript = fixtureScript; this.supportApks = supportApks; this.daemon = daemon; diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java index 2dd0cfe8c9..202ba02223 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidHostServiceFixtureInfoProvider.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.android; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -46,7 +45,7 @@ public class AndroidHostServiceFixtureInfoProvider extends NativeInfo { NestedSet<Artifact> supportApks, boolean providesTestArgs, boolean isDaemon) { - super(ANDROID_HOST_SERVICE_FIXTURE_INFO, ImmutableMap.<String, Object>of()); + super(ANDROID_HOST_SERVICE_FIXTURE_INFO); this.executable = executable; this.serviceNames = serviceNames; this.supportApks = supportApks; diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java index 913e367cd3..50db482da5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeConfigProvider.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.apple; import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -55,7 +54,7 @@ public class XcodeConfigProvider extends NativeInfo { DottedVersion tvosSdkVersion, DottedVersion tvosMinimumOsVersion, DottedVersion macosSdkVersion, DottedVersion macosMinimumOsVersion, DottedVersion xcodeVersion) { - super(PROVIDER, ImmutableMap.of()); + super(PROVIDER); this.iosSdkVersion = Preconditions.checkNotNull(iosSdkVersion); this.iosMinimumOsVersion = Preconditions.checkNotNull(iosMinimumOsVersion); this.watchosSdkVersion = Preconditions.checkNotNull(watchosSdkVersion); diff --git a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java index 073a9f7a9f..c106f45425 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java +++ b/src/main/java/com/google/devtools/build/lib/rules/apple/XcodeVersionProperties.java @@ -17,15 +17,21 @@ package com.google.devtools.build.lib.rules.apple; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Optional; import com.google.common.base.Strings; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; -import java.util.Map; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import javax.annotation.Nullable; /** A tuple containing information about a version of xcode and its properties. */ @Immutable +@SkylarkModule( + name = "XcodeProperties", + category = SkylarkModuleCategory.PROVIDER, + doc = "A provider containing information about a version of Xcode and its properties." +) public class XcodeVersionProperties extends NativeInfo { /** Skylark name for the XcodeVersionProperties provider. */ @@ -76,14 +82,7 @@ public class XcodeVersionProperties extends NativeInfo { @Nullable String defaultWatchosSdkVersion, @Nullable String defaultTvosSdkVersion, @Nullable String defaultMacosSdkVersion) { - super( - SKYLARK_CONSTRUCTOR, - getSkylarkFields( - xcodeVersion, - defaultIosSdkVersion, - defaultWatchosSdkVersion, - defaultTvosSdkVersion, - defaultMacosSdkVersion)); + super(SKYLARK_CONSTRUCTOR); this.xcodeVersion = Optional.fromNullable(xcodeVersion); this.defaultIosSdkVersion = (Strings.isNullOrEmpty(defaultIosSdkVersion)) @@ -103,58 +102,95 @@ public class XcodeVersionProperties extends NativeInfo { : DottedVersion.fromString(defaultMacosSdkVersion); } + /** Returns the xcode version, or null if the xcode version is unknown. */ + @SkylarkCallable( + name = "xcode_version", + doc = "The xcode version, or <code>None</code> if the xcode version is unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getXcodeVersionString() { + if (xcodeVersion.isPresent()) { + return xcodeVersion.get().toString(); + } + return null; + } + + /** Returns the default ios sdk version to use if this xcode version is in use. */ + @SkylarkCallable( + name = "default_ios_sdk_version", + doc = "The default iOS sdk version for this version of xcode, or <code>None</code> if " + + "unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getDefaultIosSdkVersionString() { + return defaultIosSdkVersion != null ? defaultIosSdkVersion.toString() : null; + } + + /** Returns the default watchos sdk version to use if this xcode version is in use. */ + @SkylarkCallable( + name = "default_watchos_sdk_version", + doc = "The default watchOS sdk version for this version of xcode, or <code>None</code> if " + + "unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getDefaultWatchosSdkVersionString() { + return defaultWatchosSdkVersion != null ? defaultWatchosSdkVersion.toString() : null; + } + + /** Returns the default tvos sdk version to use if this xcode version is in use. */ + @SkylarkCallable( + name = "default_tvos_sdk_version", + doc = "The default tvOS sdk version for this version of xcode, or <code>None</code> if " + + "unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getDefaultTvosSdkVersionString() { + return defaultTvosSdkVersion != null ? defaultTvosSdkVersion.toString() : null; + } + + /** Returns the default macosx sdk version to use if this xcode version is in use. */ + @SkylarkCallable( + name = "default_macos_sdk_version", + doc = "The default macOS sdk version for this version of xcode, or <code>None</code> if " + + "unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getDefaultMacosSdkVersionString() { + return defaultMacosSdkVersion != null ? defaultMacosSdkVersion.toString() : null; + } + /** Returns the xcode version, or {@link Optional#absent} if the xcode version is unknown. */ public Optional<DottedVersion> getXcodeVersion() { return xcodeVersion; } - /** Returns the default ios sdk version to use if this xcode version is in use. */ + @Nullable public DottedVersion getDefaultIosSdkVersion() { return defaultIosSdkVersion; } - /** Returns the default watchos sdk version to use if this xcode version is in use. */ + @Nullable public DottedVersion getDefaultWatchosSdkVersion() { return defaultWatchosSdkVersion; } - /** Returns the default tvos sdk version to use if this xcode version is in use. */ + @Nullable public DottedVersion getDefaultTvosSdkVersion() { return defaultTvosSdkVersion; } - /** Returns the default macosx sdk version to use if this xcode version is in use. */ + @Nullable public DottedVersion getDefaultMacosSdkVersion() { return defaultMacosSdkVersion; } - - private static Map<String, Object> getSkylarkFields( - @Nullable DottedVersion xcodeVersion, - @Nullable String defaultIosSdkVersion, - @Nullable String defaultWatchosSdkVersion, - @Nullable String defaultTvosSdkVersion, - @Nullable String defaultMacosSdkVersion) { - ImmutableMap.Builder<String, Object> skylarkFields = new ImmutableMap.Builder<>(); - if (xcodeVersion != null) { - skylarkFields.put("xcode_version", xcodeVersion.toString()); - } - - if (defaultIosSdkVersion != null) { - skylarkFields.put("default_ios_sdk_version", defaultIosSdkVersion); - } - - if (defaultWatchosSdkVersion != null) { - skylarkFields.put("default_watchos_sdk_version", defaultWatchosSdkVersion); - } - - if (defaultTvosSdkVersion != null) { - skylarkFields.put("default_tvos_sdk_version", defaultTvosSdkVersion); - } - - if (defaultMacosSdkVersion != null) { - skylarkFields.put("default_macos_sdk_version", defaultMacosSdkVersion); - } - - return skylarkFields.build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java index ff80048b63..1296f56b4e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/config/ConfigFeatureFlagProvider.java @@ -16,7 +16,6 @@ package com.google.devtools.build.lib.rules.config; import com.google.common.base.Predicate; import com.google.common.base.Predicates; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.events.Location; @@ -47,7 +46,7 @@ public class ConfigFeatureFlagProvider extends NativeInfo { private final Predicate<String> validityPredicate; private ConfigFeatureFlagProvider(String value, Predicate<String> validityPredicate) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of("value", value)); + super(SKYLARK_CONSTRUCTOR); this.value = value; this.validityPredicate = validityPredicate; @@ -89,6 +88,11 @@ public class ConfigFeatureFlagProvider extends NativeInfo { } /** Gets the current value of the flag in the flag's current configuration. */ + @SkylarkCallable( + name = "value", + doc = "The current value of the flag in the flag's current configuration.", + structField = true + ) public String getValue() { return value; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java index 42cf3f3e16..aa600274b4 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcCompilationInfo.java @@ -17,7 +17,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.ActionOwner; @@ -100,7 +99,7 @@ public final class CcCompilationInfo extends NativeInfo { CppModuleMap cppModuleMap, @Nullable CppModuleMap verificationModuleMap, boolean propagateModuleMapAsActionInput) { - super(PROVIDER, ImmutableMap.of()); + super(PROVIDER); Preconditions.checkNotNull(commandLineCcCompilationInfo); this.commandLineCcCompilationInfo = commandLineCcCompilationInfo; this.declaredIncludeDirs = declaredIncludeDirs; diff --git a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java index 8b60c164f9..3c5554d66e 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/cpp/CcLinkParamsInfo.java @@ -15,7 +15,6 @@ package com.google.devtools.build.lib.rules.cpp; import com.google.common.base.Function; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; @@ -48,7 +47,7 @@ public final class CcLinkParamsInfo extends NativeInfo { @AutoCodec.Instantiator public CcLinkParamsInfo(CcLinkParamsStore store) { - super(PROVIDER, ImmutableMap.<String, Object>of()); + super(PROVIDER); this.store = new CcLinkParamsStoreImpl(store); } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java index 5323dd3add..8319681d8a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaInfo.java @@ -17,7 +17,6 @@ import static com.google.devtools.build.lib.syntax.SkylarkType.BOOL; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.ConfiguredTarget; @@ -303,7 +302,7 @@ public final class JavaInfo extends NativeInfo { @VisibleForSerialization @AutoCodec.Instantiator JavaInfo(TransitiveInfoProviderMap providers, boolean neverlink, Location location) { - super(PROVIDER, ImmutableMap.of(), location); + super(PROVIDER, location); this.providers = providers; this.neverlink = neverlink; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java index 5489498ba3..dba496bb4d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaRuntimeInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.java; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.TransitiveInfoCollection; @@ -110,7 +109,7 @@ public class JavaRuntimeInfo extends NativeInfo { PathFragment javaHome, PathFragment javaBinaryExecPath, PathFragment javaBinaryRunfilesPath) { - super(PROVIDER, ImmutableMap.<String, Object>of()); + super(PROVIDER); this.javaBaseInputs = javaBaseInputs; this.javaBaseInputsMiddleman = javaBaseInputsMiddleman; this.javaHome = javaHome; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsInfo.java index af5833c17b..37f7ae2bf0 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDebugOutputsInfo.java @@ -91,7 +91,7 @@ public final class AppleDebugOutputsInfo extends NativeInfo { * </ul> */ private AppleDebugOutputsInfo(ImmutableMap<String, ImmutableMap<String, Artifact>> map) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.outputsMap = map; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryInfo.java index 814191b8b3..aeed29b092 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDylibBinaryInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; @@ -55,7 +54,7 @@ public final class AppleDylibBinaryInfo extends NativeInfo { public AppleDylibBinaryInfo(Artifact dylibBinary, ObjcProvider depsObjcProvider) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.dylibBinary = dylibBinary; this.depsObjcProvider = depsObjcProvider; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java index 7d9b97e1f1..6555f8a951 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleDynamicFrameworkInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.collect.nestedset.NestedSet; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; @@ -74,7 +73,7 @@ public final class AppleDynamicFrameworkInfo extends NativeInfo { ObjcProvider depsObjcProvider, NestedSet<PathFragment> dynamicFrameworkDirs, NestedSet<Artifact> dynamicFrameworkFiles) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.dylibBinary = dylibBinary; this.depsObjcProvider = depsObjcProvider; this.dynamicFrameworkDirs = dynamicFrameworkDirs; diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryInfo.java index 134d89a70a..374d9bedaf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleExecutableBinaryInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; @@ -60,7 +59,7 @@ public final class AppleExecutableBinaryInfo extends NativeInfo { */ public AppleExecutableBinaryInfo(Artifact appleExecutableBinary, ObjcProvider depsObjcProvider) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.appleExecutableBinary = appleExecutableBinary; this.depsObjcProvider = depsObjcProvider; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryInfo.java index cfb1cc3672..ea2cb6602f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleLoadableBundleBinaryInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; @@ -59,7 +58,7 @@ public final class AppleLoadableBundleBinaryInfo extends NativeInfo { */ public AppleLoadableBundleBinaryInfo(Artifact appleLoadableBundleBinary, ObjcProvider depsObjcProvider) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.appleLoadableBundleBinary = appleLoadableBundleBinary; this.depsObjcProvider = depsObjcProvider; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java index 3bbdc6807f..2280bd7487 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/AppleStaticLibraryInfo.java @@ -14,7 +14,6 @@ package com.google.devtools.build.lib.rules.objc; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; @@ -60,7 +59,7 @@ public final class AppleStaticLibraryInfo extends NativeInfo { */ public AppleStaticLibraryInfo(Artifact multiArchArchive, ObjcProvider depsObjcProvider) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.multiArchArchive = multiArchArchive; this.depsObjcProvider = depsObjcProvider; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java index 1ce7085140..bbd98f7943 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosDeviceProvider.java @@ -16,17 +16,23 @@ package com.google.devtools.build.lib.rules.objc; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.analysis.actions.TemplateExpansionAction.Substitution; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.packages.NativeInfo; import com.google.devtools.build.lib.packages.NativeProvider; import com.google.devtools.build.lib.rules.apple.DottedVersion; -import java.util.Map; +import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModule; +import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory; import javax.annotation.Nullable; /** Provider that describes a simulator device. */ @Immutable +@SkylarkModule( + name = "IosDevice", + category = SkylarkModuleCategory.PROVIDER, + doc = "<b>Deprecated. Use the new Skylark testing rules instead.</b>" +) public final class IosDeviceProvider extends NativeInfo { /** A builder of {@link IosDeviceProvider}s. */ public static final class Builder { @@ -85,13 +91,38 @@ public final class IosDeviceProvider extends NativeInfo { private final String locale; private IosDeviceProvider(Builder builder) { - super(SKYLARK_CONSTRUCTOR, getSkylarkFields(builder)); + super(SKYLARK_CONSTRUCTOR); this.type = Preconditions.checkNotNull(builder.type); this.iosVersion = Preconditions.checkNotNull(builder.iosVersion); this.locale = Preconditions.checkNotNull(builder.locale); this.xcodeVersion = builder.xcodeVersion; } + @SkylarkCallable( + name = "ios_version", + doc = "The iOS version of the simulator to use.", + structField = true + ) + public String getIosVersionString() { + return iosVersion.toString(); + } + + @SkylarkCallable( + name = "xcode_version", + doc = "The xcode version to obtain the iOS simulator from, or <code>None</code> if unknown.", + structField = true, + allowReturnNones = true + ) + @Nullable + public String getXcodeVersionString() { + return xcodeVersion != null ? xcodeVersion.toString() : null; + } + + @SkylarkCallable( + name = "type", + doc = "The hardware type of the device, corresponding to the simctl device type.", + structField = true + ) public String getType() { return type; } @@ -120,15 +151,4 @@ public final class IosDeviceProvider extends NativeInfo { Substitution.of("%(simulator_sdk)s", getIosVersion().toString()), Substitution.of("%(locale)s", getLocale()))); } - - private static Map<String, Object> getSkylarkFields(Builder builder) { - ImmutableMap.Builder<String, Object> skylarkFields = - new ImmutableMap.Builder<String, Object>() - .put("type", builder.type) - .put("ios_version", builder.iosVersion.toString()); - if (builder.xcodeVersion != null) { - skylarkFields.put("xcode_version", builder.xcodeVersion.toString()); - } - return skylarkFields.build(); - } } diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java index bcde3803bc..3dfada91b2 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProvider.java @@ -818,7 +818,7 @@ public final class ObjcProvider extends NativeInfo { ImmutableMap<Key<?>, NestedSet<?>> items, ImmutableMap<Key<?>, NestedSet<?>> nonPropagatedItems, ImmutableMap<Key<?>, NestedSet<?>> strictDependencyItems) { - super(SKYLARK_CONSTRUCTOR, ImmutableMap.<String, Object>of()); + super(SKYLARK_CONSTRUCTOR); this.items = Preconditions.checkNotNull(items); this.nonPropagatedItems = Preconditions.checkNotNull(nonPropagatedItems); this.strictDependencyItems = Preconditions.checkNotNull(strictDependencyItems); diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java index 890395470f..b1dbb4e82c 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkList.java @@ -114,7 +114,7 @@ public abstract class SkylarkList<E> extends BaseMutableList<E> @Override public boolean equals(Object object) { return (this == object) - || ((this.getClass() == object.getClass()) + || ((object != null) && (this.getClass() == object.getClass()) && getContentsUnsafe().equals(((SkylarkList) object).getContentsUnsafe())); } |