@Override
	public DataType toDataType() throws DuplicateNameException, IOException {
		DataType ptr32 = new Pointer32DataType();
		DataType ptr64 = new Pointer64DataType();

		Structure struct = new StructureDataType(ArtMethod.class.getSimpleName(), 0);
		struct.setCategoryPath(new CategoryPath("/art"));

		if (ArtConstants.ART_VERSION_017.equals(artVersion)) {
			if (pointerSize == 4) {
				struct.add(DWORD, "declaring_class_", null);
				struct.add(DWORD, "dex_cache_resolved_methods_", null);
				struct.add(DWORD, "dex_cache_resolved_types_", null);
				struct.add(DWORD, "access_flags_", null);
				struct.add(DWORD, "dex_code_item_offset_", null);
				struct.add(DWORD, "dex_method_index_", null);
				struct.add(WORD, "method_index_", null);
				struct.add(WORD, "padding_", null);
				struct.add(DWORD, "entry_point_from_interpreter_", null);
				struct.add(DWORD, "entry_point_from_jni_", null);
				struct.add(DWORD, "entry_point_from_quick_compiled_code_", null);
			}
			else if (pointerSize == 8) {
				throw new IOException("Unsupported 64-bit ART method format: " + artVersion);
			}
		}
		else if (ArtConstants.ART_VERSION_029.equals(artVersion) ||
			ArtConstants.ART_VERSION_030.equals(artVersion)) {

			if (pointerSize == 4) {
				struct.add(ptr32, "declaring_class_", null);
				struct.add(DWORD, "access_flags_", null);
				struct.add(DWORD, "dex_code_item_offset_", null);
				struct.add(DWORD, "dex_method_index_", null);
				struct.add(WORD, "method_index_", null);
				struct.add(WORD, "hotness_count_", null);
				struct.add(DWORD, "dex_cache_resolved_methods_", null);
				struct.add(DWORD, "dex_cache_resolved_types_", null);
				struct.add(ptr32, "entry_point_from_jni_", null);
				struct.add(ptr32, "entry_point_from_quick_compiled_code_", null);
			}
			else if (pointerSize == 8) {
				struct.add(ptr32, "declaring_class_", null);
				struct.add(DWORD, "access_flags_", null);
				struct.add(DWORD, "dex_code_item_offset_", null);
				struct.add(DWORD, "dex_method_index_", null);
				struct.add(WORD, "method_index_", null);
				struct.add(WORD, "hotness_count_", null);
				struct.add(WORD, "imt_index_", null);
				struct.add(WORD, "padding", null);
				struct.add(QWORD, "dex_cache_resolved_methods_", null);
				struct.add(QWORD, "dex_cache_resolved_types_", null);
				struct.add(ptr64, "entry_point_from_jni_", null);
				struct.add(ptr64, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_043.equals(artVersion) ||
			ArtConstants.ART_VERSION_044.equals(artVersion) ||
			ArtConstants.ART_VERSION_046.equals(artVersion)) {

			if (pointerSize == 4) {
				struct.add(ptr32, "declaring_class_", null);
				struct.add(DWORD, "access_flags_", null);
				struct.add(DWORD, "dex_code_item_offset_", null);
				struct.add(DWORD, "dex_method_index_", null);
				struct.add(WORD, "method_index_", null);
				struct.add(WORD, "hotness_count_", null);
				struct.add(QWORD, "data", null);
				struct.add(ptr32, "entry_point_from_quick_compiled_code_", null);
			}
			else if (pointerSize == 8) {
				struct.add(ptr32, "declaring_class_", null);
				struct.add(DWORD, "access_flags_", null);
				struct.add(DWORD, "dex_code_item_offset_", null);
				struct.add(DWORD, "dex_method_index_", null);
				struct.add(WORD, "method_index_", null);
				struct.add(WORD, "hotness_count_", null);
				struct.add(WORD, "imt_index_", null);
				struct.add(WORD, "padding", null);
				struct.add(QWORD, "data", null);
				struct.add(QWORD, "unknown1_", null);
				struct.add(ptr64, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_056.equals(artVersion)) {
			struct.add(ptr32, "declaring_class_", null);
			struct.add(DWORD, "access_flags_", null);
			struct.add(DWORD, "dex_code_item_offset_", null);
			struct.add(DWORD, "dex_method_index_", null);
			struct.add(WORD, "method_index_", null);
			struct.add(WORD, "hotness_count_", null);
			struct.add(WORD, "imt_index_", null);
			struct.add(WORD, "padding", null);

			if (pointerSize == 4) {
				struct.add(DWORD, "data", null);
			}
			else if (pointerSize == 8) {
				struct.add(QWORD, "data", null);
				struct.add(QWORD, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_074.equals(artVersion)) {
			struct.add(ptr32, "declaring_class_", null);
			struct.add(DWORD, "access_flags_", null);
			struct.add(DWORD, "dex_code_item_offset_", null);
			struct.add(DWORD, "dex_method_index_", null);
			struct.add(WORD, "method_index_", null);
			struct.add(WORD, "hotness_count_", null);
			struct.add(WORD, "imt_index_", null);
			struct.add(WORD, "padding", null);

			if (pointerSize == 4) {
				struct.add(DWORD, "data", null);
			}
			else if (pointerSize == 8) {
				struct.add(QWORD, "data", null);
				struct.add(ptr64, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_085.equals(artVersion)) {
			struct.add(ptr32, "declaring_class_", null);
			struct.add(DWORD, "access_flags_", null);
			struct.add(DWORD, "dex_code_item_offset_", null);
			struct.add(DWORD, "dex_method_index_", null);
			struct.add(WORD, "method_index_", null);
			struct.add(WORD, "hotness_count_", null);
			struct.add(WORD, "imt_index_", null);
			struct.add(WORD, "padding", null);

			if (pointerSize == 4) {
				struct.add(DWORD, "data", null);
			}
			else if (pointerSize == 8) {
				struct.add(QWORD, "data", null);
				struct.add(QWORD, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_099.equals(artVersion)) {
			struct.add(ptr32, "declaring_class_", null);
			struct.add(DWORD, "access_flags_", null);
			struct.add(DWORD, "dex_method_index_", null);
			struct.add(WORD, "method_index_", null);
			struct.add(WORD, "hotness_count_", null);
			struct.add(WORD, "imt_index_", null);
			struct.add(WORD, "padding", null);

			if (pointerSize == 4) {
				struct.add(DWORD, "data", null);
			}
			else if (pointerSize == 8) {
				//struct.add(QWORD, "data", null);
				struct.add(DWORD, "data", null);
				struct.add(QWORD, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else if (ArtConstants.ART_VERSION_106.equals(artVersion)) {
			struct.add(ptr32, "declaring_class_", null);
			struct.add(DWORD, "access_flags_", null);
			struct.add(DWORD, "dex_method_index_", null);
			struct.add(WORD, "method_index_", null);
			struct.add(WORD, "hotness_count_", null);
			struct.add(WORD, "imt_index_", null);
			struct.add(WORD, "padding", null);

			if (pointerSize == 4) {
				struct.add(DWORD, "data", null);
			}
			else if (pointerSize == 8) {
				struct.add(DWORD, "data", null);
				struct.add(QWORD, "entry_point_from_quick_compiled_code_", null);
			}
		}
		else {
			throw new IOException("Unsupported ART method format: " + artVersion);
		}
		return struct;
	}
https://android.googlesource.com/platform/art/+/refs/heads/android13-release/runtime/art_method.h#787
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/android/art/ArtMethod.java