/** Constructs an {@link ObjcCommon} instance based on the attributes. */ private ObjcCommon common(RuleContext ruleContext, Optional<ObjcProvider> protosObjcProvider) { CompilationArtifacts compilationArtifacts = CompilationSupport.compilationArtifacts(ruleContext); ObjcCommon.Builder builder = new ObjcCommon.Builder(ruleContext) .setCompilationAttributes( CompilationAttributes.Builder.fromRuleContext(ruleContext).build()) .setCompilationArtifacts(compilationArtifacts) .setResourceAttributes(new ResourceAttributes(ruleContext)) .addDefines(ruleContext.getTokenizedStringListAttr("defines")) .addDeps(ruleContext.getPrerequisites("deps", Mode.TARGET)) .addRuntimeDeps(ruleContext.getPrerequisites("runtime_deps", Mode.TARGET)) .addDeps(ruleContext.getPrerequisites("bundles", Mode.TARGET)) .addDepObjcProviders(protosObjcProvider.asSet()) .addNonPropagatedDepObjcProviders( ruleContext.getPrerequisites( "non_propagated_deps", Mode.TARGET, ObjcProvider.class)) .setIntermediateArtifacts(ObjcRuleClasses.intermediateArtifacts(ruleContext)) .setHasModuleMap(); if (isXcTest(ruleContext)) { builder .addExtraSdkFrameworks(AUTOMATIC_SDK_FRAMEWORKS_FOR_XCTEST) .addDepObjcProviders(ImmutableList.of(xcTestAppProvider(ruleContext).getObjcProvider())); } // Add the memleaks library if the --ios_memleaks flag is true. The library pauses the test // after all tests have been executed so that leaks can be run. ObjcConfiguration config = ruleContext.getFragment(ObjcConfiguration.class); if (config.runMemleaks()) { builder.addDepObjcProviders( ruleContext.getPrerequisites(MEMLEAKS_DEP_ATTR, Mode.TARGET, ObjcProvider.class)); } return builder.build(); }
/** Returns the common object for a proto specific compilation environment. */ public ObjcCommon getCommon() { ObjcCommon.Builder commonBuilder = new ObjcCommon.Builder(ruleContext) .setIntermediateArtifacts(intermediateArtifacts) .setHasModuleMap() .setCompilationArtifacts(getCompilationArtifacts()); if (targetType == TargetType.LINKING_TARGET) { commonBuilder.addDepObjcProviders( ruleContext.getPrerequisites("deps", Mode.TARGET, ObjcProvider.class)); } else if (targetType == TargetType.PROTO_TARGET) { commonBuilder.addDepObjcProviders( ruleContext.getPrerequisites( ObjcRuleClasses.PROTO_LIB_ATTR, Mode.TARGET, ObjcProvider.class)); if (usesProtobufLibrary() && experimentalAutoUnion()) { commonBuilder.addDirectDependencyHeaderSearchPaths(getUserHeaderSearchPaths()); } else { commonBuilder.addUserHeaderSearchPaths(getUserHeaderSearchPaths()); } } return commonBuilder.build(); }