@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; }
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(); }