diff options
author | 2016-03-21 13:51:04 +0000 | |
---|---|---|
committer | 2016-03-21 18:39:11 +0000 | |
commit | c9d58757b07afe50a59d9583a134f71b73652f28 (patch) | |
tree | 11dacc676589093462226928a1f4b2d8bb898908 /src/main/java/com/google/devtools/build/lib/rules | |
parent | 2445af0575340bcb3efa4bf882278234a18da13c (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.java | 99 |
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)); } /** |