blob: c4509c4739c223021d32f7d3f6e50eb94b0fe55f [file] [log] [blame]
// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.internal;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.utils.FileUtils;
import com.google.common.collect.ImmutableList;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.junit.rules.TemporaryFolder;
class LibrarySanitizer {
private final Path sanitizedLibrary;
private final Path sanitizedPgConf;
private final List<Path> libraryFiles = new ArrayList<>();
private final List<Path> programFiles = new ArrayList<>();
private final List<Path> proguardConfigurationFiles = new ArrayList<>();
LibrarySanitizer(TemporaryFolder temp) {
this.sanitizedLibrary = temp.getRoot().toPath().resolve("sanitized_lib.jar");
this.sanitizedPgConf = temp.getRoot().toPath().resolve("sanitized.config");
}
LibrarySanitizer assertSanitizedProguardConfigurationIsEmpty() throws IOException {
if (sanitizedPgConf.toFile().exists()) {
List<String> lines = FileUtils.readAllLines(sanitizedPgConf);
for (String line : lines) {
assertTrue(line.trim().isEmpty());
}
}
return this;
}
LibrarySanitizer addLibraryFiles(List<Path> libraryFiles) {
this.libraryFiles.addAll(libraryFiles);
return this;
}
LibrarySanitizer addProgramFiles(List<Path> programFiles) {
this.programFiles.addAll(programFiles);
return this;
}
LibrarySanitizer addProguardConfigurationFiles(List<Path> proguardConfigurationFiles) {
this.proguardConfigurationFiles.addAll(proguardConfigurationFiles);
return this;
}
Path getSanitizedLibrary() {
return sanitizedLibrary;
}
Path getSanitizedProguardConfiguration() {
return sanitizedPgConf;
}
LibrarySanitizer sanitize() throws IOException {
ImmutableList.Builder<String> command =
new ImmutableList.Builder<String>()
.add("tools/sanitize_libraries.py")
.add(sanitizedLibrary.toString())
.add(sanitizedPgConf.toString());
for (Path programFile : programFiles) {
command.add("--injar").add(programFile.toString());
}
for (Path libraryFile : libraryFiles) {
command.add("--libraryjar").add(libraryFile.toString());
}
for (Path proguardConfigurationFile : proguardConfigurationFiles) {
command.add("--pgconf").add(proguardConfigurationFile.toString());
}
ProcessResult result = ToolHelper.runProcess(new ProcessBuilder(command.build()));
assertEquals(result.command, 0, result.exitCode);
return this;
}
}