@Test public void coerceToEitherLeftOrRight() throws NoSuchFieldException, CoerceFailedException { Type type = TestFields.class.getField("eitherStringOrStringList").getGenericType(); TypeCoercer<?> coercer = typeCoercerFactory.typeCoercerForType(type); String inputString = "a_string"; ImmutableList<String> inputList = ImmutableList.of("a", "b"); assertEquals( Either.ofLeft(inputString), coercer.coerce(buildRuleResolver, filesystem, Paths.get(""), inputString)); assertEquals( Either.ofRight(inputList), coercer.coerce(buildRuleResolver, filesystem, Paths.get(""), inputList)); }
private Either<SourcePath, Pair<SourcePath, String>> newEntry(String path, String flags) { return Either.ofRight(new Pair<SourcePath, String>(new FileSourcePath(path), flags)); }
private Either<SourcePath, Pair<SourcePath, String>> newEntry(String path) { return Either.ofLeft((SourcePath) new FileSourcePath(path)); }
AppleBundle( BuildRuleParams params, SourcePathResolver resolver, Either<AppleBundleExtension, String> extension, SourcePath infoPlist, Map<String, String> infoPlistSubstitutions, Optional<BuildRule> binary, AppleBundleDestinations destinations, Set<SourcePath> resourceDirs, Set<SourcePath> resourceFiles, Set<SourcePath> dirsContainingResourceDirs, ImmutableSet<SourcePath> extensionBundlePaths, Optional<ImmutableSet<SourcePath>> resourceVariantFiles, Tool ibtool, Tool dsymutil, Tool strip, Optional<AppleAssetCatalog> assetCatalog, Set<BuildTarget> tests, AppleSdk sdk, ImmutableSet<CodeSignIdentity> allValidCodeSignIdentities, Optional<SourcePath> provisioningProfileSearchPath) { super(params, resolver); this.extension = extension.isLeft() ? extension.getLeft().toFileExtension() : extension.getRight(); this.infoPlist = infoPlist; this.infoPlistSubstitutions = ImmutableMap.copyOf(infoPlistSubstitutions); this.binary = binary; this.destinations = destinations; this.resourceDirs = resourceDirs; this.resourceFiles = resourceFiles; this.dirsContainingResourceDirs = dirsContainingResourceDirs; this.extensionBundlePaths = extensionBundlePaths; this.resourceVariantFiles = resourceVariantFiles; this.ibtool = ibtool; this.dsymutil = dsymutil; this.strip = strip; this.assetCatalog = assetCatalog; this.binaryName = getBinaryName(getBuildTarget()); this.bundleRoot = getBundleRoot(getBuildTarget(), this.extension); this.binaryPath = this.destinations.getExecutablesPath().resolve(this.binaryName); this.tests = ImmutableSortedSet.copyOf(tests); this.platformName = sdk.getApplePlatform().getName(); this.sdkName = sdk.getName(); // We need to resolve the possible set of profiles and code sign identity at construction time // because they form part of the rule key. if (binary.isPresent() && ApplePlatform.needsCodeSign(this.platformName)) { final Path searchPath; if (provisioningProfileSearchPath.isPresent()) { searchPath = resolver.getResolvedPath(provisioningProfileSearchPath.get()); } else { searchPath = Paths.get( System.getProperty("user.home") + "/Library/MobileDevice/Provisioning Profiles"); } Optional<ImmutableSet<ProvisioningProfileMetadata>> provisioningProfiles; try { provisioningProfiles = Optional.of(ProvisioningProfileCopyStep.findProfilesInPath(searchPath)); } catch (InterruptedException e) { // We get here if the user pressed Ctrl-C during the profile discovery step. // In this case, we'll fail anyway since the set of profiles will be empty. provisioningProfiles = Optional.of(ImmutableSet.<ProvisioningProfileMetadata>of()); } this.provisioningProfiles = provisioningProfiles; Optional<CodeSignIdentity> foundIdentity = Optional.absent(); Optional<String> customIdentity = InfoPlistSubstitution.getVariableExpansionForPlatform( CODE_SIGN_IDENTITY, this.platformName, this.infoPlistSubstitutions); if (customIdentity.isPresent()) { LOG.debug("Bundle specifies custom code signing identity: " + customIdentity.get()); if (CodeSignIdentity.isHash(customIdentity.get())) { for (CodeSignIdentity identity : allValidCodeSignIdentities) { if (identity.getHash().equals(customIdentity.get())) { foundIdentity = Optional.of(identity); break; } } } else { for (CodeSignIdentity identity : allValidCodeSignIdentities) { if (identity.getFullName().startsWith(customIdentity.get())) { foundIdentity = Optional.of(identity); break; } } } } else if (!allValidCodeSignIdentities.isEmpty()) { LOG.debug("Using default code signing identity"); Iterator<CodeSignIdentity> it = allValidCodeSignIdentities.iterator(); foundIdentity = Optional.of(it.next()); } if (!foundIdentity.isPresent()) { throw new HumanReadableException( "The platform " + platformName + " for this target " + "requires code signing but couldn't find a compatible code signing identity to use."); } LOG.debug("Code signing identity is " + foundIdentity.toString()); this.codeSignIdentity = foundIdentity; } else { this.provisioningProfiles = Optional.absent(); this.codeSignIdentity = Optional.absent(); } }