summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Marie Henaff <jmhenaff@google.com>2015-05-11 17:54:05 +0200
committerJean-Marie Henaff <jmhenaff@google.com>2015-05-12 11:14:06 +0200
commita18689e31b6c26e62a457f9976de4d72a6ba197c (patch)
tree97787e2872913c2abea656d12c33a3b6d4b8f03f
parentdc6de5d3bbbc226aba567add67781fc10befb333 (diff)
downloadtoolchain_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
-rw-r--r--jack-api/src/com/android/jack/api/v01/Api01Config.java10
-rw-r--r--jack-tests/src/com/android/jack/test/helper/RuntimeTestHelper.java6
-rw-r--r--jack-tests/src/com/android/jack/test/helper/SourceToDexComparisonTestHelper.java5
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/IToolchain.java2
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/JackApiV01Toolchain.java6
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/JackCliToolchain.java8
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/LegacyJillToolchain.java7
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/LegacyToolchain.java7
-rw-r--r--jack-tests/src/com/android/jack/test/toolchain/Toolchain.java6
-rw-r--r--jack-tests/tests/com/android/jack/jarjar/JarjarTests.java3
-rw-r--r--jack-tests/tests/com/android/jack/noclasspath/NoClasspathTest.java7
-rw-r--r--jack-tests/tests/com/android/jack/toolchain/ToolchainTest.java3
-rw-r--r--jack/src/com/android/jack/Options.java15
-rw-r--r--jack/src/com/android/jack/api/v01/impl/Api01ConfigImpl.java4
-rw-r--r--jack/src/com/android/jack/transformations/renamepackage/PackageRenamer.java24
-rw-r--r--jack/src/com/android/jack/transformations/renamepackage/PackageRenamingParsingException.java53
-rw-r--r--jack/tests/com/android/jack/TestTools.java11
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;
}