@Nullable private static QualifiedContent findUniqueOrProjectContent( @NonNull List<QualifiedContent> contentSourceList) { if (contentSourceList.size() == 1) { return contentSourceList.get(0); } for (QualifiedContent content : contentSourceList) { if (content.getScopes().contains(Scope.PROJECT)) { return content; } } return null; }
@NonNull private File getOutputLocation( @NonNull TransformOutputProvider output, @NonNull QualifiedContent qualifiedContent, @NonNull File file) { // In InstantRun mode, all files are guaranteed to have a unique name due to the slicer // transform. adding sha1 to the name can lead to cleaning issues in device, it's much // easier if the slices always have the same names, irrespective of the current variant, // last version wins. String name = instantRunBuildContext.isInInstantRunMode() && (qualifiedContent.getScopes().contains(Scope.PROJECT) || qualifiedContent.getScopes().contains(Scope.SUB_PROJECTS)) ? getInstantRunFileName(file) : getFilename(file); File contentLocation = output.getContentLocation(name, TransformManager.CONTENT_DEX, qualifiedContent.getScopes(), multiDex ? Format.DIRECTORY : Format.JAR); if (multiDex) { FileUtils.mkdirs(contentLocation); } else { FileUtils.mkdirs(contentLocation.getParentFile()); } return contentLocation; }
protected QualifiedContentImpl(@NonNull QualifiedContent qualifiedContent) { this.name = qualifiedContent.getName(); this.file = qualifiedContent.getFile(); this.contentTypes = qualifiedContent.getContentTypes(); this.scopes = qualifiedContent.getScopes(); }
for (QualifiedContent qualifiedContent : Iterables.concat( input.getJarInputs(), input.getDirectoryInputs())) { if (qualifiedContent.getScopes().contains(Scope.PROJECT)) {
/** * 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(); }
input.getScopes(), format); if (!f.getParentFile().exists()) f.getParentFile().mkdirs(); return f.toPath();