diff --git a/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java b/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java index 5053311d4e619139ed17ae6decbe8c5a5dd50b4a..4b4a7e1c492a06e403086216f51c1e37305d2e3c 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/AnnotationGen.java @@ -13,8 +13,8 @@ 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.AnnotationDefaultAttr; +import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr; import jadx.api.plugins.input.data.attributes.types.AnnotationsAttr; -import jadx.api.plugins.input.data.attributes.types.MethodParamsAttr; import jadx.core.Consts; import jadx.core.dex.attributes.IAttributeNode; import jadx.core.dex.info.FieldInfo; @@ -48,7 +48,7 @@ public class AnnotationGen { add(field, code); } - public void addForParameter(ICodeWriter code, MethodParamsAttr paramsAnnotations, int n) { + public void addForParameter(ICodeWriter code, AnnotationMethodParamsAttr paramsAnnotations, int n) { List paramList = paramsAnnotations.getParamList(); if (n >= paramList.size()) { return; diff --git a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java index dea68a044e60ca83bfe753dbb5908ccb44212401..178da01db0b6082a22eef97827279427fc5adf53 100644 --- a/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java +++ b/jadx-core/src/main/java/jadx/core/codegen/MethodGen.java @@ -16,7 +16,7 @@ import jadx.api.data.annotations.VarDeclareRef; import jadx.api.plugins.input.data.AccessFlags; import jadx.api.plugins.input.data.annotations.EncodedValue; import jadx.api.plugins.input.data.attributes.JadxAttrType; -import jadx.api.plugins.input.data.attributes.types.MethodParamsAttr; +import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr; import jadx.core.Consts; import jadx.core.Jadx; import jadx.core.dex.attributes.AFlag; @@ -195,7 +195,7 @@ public class MethodGen { } private void addMethodArguments(ICodeWriter code, List args) { - MethodParamsAttr paramsAnnotation = mth.get(JadxAttrType.ANNOTATION_MTH_PARAMETERS); + AnnotationMethodParamsAttr paramsAnnotation = mth.get(JadxAttrType.ANNOTATION_MTH_PARAMETERS); int i = 0; Iterator it = args.iterator(); while (it.hasNext()) { diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoApplyVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoApplyVisitor.java index 2ed8f1703ab1e4ba2fe0af8dd3ef24681c532f89..5301c8ef5b7ef567df4c59c16398f83f7f49470a 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoApplyVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/debuginfo/DebugInfoApplyVisitor.java @@ -9,7 +9,10 @@ import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import jadx.api.plugins.input.data.AccessFlags; import jadx.api.plugins.input.data.ILocalVar; +import jadx.api.plugins.input.data.attributes.JadxAttrType; +import jadx.api.plugins.input.data.attributes.types.MethodParametersAttr; import jadx.core.Consts; import jadx.core.deobf.NameMapper; import jadx.core.dex.attributes.AFlag; @@ -18,6 +21,7 @@ import jadx.core.dex.attributes.nodes.LocalVarsDebugInfoAttr; import jadx.core.dex.attributes.nodes.RegDebugInfoAttr; import jadx.core.dex.instructions.PhiInsn; import jadx.core.dex.instructions.args.ArgType; +import jadx.core.dex.instructions.args.CodeVar; import jadx.core.dex.instructions.args.InsnArg; import jadx.core.dex.instructions.args.Named; import jadx.core.dex.instructions.args.RegisterArg; @@ -51,6 +55,7 @@ public class DebugInfoApplyVisitor extends AbstractVisitor { applyDebugInfo(mth); mth.remove(AType.LOCAL_VARS_DEBUG_INFO); } + processMethodParametersAttribute(mth); checkTypes(mth); } catch (Exception e) { mth.addWarnComment("Failed to apply debug info", e); @@ -221,4 +226,31 @@ public class DebugInfoApplyVisitor extends AbstractVisitor { } }); } + + private void processMethodParametersAttribute(MethodNode mth) { + MethodParametersAttr parametersAttr = mth.get(JadxAttrType.METHOD_PARAMETERS); + if (parametersAttr == null) { + return; + } + try { + List params = parametersAttr.getList(); + if (params.size() != mth.getMethodInfo().getArgsCount()) { + return; + } + int i = 0; + for (RegisterArg mthArg : mth.getArgRegs()) { + MethodParametersAttr.Info paramInfo = params.get(i++); + String name = paramInfo.getName(); + if (NameMapper.isValidAndPrintable(name)) { + CodeVar codeVar = mthArg.getSVar().getCodeVar(); + codeVar.setName(name); + if (AccessFlags.hasFlag(paramInfo.getAccFlags(), AccessFlags.FINAL)) { + codeVar.setFinal(true); + } + } + } + } catch (Exception e) { + mth.addWarnComment("Failed to process method parameters attribute: " + parametersAttr.getList(), e); + } + } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/others/TestMethodParametersAttribute.java b/jadx-core/src/test/java/jadx/tests/integration/others/TestMethodParametersAttribute.java new file mode 100644 index 0000000000000000000000000000000000000000..c931003302046b7699adb6ddbea4daee38008f48 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/others/TestMethodParametersAttribute.java @@ -0,0 +1,41 @@ +package jadx.tests.integration.others; + +import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.util.Arrays; +import java.util.stream.Collectors; + +import jadx.tests.api.IntegrationTest; +import jadx.tests.api.extensions.profiles.TestProfile; +import jadx.tests.api.extensions.profiles.TestWithProfiles; + +import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; + +public class TestMethodParametersAttribute extends IntegrationTest { + + public static class TestCls { + public String test(String paramStr, final int number) { + return paramStr + number; + } + + public String paramNames() throws NoSuchMethodException { + Method testMethod = TestCls.class.getMethod("test", String.class, int.class); + return Arrays.stream(testMethod.getParameters()) + .map(Parameter::getName) + .collect(Collectors.joining(", ")); + } + + public void check() throws NoSuchMethodException { + assertThat(paramNames()).isEqualTo("paramStr, number"); + } + } + + @TestWithProfiles({ TestProfile.JAVA8, TestProfile.D8_J11 }) + public void test() { + getCompilerOptions().addArgument("-parameters"); + noDebugInfo(); + assertThat(getClassNode(TestCls.class)) + .code() + .containsOne("public String test(String paramStr, final int number) {"); + } +} diff --git a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexAnnotationsConvert.java b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexAnnotationsConvert.java index 2f5ea58ee18b502694188f301e5b93169cd19fba..733ee62029d6db93612a0b3460ec64cad6db1993 100644 --- a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexAnnotationsConvert.java +++ b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexAnnotationsConvert.java @@ -1,9 +1,11 @@ package jadx.plugins.input.dex.sections; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,6 +19,7 @@ import jadx.api.plugins.input.data.attributes.types.AnnotationsAttr; import jadx.api.plugins.input.data.attributes.types.ExceptionsAttr; import jadx.api.plugins.input.data.attributes.types.InnerClassesAttr; import jadx.api.plugins.input.data.attributes.types.InnerClsInfo; +import jadx.api.plugins.input.data.attributes.types.MethodParametersAttr; import jadx.api.plugins.input.data.attributes.types.SignatureAttr; import jadx.api.plugins.utils.Utils; import jadx.plugins.input.dex.sections.annotations.AnnotationsUtils; @@ -36,7 +39,7 @@ public class DexAnnotationsConvert { appendAnnotations(null, list, annotationList); } - private static void appendAnnotations(String cls, List attributes, List annotations) { + private static void appendAnnotations(@Nullable String cls, List attributes, List annotations) { if (annotations.isEmpty()) { return; } @@ -49,7 +52,7 @@ public class DexAnnotationsConvert { } @SuppressWarnings("unchecked") - private static void convertSystemAnnotations(String cls, List attributes, IAnnotation annotation) { + private static void convertSystemAnnotations(@Nullable String cls, List attributes, IAnnotation annotation) { switch (annotation.getAnnotationClass()) { case "Ldalvik/annotation/Signature;": attributes.add(new SignatureAttr(extractSignature(annotation))); @@ -90,6 +93,25 @@ public class DexAnnotationsConvert { LOG.warn("Failed to convert dalvik throws annotation", e); } break; + + case "Ldalvik/annotation/MethodParameters;": + try { + List names = AnnotationsUtils.getArray(annotation, "names"); + List accFlags = AnnotationsUtils.getArray(annotation, "accessFlags"); + if (!names.isEmpty() && names.size() == accFlags.size()) { + int size = names.size(); + List list = new ArrayList<>(size); + for (int i = 0; i < size; i++) { + String name = (String) names.get(i).getValue(); + int accFlag = (int) accFlags.get(i).getValue(); + list.add(new MethodParametersAttr.Info(accFlag, name)); + } + attributes.add(new MethodParametersAttr(list)); + } + } catch (Exception e) { + LOG.warn("Failed to parse annotation: " + annotation, e); + } + break; } } diff --git a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexMethodData.java b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexMethodData.java index a6940ce3d729dd72a05ae70598ae8a686fb2d5cf..1e94de1924d08765c134ecdba310a4cfef09c8ad 100644 --- a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexMethodData.java +++ b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/DexMethodData.java @@ -9,7 +9,7 @@ import jadx.api.plugins.input.data.ICodeReader; import jadx.api.plugins.input.data.IMethodData; import jadx.api.plugins.input.data.annotations.IAnnotation; import jadx.api.plugins.input.data.attributes.IJadxAttribute; -import jadx.api.plugins.input.data.attributes.types.MethodParamsAttr; +import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr; import jadx.api.plugins.utils.Utils; import jadx.plugins.input.dex.sections.annotations.AnnotationsParser; import jadx.plugins.input.dex.smali.SmaliPrinter; @@ -84,7 +84,7 @@ public class DexMethodData implements IMethodData { public List getAttributes() { List list = new ArrayList<>(); DexAnnotationsConvert.forMethod(list, getAnnotations()); - Utils.addToList(list, MethodParamsAttr.pack(getParamsAnnotations())); + Utils.addToList(list, AnnotationMethodParamsAttr.pack(getParamsAnnotations())); return list; } diff --git a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/annotations/AnnotationsUtils.java b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/annotations/AnnotationsUtils.java index d64de23f4380f21f70ab48c36e108f70a2a300c0..9a5ecdbd11c0cb7415fe9d2c9db42e7dab6f9a6d 100644 --- a/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/annotations/AnnotationsUtils.java +++ b/jadx-plugins/jadx-dex-input/src/main/java/jadx/plugins/input/dex/sections/annotations/AnnotationsUtils.java @@ -1,5 +1,10 @@ package jadx.plugins.input.dex.sections.annotations; +import java.util.Collections; +import java.util.List; + +import org.jetbrains.annotations.Nullable; + import jadx.api.plugins.input.data.annotations.EncodedType; import jadx.api.plugins.input.data.annotations.EncodedValue; import jadx.api.plugins.input.data.annotations.IAnnotation; @@ -17,4 +22,28 @@ public class AnnotationsUtils { } return (T) encodedValue.getValue(); } + + @Nullable + public static Object getValue(IAnnotation ann, String name, EncodedType type) { + if (ann == null || ann.getValues() == null || ann.getValues().isEmpty()) { + return null; + } + EncodedValue encodedValue = ann.getValues().get(name); + if (encodedValue == null || encodedValue.getType() != type) { + return null; + } + return encodedValue.getValue(); + } + + @SuppressWarnings("unchecked") + public static List getArray(IAnnotation ann, String name) { + if (ann == null || ann.getValues() == null || ann.getValues().isEmpty()) { + return Collections.emptyList(); + } + EncodedValue encodedValue = ann.getValues().get(name); + if (encodedValue == null || encodedValue.getType() != EncodedType.ENCODED_ARRAY) { + return Collections.emptyList(); + } + return (List) encodedValue.getValue(); + } } diff --git a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/JavaMethodData.java b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/JavaMethodData.java index 31ae1f4b7a95b069c3d21533efffa31dbb6c7b83..dce692da096954a9a41581f8b95abe35341ff222 100644 --- a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/JavaMethodData.java +++ b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/JavaMethodData.java @@ -71,6 +71,7 @@ public class JavaMethodData implements IMethodData { Utils.addToList(list, JavaAnnotationDefaultAttr.convert(attributes)); Utils.addToList(list, attributes.get(JavaAttrType.SIGNATURE)); Utils.addToList(list, attributes.get(JavaAttrType.EXCEPTIONS)); + Utils.addToList(list, attributes.get(JavaAttrType.METHOD_PARAMETERS)); return list; } diff --git a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/JavaAttrType.java b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/JavaAttrType.java index 7164b15dc7d3903eb28cd3274183b499128162a5..bfbc3a2df3c334299dd593b546ead1610c8b9113 100644 --- a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/JavaAttrType.java +++ b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/JavaAttrType.java @@ -17,6 +17,7 @@ import jadx.plugins.input.java.data.attributes.types.JavaAnnotationsAttr; import jadx.plugins.input.java.data.attributes.types.JavaBootstrapMethodsAttr; import jadx.plugins.input.java.data.attributes.types.JavaExceptionsAttr; import jadx.plugins.input.java.data.attributes.types.JavaInnerClsAttr; +import jadx.plugins.input.java.data.attributes.types.JavaMethodParametersAttr; import jadx.plugins.input.java.data.attributes.types.JavaParamAnnsAttr; import jadx.plugins.input.java.data.attributes.types.JavaSignatureAttr; import jadx.plugins.input.java.data.attributes.types.JavaSourceFileAttr; @@ -46,6 +47,7 @@ public final class JavaAttrType { public static final JavaAttrType SOURCE_FILE; public static final JavaAttrType SIGNATURE; public static final JavaAttrType EXCEPTIONS; + public static final JavaAttrType METHOD_PARAMETERS; public static final JavaAttrType DEPRECATED; public static final JavaAttrType SYNTHETIC; @@ -76,6 +78,7 @@ public final class JavaAttrType { SOURCE_FILE = bind("SourceFile", JavaSourceFileAttr.reader()); SIGNATURE = bind("Signature", JavaSignatureAttr.reader()); EXCEPTIONS = bind("Exceptions", JavaExceptionsAttr.reader()); + METHOD_PARAMETERS = bind("MethodParameters", JavaMethodParametersAttr.reader()); // ignored DEPRECATED = bind("Deprecated", null); // duplicated by annotation diff --git a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaMethodParametersAttr.java b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaMethodParametersAttr.java new file mode 100644 index 0000000000000000000000000000000000000000..448129b5c16714f693daf58f5b02b0533ae13933 --- /dev/null +++ b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaMethodParametersAttr.java @@ -0,0 +1,29 @@ +package jadx.plugins.input.java.data.attributes.types; + +import java.util.ArrayList; +import java.util.List; + +import jadx.api.plugins.input.data.attributes.types.MethodParametersAttr; +import jadx.plugins.input.java.data.ConstPoolReader; +import jadx.plugins.input.java.data.attributes.IJavaAttribute; +import jadx.plugins.input.java.data.attributes.IJavaAttributeReader; + +public class JavaMethodParametersAttr extends MethodParametersAttr implements IJavaAttribute { + public JavaMethodParametersAttr(List list) { + super(list); + } + + public static IJavaAttributeReader reader() { + return (clsData, reader) -> { + ConstPoolReader constPool = clsData.getConstPoolReader(); + int count = reader.readU1(); + List params = new ArrayList<>(count); + for (int i = 0; i < count; i++) { + String name = constPool.getUtf8(reader.readU2()); + int accessFlags = reader.readU2(); + params.add(new Info(accessFlags, name)); + } + return new JavaMethodParametersAttr(params); + }; + } +} diff --git a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaParamAnnsAttr.java b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaParamAnnsAttr.java index c00f77bbebfaa193b76590a2f81d0c18609f7b3b..13739d52b2944965a391f9878afa0bb2eb337c40 100644 --- a/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaParamAnnsAttr.java +++ b/jadx-plugins/jadx-java-input/src/main/java/jadx/plugins/input/java/data/attributes/types/JavaParamAnnsAttr.java @@ -6,7 +6,7 @@ import java.util.List; import jadx.api.plugins.input.data.annotations.AnnotationVisibility; import jadx.api.plugins.input.data.annotations.IAnnotation; -import jadx.api.plugins.input.data.attributes.types.MethodParamsAttr; +import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr; import jadx.api.plugins.utils.Utils; import jadx.plugins.input.java.data.attributes.IJavaAttribute; import jadx.plugins.input.java.data.attributes.IJavaAttributeReader; @@ -35,19 +35,19 @@ public class JavaParamAnnsAttr implements IJavaAttribute { }; } - public static MethodParamsAttr merge(JavaAttrStorage storage) { + public static AnnotationMethodParamsAttr merge(JavaAttrStorage storage) { JavaParamAnnsAttr runtimeAnnAttr = storage.get(JavaAttrType.RUNTIME_PARAMETER_ANNOTATIONS); JavaParamAnnsAttr buildAnnAttr = storage.get(JavaAttrType.BUILD_PARAMETER_ANNOTATIONS); if (runtimeAnnAttr == null && buildAnnAttr == null) { return null; } if (buildAnnAttr == null) { - return MethodParamsAttr.pack(runtimeAnnAttr.getList()); + return AnnotationMethodParamsAttr.pack(runtimeAnnAttr.getList()); } if (runtimeAnnAttr == null) { - return MethodParamsAttr.pack(buildAnnAttr.getList()); + return AnnotationMethodParamsAttr.pack(buildAnnAttr.getList()); } - return MethodParamsAttr.pack(mergeParamLists(runtimeAnnAttr.getList(), buildAnnAttr.getList())); + return AnnotationMethodParamsAttr.pack(mergeParamLists(runtimeAnnAttr.getList(), buildAnnAttr.getList())); } private static List> mergeParamLists(List> first, List> second) { diff --git a/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/JadxAttrType.java b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/JadxAttrType.java index a6449692c49e77734c59b37c5b6ec8f1f6ab8076..38b1f6d26c35ecee7147eac7f71e3a854850d413 100644 --- a/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/JadxAttrType.java +++ b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/JadxAttrType.java @@ -3,10 +3,11 @@ package jadx.api.plugins.input.data.attributes; import jadx.api.plugins.input.data.annotations.EncodedValue; import jadx.api.plugins.input.data.attributes.types.AnnotationDefaultAttr; import jadx.api.plugins.input.data.attributes.types.AnnotationDefaultClassAttr; +import jadx.api.plugins.input.data.attributes.types.AnnotationMethodParamsAttr; import jadx.api.plugins.input.data.attributes.types.AnnotationsAttr; import jadx.api.plugins.input.data.attributes.types.ExceptionsAttr; import jadx.api.plugins.input.data.attributes.types.InnerClassesAttr; -import jadx.api.plugins.input.data.attributes.types.MethodParamsAttr; +import jadx.api.plugins.input.data.attributes.types.MethodParametersAttr; import jadx.api.plugins.input.data.attributes.types.SignatureAttr; import jadx.api.plugins.input.data.attributes.types.SourceFileAttr; @@ -25,9 +26,10 @@ public final class JadxAttrType implements IJadxAttrTy public static final JadxAttrType CONSTANT_VALUE = bind(); // method - public static final JadxAttrType ANNOTATION_MTH_PARAMETERS = bind(); + public static final JadxAttrType ANNOTATION_MTH_PARAMETERS = bind(); public static final JadxAttrType ANNOTATION_DEFAULT = bind(); public static final JadxAttrType EXCEPTIONS = bind(); + public static final JadxAttrType METHOD_PARAMETERS = bind(); private static JadxAttrType bind() { return new JadxAttrType<>(); diff --git a/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParamsAttr.java b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/AnnotationMethodParamsAttr.java similarity index 72% rename from jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParamsAttr.java rename to jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/AnnotationMethodParamsAttr.java index 8519dda82e1d844603836376083d1ff7f6df111a..9849e3cf66e63fd2fd5db0ecaf18d23963c49dbe 100644 --- a/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParamsAttr.java +++ b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/AnnotationMethodParamsAttr.java @@ -9,10 +9,10 @@ import jadx.api.plugins.input.data.annotations.IAnnotation; import jadx.api.plugins.input.data.attributes.JadxAttrType; import jadx.api.plugins.input.data.attributes.PinnedAttribute; -public class MethodParamsAttr extends PinnedAttribute { +public class AnnotationMethodParamsAttr extends PinnedAttribute { @Nullable - public static MethodParamsAttr pack(List> annotationRefList) { + public static AnnotationMethodParamsAttr pack(List> annotationRefList) { if (annotationRefList.isEmpty()) { return null; } @@ -20,12 +20,12 @@ public class MethodParamsAttr extends PinnedAttribute { for (List annList : annotationRefList) { list.add(AnnotationsAttr.pack(annList)); } - return new MethodParamsAttr(list); + return new AnnotationMethodParamsAttr(list); } private final List paramList; - private MethodParamsAttr(List paramsList) { + private AnnotationMethodParamsAttr(List paramsList) { this.paramList = paramsList; } @@ -34,7 +34,7 @@ public class MethodParamsAttr extends PinnedAttribute { } @Override - public JadxAttrType getAttrType() { + public JadxAttrType getAttrType() { return JadxAttrType.ANNOTATION_MTH_PARAMETERS; } diff --git a/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParametersAttr.java b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParametersAttr.java new file mode 100644 index 0000000000000000000000000000000000000000..84d2912965f0ea1bb911a4ed2b40aea47ad55b97 --- /dev/null +++ b/jadx-plugins/jadx-plugins-api/src/main/java/jadx/api/plugins/input/data/attributes/types/MethodParametersAttr.java @@ -0,0 +1,54 @@ +package jadx.api.plugins.input.data.attributes.types; + +import java.util.List; + +import jadx.api.plugins.input.data.AccessFlags; +import jadx.api.plugins.input.data.AccessFlagsScope; +import jadx.api.plugins.input.data.attributes.IJadxAttrType; +import jadx.api.plugins.input.data.attributes.JadxAttrType; +import jadx.api.plugins.input.data.attributes.PinnedAttribute; + +public class MethodParametersAttr extends PinnedAttribute { + + public static class Info { + private final int accFlags; + private final String name; + + public Info(int accFlags, String name) { + this.accFlags = accFlags; + this.name = name; + } + + public int getAccFlags() { + return accFlags; + } + + public String getName() { + return name; + } + + public String toString() { + return AccessFlags.format(accFlags, AccessFlagsScope.METHOD) + name; + } + } + + private final List list; + + public MethodParametersAttr(List list) { + this.list = list; + } + + public List getList() { + return list; + } + + @Override + public IJadxAttrType getAttrType() { + return JadxAttrType.METHOD_PARAMETERS; + } + + @Override + public String toString() { + return "METHOD_PARAMETERS: " + list; + } +}