feat: replace constants in annotations of method arguments (PR #2358)

This commit is contained in:
nitram84
2024-12-04 18:06:13 +01:00
committed by GitHub
parent cc0cb6a3d3
commit 828cad3287
2 changed files with 50 additions and 1 deletions
@@ -14,6 +14,7 @@ import jadx.api.plugins.input.data.annotations.EncodedType;
import jadx.api.plugins.input.data.annotations.EncodedValue;
import jadx.api.plugins.input.data.annotations.IAnnotation;
import jadx.api.plugins.input.data.attributes.JadxAttrType;
import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr;
import jadx.api.plugins.input.data.attributes.types.AnnotationsAttr;
import jadx.core.dex.attributes.AFlag;
import jadx.core.dex.attributes.AType;
@@ -279,12 +280,27 @@ public class ModVisitor extends AbstractVisitor {
if (cls.root().getArgs().isReplaceConsts()) {
replaceConstsInAnnotationForAttrNode(cls, cls);
cls.getFields().forEach(f -> replaceConstsInAnnotationForAttrNode(cls, f));
cls.getMethods().forEach(m -> replaceConstsInAnnotationForAttrNode(cls, m));
cls.getMethods().forEach((m) -> {
replaceConstsInAnnotationForAttrNode(cls, m);
replaceConstsInAnnotationForMethodParamsAttr(cls, m);
});
}
}
private void replaceConstsInAnnotationForMethodParamsAttr(ClassNode cls, MethodNode m) {
AnnotationMethodParamsAttr paramsAnnotation = m.get(JadxAttrType.ANNOTATION_MTH_PARAMETERS);
if (paramsAnnotation == null) {
return;
}
paramsAnnotation.getParamList().forEach(annotationsList -> replaceConstsInAnnotationsAttr(cls, annotationsList));
}
private void replaceConstsInAnnotationForAttrNode(ClassNode parentCls, AttrNode attrNode) {
AnnotationsAttr annotationsList = attrNode.get(JadxAttrType.ANNOTATION_LIST);
replaceConstsInAnnotationsAttr(parentCls, annotationsList);
}
private void replaceConstsInAnnotationsAttr(ClassNode parentCls, AnnotationsAttr annotationsList) {
if (annotationsList == null) {
return;
}