diff options
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 { + +} |