summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDelphine Martin <delphinemartin@google.com>2015-10-27 14:32:33 +0100
committerDelphine Martin <delphinemartin@google.com>2015-10-30 17:43:35 +0100
commit47b62f44609ed77002113521dc12adaa58a38933 (patch)
tree2c995da2b157def188951d77611551ced2634cfd
parent30ed1895ffc8299302b0bc22f5f060b34d068af6 (diff)
downloadtoolchain_jack-47b62f44609ed77002113521dc12adaa58a38933.zip
toolchain_jack-47b62f44609ed77002113521dc12adaa58a38933.tar.gz
toolchain_jack-47b62f44609ed77002113521dc12adaa58a38933.tar.bz2
Add a Schedulable to remove local variable names
This is necessary when using '-keepparameternames' and not '-keepattributes LocalVariableTable' since local variable names must be removed and not parameter names. Bug: 22600284 (cherry picked from commit 38e672441fb4abe86bb2562c708b59947b3f01a8) Change-Id: Ia36da349893cd38be87ddb15e89c3321ebf03af9
-rw-r--r--jack/src/com/android/jack/Jack.java13
-rw-r--r--jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableNameRemover.java51
-rw-r--r--jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java28
3 files changed, 89 insertions, 3 deletions
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index 3c93b96..a618c26 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -136,6 +136,7 @@ import com.android.jack.shrob.obfuscation.annotation.FieldAnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.FieldGenericSignatureRemover;
import com.android.jack.shrob.obfuscation.annotation.LineNumberRemover;
import com.android.jack.shrob.obfuscation.annotation.LocalVariableGenericSignatureRemover;
+import com.android.jack.shrob.obfuscation.annotation.LocalVariableNameRemover;
import com.android.jack.shrob.obfuscation.annotation.MethodAnnotationRemover;
import com.android.jack.shrob.obfuscation.annotation.MethodGenericSignatureRemover;
import com.android.jack.shrob.obfuscation.annotation.ParameterAnnotationRemover;
@@ -146,6 +147,7 @@ import com.android.jack.shrob.obfuscation.annotation.RemoveEnclosingType;
import com.android.jack.shrob.obfuscation.annotation.RemoveGenericSignature;
import com.android.jack.shrob.obfuscation.annotation.RemoveLineNumber;
import com.android.jack.shrob.obfuscation.annotation.RemoveLocalVariableGenericSignature;
+import com.android.jack.shrob.obfuscation.annotation.RemoveLocalVariableName;
import com.android.jack.shrob.obfuscation.annotation.RemoveParameterName;
import com.android.jack.shrob.obfuscation.annotation.RemoveThrownException;
import com.android.jack.shrob.obfuscation.annotation.ThrownExceptionRemover;
@@ -488,9 +490,11 @@ public abstract class Jack {
if (!options.flags.keepAttribute("LineNumberTable")) {
request.addFeature(RemoveLineNumber.class);
}
- if (!options.flags.getKeepParameterNames()
- && !options.flags.keepAttribute("LocalVariableTable")) {
- request.addFeature(RemoveParameterName.class);
+ if (!options.flags.keepAttribute("LocalVariableTable")) {
+ request.addFeature(RemoveLocalVariableName.class);
+ if (!options.flags.getKeepParameterNames()) {
+ request.addFeature(RemoveParameterName.class);
+ }
}
if (options.flags.getRenameSourceFileAttribute() != null) {
request.addFeature(SourceFileRenaming.class);
@@ -1253,6 +1257,9 @@ public abstract class Jack {
if (features.contains(RemoveParameterName.class)) {
methodPlan.append(ParameterNameRemover.class);
}
+ if (features.contains(RemoveLocalVariableName.class)) {
+ methodPlan.append(LocalVariableNameRemover.class);
+ }
}
}
}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableNameRemover.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableNameRemover.java
new file mode 100644
index 0000000..4e7f2b8
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/LocalVariableNameRemover.java
@@ -0,0 +1,51 @@
+/*
+ * 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.shrob.obfuscation.annotation;
+
+import com.android.jack.ir.ast.JLocal;
+import com.android.jack.ir.ast.JMethod;
+import com.android.jack.ir.ast.JVisitor;
+import com.android.sched.item.Description;
+import com.android.sched.schedulable.Constraint;
+import com.android.sched.schedulable.RunnableSchedulable;
+import com.android.sched.schedulable.Transform;
+
+import javax.annotation.Nonnull;
+
+/**
+ * A {@link RunnableSchedulable} that removes local variables names.
+ */
+@Description("Removes local variables names")
+@Constraint(need = JLocal.class)
+@Transform(modify = JLocal.class)
+public class LocalVariableNameRemover implements RunnableSchedulable<JMethod> {
+
+ private static class Visitor extends JVisitor {
+
+ @Override
+ public boolean visit(@Nonnull JLocal node) {
+ node.setName(null);
+ return false;
+ }
+ }
+
+ @Override
+ public void run(@Nonnull JMethod t) throws Exception {
+ Visitor visitor = new Visitor();
+ visitor.accept(t);
+ }
+}
diff --git a/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java
new file mode 100644
index 0000000..b70bab2
--- /dev/null
+++ b/jack/src/com/android/jack/shrob/obfuscation/annotation/RemoveLocalVariableName.java
@@ -0,0 +1,28 @@
+/*
+ * 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.shrob.obfuscation.annotation;
+
+import com.android.sched.item.Description;
+import com.android.sched.item.Feature;
+
+/**
+ * A {@link Feature} that represents the removal of local variables names.
+ */
+@Description("The removal of local variables names")
+public class RemoveLocalVariableName implements Feature {
+
+}