feat: support MethodParameters attribute (#1260)
This commit is contained in:
+1
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -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<T extends IJavaAttribute> {
|
||||
public static final JavaAttrType<JavaSourceFileAttr> SOURCE_FILE;
|
||||
public static final JavaAttrType<JavaSignatureAttr> SIGNATURE;
|
||||
public static final JavaAttrType<JavaExceptionsAttr> EXCEPTIONS;
|
||||
public static final JavaAttrType<JavaMethodParametersAttr> METHOD_PARAMETERS;
|
||||
|
||||
public static final JavaAttrType<IgnoredAttr> DEPRECATED;
|
||||
public static final JavaAttrType<IgnoredAttr> SYNTHETIC;
|
||||
@@ -76,6 +78,7 @@ public final class JavaAttrType<T extends IJavaAttribute> {
|
||||
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
|
||||
|
||||
+29
@@ -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<Info> list) {
|
||||
super(list);
|
||||
}
|
||||
|
||||
public static IJavaAttributeReader reader() {
|
||||
return (clsData, reader) -> {
|
||||
ConstPoolReader constPool = clsData.getConstPoolReader();
|
||||
int count = reader.readU1();
|
||||
List<Info> 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);
|
||||
};
|
||||
}
|
||||
}
|
||||
+5
-5
@@ -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<List<IAnnotation>> mergeParamLists(List<List<IAnnotation>> first, List<List<IAnnotation>> second) {
|
||||
|
||||
Reference in New Issue
Block a user