diff options
author | Jean-Marie Henaff <jmhenaff@google.com> | 2015-05-11 17:54:05 +0200 |
---|---|---|
committer | Jean-Marie Henaff <jmhenaff@google.com> | 2015-05-12 11:14:06 +0200 |
commit | a18689e31b6c26e62a457f9976de4d72a6ba197c (patch) | |
tree | 97787e2872913c2abea656d12c33a3b6d4b8f03f | |
parent | dc6de5d3bbbc226aba567add67781fc10befb333 (diff) | |
download | toolchain_jack-a18689e31b6c26e62a457f9976de4d72a6ba197c.zip toolchain_jack-a18689e31b6c26e62a457f9976de4d72a6ba197c.tar.gz toolchain_jack-a18689e31b6c26e62a457f9976de4d72a6ba197c.tar.bz2 |
Modify Api01Config and Jack to support multiple Jarjar config files
Bug: 20913411
(cherry picked from commit 517dec6fa299a3755f38681b3fcea387c84873f0)
Change-Id: If9c1e8f827e8ed3fd68c4999a8700608a95ce7c9
17 files changed, 129 insertions, 48 deletions
diff --git a/jack-api/src/com/android/jack/api/v01/Api01Config.java b/jack-api/src/com/android/jack/api/v01/Api01Config.java index 0fc545d..81e552a 100644 --- a/jack-api/src/com/android/jack/api/v01/Api01Config.java +++ b/jack-api/src/com/android/jack/api/v01/Api01Config.java @@ -127,15 +127,15 @@ public interface Api01Config extends JackConfig { void setOutputJackFile(@Nonnull File outputJackFile) throws ConfigurationException; /** - * Sets the JarJar configuration file to use for repackaging. - * @param jarjarConfigFile The JarJar configuration file + * Sets JarJar configuration files to use for repackaging. + * @param jarjarConfigFiles The JarJar configuration files * @throws ConfigurationException */ - void setJarJarConfigFile(@Nonnull File jarjarConfigFile) throws ConfigurationException; + void setJarJarConfigFiles(@Nonnull List<File> jarjarConfigFiles) throws ConfigurationException; /** - * Sets a ProGuard configuration file. - * @param proguardConfigFiles The ProGuard configuration file + * Sets ProGuard configuration files. + * @param proguardConfigFiles The ProGuard configuration files * @throws ConfigurationException */ void setProguardConfigFiles(@Nonnull List<File> proguardConfigFiles) diff --git a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java index 8cdc1db..38e74c4 100644 --- a/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java +++ b/jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java @@ -194,7 +194,7 @@ public class RuntimeTestHelper { new File(testBinaryDir, helper.getCandidateDex().getName())); } else { if (jarjarRules != null) { - candidateTestTools.setJarjarRules(jarjarRules); + candidateTestTools.setJarjarRules(Collections.singletonList(jarjarRules)); } candidateTestTools.addProguardFlags(proguargFlags.toArray(new File [proguargFlags.size()])); candidateTestTools.addToClasspath(candidateClassPath) @@ -220,7 +220,9 @@ public class RuntimeTestHelper { if (getLinkSrc().length != 0) { File linkBinaryDir = AbstractTestTools.createTempDir(); linkBinary = new File(linkBinaryDir, candidateTestTools.getBinaryFileName()); - candidateTestTools.setJarjarRules(jarjarRules); + if (jarjarRules != null) { + candidateTestTools.setJarjarRules(Collections.singletonList(jarjarRules)); + } candidateTestTools.addProguardFlags(proguargFlags.toArray(new File [proguargFlags.size()])); candidateTestTools.addToClasspath(candidateBootClasspath) .srcToExe(linkBinaryDir, /* zipFile = */ false, getLinkSrc()); diff --git a/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java b/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java index 15dc16a..e8d7f7e 100644 --- a/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java +++ b/jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java @@ -22,6 +22,7 @@ import com.android.jack.test.toolchain.AndroidToolchain; import com.android.jack.test.toolchain.Toolchain.SourceLevel; import java.io.File; +import java.util.Collections; import javax.annotation.CheckForNull; import javax.annotation.Nonnull; @@ -170,7 +171,7 @@ public class SourceToDexComparisonTestHelper extends GenericComparisonTestHelper @Nonnull protected void executeCandidateToolchain() throws Exception { if (jarjarRulesFile != null) { - candidateTestTools.setJarjarRules(jarjarRulesFile); + candidateTestTools.setJarjarRules(Collections.singletonList(jarjarRulesFile)); } candidateTestTools.setWithDebugInfos(withDebugInfos); candidateTestTools.setSourceLevel(sourceLevel); @@ -184,7 +185,7 @@ public class SourceToDexComparisonTestHelper extends GenericComparisonTestHelper @Nonnull protected void executeReferenceToolchain() throws Exception { if (jarjarRulesFile != null) { - referenceTestTools.setJarjarRules(jarjarRulesFile); + referenceTestTools.setJarjarRules(Collections.singletonList(jarjarRulesFile)); } referenceTestTools.setWithDebugInfos(withDebugInfos); referenceTestTools.setSourceLevel(sourceLevel); diff --git a/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java index fb97ef6..5ad998e 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/IToolchain.java @@ -78,7 +78,7 @@ public interface IToolchain { IToolchain addProguardFlags(@Nonnull File... proguardFlags); @Nonnull - IToolchain setJarjarRules(@Nonnull File jarjarRules); + IToolchain setJarjarRules(@Nonnull List<File> jarjarRules); @Nonnull IToolchain setOutputStream(@Nonnull OutputStream outputStream); diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java index 133ff81..5593472 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java @@ -185,8 +185,8 @@ public class JackApiV01Toolchain extends JackApiToolchainBase { apiV01Config.setSourceEntries(Lists.newArrayList(sources)); apiV01Config.setResourceDirs(resImport); apiV01Config.setProguardConfigFiles(proguardFlags); - if (jarjarRules != null) { - apiV01Config.setJarJarConfigFile(jarjarRules); + if (!jarjarRules.isEmpty()) { + apiV01Config.setJarJarConfigFiles(jarjarRules); } apiV01Config.setProcessorOptions(annotationProcessorOptions); @@ -212,7 +212,7 @@ public class JackApiV01Toolchain extends JackApiToolchainBase { apiV01Config.setResourceDirs(resImport); apiV01Config.setProguardConfigFiles(proguardFlags); if (jarjarRules != null) { - apiV01Config.setJarJarConfigFile(jarjarRules); + apiV01Config.setJarJarConfigFiles(jarjarRules); } } diff --git a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java index b8d565b..fdcfedc 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java @@ -165,9 +165,9 @@ public class JackCliToolchain extends JackBasedToolchain { args.addAll(extraJackArgs); - if (jarjarRules != null) { + for (File jarjarFile : jarjarRules) { args.add("--config-jarjar"); - args.add(jarjarRules.getAbsolutePath()); + args.add(jarjarFile.getAbsolutePath()); } for (File flags : proguardFlags) { @@ -273,9 +273,9 @@ public class JackCliToolchain extends JackBasedToolchain { args.add(classpath); } - if (jarjarRules != null) { + for (File jarjarFile : jarjarRules) { args.add("--config-jarjar"); - args.add(jarjarRules.getAbsolutePath()); + args.add(jarjarFile.getAbsolutePath()); } for (File flags : proguardFlags) { diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java index 6684769..8592ee6 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java @@ -129,8 +129,11 @@ public class LegacyJillToolchain extends JillBasedToolchain { AbstractTestTools.createjar(jarFile, classesDir); - if (jarjarRules != null) { - processWithJarJar(jarjarRules, jarFile, jarFileJarjar); + if (jarjarRules.size() > 0) { + if (jarjarRules.size() > 1) { + throw new AssertionError("Not yet supported"); + } + processWithJarJar(jarjarRules.get(0), jarFile, jarFileJarjar); } else { jarFileJarjar = jarFile; } diff --git a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java index 512dae6..5bcf226 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java @@ -65,8 +65,11 @@ public class LegacyToolchain extends AndroidToolchain { srcToLib(jarFile, true /* zipFiles = */, sources); - if (jarjarRules != null) { - processWithJarJar(jarjarRules, jarFile, jarFileJarjar); + if (jarjarRules.size() > 0) { + if (jarjarRules.size() > 1) { + throw new AssertionError("Not yet supported"); + } + processWithJarJar(jarjarRules.get(0), jarFile, jarFileJarjar); } else { jarFileJarjar = jarFile; } diff --git a/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java index 131b055..9fd3cfd 100644 --- a/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java +++ b/jack-tests/src/com/android/jack/test/toolchain/Toolchain.java @@ -55,8 +55,8 @@ public abstract class Toolchain implements IToolchain { protected List<File> staticLibs = Collections.emptyList(); @Nonnull protected List<File> proguardFlags = Collections.emptyList(); - @CheckForNull - protected File jarjarRules; + @Nonnull + protected List<File> jarjarRules = Collections.emptyList(); @Nonnull protected PrintStream stdOut = System.out; @@ -149,7 +149,7 @@ public abstract class Toolchain implements IToolchain { @Override @Nonnull - public final Toolchain setJarjarRules(@Nonnull File jarjarRules) { + public final Toolchain setJarjarRules(@Nonnull List<File> jarjarRules) { this.jarjarRules = jarjarRules; return this; } diff --git a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java index a5cc216..ed58f65 100644 --- a/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java +++ b/jack-tests/tests/com/android/jack/jarjar/JarjarTests.java @@ -67,7 +67,8 @@ public class JarjarTests { @Test public void jarjar003_1() throws Exception { IToolchain toolchain = AbstractTestTools.getCandidateToolchain(); - toolchain.setJarjarRules(new File(JARJAR003.directory, "jarjar-rules.txt")); + toolchain.setJarjarRules( + Collections.singletonList(new File(JARJAR003.directory, "jarjar-rules.txt"))); File lib = AbstractTestTools.createTempFile("jarjarTest003Jack", toolchain.getLibraryExtension()); toolchain.addToClasspath(toolchain.getDefaultBootClasspath()) .srcToLib( diff --git a/jack-tests/tests/com/android/jack/noclasspath/NoClasspathTest.java b/jack-tests/tests/com/android/jack/noclasspath/NoClasspathTest.java index 4fa7fe3..1e3c639 100644 --- a/jack-tests/tests/com/android/jack/noclasspath/NoClasspathTest.java +++ b/jack-tests/tests/com/android/jack/noclasspath/NoClasspathTest.java @@ -32,6 +32,7 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import java.io.File; +import java.util.Collections; @Ignore("Tree") @Category(SlowTests.class) @@ -124,7 +125,7 @@ public class NoClasspathTest { File conscyptRules = new JarJarRules(TestTools.getFromAndroidTree("external/conscrypt/jarjar-rules.txt")); toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class); - toolchain.setJarjarRules(conscyptRules); + toolchain.setJarjarRules(Collections.singletonList(conscyptRules)); toolchain.libToLib(conscryptJack, conscryptRenamedJack, /* zipFiles = */ true); File okhttpJack = AbstractTestTools.createTempFile("okkttp", ".jack"); @@ -137,7 +138,7 @@ public class NoClasspathTest { File okhttpRules = new JarJarRules(TestTools.getFromAndroidTree("external/okhttp/jarjar-rules.txt")); toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class); - toolchain.setJarjarRules(okhttpRules); + toolchain.setJarjarRules(Collections.singletonList(okhttpRules)); toolchain.libToLib(okhttpJack, okhttpRenamedJack, /* zipFiles = */ true); File extJack = AbstractTestTools.createTempFile("ext", ".jack"); @@ -159,7 +160,7 @@ public class NoClasspathTest { File jarjarRules = new JarJarRules(TestTools.getFromAndroidTree("external/bouncycastle/jarjar-rules.txt")); toolchain = AbstractTestTools.getCandidateToolchain(JackBasedToolchain.class); - toolchain.setJarjarRules(jarjarRules); + toolchain.setJarjarRules(Collections.singletonList(jarjarRules)); toolchain.libToLib(bouncyCastleJack, bouncyCastleRenamedJack, /* zipFiles = */ true); File[] classpath = new File[] {coreOut, diff --git a/jack-tests/tests/com/android/jack/toolchain/ToolchainTest.java b/jack-tests/tests/com/android/jack/toolchain/ToolchainTest.java index c4ce4df..5fd70fb 100644 --- a/jack-tests/tests/com/android/jack/toolchain/ToolchainTest.java +++ b/jack-tests/tests/com/android/jack/toolchain/ToolchainTest.java @@ -29,6 +29,7 @@ import org.junit.Test; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -154,7 +155,7 @@ public class ToolchainTest { File jarjarTestRenamedOut = AbstractTestTools.createTempFile("jarjartestrenamed", ".jack"); File jarjarRules = new File(testFolder, "jarjar-rules.txt"); toolchain = AbstractTestTools.getCandidateToolchain(AndroidToolchain.class); - toolchain.setJarjarRules(jarjarRules); + toolchain.setJarjarRules(Collections.singletonList(jarjarRules)); toolchain.libToLib(jarjarTestJackOut, jarjarTestRenamedOut, /* zipFiles = */ true); File jarjarTestDexOutFolder = AbstractTestTools.createTempDir(); diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java index de6a7a1..dd4e4d6 100644 --- a/jack/src/com/android/jack/Options.java +++ b/jack/src/com/android/jack/Options.java @@ -321,9 +321,9 @@ public class Options { @Option(name = "--output-jack", usage = "output jack library file", metaVar = "<FILE>") private File libraryOutZip = null; - @Option(name = "--config-jarjar", usage = "use a jarjar rules file (default: none)", + @Option(name = "--config-jarjar", usage = "use jarjar rules files (default: none)", metaVar = "<FILE>") - private File jarjarRulesFile = null; + private List<File> jarjarRulesFiles = new ArrayList<File>(0); @Option(name = "--import", usage = "import the given file into the output (repeatable)", metaVar = "<FILE>") @@ -644,9 +644,10 @@ public class Options { new OutputStreamFile(new PrintStream(reporterStream), new NoLocation())); } - if (jarjarRulesFile != null) { + if (!jarjarRulesFiles.isEmpty()) { configBuilder.set(PackageRenamer.JARJAR_ENABLED, true); - configBuilder.setString(PackageRenamer.JARJAR_FILE, jarjarRulesFile.getPath()); + String sep = PackageRenamer.JARJAR_FILES.getCodec().getSeparator(); + configBuilder.setString(PackageRenamer.JARJAR_FILES, Joiner.on(sep).join(jarjarRulesFiles)); } if (processor != null) { @@ -844,7 +845,7 @@ public class Options { } else if (flags != null) { LoggerFactory.getLogger().log(Level.WARNING, "Incremental mode is disabled due to usage of shrinking or obfuscation"); - } else if (jarjarRulesFile != null) { + } else if (!jarjarRulesFiles.isEmpty()) { LoggerFactory.getLogger().log(Level.WARNING, "Incremental mode is disabled due to usage of jarjar"); } else { @@ -998,8 +999,8 @@ public class Options { this.proguardFlagsFiles = proguardFlagsFiles; } - public void setJarjarRulesFile(@Nonnull File jarjarRulesFile) { - this.jarjarRulesFile = jarjarRulesFile; + public void setJarjarRulesFiles(@Nonnull List<File> jarjarRulesFiles) { + this.jarjarRulesFiles = jarjarRulesFiles; } public void disableDxOptimizations() { diff --git a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java index 2ec3070..2238fb2 100644 --- a/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java +++ b/jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java @@ -168,8 +168,8 @@ public class Api01ConfigImpl implements Api01Config { } @Override - public void setJarJarConfigFile(@Nonnull File jarJarConfigFile) { - options.setJarjarRulesFile(jarJarConfigFile); + public void setJarJarConfigFiles(@Nonnull List<File> jarJarConfigFiles) { + options.setJarjarRulesFiles(jarJarConfigFiles); } @Override diff --git a/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java index 88b6e82..657872e 100644 --- a/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java +++ b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java @@ -16,6 +16,7 @@ package com.android.jack.transformations.renamepackage; +import com.android.jack.JackAbortException; import com.android.jack.ir.ast.JAbstractStringLiteral; import com.android.jack.ir.ast.JAnnotation; import com.android.jack.ir.ast.JDefinedClassOrInterface; @@ -29,6 +30,7 @@ import com.android.jack.ir.ast.Resource; import com.android.jack.ir.formatter.BinaryQualifiedNameFormatter; import com.android.jack.ir.formatter.TypeFormatter; import com.android.jack.lookup.JLookup; +import com.android.jack.reporting.Reporter.Severity; import com.android.jack.transformations.Jarjar; import com.android.jack.transformations.request.Replace; import com.android.jack.transformations.request.TransformationRequest; @@ -42,14 +44,16 @@ import com.android.sched.util.codec.InputStreamCodec; import com.android.sched.util.config.HasKeyId; import com.android.sched.util.config.ThreadConfig; import com.android.sched.util.config.id.BooleanPropertyId; -import com.android.sched.util.config.id.PropertyId; +import com.android.sched.util.config.id.ListPropertyId; import com.android.sched.util.file.InputStreamFile; +import com.android.sched.util.location.FileLocation; import com.android.sched.vfs.VPath; import com.tonicsystems.jarjar.PackageRemapper; import com.tonicsystems.jarjar.PatternElement; import com.tonicsystems.jarjar.RulesFileParser; import com.tonicsystems.jarjar.Wildcard; +import java.util.ArrayList; import java.util.List; import java.util.Stack; @@ -71,12 +75,12 @@ public class PackageRenamer implements RunnableSchedulable<JSession>{ .addDefaultValue(false); @Nonnull - public static final PropertyId<InputStreamFile> JARJAR_FILE = PropertyId.create( - "jack.repackaging.file", "Jarjar rules file", new InputStreamCodec()) + public static final ListPropertyId<InputStreamFile> JARJAR_FILES = new ListPropertyId< + InputStreamFile>("jack.repackaging.files", "Jarjar rules files", new InputStreamCodec()) .requiredIf(JARJAR_ENABLED.getValue().isTrue()); @Nonnull - private final InputStreamFile jarjarRulesFile = ThreadConfig.get(JARJAR_FILE); + private final List<InputStreamFile> jarjarRulesFiles = ThreadConfig.get(JARJAR_FILES); private static class Visitor extends JVisitor { @@ -148,7 +152,17 @@ public class PackageRenamer implements RunnableSchedulable<JSession>{ @Override public void run(@Nonnull JSession session) throws Exception { - List<PatternElement> result = RulesFileParser.parse(jarjarRulesFile); + List<PatternElement> result = new ArrayList<PatternElement>(); + for (InputStreamFile jarjarFile : jarjarRulesFiles) { + try { + result.addAll(RulesFileParser.parse(jarjarFile)); + } catch (IllegalArgumentException e) { + PackageRenamingParsingException ex = + new PackageRenamingParsingException((FileLocation) jarjarFile.getLocation(), e); + session.getReporter().report(Severity.FATAL, ex); + throw new JackAbortException(ex); + } + } List<Wildcard> wildcards = PatternElement.createWildcards(result); PackageRemapper remapper = new PackageRemapper(wildcards); diff --git a/jack/src/com/android/jack/transformations/renamepackage/PackageRenamingParsingException.java b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamingParsingException.java new file mode 100644 index 0000000..51f8dd8 --- /dev/null +++ b/jack/src/com/android/jack/transformations/renamepackage/PackageRenamingParsingException.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.jack.transformations.renamepackage; + +import com.android.jack.reporting.ReportableException; +import com.android.sched.util.location.FileLocation; + +import javax.annotation.Nonnull; + +/** + * A {@link ReportableException} that occurs during the package renaming phase. + */ +public class PackageRenamingParsingException extends ReportableException { + + private static final long serialVersionUID = 1L; + + @Nonnull + private final FileLocation ruleFileLocation; + + public PackageRenamingParsingException(@Nonnull FileLocation ruleFileLocation, + @Nonnull Throwable cause) { + super(cause); + this.ruleFileLocation = ruleFileLocation; + } + + @Override + @Nonnull + public String getMessage() { + return "Package renaming with " + ruleFileLocation.getDescription() + ": " + + getCause().getMessage(); + } + + @Override + @Nonnull + public ProblemLevel getDefaultProblemLevel() { + return ProblemLevel.ERROR; + } + +} diff --git a/jack/tests/com/android/jack/TestTools.java b/jack/tests/com/android/jack/TestTools.java index 223e4da..05fcf28 100644 --- a/jack/tests/com/android/jack/TestTools.java +++ b/jack/tests/com/android/jack/TestTools.java @@ -57,6 +57,8 @@ import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.Collections; import java.util.List; import javax.annotation.CheckForNull; @@ -254,16 +256,15 @@ public class TestTools { @Nonnull public static Options buildCommandLineArgs(@Nonnull File fileOrSourcelist) throws IOException { - return buildCommandLineArgs(fileOrSourcelist, null); + return buildCommandLineArgs(fileOrSourcelist, Collections.<File>emptyList()); } @Nonnull public static Options buildCommandLineArgs(@Nonnull File fileOrSourcelist, - @CheckForNull File jarjarRules) throws IOException { + @Nonnull List<File> jarjarRules) throws IOException { Options options = buildCommandLineArgs(null /* classpath */, new File[] {fileOrSourcelist}); - if (jarjarRules != null) { - options.setJarjarRulesFile(jarjarRules); - } + options.setJarjarRulesFiles(jarjarRules); + return options; } |