void addJarInput(@NonNull QualifiedContent jarInput) { jarInputs.put(jarInput.getFile(), jarInput); }
@NonNull private File getPreDexFile( @NonNull TransformOutputProvider output, boolean needMerge, @Nullable File outFolder, @NonNull QualifiedContent qualifiedContent) { if (needMerge) { Preconditions.checkNotNull(outFolder); return new File(outFolder, getFilename(qualifiedContent.getFile())); } else { return getOutputLocation(output, qualifiedContent, qualifiedContent.getFile()); } }
private static void handleQualifiedContent( @NonNull ClassPath classPath, @NonNull QualifiedContent content, @Nullable List<String> baseFilter) { List<String> filter = baseFilter; if (!content.getContentTypes().contains(DefaultContentType.CLASSES)) { // if the content is not meant to contain classes, we ignore them // in case they are present. ImmutableList.Builder<String> builder = ImmutableList.builder(); if (filter != null) { builder.addAll(filter); } builder.add("!**.class"); filter = builder.build(); } else if (!content.getContentTypes().contains(DefaultContentType.RESOURCES)) { // if the content is not meant to contain resources, we ignore them // in case they are present (by accepting only classes.) filter = ImmutableList.of("**.class"); } inputJar(classPath, content.getFile(), filter); }
protected QualifiedContentImpl(@NonNull QualifiedContent qualifiedContent) { this.name = qualifiedContent.getName(); this.file = qualifiedContent.getFile(); this.contentTypes = qualifiedContent.getContentTypes(); this.scopes = qualifiedContent.getScopes(); }
private void mergeToRootLocation( @NonNull List<QualifiedContent> qualifiedContentList, @NonNull final List<Pattern> excludes) throws IOException { JarMerger jarMerger = new JarMerger(mainClassLocation); jarMerger.setFilter(archivePath -> checkEntry(excludes, archivePath)); for (QualifiedContent content : qualifiedContentList) { if (content instanceof JarInput) { jarMerger.addJar(content.getFile()); } else { jarMerger.addFolder(content.getFile()); } } jarMerger.close(); }
/** * 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(); }