summaryrefslogtreecommitdiffstats
path: root/jack
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2014-09-11 17:39:16 +0200
committerYohann Roussel <yroussel@google.com>2014-09-18 18:23:15 +0200
commit64c4e2ab0e38ba8aa6ba859f337986c1c64c504e (patch)
tree4f94e8a0f541d4e44f2285003c2efa9a816eff45 /jack
parentc64d28e4a19326cb4648deac09b162f7d4f9fd21 (diff)
downloadtoolchain_jack-64c4e2ab0e38ba8aa6ba859f337986c1c64c504e.zip
toolchain_jack-64c4e2ab0e38ba8aa6ba859f337986c1c64c504e.tar.gz
toolchain_jack-64c4e2ab0e38ba8aa6ba859f337986c1c64c504e.tar.bz2
PackageRenamer should also rename Generic signature
And other strings. So this just ensure that String refining is done before package renaming. Change-Id: Id6a22fc6175697016ddf2494e87d9b949e9aaf7e
Diffstat (limited to 'jack')
-rw-r--r--jack/src/com/android/jack/Jack.java50
-rw-r--r--jack/tests/com/android/jack/JarjarTest.java17
2 files changed, 49 insertions, 18 deletions
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index aaa5b01..3fcf361 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -744,6 +744,8 @@ public abstract class Jack {
planBuilder.append(TypeDuplicateRemoverChecker.class);
}
+ appendStringRefiners(planBuilder);
+
// JarJar
if (features.contains(Jarjar.class)) {
planBuilder.append(PackageRenamer.class);
@@ -784,24 +786,6 @@ public abstract class Jack {
{
SubPlanBuilder<JDefinedClassOrInterface> typePlan =
planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
- if (isShrinking || features.contains(Obfuscation.class)) {
- typePlan.append(TypeGenericSignatureSplitter.class);
- typePlan.append(TypeStringLiteralRefiner.class);
- typePlan.append(SimpleNameRefiner.class);
- {
- SubPlanBuilder<JMethod> methodPlan =
- typePlan.appendSubPlan(JMethodAdapter.class);
- methodPlan.append(MethodGenericSignatureSplitter.class);
- methodPlan.append(ReflectionStringLiteralRefiner.class);
- methodPlan.append(MethodStringLiteralRefiner.class);
- }
- {
- SubPlanBuilder<JField> fieldPlan =
- typePlan.appendSubPlan(JFieldAdapter.class);
- fieldPlan.append(FieldGenericSignatureSplitter.class);
- fieldPlan.append(FieldStringLiteralRefiner.class);
- }
- }
if (isShrinking || features.contains(Obfuscation.class)
|| productions.contains(SeedFile.class)) {
typePlan.append(SeedFinder.class);
@@ -858,6 +842,31 @@ public abstract class Jack {
}
}
+ private static void appendStringRefiners(@Nonnull PlanBuilder<JSession> planBuilder) {
+ FeatureSet features = planBuilder.getRequest().getFeatures();
+ boolean isShrinking = features.contains(Shrinking.class);
+ if (isShrinking || features.contains(Obfuscation.class) || features.contains(Jarjar.class)) {
+ SubPlanBuilder<JDefinedClassOrInterface> typePlan =
+ planBuilder.appendSubPlan(JDefinedClassOrInterfaceAdapter.class);
+ typePlan.append(TypeGenericSignatureSplitter.class);
+ typePlan.append(TypeStringLiteralRefiner.class);
+ typePlan.append(SimpleNameRefiner.class);
+ {
+ SubPlanBuilder<JMethod> methodPlan =
+ typePlan.appendSubPlan(JMethodAdapter.class);
+ methodPlan.append(MethodGenericSignatureSplitter.class);
+ methodPlan.append(ReflectionStringLiteralRefiner.class);
+ methodPlan.append(MethodStringLiteralRefiner.class);
+ }
+ {
+ SubPlanBuilder<JField> fieldPlan =
+ typePlan.appendSubPlan(JFieldAdapter.class);
+ fieldPlan.append(FieldGenericSignatureSplitter.class);
+ fieldPlan.append(FieldStringLiteralRefiner.class);
+ }
+ }
+ }
+
static void fillDexPlan(@Nonnull Options options, @Nonnull PlanBuilder<JSession> planBuilder) {
FeatureSet features = planBuilder.getRequest().getFeatures();
ProductionSet productions = planBuilder.getRequest().getTargetProductions();
@@ -868,6 +877,8 @@ public abstract class Jack {
planBuilder.append(TypeDuplicateRemoverChecker.class);
}
+ appendStringRefiners(planBuilder);
+
if (features.contains(Jarjar.class)) {
planBuilder.append(PackageRenamer.class);
}
@@ -1147,6 +1158,7 @@ public abstract class Jack {
if (hasSanityChecks) {
planBuilder.append(TypeDuplicateRemoverChecker.class);
}
+ appendStringRefiners(planBuilder);
if (features.contains(Jarjar.class)) {
planBuilder.append(PackageRenamer.class);
@@ -1375,6 +1387,8 @@ public abstract class Jack {
planBuilder.append(TypeDuplicateRemoverChecker.class);
}
+ appendStringRefiners(planBuilder);
+
if (features.contains(Jarjar.class)) {
planBuilder.append(PackageRenamer.class);
}
diff --git a/jack/tests/com/android/jack/JarjarTest.java b/jack/tests/com/android/jack/JarjarTest.java
index 6f723d5..df45ada 100644
--- a/jack/tests/com/android/jack/JarjarTest.java
+++ b/jack/tests/com/android/jack/JarjarTest.java
@@ -70,6 +70,23 @@ public class JarjarTest {
}
@Test
+ public void test003_1() throws Exception {
+ String testName = "jarjar/test003";
+ Options options = new Options();
+ options.jarjarRulesFile = new File(TestTools.getJackTestFolder(testName), "jarjar-rules.txt");
+ File lib = TestTools.createTempFile("jarjarTest003Jack", ".zip");
+ TestTools.compileSourceToJack(options, TestTools.getJackTestsWithJackFolder(testName),
+ TestTools.getDefaultBootclasspathString(), lib, true);
+ TestTools.compileSourceToJack(new Options(),
+ new File(TestTools.getJackTestFolder(testName),
+ "dontcompile/TestWithRelocatedReference.java"),
+ TestTools.getDefaultBootclasspathString() + File.pathSeparator + lib.getAbsolutePath(),
+ TestTools.createTempFile("jarjarTest003dx", ".zip"),
+ true);
+
+ }
+
+ @Test
public void testMapValue() {
assertUnchangedValue("[^\\s;/@&=,.?:+$]");
assertUnchangedValue("[Ljava/lang/Object;");