@Override public <A extends Arg> JavaTest createBuildRule( TargetGraph targetGraph, BuildRuleParams params, BuildRuleResolver resolver, A args) throws NoSuchBuildTargetException { SourcePathResolver pathResolver = new SourcePathResolver(resolver); JavacOptions javacOptions = JavacOptionsFactory.create(templateJavacOptions, params, resolver, pathResolver, args); CxxLibraryEnhancement cxxLibraryEnhancement = new CxxLibraryEnhancement( params, args.useCxxLibraries, resolver, pathResolver, cxxPlatform); params = cxxLibraryEnhancement.updatedParams; BuildTarget abiJarTarget = params.getBuildTarget().withAppendedFlavors(CalculateAbi.FLAVOR); JavaTest test = resolver.addToIndex( new JavaTest( params.appendExtraDeps( Iterables.concat( BuildRules.getExportedRules( Iterables.concat( params.getDeclaredDeps().get(), resolver.getAllRules(args.providedDeps.get()))), pathResolver.filterBuildRuleInputs(javacOptions.getInputs(pathResolver)))), pathResolver, args.srcs.get(), ResourceValidator.validateResources( pathResolver, params.getProjectFilesystem(), args.resources.get()), javacOptions.getGeneratedSourceFolderName(), args.labels.get(), args.contacts.get(), args.proguardConfig.transform( SourcePaths.toSourcePath(params.getProjectFilesystem())), new BuildTargetSourcePath(abiJarTarget), javacOptions.trackClassUsage(), /* additionalClasspathEntries */ ImmutableSet.<Path>of(), args.testType.or(TestType.JUNIT), new JavacToJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY), javaOptions.getJavaRuntimeLauncher(), args.vmArgs.get(), cxxLibraryEnhancement.nativeLibsEnvironment, validateAndGetSourcesUnderTest( args.sourceUnderTest.get(), params.getBuildTarget(), resolver), args.resourcesRoot, args.mavenCoords, args.testRuleTimeoutMs.or(defaultTestRuleTimeoutMs), args.env.get(), args.getRunTestSeparately(), args.stdOutLogLevel, args.stdErrLogLevel)); resolver.addToIndex( CalculateAbi.of( abiJarTarget, pathResolver, params, new BuildTargetSourcePath(test.getBuildTarget()))); return test; }
@Override public Object extractRuleKeyAppendables( BuildTarget target, BuildRuleResolver resolver, String input) throws MacroException { return FluentIterable.from( getHasClasspathEntries(resolve(target, resolver, input)).getTransitiveClasspathDeps()) .filter( new Predicate<JavaLibrary>() { @Override public boolean apply(JavaLibrary input) { return input.getPathToOutput() != null; } }) .transform(SourcePaths.getToBuildTargetSourcePath()) .toSortedSet(Ordering.natural()); }
private Jsr199Javac createJavac(boolean withSyntaxError, Optional<Path> javacJar) throws IOException { File exampleJava = tmp.newFile("Example.java"); Files.write( Joiner.on('\n') .join( "package com.example;", "", "public class Example {" + (withSyntaxError ? "" : "}")), exampleJava, Charsets.UTF_8); Path pathToOutputDirectory = Paths.get("out"); tmp.newFolder(pathToOutputDirectory.toString()); Optional<SourcePath> jar = javacJar.transform(SourcePaths.toSourcePath(new FakeProjectFilesystem())); if (jar.isPresent()) { return new JarBackedJavac("com.sun.tools.javac.api.JavacTool", ImmutableSet.of(jar.get())); } return new JdkProvidedInMemoryJavac(); }
@Override public <A extends Arg> AppleBundle createBuildRule( TargetGraph targetGraph, BuildRuleParams params, BuildRuleResolver resolver, A args) { AppleCxxPlatform appleCxxPlatform = getAppleCxxPlatformForBuildTarget(params.getBuildTarget()); AppleBundleDestinations destinations = AppleBundleDestinations.platformDestinations( appleCxxPlatform.getAppleSdk().getApplePlatform()); ImmutableSet.Builder<SourcePath> bundleDirsBuilder = ImmutableSet.builder(); ImmutableSet.Builder<SourcePath> dirsContainingResourceDirsBuilder = ImmutableSet.builder(); ImmutableSet.Builder<SourcePath> bundleFilesBuilder = ImmutableSet.builder(); ImmutableSet.Builder<SourcePath> bundleVariantFilesBuilder = ImmutableSet.builder(); AppleResources.collectResourceDirsAndFiles( targetGraph, Preconditions.checkNotNull(targetGraph.get(params.getBuildTarget())), bundleDirsBuilder, dirsContainingResourceDirsBuilder, bundleFilesBuilder, bundleVariantFilesBuilder); ImmutableSet<SourcePath> bundleDirs = bundleDirsBuilder.build(); ImmutableSet<SourcePath> dirsContainingResourceDirs = dirsContainingResourceDirsBuilder.build(); ImmutableSet<SourcePath> bundleFiles = bundleFilesBuilder.build(); ImmutableSet<SourcePath> bundleVariantFiles = bundleVariantFilesBuilder.build(); SourcePathResolver sourcePathResolver = new SourcePathResolver(resolver); Optional<AppleAssetCatalog> assetCatalog = AppleDescriptions.createBuildRuleForTransitiveAssetCatalogDependencies( targetGraph, params, sourcePathResolver, appleCxxPlatform.getAppleSdk().getApplePlatform(), appleCxxPlatform.getActool()); // TODO(user): Sort through the changes needed to make project generation work with // binary being optional. BuildRule flavoredBinaryRule = getFlavoredBinaryRule(targetGraph, params, resolver, args); BuildRuleParams bundleParamsWithFlavoredBinaryDep = getBundleParamsWithUpdatedDeps( params, args.binary, ImmutableSet.<BuildRule>builder() .add(flavoredBinaryRule) .addAll(assetCatalog.asSet()) .addAll( BuildRules.toBuildRulesFor( params.getBuildTarget(), resolver, SourcePaths.filterBuildTargetSourcePaths( Iterables.concat( bundleFiles, bundleDirs, dirsContainingResourceDirs, bundleVariantFiles)))) .build()); ImmutableMap<SourcePath, String> extensionBundlePaths = collectFirstLevelAppleDependencyBundles(params.getDeps(), destinations); return new AppleBundle( bundleParamsWithFlavoredBinaryDep, sourcePathResolver, args.extension, args.productName, args.infoPlist, args.infoPlistSubstitutions.get(), Optional.of(flavoredBinaryRule), destinations, bundleDirs, bundleFiles, dirsContainingResourceDirs, extensionBundlePaths, Optional.of(bundleVariantFiles), appleCxxPlatform.getIbtool(), appleCxxPlatform.getDsymutil(), appleCxxPlatform.getCxxPlatform().getStrip(), assetCatalog, args.getTests(), appleCxxPlatform.getAppleSdk(), codeSignIdentityStore, provisioningProfileStore, AppleBundle.DebugInfoFormat.DSYM); }
@Override public Iterable<String> getInputsToCompareToOutput() { Iterable<String> sourcePaths = SourcePaths.filterInputsToCompareToOutput(Collections.singleton(skeletonFile)); return Iterables.concat(sourcePaths, manifestFiles); }
@Override protected Iterable<Path> getInputsToCompareToOutput() { return SourcePaths.filterInputsToCompareToOutput(Collections.singleton(aarFile)); }