diff options
author | 2017-01-06 00:01:22 +0000 | |
---|---|---|
committer | 2017-01-06 01:22:40 +0000 | |
commit | 0dc5db08ae21289aeab7f3bf372910f9fb5a019f (patch) | |
tree | 9978e3b18541d49398e28622dc75a53127f75cfd /src/main/java/com/google/devtools/build | |
parent | 1ad8a901567b91d3d3d03e945a0fcd85e859621f (diff) |
Remove some cases of inferring configuration and platform from ruleContext outside of rule implementation.
--
PiperOrigin-RevId: 143720112
MOS_MIGRATED_REVID=143720112
Diffstat (limited to 'src/main/java/com/google/devtools/build')
7 files changed, 52 insertions, 82 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java index e0e5d8a307..b6cfa5528c 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/BundleSupport.java @@ -68,31 +68,29 @@ final class BundleSupport { } } + // TODO(cparsons): Take restricted interfaces of RuleContext instead of RuleContext (such as + // RuleErrorConsumer). private final RuleContext ruleContext; + private final AppleConfiguration appleConfiguration; + private final Platform platform; private final ExtraActoolArgs extraActoolArgs; private final Bundling bundling; private final Attributes attributes; /** - * Creates a new bundle support with no special {@code actool} arguments. - * - * @param ruleContext context this bundle is constructed in - * @param bundling bundle information as configured for this rule - */ - public BundleSupport(RuleContext ruleContext, Bundling bundling) { - this(ruleContext, bundling, new ExtraActoolArgs()); - } - - /** * Creates a new bundle support. * * @param ruleContext context this bundle is constructed in + * @param appleConfiguration the configuration this bundle is constructed in + * @param platform the platform this bundle is built for * @param bundling bundle information as configured for this rule * @param extraActoolArgs any additional parameters to be used for invoking {@code actool} */ - public BundleSupport(RuleContext ruleContext, - Bundling bundling, ExtraActoolArgs extraActoolArgs) { + public BundleSupport(RuleContext ruleContext, AppleConfiguration appleConfiguration, + Platform platform, Bundling bundling, ExtraActoolArgs extraActoolArgs) { this.ruleContext = ruleContext; + this.appleConfiguration = appleConfiguration; + this.platform = platform; this.extraActoolArgs = extraActoolArgs; this.bundling = bundling; this.attributes = new Attributes(ruleContext); @@ -134,7 +132,6 @@ final class BundleSupport { } private void validatePlatform() { - AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); Platform platform = null; for (String architecture : appleConfiguration.getIosMultiCpus()) { if (platform == null) { @@ -254,7 +251,7 @@ final class BundleSupport { .compiledStoryboardZip(storyboardInput); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("StoryboardCompile") .setExecutable(attributes.ibtoolWrapper()) .setCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, storyboardInput)) @@ -302,13 +299,12 @@ final class BundleSupport { } private void registerMomczipActions(ObjcProvider objcProvider) { - AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); Iterable<Xcdatamodel> xcdatamodels = Xcdatamodels.xcdatamodels( bundling.getIntermediateArtifacts(), objcProvider.get(ObjcProvider.XCDATAMODEL)); for (Xcdatamodel datamodel : xcdatamodels) { Artifact outputZip = datamodel.getOutputZip(); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("MomCompile") .setExecutable(attributes.momcWrapper()) .addOutput(outputZip) @@ -335,7 +331,7 @@ final class BundleSupport { FileSystemUtils.replaceExtension(original.getExecPath(), ".nib")); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("XibCompile") .setExecutable(attributes.ibtoolWrapper()) .setCommandLine(ibActionsCommandLine(archiveRoot, zipOutput, original)) @@ -350,19 +346,20 @@ final class BundleSupport { private void registerConvertStringsActions(ObjcProvider objcProvider) { for (Artifact strings : objcProvider.get(ObjcProvider.STRINGS)) { Artifact bundled = bundling.getIntermediateArtifacts().convertedStringsFile(strings); - ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) - .setMnemonic("ConvertStringsPlist") - .setExecutable(new PathFragment("/usr/bin/plutil")) - .setCommandLine(CustomCommandLine.builder() - .add("-convert").add("binary1") - .addExecPath("-o", bundled) - .add("--") - .addPath(strings.getExecPath()) - .build()) - .addInput(strings) - .addInput(CompilationSupport.xcrunwrapper(ruleContext).getExecutable()) - .addOutput(bundled) - .build(ruleContext)); + ruleContext.registerAction( + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) + .setMnemonic("ConvertStringsPlist") + .setExecutable(new PathFragment("/usr/bin/plutil")) + .setCommandLine(CustomCommandLine.builder() + .add("-convert").add("binary1") + .addExecPath("-o", bundled) + .add("--") + .addPath(strings.getExecPath()) + .build()) + .addInput(strings) + .addInput(CompilationSupport.xcrunwrapper(ruleContext).getExecutable()) + .addOutput(bundled) + .build(ruleContext)); } } @@ -427,7 +424,7 @@ final class BundleSupport { // zip file will be rooted at the bundle root, and we have to prepend the bundle root to each // entry when merging it with the final .ipa file. ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("AssetCatalogCompile") .setExecutable(attributes.actoolWrapper()) .addTransitiveInputs(objcProvider.get(ASSET_CATALOG)) @@ -443,7 +440,6 @@ final class BundleSupport { private CommandLine actoolzipCommandLine(ObjcProvider provider, Artifact zipOutput, Artifact partialInfoPlist) { - AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); PlatformType platformType = PlatformType.IOS; // watchOS 1 and 2 use different platform arguments. It is likely that versions 2 and later will // use the watchos platform whereas watchOS 1 uses the iphone platform. diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java index 419628da47..f6bb0456d5 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java @@ -18,6 +18,7 @@ import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.analysis.actions.CustomCommandLine; import com.google.devtools.build.lib.collect.nestedset.NestedSet; +import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.Platform; /** @@ -40,7 +41,8 @@ public class LipoSupport { public LipoSupport registerCombineArchitecturesAction(NestedSet<Artifact> inputBinaries, Artifact outputBinary, Platform platform) { - ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform) + ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder( + ruleContext.getFragment(AppleConfiguration.class), platform) .setMnemonic("ObjcCombiningArchitectures") .addTransitiveInputs(inputBinaries) .addOutput(outputBinary) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java index b8f691cf94..c7ae890d47 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBundleLibrary.java @@ -24,14 +24,15 @@ import com.google.devtools.build.lib.analysis.ConfiguredTarget; import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode; import com.google.devtools.build.lib.analysis.RuleContext; import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder; -import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException; import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory; import com.google.devtools.build.lib.rules.apple.AppleConfiguration; import com.google.devtools.build.lib.rules.apple.Platform.PlatformType; +import com.google.devtools.build.lib.rules.objc.BundleSupport.ExtraActoolArgs; import com.google.devtools.build.lib.rules.objc.ObjcCommon.ResourceAttributes; import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.InvalidFamilyNameException; import com.google.devtools.build.lib.rules.objc.TargetDeviceFamily.RepeatedFamilyNameException; import com.google.devtools.build.lib.syntax.Type; + import java.util.List; /** @@ -56,7 +57,12 @@ public class ObjcBundleLibrary implements RuleConfiguredTargetFactory { return null; } - new BundleSupport(ruleContext, bundling) + AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); + new BundleSupport(ruleContext, + appleConfiguration, + appleConfiguration.getMultiArchPlatform(PlatformType.IOS), + bundling, + new ExtraActoolArgs()) .registerActions(common.getObjcProvider()) .validate(common.getObjcProvider()) .addXcodeSettings(xcodeProviderBuilder); diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java index 14776b30df..c95aa2cf63 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java @@ -171,27 +171,6 @@ public class ObjcRuleClasses { return null; } }; - - - /** - * Creates a new spawn action builder with apple environment variables set that are typically - * needed by the apple toolchain. This should be used to start to build spawn actions that, in - * order to run, require both a darwin architecture and a collection of environment variables - * which contain information about the target and host architectures. This implicitly - * assumes that this action is targeting ios platforms, and that - * {@link AppleConfiguration#getIosCpu()} is the source of truth for their target architecture. - * - * @deprecated use {@link #spawnAppleEnvActionBuilder(RuleContext, Platform)} instead - */ - // TODO(cparsons): Refactor callers to use the alternate method. Callers should be aware - // of their effective Platform. - @Deprecated - static SpawnAction.Builder spawnAppleEnvActionBuilder(RuleContext ruleContext) { - AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); - - return spawnAppleEnvActionBuilder(ruleContext, - Platform.forTarget(PlatformType.IOS, appleConfiguration.getIosCpu())); - } /** * Creates a new spawn action builder with apple environment variables set that are typically @@ -199,20 +178,6 @@ public class ObjcRuleClasses { * order to run, require both a darwin architecture and a collection of environment variables * which contain information about the target and host architectures. */ - // TODO(cparsons): Refactor this method to take the configuration fragment instead of - // retrieving it from the rule context. - static SpawnAction.Builder spawnAppleEnvActionBuilder(RuleContext ruleContext, - Platform targetPlatform) { - return spawnAppleEnvActionBuilder( - ruleContext.getFragment(AppleConfiguration.class), targetPlatform); - } - - /** - * Creates a new spawn action builder with apple environment variables set that are typically - * needed by the apple toolchain. This should be used to start to build spawn actions that, in - * order to run, require both a darwin architecture and a collection of environment variables - * which contain information about the target and host architectures. - */ static SpawnAction.Builder spawnAppleEnvActionBuilder(AppleConfiguration appleConfiguration, Platform targetPlatform) { return spawnOnDarwinActionBuilder() diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java index 90944aa2ef..661994ad8d 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ReleaseBundlingSupport.java @@ -177,7 +177,10 @@ public final class ReleaseBundlingSupport { this.intermediateArtifacts = releaseBundling.getIntermediateArtifacts(); this.bundling = bundling(ruleContext, objcProvider, bundleDirFormat, bundleName, bundleMinimumOsVersion); - bundleSupport = new BundleSupport(ruleContext, bundling, extraActoolArgs()); + // TODO(cparsons): Take the rule configuration as a param instead of inferring. + bundleSupport = new BundleSupport(ruleContext, + ruleContext.getFragment(AppleConfiguration.class), platform, + bundling, extraActoolArgs()); } /** @@ -377,7 +380,7 @@ public final class ReleaseBundlingSupport { platform.getLowerCaseNameInPlist(), configuration.getSdkVersionForPlatform(platform)); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext) + ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform) .setMnemonic("EnvironmentPlist") .setExecutable(attributes.environmentPlist()) .addArguments("--platform", platformWithVersion) @@ -1082,7 +1085,7 @@ public final class ReleaseBundlingSupport { .addExecPath("--scan-executable", combinedArchBinary); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform) + ObjcRuleClasses.spawnAppleEnvActionBuilder(appleConfiguration, platform) .setMnemonic("SwiftStdlibCopy") .setExecutable(attributes.swiftStdlibToolWrapper()) .setCommandLine(commandLine.build()) @@ -1114,7 +1117,7 @@ public final class ReleaseBundlingSupport { .addExecPath("--scan-executable", combinedArchBinary); ruleContext.registerAction( - ObjcRuleClasses.spawnAppleEnvActionBuilder(ruleContext, platform) + ObjcRuleClasses.spawnAppleEnvActionBuilder(configuration, platform) .setMnemonic("SwiftCopySwiftSupport") .setExecutable(attributes.swiftStdlibToolWrapper()) .setCommandLine(commandLine.build()) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java index e6b4ebf15e..9eefef687f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchApplicationSupport.java @@ -282,12 +282,11 @@ final class WatchApplicationSupport { watchKitStubZip.getFilename(), Joiner.on(" ").join(ImmutableList.of("_WatchKitStub", bundleName)))); + AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); ruleContext.registerAction( ObjcRuleClasses.spawnAppleEnvActionBuilder( - ruleContext, - ruleContext - .getFragment(AppleConfiguration.class) - .getMultiArchPlatform(PlatformType.WATCHOS)) + appleConfiguration, + appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS)) .setProgressMessage( "Copying WatchKit binary and stub resource: " + ruleContext.getLabel()) .setShellCommand(ImmutableList.of("/bin/bash", "-c", Joiner.on(" ").join(command))) diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java index f0df7f5ab8..1ef83b2521 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/WatchUtils.java @@ -163,12 +163,11 @@ final class WatchUtils { watchSupportZip.getFilename(), watchKitSupportDirName)); + AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class); ruleContext.registerAction( ObjcRuleClasses.spawnAppleEnvActionBuilder( - ruleContext, - ruleContext - .getFragment(AppleConfiguration.class) - .getMultiArchPlatform(PlatformType.WATCHOS)) + appleConfiguration, + appleConfiguration.getMultiArchPlatform(PlatformType.WATCHOS)) .setProgressMessage("Copying Watchkit support to app bundle") .setShellCommand(ImmutableList.of("/bin/bash", "-c", Joiner.on(" ").join(command))) .addOutput(watchSupportZip) |