aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/rules
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-03-21 13:51:04 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-03-21 18:39:11 +0000
commitc9d58757b07afe50a59d9583a134f71b73652f28 (patch)
tree11dacc676589093462226928a1f4b2d8bb898908 /src/main/java/com/google/devtools/build/lib/rules
parent2445af0575340bcb3efa4bf882278234a18da13c (diff)
Don't keep implicit reference to XcodeSupport during the execution phase. Saves memory and keeps analysis-phase objects from bleeding into execution phase.
-- MOS_MIGRATED_REVID=117709746
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java99
1 files changed, 62 insertions, 37 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
index 477b5bb786..f76808c957 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/XcodeSupport.java
@@ -225,46 +225,71 @@ public final class XcodeSupport {
.build(ruleContext));
}
- private ByteSource xcodegenControlFileBytes(final XcodeProvider.Project project)
- throws InterruptedException {
- final Artifact pbxproj = ruleContext.getImplicitOutputArtifact(XcodeSupport.PBXPROJ);
- final ObjcConfiguration objcConfiguration = ObjcRuleClasses.objcConfiguration(ruleContext);
- final AppleConfiguration appleConfiguration = ruleContext.getFragment(AppleConfiguration.class);
- return new ByteSource() {
- @Override
- public InputStream openStream() {
- XcodeGenProtos.Control.Builder builder = XcodeGenProtos.Control.newBuilder();
- String workspaceRoot = objcConfiguration.getXcodeWorkspaceRoot();
- if (workspaceRoot != null) {
- builder.setWorkspaceRoot(workspaceRoot);
- }
+ /**
+ * Static class to avoid keeping references to configurations and this XcodeSupport object during
+ * execution.
+ */
+ private static class XcodegenControlFileBytes extends ByteSource {
+ private final XcodeProvider.Project project;
+ private final Artifact pbxproj;
+ private final String workspaceRoot;
+ private final List<String> appleCpus;
+ private final String minimumOs;
+ private final boolean generateDebugSymbols;
- List<String> multiCpus = appleConfiguration.getIosMultiCpus();
- if (multiCpus.isEmpty()) {
- builder.addCpuArchitecture(appleConfiguration.getIosCpu());
- } else {
- builder.addAllCpuArchitecture(multiCpus);
- }
+ XcodegenControlFileBytes(
+ ObjcConfiguration objcConfiguration,
+ AppleConfiguration appleConfiguration,
+ Project project,
+ Artifact pbxproj) {
+ this.project = project;
+ this.pbxproj = pbxproj;
+ this.workspaceRoot = objcConfiguration.getXcodeWorkspaceRoot();
+ List<String> multiCpus = appleConfiguration.getIosMultiCpus();
+ if (multiCpus.isEmpty()) {
+ this.appleCpus = ImmutableList.of(appleConfiguration.getIosCpu());
+ } else {
+ this.appleCpus = multiCpus;
+ }
+ this.minimumOs = objcConfiguration.getMinimumOs().toString();
+ this.generateDebugSymbols = objcConfiguration.generateDebugSymbols();
+ }
- return builder
- .setPbxproj(pbxproj.getExecPathString())
- .addAllTarget(project.targets())
- .addBuildSetting(
- XcodeGenProtos.XcodeprojBuildSetting.newBuilder()
- .setName("IPHONEOS_DEPLOYMENT_TARGET")
- .setValue(objcConfiguration.getMinimumOs().toString())
- .build())
- .addBuildSetting(
- XcodeGenProtos.XcodeprojBuildSetting.newBuilder()
- .setName("DEBUG_INFORMATION_FORMAT")
- .setValue(
- objcConfiguration.generateDebugSymbols() ? "dwarf-with-dsym" : "dwarf")
- .build())
- .build()
- .toByteString()
- .newInput();
+ @Override
+ public InputStream openStream() {
+ XcodeGenProtos.Control.Builder builder = XcodeGenProtos.Control.newBuilder();
+ if (workspaceRoot != null) {
+ builder.setWorkspaceRoot(workspaceRoot);
}
- };
+
+ builder.addAllCpuArchitecture(appleCpus);
+
+ return builder
+ .setPbxproj(pbxproj.getExecPathString())
+ .addAllTarget(project.targets())
+ .addBuildSetting(
+ XcodeGenProtos.XcodeprojBuildSetting.newBuilder()
+ .setName("IPHONEOS_DEPLOYMENT_TARGET")
+ .setValue(minimumOs)
+ .build())
+ .addBuildSetting(
+ XcodeGenProtos.XcodeprojBuildSetting.newBuilder()
+ .setName("DEBUG_INFORMATION_FORMAT")
+ .setValue(generateDebugSymbols ? "dwarf-with-dsym" : "dwarf")
+ .build())
+ .build()
+ .toByteString()
+ .newInput();
+ }
+ }
+
+ private ByteSource xcodegenControlFileBytes(XcodeProvider.Project project)
+ throws InterruptedException {
+ return new XcodegenControlFileBytes(
+ ObjcRuleClasses.objcConfiguration(ruleContext),
+ ruleContext.getFragment(AppleConfiguration.class),
+ project,
+ ruleContext.getImplicitOutputArtifact(XcodeSupport.PBXPROJ));
}
/**