private static boolean canMerge( IjFolder parent, IjFolder child, PackagePathCache packagePathCache) { Preconditions.checkArgument(child.getPath().startsWith(parent.getPath())); if (!child.canMergeWith(parent)) { return false; } if (parent.getWantsPackagePrefix() != child.getWantsPackagePrefix()) { return false; } if (parent.getWantsPackagePrefix()) { Optional<Path> parentPackage = packagePathCache.lookup(parent); if (!parentPackage.isPresent()) { return false; } Path childPackage = packagePathCache.lookup(child).get(); int pathDifference = child.getPath().getNameCount() - parent.getPath().getNameCount(); Preconditions.checkState(pathDifference == 1); if (childPackage.getNameCount() == 0) { return false; } if (!MorePaths.getParentOrEmpty(childPackage).equals(parentPackage.get())) { return false; } } return true; }
/** * @param cellRoot root path to the cell the rule is defined in. * @param map the map of values that define the rule. * @param rulePathForDebug path to the build file the rule is defined in, only used for debugging. * @return the build target defined by the rule. */ public static UnflavoredBuildTarget parseBuildTargetFromRawRule( Path cellRoot, Map<String, Object> map, Path rulePathForDebug) { String basePath = (String) map.get("buck.base_path"); String name = (String) map.get("name"); if (basePath == null || name == null) { throw new IllegalStateException( String.format( "Attempting to parse build target from malformed raw data in %s: %s.", rulePathForDebug, Joiner.on(",").withKeyValueSeparator("->").join(map))); } Path otherBasePath = cellRoot.relativize(MorePaths.getParentOrEmpty(rulePathForDebug)); if (!otherBasePath.equals(otherBasePath.getFileSystem().getPath(basePath))) { throw new IllegalStateException( String.format( "Raw data claims to come from [%s], but we tried rooting it at [%s].", basePath, otherBasePath)); } return UnflavoredBuildTarget.builder(UnflavoredBuildTarget.BUILD_TARGET_PREFIX + basePath, name) .setCellPath(cellRoot) .build(); }