diff options
author | Yohann Roussel <yroussel@google.com> | 2014-09-11 17:39:16 +0200 |
---|---|---|
committer | Yohann Roussel <yroussel@google.com> | 2014-09-18 18:23:15 +0200 |
commit | 64c4e2ab0e38ba8aa6ba859f337986c1c64c504e (patch) | |
tree | 4f94e8a0f541d4e44f2285003c2efa9a816eff45 /jack | |
parent | c64d28e4a19326cb4648deac09b162f7d4f9fd21 (diff) | |
download | toolchain_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.java | 50 | ||||
-rw-r--r-- | jack/tests/com/android/jack/JarjarTest.java | 17 |
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;"); |