@Test public void addJarInput_whenAddPaths_builtShouldReturnCorrectPaths() throws Exception { File file1 = getTmpFile("tmp1"); File file2 = getTmpFile("tmp2"); TransformInput input = builder.addJarInput(file1.getAbsolutePath(), file2.getAbsolutePath()).build(); assertThat(input.getJarInputs()).hasSize(2); JarInput[] jarInputs = input.getJarInputs().toArray(new JarInput[2]); assertThat(jarInputs[0].getFile().getAbsolutePath()).isEqualTo(file1.getAbsolutePath()); assertThat(jarInputs[1].getFile().getAbsolutePath()).isEqualTo(file2.getAbsolutePath()); }
@Test public void addJarInput_whenAddFile_builtShouldReturnFile() throws Exception { File file = getTmpFile("tmp"); TransformInput input = builder.addJarInput(file).build(); assertThat(input.getJarInputs()).hasSize(1); assertThat(input.getJarInputs().toArray(new JarInput[1])[0].getFile()).isEqualTo(file); }
input.getJarInputs().parallelStream().forEach(jarInput -> { File src = jarInput.getFile(); File dst = invocation.getOutputProvider().getContentLocation(
for (JarInput inputJar : input.getJarInputs()) { File outputJar = transformInvocation
/** * Determines all directories where class files can be found in the given * {@link TransformInput}. */ @NonNull protected static Collection<File> getAllJars(@NonNull TransformInput input) { return input.getJarInputs().stream() .map(JarInput::getFile) .collect(Collectors.toList()); }
private static void addAllClassLocations(TransformInput transformInput, List<URL> into) throws MalformedURLException { for (DirectoryInput directoryInput : transformInput.getDirectoryInputs()) { into.add(directoryInput.getFile().toURI().toURL()); } for (JarInput jarInput : transformInput.getJarInputs()) { into.add(jarInput.getFile().toURI().toURL()); } }
private static File verifyInputs(@NonNull Collection<TransformInput> inputs) { // Collect the inputs. There should be only one. List<File> inputFiles = Lists.newArrayList(); for (TransformInput transformInput : inputs) { for (JarInput jarInput : transformInput.getJarInputs()) { inputFiles.add(jarInput.getFile()); } for (DirectoryInput directoryInput : transformInput.getDirectoryInputs()) { inputFiles.add(directoryInput.getFile()); } } return Iterables.getOnlyElement(inputFiles); }
private static Collection<File> getAllFiles( Collection<TransformInput> transformInputs, boolean includeDirectoryInput, boolean includeJarInput) { ImmutableList.Builder<File> inputFiles = ImmutableList.builder(); for (TransformInput input : transformInputs) { if (includeDirectoryInput) { for (DirectoryInput directoryInput : input.getDirectoryInputs()) { inputFiles.add(directoryInput.getFile()); } } if (includeJarInput) { for (JarInput jarInput : input.getJarInputs()) { inputFiles.add(jarInput.getFile()); } } } return inputFiles.build(); } }
private static boolean hasChangedInputs(Collection<TransformInput> inputs) { for (TransformInput input : inputs) { for (DirectoryInput directoryInput : input.getDirectoryInputs()) { if (!directoryInput.getChangedFiles().isEmpty()) { return true; } } for (JarInput jarInput : input.getJarInputs()) { if (jarInput.getStatus() != Status.NOTCHANGED) { return true; } } } return false; } }
private void fullCopy(Collection<TransformInput> inputs) throws IOException { FileUtils.deleteQuietly(outFolder); FileUtils.forceMkdir(outFolder); for (TransformInput input : inputs) { for (DirectoryInput dirInput : input.getDirectoryInputs()) { File dataBindingDir = dirInput.getFile(); if (!dataBindingDir.exists()) { continue; } File artifactFolder = new File(dataBindingDir, DataBindingBuilder.INCREMENTAL_BIN_AAR_DIR); if (!artifactFolder.exists()) { continue; } //noinspection ConstantConditions for (String artifactName : artifactFolder.list()) { if (isResource(artifactName)) { FileUtils.copyFile(new File(artifactFolder, artifactName), new File(outFolder, artifactName)); } } } for(JarInput jarInput : input.getJarInputs()) { File jarFile = jarInput.getFile(); extractBinFilesFromJar(jarFile); } } }
@NonNull public Map<File, Format> getPipelineOutput( @NonNull StreamFilter streamFilter) { ImmutableList<TransformStream> streams = getStreams(streamFilter); if (streams.isEmpty()) { return ImmutableMap.of(); } ImmutableMap.Builder<File, Format> builder = ImmutableMap.builder(); for (TransformStream stream : streams) { // get the input for it TransformInput input = stream.asNonIncrementalInput(); for (JarInput jarInput : input.getJarInputs()) { builder.put(jarInput.getFile(), Format.JAR); } for (DirectoryInput directoryInput : input.getDirectoryInputs()) { builder.put(directoryInput.getFile(), Format.DIRECTORY); } } return builder.build(); } }
private static boolean isIncrementalRun( boolean isIncremental, @NonNull Collection<TransformInput> referencedInputs) { if (!isIncremental) { return false; } for (TransformInput referencedInput : referencedInputs) { for (JarInput jarInput : referencedInput.getJarInputs()) { if (jarInput.getStatus() != Status.NOTCHANGED) { return false; } } for (DirectoryInput directoryInput : referencedInput.getDirectoryInputs()) { if (!directoryInput.getChangedFiles().isEmpty()) { return false; } } } return true; }
inputs.forEach(input -> input.getJarInputs().forEach(jarInput -> { switch (jarInput.getStatus()) { case ADDED:
private void addInputsToConfiguration( @NonNull Collection<TransformInput> inputs, boolean referencedOnly) { ClassPath classPath; List<String> baseFilter; if (referencedOnly) { classPath = configuration.libraryJars; baseFilter = JAR_FILTER; } else { classPath = configuration.programJars; baseFilter = null; } for (TransformInput transformInput : inputs) { for (JarInput jarInput : transformInput.getJarInputs()) { handleQualifiedContent(classPath, jarInput, baseFilter); } for (DirectoryInput directoryInput : transformInput.getDirectoryInputs()) { handleQualifiedContent(classPath, directoryInput, baseFilter); } } }
/** * Tries to determine the output class file, for rewriting the given class file. * * <p>This will return {@link Optional#absent()} if the class is not part of the program to * shrink (e.g. comes from a platform JAR). */ @NonNull protected Optional<File> chooseOutputFile( @NonNull T klass, @NonNull File classFile, @NonNull Iterable<TransformInput> inputs, @NonNull TransformOutputProvider output) { String classFilePath = classFile.getAbsolutePath(); for (TransformInput input : inputs) { Iterable<QualifiedContent> directoriesAndJars = Iterables.concat(input.getDirectoryInputs(), input.getJarInputs()); for (QualifiedContent directoryOrJar : directoriesAndJars) { File file = directoryOrJar.getFile(); if (classFilePath.startsWith(file.getAbsolutePath())) { File outputDir = output.getContentLocation( FileUtils.getDirectoryNameForJar(file), directoryOrJar.getContentTypes(), directoryOrJar.getScopes(), Format.DIRECTORY); return Optional.of(new File(outputDir, mGraph.getClassName(klass) + ".class")); } } } return Optional.absent(); }
Collection<JarInput> jarInputs = input.getJarInputs(); for (JarInput jarInput : jarInputs) { String name = jarInput.getName();
for (JarInput jarInput : transformInput.getJarInputs()) { logger.error("InstantRunDependenciesApkBuilder received a jar file " + jarInput.getFile().getAbsolutePath());
i.getJarInputs() .forEach(j -> { if (targets == null) {
@Override public void transform(@NonNull TransformInvocation invocation) throws IOException, TransformException, InterruptedException { checkNotNull(invocation.getOutputProvider(), "Missing output object for transform " + getName()); File outputDir = invocation.getOutputProvider().getContentLocation( "main", getOutputTypes(), getScopes(), Format.DIRECTORY); FileUtils.mkdirs(outputDir); TransformInput input = Iterables.getOnlyElement(invocation.getInputs()); // we don't want jar inputs. Preconditions.checkState(input.getJarInputs().isEmpty()); DirectoryInput directoryInput = Iterables.getOnlyElement(input.getDirectoryInputs()); File inputDir = directoryInput.getFile(); Instrumenter instrumenter = new Instrumenter(new OfflineInstrumentationAccessGenerator()); if (invocation.isIncremental()) { instrumentFilesIncremental(instrumenter, inputDir, outputDir, directoryInput.getChangedFiles()); } else { instrumentFilesFullRun(instrumenter, inputDir, outputDir); } }
@Override public void transform(@NonNull TransformInvocation invocation) throws IOException, TransformException, InterruptedException { FileUtils.cleanOutputDir(jniLibsFolder); for (TransformInput input : invocation.getReferencedInputs()) { for (JarInput jarInput : input.getJarInputs()) { copyFromJar(jarInput.getFile()); } for (DirectoryInput directoryInput : input.getDirectoryInputs()) { copyFromFolder(directoryInput.getFile()); } } }