reproto 0.0.9__py3-none-any.whl → 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- .git/COMMIT_EDITMSG +1 -14
- .git/index +0 -0
- .git/logs/HEAD +4 -0
- .git/logs/refs/heads/iyue +4 -0
- .git/logs/refs/remotes/gitlab/iyue +4 -0
- .git/logs/refs/remotes/origin/iyue +4 -0
- .git/objects/0c/7b11b535a18f311aedadbe91e14fc9fe6b50d9 +0 -0
- .git/objects/1a/4435c23bdf5543e3270aa69361c9c68f205efb +0 -0
- .git/objects/2b/64656ce2df6259c822733b03f26eb828fe9269 +0 -0
- .git/objects/2d/a515dbb88d31400d5b84d41caf270e9309232d +0 -0
- .git/objects/38/907894973091f8e9b224a13fe596e1cb309cf5 +0 -0
- .git/objects/3c/c3ca375694d43e35cdc88d4a5d067e510df427 +0 -0
- .git/objects/3d/3cc6aab4eefed46c77dda27503bebcce88962c +0 -0
- .git/objects/4b/442fccf86631bf5196ee5b48ab8d58228ab59c +0 -0
- .git/objects/5e/9daac72a48ce60688ab2eeddcc3d9152329e20 +0 -0
- .git/objects/67/f27f77274917580e687fd00ca18da0660215c1 +0 -0
- .git/objects/6f/90fcf9eacdc794313471f54279011a787c8760 +0 -0
- .git/objects/7e/5935774ee7a85f2523427c9100f9c578ac172f +1 -0
- .git/objects/92/c6018b4fb8e3b6c2f3f3054a56f2bfaca27470 +0 -0
- .git/objects/a0/d630c3f6024b196d4ee933ab13a32905efdaaa +0 -0
- .git/objects/ae/046e08176523e8a98dc7294436319f724db13c +0 -0
- .git/objects/b0/7a43f0462bf25a8b1f4c0ca60c1b533dae1dde +0 -0
- .git/objects/c8/2a656fe6b5d479b327cdf5fe3bf60db987a2a2 +0 -0
- .git/objects/c8/cb3bb9552dcf6a368a1418996c4b925db2d8ab +0 -0
- .git/objects/e2/b7433fbfbfac5bc800a962be2f4adbed145b42 +0 -0
- .git/objects/e4/1e5aa2bc3074c2014d01ab1f603f69c327a83f +0 -0
- .git/objects/fa/fc981b0d80d8d0323c04365785f66996ed5211 +0 -0
- .git/refs/heads/iyue +1 -1
- .git/refs/remotes/gitlab/iyue +1 -1
- .git/refs/remotes/origin/iyue +1 -1
- core/info_decoder.py +1 -1
- core/reconstructor.py +178 -9
- generation/proto_generator.py +136 -58
- parsing/java_parser.py +1 -1
- pyproject.toml +1 -1
- {reproto-0.0.9.dist-info → reproto-0.1.1.dist-info}/METADATA +1 -1
- {reproto-0.0.9.dist-info → reproto-0.1.1.dist-info}/RECORD +39 -18
- {reproto-0.0.9.dist-info → reproto-0.1.1.dist-info}/WHEEL +0 -0
- {reproto-0.0.9.dist-info → reproto-0.1.1.dist-info}/entry_points.txt +0 -0
.git/COMMIT_EDITMSG
CHANGED
@@ -1,14 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
主要更新:
|
4
|
-
- ARCHITECTURE.md: 新增性能优化章节,详细记录索引系统移除和文件缓存优化
|
5
|
-
- README.md: 更新特性介绍,新增性能优化亮点和特殊类型支持说明
|
6
|
-
|
7
|
-
文档变化:
|
8
|
-
✅ 架构图更新:反映新增的文件缓存和类型工具模块
|
9
|
-
✅ 性能基准:记录20%+执行效率提升的具体数据
|
10
|
-
✅ 新增功能:MapFieldLite、Internal.ProtobufList、Well-Known Types支持
|
11
|
-
✅ 技术细节:文件缓存系统、智能路径构造、统一类型检测器
|
12
|
-
✅ 故障排除:新增性能监控和缓存统计指导
|
13
|
-
|
14
|
-
版本标识:v2.0 - 重大性能优化版本
|
1
|
+
feat(build): update version
|
.git/index
CHANGED
Binary file
|
.git/logs/HEAD
CHANGED
@@ -8,3 +8,7 @@ fce15b9dbffd9f37b1f2d46944ee2d0394df6565 70ded03ee69f30850c938a8129be308cb30772d
|
|
8
8
|
70ded03ee69f30850c938a8129be308cb30772d9 67f54a4a3ede6749acc7c718ad97a86634215b5e iyue <ys1231@126.com> 1751004413 +0800 commit: feat: 重构类型处理系统,统一Java到Protobuf类型映射
|
9
9
|
67f54a4a3ede6749acc7c718ad97a86634215b5e 9771dd4958faa94d3db229c129f6af35b508905a iyue <ys1231@126.com> 1751006389 +0800 commit: 🚀 性能优化:移除未使用的索引系统,提升执行效率
|
10
10
|
9771dd4958faa94d3db229c129f6af35b508905a 9fb57064e0c53ed80af8507acaab718a1e80184e iyue <ys1231@126.com> 1751006683 +0800 commit: 📚 更新文档:反映最新架构变化和性能优化
|
11
|
+
9fb57064e0c53ed80af8507acaab718a1e80184e e41e5aa2bc3074c2014d01ab1f603f69c327a83f iyue <ys1231@126.com> 1751010339 +0800 commit: feat: 直接使用Java源码中的实际枚举类名
|
12
|
+
e41e5aa2bc3074c2014d01ab1f603f69c327a83f b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde iyue <ys1231@126.com> 1751010729 +0800 commit: fix: 改进日志级别和错误处理
|
13
|
+
b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962c iyue <ys1231@126.com> 1751011389 +0800 commit: release: v2.1.0 - 重大性能优化和功能增强
|
14
|
+
3d3cc6aab4eefed46c77dda27503bebcce88962c 7e5935774ee7a85f2523427c9100f9c578ac172f iyue <ys1231@126.com> 1751011558 +0800 commit: feat(build): update version
|
.git/logs/refs/heads/iyue
CHANGED
@@ -8,3 +8,7 @@ fce15b9dbffd9f37b1f2d46944ee2d0394df6565 70ded03ee69f30850c938a8129be308cb30772d
|
|
8
8
|
70ded03ee69f30850c938a8129be308cb30772d9 67f54a4a3ede6749acc7c718ad97a86634215b5e iyue <ys1231@126.com> 1751004413 +0800 commit: feat: 重构类型处理系统,统一Java到Protobuf类型映射
|
9
9
|
67f54a4a3ede6749acc7c718ad97a86634215b5e 9771dd4958faa94d3db229c129f6af35b508905a iyue <ys1231@126.com> 1751006389 +0800 commit: 🚀 性能优化:移除未使用的索引系统,提升执行效率
|
10
10
|
9771dd4958faa94d3db229c129f6af35b508905a 9fb57064e0c53ed80af8507acaab718a1e80184e iyue <ys1231@126.com> 1751006683 +0800 commit: 📚 更新文档:反映最新架构变化和性能优化
|
11
|
+
9fb57064e0c53ed80af8507acaab718a1e80184e e41e5aa2bc3074c2014d01ab1f603f69c327a83f iyue <ys1231@126.com> 1751010339 +0800 commit: feat: 直接使用Java源码中的实际枚举类名
|
12
|
+
e41e5aa2bc3074c2014d01ab1f603f69c327a83f b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde iyue <ys1231@126.com> 1751010729 +0800 commit: fix: 改进日志级别和错误处理
|
13
|
+
b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962c iyue <ys1231@126.com> 1751011389 +0800 commit: release: v2.1.0 - 重大性能优化和功能增强
|
14
|
+
3d3cc6aab4eefed46c77dda27503bebcce88962c 7e5935774ee7a85f2523427c9100f9c578ac172f iyue <ys1231@126.com> 1751011558 +0800 commit: feat(build): update version
|
@@ -7,3 +7,7 @@ fce15b9dbffd9f37b1f2d46944ee2d0394df6565 70ded03ee69f30850c938a8129be308cb30772d
|
|
7
7
|
70ded03ee69f30850c938a8129be308cb30772d9 67f54a4a3ede6749acc7c718ad97a86634215b5e iyue <ys1231@126.com> 1751004471 +0800 update by push
|
8
8
|
67f54a4a3ede6749acc7c718ad97a86634215b5e 9771dd4958faa94d3db229c129f6af35b508905a iyue <ys1231@126.com> 1751006413 +0800 update by push
|
9
9
|
9771dd4958faa94d3db229c129f6af35b508905a 9fb57064e0c53ed80af8507acaab718a1e80184e iyue <ys1231@126.com> 1751006704 +0800 update by push
|
10
|
+
9fb57064e0c53ed80af8507acaab718a1e80184e e41e5aa2bc3074c2014d01ab1f603f69c327a83f iyue <ys1231@126.com> 1751010362 +0800 update by push
|
11
|
+
e41e5aa2bc3074c2014d01ab1f603f69c327a83f b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde iyue <ys1231@126.com> 1751010753 +0800 update by push
|
12
|
+
b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962c iyue <ys1231@126.com> 1751011478 +0800 update by push
|
13
|
+
3d3cc6aab4eefed46c77dda27503bebcce88962c 7e5935774ee7a85f2523427c9100f9c578ac172f iyue <ys1231@126.com> 1751011568 +0800 update by push
|
@@ -7,3 +7,7 @@ fce15b9dbffd9f37b1f2d46944ee2d0394df6565 70ded03ee69f30850c938a8129be308cb30772d
|
|
7
7
|
70ded03ee69f30850c938a8129be308cb30772d9 67f54a4a3ede6749acc7c718ad97a86634215b5e iyue <ys1231@126.com> 1751004455 +0800 update by push
|
8
8
|
67f54a4a3ede6749acc7c718ad97a86634215b5e 9771dd4958faa94d3db229c129f6af35b508905a iyue <ys1231@126.com> 1751006400 +0800 update by push
|
9
9
|
9771dd4958faa94d3db229c129f6af35b508905a 9fb57064e0c53ed80af8507acaab718a1e80184e iyue <ys1231@126.com> 1751006693 +0800 update by push
|
10
|
+
9fb57064e0c53ed80af8507acaab718a1e80184e e41e5aa2bc3074c2014d01ab1f603f69c327a83f iyue <ys1231@126.com> 1751010348 +0800 update by push
|
11
|
+
e41e5aa2bc3074c2014d01ab1f603f69c327a83f b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde iyue <ys1231@126.com> 1751010741 +0800 update by push
|
12
|
+
b07a43f0462bf25a8b1f4c0ca60c1b533dae1dde 3d3cc6aab4eefed46c77dda27503bebcce88962c iyue <ys1231@126.com> 1751011447 +0800 update by push
|
13
|
+
3d3cc6aab4eefed46c77dda27503bebcce88962c 7e5935774ee7a85f2523427c9100f9c578ac172f iyue <ys1231@126.com> 1751011577 +0800 update by push
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
x��]j�0E�>k��R(����RB�2����:�\��%���Ƕu] ����1��UѩJ,�i��,��Y�̐���2(y2+�}��X��*5������\Ă�g�i�����%�7K��m=�̑9�F����5�4g�x����o�t\]��m�.��tCr
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
.git/refs/heads/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
7e5935774ee7a85f2523427c9100f9c578ac172f
|
.git/refs/remotes/gitlab/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
7e5935774ee7a85f2523427c9100f9c578ac172f
|
.git/refs/remotes/origin/iyue
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
7e5935774ee7a85f2523427c9100f9c578ac172f
|
core/info_decoder.py
CHANGED
@@ -547,7 +547,7 @@ class InfoDecoder:
|
|
547
547
|
return real_type # 返回原始Java类型
|
548
548
|
return None
|
549
549
|
except Exception as e:
|
550
|
-
self.logger.
|
550
|
+
self.logger.debug(f" 🔍 源码分析失败: {e}")
|
551
551
|
return None
|
552
552
|
|
553
553
|
def _infer_message_type_from_field_name(self, field_name_raw: str) -> str:
|
core/reconstructor.py
CHANGED
@@ -10,6 +10,7 @@ Author: AI Assistant
|
|
10
10
|
"""
|
11
11
|
|
12
12
|
import re
|
13
|
+
import os
|
13
14
|
from pathlib import Path
|
14
15
|
from collections import deque
|
15
16
|
from typing import Set, Dict, List, Optional, Tuple
|
@@ -408,7 +409,7 @@ class ProtoReconstructor:
|
|
408
409
|
target_package = '.'.join(first_class.split('.')[:-1])
|
409
410
|
|
410
411
|
if not target_package:
|
411
|
-
self.logger.
|
412
|
+
self.logger.error("❌ 无法推断目标包名,跳过枚举解析")
|
412
413
|
return
|
413
414
|
|
414
415
|
# 解析目标包下的所有枚举
|
@@ -446,7 +447,7 @@ class ProtoReconstructor:
|
|
446
447
|
if not java_file_path:
|
447
448
|
error_msg = "找不到对应的Java文件"
|
448
449
|
self.failed_classes[class_name] = error_msg
|
449
|
-
self.logger.
|
450
|
+
self.logger.error(f" ❌ {error_msg}: {class_name}")
|
450
451
|
return
|
451
452
|
|
452
453
|
# 2. 尝试解析为枚举
|
@@ -463,7 +464,7 @@ class ProtoReconstructor:
|
|
463
464
|
if not info_string:
|
464
465
|
error_msg = "无法从Java文件中提取protobuf信息"
|
465
466
|
self.failed_classes[class_name] = error_msg
|
466
|
-
self.logger.
|
467
|
+
self.logger.error(f" ❌ {error_msg}: {class_name}")
|
467
468
|
return
|
468
469
|
|
469
470
|
# 4. 解码字节码为消息定义
|
@@ -480,7 +481,7 @@ class ProtoReconstructor:
|
|
480
481
|
else:
|
481
482
|
error_msg = "字节码解码失败,可能不是protobuf消息类"
|
482
483
|
self.failed_classes[class_name] = error_msg
|
483
|
-
self.logger.
|
484
|
+
self.logger.error(f" ❌ {error_msg}: {class_name}")
|
484
485
|
|
485
486
|
except Exception as e:
|
486
487
|
error_msg = f"处理异常: {str(e)}"
|
@@ -507,6 +508,18 @@ class ProtoReconstructor:
|
|
507
508
|
self.pending_classes.append(dep)
|
508
509
|
self.logger.info(f" 🔗 发现依赖: {dep}")
|
509
510
|
|
511
|
+
# 处理枚举依赖
|
512
|
+
self.logger.info(f" 🔍 开始处理枚举依赖...")
|
513
|
+
enum_count = 0
|
514
|
+
for field in message_def.fields:
|
515
|
+
if self._is_enum_type(field.type_name):
|
516
|
+
self.logger.info(f" 🔢 发现枚举字段: {field.name} -> {field.type_name}")
|
517
|
+
self._process_enum_dependency(field.type_name)
|
518
|
+
enum_count += 1
|
519
|
+
|
520
|
+
if enum_count == 0:
|
521
|
+
self.logger.info(f" 📊 未发现枚举依赖")
|
522
|
+
|
510
523
|
def _extract_dependencies(self, message_def: MessageDefinition) -> List[str]:
|
511
524
|
"""
|
512
525
|
从消息定义中提取所有依赖的类名
|
@@ -535,7 +548,7 @@ class ProtoReconstructor:
|
|
535
548
|
|
536
549
|
def _extract_field_dependencies(self, type_name: str, current_package: str) -> List[str]:
|
537
550
|
"""
|
538
|
-
从字段类型中提取所有依赖(包括map
|
551
|
+
从字段类型中提取所有依赖(包括map类型的键值类型和枚举类型)
|
539
552
|
|
540
553
|
Args:
|
541
554
|
type_name: 字段类型名
|
@@ -561,12 +574,168 @@ class ProtoReconstructor:
|
|
561
574
|
|
562
575
|
# 处理普通类型
|
563
576
|
else:
|
564
|
-
|
565
|
-
if
|
566
|
-
|
577
|
+
# 检查是否为枚举类型(以Enum开头或已知的枚举模式)
|
578
|
+
if self._is_enum_type(type_name):
|
579
|
+
# 直接处理枚举类型,尝试解析并添加到枚举定义中
|
580
|
+
self._process_enum_dependency(type_name)
|
581
|
+
else:
|
582
|
+
# 处理消息类型依赖
|
583
|
+
dep = self._resolve_field_dependency(type_name, current_package)
|
584
|
+
if dep:
|
585
|
+
dependencies.append(dep)
|
567
586
|
|
568
587
|
return dependencies
|
569
588
|
|
589
|
+
def _is_enum_type(self, type_name: str) -> bool:
|
590
|
+
"""
|
591
|
+
判断类型名是否为枚举类型
|
592
|
+
|
593
|
+
Args:
|
594
|
+
type_name: 类型名
|
595
|
+
|
596
|
+
Returns:
|
597
|
+
是否为枚举类型
|
598
|
+
"""
|
599
|
+
# 检查是否以Enum开头(混淆后的枚举名)
|
600
|
+
if type_name.startswith('Enum'):
|
601
|
+
return True
|
602
|
+
|
603
|
+
# 检查是否在已知的枚举类型列表中
|
604
|
+
# 这里可以添加更多的枚举类型判断逻辑
|
605
|
+
return False
|
606
|
+
|
607
|
+
def _process_enum_dependency(self, type_name: str) -> None:
|
608
|
+
"""
|
609
|
+
处理枚举依赖,查找并解析枚举类
|
610
|
+
|
611
|
+
Args:
|
612
|
+
type_name: 枚举类型名
|
613
|
+
"""
|
614
|
+
try:
|
615
|
+
self.logger.info(f" 🔍 搜索枚举文件: {type_name}")
|
616
|
+
# 尝试在所有包中查找这个枚举类
|
617
|
+
enum_file_path = self._find_enum_file(type_name)
|
618
|
+
if enum_file_path:
|
619
|
+
self.logger.info(f" ✅ 找到枚举文件: {enum_file_path}")
|
620
|
+
# 解析枚举文件
|
621
|
+
enum_values = self.java_parser.parse_enum_file(enum_file_path)
|
622
|
+
if enum_values:
|
623
|
+
# 构造完整的枚举类名
|
624
|
+
enum_class_name = self._get_enum_class_name_from_path(enum_file_path)
|
625
|
+
self.logger.info(f" 📝 枚举类名: {enum_class_name}")
|
626
|
+
|
627
|
+
# 创建枚举定义
|
628
|
+
enum_def = self._create_enum_definition(enum_class_name, enum_values)
|
629
|
+
|
630
|
+
# 检查是否有原始名称,如果有则使用原始名称
|
631
|
+
original_name = self._extract_original_enum_name(enum_file_path)
|
632
|
+
if original_name:
|
633
|
+
self.logger.info(f" 🏷️ 使用原始名称: {original_name}")
|
634
|
+
enum_def.name = original_name
|
635
|
+
|
636
|
+
# 添加到枚举定义中
|
637
|
+
self.enum_definitions[enum_class_name] = enum_def
|
638
|
+
self.logger.info(f" ✅ 成功处理枚举依赖: {enum_def.name} ({len(enum_def.values)} 个值)")
|
639
|
+
else:
|
640
|
+
self.logger.error(f" ❌ 枚举值解析失败: {enum_file_path}")
|
641
|
+
else:
|
642
|
+
self.logger.error(f" ❌ 未找到枚举文件: {type_name}")
|
643
|
+
|
644
|
+
except Exception as e:
|
645
|
+
self.logger.error(f" ❌ 处理枚举依赖失败 {type_name}: {e}")
|
646
|
+
import traceback
|
647
|
+
self.logger.debug(f" 详细错误: {traceback.format_exc()}")
|
648
|
+
|
649
|
+
def _find_enum_file(self, type_name: str) -> Optional[Path]:
|
650
|
+
"""
|
651
|
+
在所有包中查找枚举文件
|
652
|
+
|
653
|
+
Args:
|
654
|
+
type_name: 枚举类型名
|
655
|
+
|
656
|
+
Returns:
|
657
|
+
枚举文件路径或None
|
658
|
+
"""
|
659
|
+
# 在整个源码目录中搜索匹配的枚举文件
|
660
|
+
for root, dirs, files in os.walk(self.sources_dir):
|
661
|
+
for file in files:
|
662
|
+
if file.endswith('.java') and type_name in file:
|
663
|
+
file_path = Path(root) / file
|
664
|
+
# 检查是否确实是这个枚举类
|
665
|
+
if self._is_target_enum_file(file_path, type_name):
|
666
|
+
return file_path
|
667
|
+
return None
|
668
|
+
|
669
|
+
def _is_target_enum_file(self, file_path: Path, type_name: str) -> bool:
|
670
|
+
"""
|
671
|
+
检查文件是否是目标枚举类
|
672
|
+
|
673
|
+
Args:
|
674
|
+
file_path: Java文件路径
|
675
|
+
type_name: 目标枚举类型名
|
676
|
+
|
677
|
+
Returns:
|
678
|
+
是否为目标枚举文件
|
679
|
+
"""
|
680
|
+
try:
|
681
|
+
content = file_path.read_text(encoding='utf-8')
|
682
|
+
# 检查是否包含目标枚举类声明
|
683
|
+
enum_pattern = f'public\\s+enum\\s+{re.escape(type_name)}\\s+implements\\s+Internal\\.EnumLite'
|
684
|
+
return bool(re.search(enum_pattern, content))
|
685
|
+
except Exception:
|
686
|
+
return False
|
687
|
+
|
688
|
+
def _get_enum_class_name_from_path(self, file_path: Path) -> str:
|
689
|
+
"""
|
690
|
+
从文件路径构造完整的枚举类名
|
691
|
+
|
692
|
+
Args:
|
693
|
+
file_path: 枚举文件路径
|
694
|
+
|
695
|
+
Returns:
|
696
|
+
完整的枚举类名
|
697
|
+
"""
|
698
|
+
# 获取相对于源码目录的路径
|
699
|
+
relative_path = file_path.relative_to(self.sources_dir)
|
700
|
+
|
701
|
+
# 移除.java后缀并转换为类名
|
702
|
+
class_path = str(relative_path)[:-5] # 移除.java
|
703
|
+
class_name = class_path.replace('/', '.')
|
704
|
+
|
705
|
+
return class_name
|
706
|
+
|
707
|
+
def _extract_original_enum_name(self, file_path: Path) -> Optional[str]:
|
708
|
+
"""
|
709
|
+
从Java源码中提取实际的枚举类名
|
710
|
+
|
711
|
+
Args:
|
712
|
+
file_path: Java文件路径
|
713
|
+
|
714
|
+
Returns:
|
715
|
+
Java源码中定义的实际枚举类名
|
716
|
+
"""
|
717
|
+
try:
|
718
|
+
content = file_path.read_text(encoding='utf-8')
|
719
|
+
|
720
|
+
# 查找枚举类定义: public enum ClassName 或 enum ClassName
|
721
|
+
enum_pattern = r'(?:public\s+)?enum\s+(\w+)'
|
722
|
+
match = re.search(enum_pattern, content)
|
723
|
+
|
724
|
+
if match:
|
725
|
+
enum_name = match.group(1)
|
726
|
+
self.logger.info(f" 🏷️ 从Java源码提取枚举名: {enum_name}")
|
727
|
+
return enum_name
|
728
|
+
else:
|
729
|
+
# 如果没找到enum定义,可能是接口或其他类型,使用文件名
|
730
|
+
file_name = file_path.stem
|
731
|
+
self.logger.info(f" 🏷️ 未找到enum定义,使用文件名: {file_name}")
|
732
|
+
return file_name
|
733
|
+
|
734
|
+
except Exception as e:
|
735
|
+
self.logger.debug(f" 提取枚举名失败: {e}")
|
736
|
+
# 出错时使用文件名作为fallback
|
737
|
+
return file_path.stem
|
738
|
+
|
570
739
|
def _parse_map_types(self, map_content: str) -> tuple:
|
571
740
|
"""
|
572
741
|
解析map类型的键值类型
|
@@ -1143,7 +1312,7 @@ class ProtoReconstructor:
|
|
1143
1312
|
try:
|
1144
1313
|
# 生成proto文件内容
|
1145
1314
|
proto_content = self.proto_generator.generate_proto_file(
|
1146
|
-
message_def, self.message_definitions
|
1315
|
+
message_def, self.message_definitions, self.enum_definitions
|
1147
1316
|
)
|
1148
1317
|
|
1149
1318
|
# 确定输出路径并创建目录
|
generation/proto_generator.py
CHANGED
@@ -25,39 +25,55 @@ class ProtoGenerator:
|
|
25
25
|
- 符合Protobuf命名规范
|
26
26
|
"""
|
27
27
|
|
28
|
-
def generate_proto_file(self, message_def: MessageDefinition,
|
28
|
+
def generate_proto_file(self, message_def: MessageDefinition,
|
29
|
+
all_messages: Dict[str, MessageDefinition],
|
30
|
+
all_enums: Dict[str, EnumDefinition] = None) -> str:
|
29
31
|
"""
|
30
32
|
生成完整的proto文件内容
|
31
33
|
|
32
34
|
Args:
|
33
35
|
message_def: 要生成的消息定义
|
34
36
|
all_messages: 所有消息定义的字典,用于依赖解析
|
37
|
+
all_enums: 所有枚举定义的字典,用于依赖解析
|
35
38
|
|
36
39
|
Returns:
|
37
40
|
完整的proto文件内容字符串
|
38
41
|
"""
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
lines
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
42
|
+
try:
|
43
|
+
if not message_def:
|
44
|
+
raise ValueError("消息定义不能为空")
|
45
|
+
|
46
|
+
if not message_def.name:
|
47
|
+
raise ValueError("消息名称不能为空")
|
48
|
+
|
49
|
+
lines = []
|
50
|
+
|
51
|
+
# 1. 文件头
|
52
|
+
lines.extend(self._generate_file_header())
|
53
|
+
|
54
|
+
# 2. 包声明
|
55
|
+
if message_def.package_name:
|
56
|
+
lines.extend(self._generate_package_declaration(message_def.package_name))
|
57
|
+
|
58
|
+
# 3. 导入语句
|
59
|
+
imports = self._collect_imports(message_def, all_messages, all_enums)
|
60
|
+
if imports:
|
61
|
+
lines.extend(self._generate_imports(imports))
|
62
|
+
|
63
|
+
# 4. Java选项
|
64
|
+
if message_def.package_name:
|
65
|
+
lines.extend(self._generate_java_options(message_def.package_name))
|
66
|
+
|
67
|
+
# 5. 消息定义
|
68
|
+
lines.extend(self._generate_message_definition(message_def, all_enums))
|
69
|
+
|
70
|
+
return '\n'.join(lines)
|
71
|
+
|
72
|
+
except Exception as e:
|
73
|
+
from utils.logger import get_logger
|
74
|
+
logger = get_logger("proto_generator")
|
75
|
+
logger.error(f"❌ 生成proto文件失败 {message_def.name if message_def else 'Unknown'}: {e}")
|
76
|
+
raise
|
61
77
|
|
62
78
|
def generate_enum_proto_file(self, enum_def: EnumDefinition,
|
63
79
|
all_messages: Dict[str, MessageDefinition] = None,
|
@@ -73,23 +89,39 @@ class ProtoGenerator:
|
|
73
89
|
Returns:
|
74
90
|
完整的proto文件内容字符串
|
75
91
|
"""
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
92
|
+
try:
|
93
|
+
if not enum_def:
|
94
|
+
raise ValueError("枚举定义不能为空")
|
95
|
+
|
96
|
+
if not enum_def.name:
|
97
|
+
raise ValueError("枚举名称不能为空")
|
98
|
+
|
99
|
+
if not enum_def.values:
|
100
|
+
raise ValueError(f"枚举 {enum_def.name} 没有定义任何值")
|
101
|
+
|
102
|
+
lines = []
|
103
|
+
|
104
|
+
# 1. 文件头
|
105
|
+
lines.extend(self._generate_file_header())
|
106
|
+
|
107
|
+
# 2. 包声明
|
108
|
+
if enum_def.package_name:
|
109
|
+
lines.extend(self._generate_package_declaration(enum_def.package_name))
|
110
|
+
|
111
|
+
# 3. Java选项
|
112
|
+
if enum_def.package_name:
|
113
|
+
lines.extend(self._generate_java_options(enum_def.package_name))
|
114
|
+
|
115
|
+
# 4. 枚举定义
|
116
|
+
lines.extend(self._generate_enum_definition(enum_def))
|
117
|
+
|
118
|
+
return '\n'.join(lines)
|
119
|
+
|
120
|
+
except Exception as e:
|
121
|
+
from utils.logger import get_logger
|
122
|
+
logger = get_logger("proto_generator")
|
123
|
+
logger.error(f"❌ 生成枚举proto文件失败 {enum_def.name if enum_def else 'Unknown'}: {e}")
|
124
|
+
raise
|
93
125
|
|
94
126
|
def generate_enums_file(self, enum_defs: List[EnumDefinition], package_name: str) -> str:
|
95
127
|
"""
|
@@ -147,12 +179,13 @@ class ProtoGenerator:
|
|
147
179
|
''
|
148
180
|
]
|
149
181
|
|
150
|
-
def _generate_message_definition(self, message_def: MessageDefinition) -> List[str]:
|
182
|
+
def _generate_message_definition(self, message_def: MessageDefinition, all_enums: Dict[str, EnumDefinition] = None) -> List[str]:
|
151
183
|
"""
|
152
184
|
生成消息定义
|
153
185
|
|
154
186
|
Args:
|
155
187
|
message_def: 消息定义对象
|
188
|
+
all_enums: 所有枚举定义的字典
|
156
189
|
|
157
190
|
Returns:
|
158
191
|
消息定义的行列表
|
@@ -161,12 +194,12 @@ class ProtoGenerator:
|
|
161
194
|
|
162
195
|
# 生成oneof字段(oneof字段内部也按tag排序)
|
163
196
|
for oneof in message_def.oneofs:
|
164
|
-
lines.extend(self._generate_oneof_definition(oneof))
|
197
|
+
lines.extend(self._generate_oneof_definition(oneof, all_enums))
|
165
198
|
|
166
199
|
# 生成常规字段(按tag排序)
|
167
200
|
sorted_fields = sorted(message_def.fields, key=lambda field: field.tag)
|
168
201
|
for field in sorted_fields:
|
169
|
-
lines.append(self._generate_field_definition(field))
|
202
|
+
lines.append(self._generate_field_definition(field, all_enums))
|
170
203
|
|
171
204
|
lines.append('}')
|
172
205
|
return lines
|
@@ -191,43 +224,69 @@ class ProtoGenerator:
|
|
191
224
|
lines.append('}')
|
192
225
|
return lines
|
193
226
|
|
194
|
-
def _generate_oneof_definition(self, oneof) -> List[str]:
|
227
|
+
def _generate_oneof_definition(self, oneof, all_enums: Dict[str, EnumDefinition] = None) -> List[str]:
|
195
228
|
"""生成oneof字段定义(字段按tag排序)"""
|
196
229
|
lines = [f' oneof {oneof.name} {{']
|
197
230
|
|
198
231
|
# 对oneof内部的字段按tag排序
|
199
232
|
sorted_fields = sorted(oneof.fields, key=lambda field: field.tag)
|
200
233
|
for field in sorted_fields:
|
201
|
-
field_type = self._resolve_field_type(field)
|
234
|
+
field_type = self._resolve_field_type(field, all_enums)
|
202
235
|
lines.append(f' {field_type} {field.name} = {field.tag};')
|
203
236
|
|
204
237
|
lines.append(' }')
|
205
238
|
return lines
|
206
239
|
|
207
|
-
def _generate_field_definition(self, field: FieldDefinition) -> str:
|
240
|
+
def _generate_field_definition(self, field: FieldDefinition, all_enums: Dict[str, EnumDefinition] = None) -> str:
|
208
241
|
"""
|
209
242
|
生成单个字段定义
|
210
243
|
|
211
244
|
Args:
|
212
245
|
field: 字段定义对象
|
246
|
+
all_enums: 所有枚举定义的字典
|
213
247
|
|
214
248
|
Returns:
|
215
249
|
字段定义字符串
|
216
250
|
"""
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
251
|
+
try:
|
252
|
+
if not field:
|
253
|
+
raise ValueError("字段定义不能为空")
|
254
|
+
|
255
|
+
if not field.name:
|
256
|
+
raise ValueError("字段名称不能为空")
|
257
|
+
|
258
|
+
if field.tag is None or field.tag <= 0:
|
259
|
+
raise ValueError(f"字段 {field.name} 的标签无效: {field.tag}")
|
260
|
+
|
261
|
+
if not field.type_name:
|
262
|
+
raise ValueError(f"字段 {field.name} 的类型不能为空")
|
263
|
+
|
264
|
+
field_type = self._resolve_field_type(field, all_enums)
|
265
|
+
|
266
|
+
if not field_type:
|
267
|
+
raise ValueError(f"字段 {field.name} 无法解析类型: {field.type_name}")
|
268
|
+
|
269
|
+
if field.rule == 'repeated':
|
270
|
+
return f' repeated {field_type} {field.name} = {field.tag};'
|
271
|
+
else:
|
272
|
+
return f' {field_type} {field.name} = {field.tag};'
|
273
|
+
|
274
|
+
except Exception as e:
|
275
|
+
from utils.logger import get_logger
|
276
|
+
logger = get_logger("proto_generator")
|
277
|
+
logger.error(f"❌ 生成字段定义失败 {field.name if field else 'Unknown'}: {e}")
|
278
|
+
raise
|
223
279
|
|
224
|
-
def _collect_imports(self, message_def: MessageDefinition,
|
280
|
+
def _collect_imports(self, message_def: MessageDefinition,
|
281
|
+
all_messages: Dict[str, MessageDefinition],
|
282
|
+
all_enums: Dict[str, EnumDefinition] = None) -> Set[str]:
|
225
283
|
"""
|
226
284
|
收集需要导入的proto文件
|
227
285
|
|
228
286
|
Args:
|
229
287
|
message_def: 当前消息定义
|
230
288
|
all_messages: 所有消息定义的字典
|
289
|
+
all_enums: 所有枚举定义的字典
|
231
290
|
|
232
291
|
Returns:
|
233
292
|
导入路径的集合
|
@@ -236,21 +295,22 @@ class ProtoGenerator:
|
|
236
295
|
|
237
296
|
# 检查常规字段依赖
|
238
297
|
for field in message_def.fields:
|
239
|
-
import_path = self._get_field_import_path(field, message_def.package_name, all_messages)
|
298
|
+
import_path = self._get_field_import_path(field, message_def.package_name, all_messages, all_enums)
|
240
299
|
if import_path:
|
241
300
|
imports.add(import_path)
|
242
301
|
|
243
302
|
# 检查oneof字段依赖
|
244
303
|
for oneof in message_def.oneofs:
|
245
304
|
for field in oneof.fields:
|
246
|
-
import_path = self._get_field_import_path(field, message_def.package_name, all_messages)
|
305
|
+
import_path = self._get_field_import_path(field, message_def.package_name, all_messages, all_enums)
|
247
306
|
if import_path:
|
248
307
|
imports.add(import_path)
|
249
308
|
|
250
309
|
return imports
|
251
310
|
|
252
311
|
def _get_field_import_path(self, field: FieldDefinition, current_package: str,
|
253
|
-
all_messages: Dict[str, MessageDefinition]
|
312
|
+
all_messages: Dict[str, MessageDefinition],
|
313
|
+
all_enums: Dict[str, EnumDefinition] = None) -> str:
|
254
314
|
"""
|
255
315
|
根据字段获取导入路径
|
256
316
|
|
@@ -258,6 +318,7 @@ class ProtoGenerator:
|
|
258
318
|
field: 字段定义
|
259
319
|
current_package: 当前包名
|
260
320
|
all_messages: 所有消息定义
|
321
|
+
all_enums: 所有枚举定义
|
261
322
|
|
262
323
|
Returns:
|
263
324
|
导入路径字符串,如果不需要导入则返回None
|
@@ -296,7 +357,16 @@ class ProtoGenerator:
|
|
296
357
|
if field.type_name in generic_types:
|
297
358
|
return None
|
298
359
|
|
299
|
-
#
|
360
|
+
# 检查是否为枚举类型
|
361
|
+
if all_enums:
|
362
|
+
for enum_full_name, enum_def in all_enums.items():
|
363
|
+
# 检查是否匹配混淆的枚举名或原始枚举名
|
364
|
+
enum_class_name = enum_full_name.split('.')[-1] # 获取类名部分
|
365
|
+
if field.type_name == enum_class_name or field.type_name == enum_def.name:
|
366
|
+
# 生成枚举文件的导入路径
|
367
|
+
return self._class_name_to_import_path(enum_full_name)
|
368
|
+
|
369
|
+
# 解析完整类名(消息类型)
|
300
370
|
full_class_name = self._resolve_full_class_name(field.type_name, current_package, all_messages)
|
301
371
|
if full_class_name:
|
302
372
|
return self._class_name_to_import_path(full_class_name)
|
@@ -354,7 +424,7 @@ class ProtoGenerator:
|
|
354
424
|
package_path = '/'.join(parts[:-1])
|
355
425
|
return f"{package_path}/{proto_name}"
|
356
426
|
|
357
|
-
def _resolve_field_type(self, field: FieldDefinition) -> str:
|
427
|
+
def _resolve_field_type(self, field: FieldDefinition, all_enums: Dict[str, EnumDefinition] = None) -> str:
|
358
428
|
"""
|
359
429
|
解析字段的最终类型名
|
360
430
|
|
@@ -394,6 +464,14 @@ class ProtoGenerator:
|
|
394
464
|
if field.type_name == 'message':
|
395
465
|
return self._generate_message_type_name(field.name)
|
396
466
|
|
467
|
+
# 检查是否为枚举类型,如果是则使用原始枚举名
|
468
|
+
if all_enums:
|
469
|
+
for enum_full_name, enum_def in all_enums.items():
|
470
|
+
enum_class_name = enum_full_name.split('.')[-1] # 获取类名部分
|
471
|
+
if field.type_name == enum_class_name:
|
472
|
+
# 使用原始枚举名而不是混淆名
|
473
|
+
return enum_def.name
|
474
|
+
|
397
475
|
# 已知的具体类型名,提取简单类型名
|
398
476
|
if '.' in field.type_name:
|
399
477
|
# 从完整类名中提取简单类型名
|
parsing/java_parser.py
CHANGED
@@ -224,7 +224,7 @@ class JavaParser:
|
|
224
224
|
return (
|
225
225
|
'implements Internal.EnumLite' in content and
|
226
226
|
'enum ' in content and
|
227
|
-
'forNumber(' in content
|
227
|
+
('forNumber(' in content or 'getNumber()' in content)
|
228
228
|
)
|
229
229
|
|
230
230
|
def _extract_enum_values(self, content: str) -> List[tuple]:
|
pyproject.toml
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
.git/COMMIT_EDITMSG,sha256=
|
1
|
+
.git/COMMIT_EDITMSG,sha256=OJTijUraf8zRGEsGyQ_Q3EFxeT206AEhvBZe9ph_cdI,28
|
2
2
|
.git/FETCH_HEAD,sha256=1W_vttZCTHf9DXnCOhWjilD3kVx9WT2Xu85YBetV3ok,191
|
3
3
|
.git/HEAD,sha256=ly8yuQLWQE8njkYAapHLPJ1xVg6_fMgQjCoHqKvFIdw,21
|
4
4
|
.git/config,sha256=9ZAySfDWBdI-K9eOXyrEQOhiX68AiaP0Z4CLzH07H10,399
|
@@ -17,34 +17,42 @@
|
|
17
17
|
.git/hooks/push-to-checkout.sample,sha256=pT0HQXmLKHxt16-mSu5HPzBeZdP0lGO7nXQI7DsSv18,2783
|
18
18
|
.git/hooks/sendemail-validate.sample,sha256=ROv8kj3FRmvACWAvDs8Ge5xlRZq_6IaN3Em3jmztepI,2308
|
19
19
|
.git/hooks/update.sample,sha256=jV8vqD4QPPCLV-qmdSHfkZT0XL28s32lKtWGCXoU0QY,3650
|
20
|
-
.git/index,sha256=
|
20
|
+
.git/index,sha256=1ZM4jn-WDgRjp1f-_9M6vBnK5C1UuidTQaIKeFiExKs,2255
|
21
21
|
.git/info/exclude,sha256=ZnH-g7egfIky7okWTR8nk7IxgFjri5jcXAbuClo7DsE,240
|
22
|
-
.git/logs/HEAD,sha256=
|
23
|
-
.git/logs/refs/heads/iyue,sha256=
|
24
|
-
.git/logs/refs/remotes/gitlab/iyue,sha256=
|
22
|
+
.git/logs/HEAD,sha256=KQbF4Gvsf1mX1Oincff6xO_eckSlWyiiuaEuggXtB3c,2515
|
23
|
+
.git/logs/refs/heads/iyue,sha256=KQbF4Gvsf1mX1Oincff6xO_eckSlWyiiuaEuggXtB3c,2515
|
24
|
+
.git/logs/refs/remotes/gitlab/iyue,sha256=MXaTNGsoegnTSIVXcmAVD4v2x2eYUJ7mT_klhYK_POY,1768
|
25
25
|
.git/logs/refs/remotes/origin/HEAD,sha256=4vCPTgC0N80jhmkFXNUlYvHtGllYJkQTGZEn6LlqZgs,163
|
26
|
-
.git/logs/refs/remotes/origin/iyue,sha256=
|
26
|
+
.git/logs/refs/remotes/origin/iyue,sha256=q1Kmpw0iGhVPUH8py7HBY_0VtLLXRvfzwoKBRx9JBbc,1768
|
27
27
|
.git/objects/09/a92517fe9eeb33d2fd7c979e01d163665f7abc,sha256=wyFL5jJ16f0xCpL1MB5EiJvs2opieE0hMEmyDpUV3ps,9356
|
28
|
+
.git/objects/0c/7b11b535a18f311aedadbe91e14fc9fe6b50d9,sha256=1nmf96foQAXQrObKn9gOPugLMlpj7soMif1MBARmKd8,427
|
28
29
|
.git/objects/14/d323d58fb90c209a730c17e23fd82a6c735fc1,sha256=rTCuhPM5LYusLIMDv7CLC557SlRFvvbBzgr4jwrjMVg,426
|
29
30
|
.git/objects/15/eb3f02479e633439ec83c143e703f8448043a1,sha256=duJXtvq_NNhYKG7WdejXgoMlyHIaCUG5jv9SJpU_orc,14711
|
30
31
|
.git/objects/18/89a4fb55eb3abdc528ce87f0cea039278c06fd,sha256=Uz8TPtDNnPWR5pfsIx7tMDCDFBdWLIkaPcnYPIJ12oM,2880
|
32
|
+
.git/objects/1a/4435c23bdf5543e3270aa69361c9c68f205efb,sha256=iNhiztqM2EYiQYjGpjBWg9h0l6YNbQHYafclGl1DB5I,96
|
31
33
|
.git/objects/20/cf56ec106bcd66420dd000279f983571b918b6,sha256=0dwZwG7CpR7yYYNvgYDxHLPj2P7eRLK7fTW_En419pk,166
|
32
34
|
.git/objects/21/55b64d52922c88527c102d62f23e5c2abbae79,sha256=6LLW2HrSfqqVwvO59yc-EcUp6MHw6zfHwu8TB775dII,13853
|
33
35
|
.git/objects/23/bfbca38e177bcbb423dd782c35b19d127a5ab0,sha256=hYW2b3t3bVGNh4pqyyA7DMlyF4LfNZco5NwedWMwwuI,3700
|
34
36
|
.git/objects/26/1f67f3b731b32f6d77de9dd7be2d61e2a14ace,sha256=mcasCBpCulVy2N-X_d2hg8567PdhZRof4ea5nYoelJM,96
|
35
37
|
.git/objects/29/4708b82b343e04e7a6685f5cd1287f3d17f7a9,sha256=YE3F4zucGeMHEw7bTEvQc0uJEUUCfEgw-mZTWupuNhA,96
|
38
|
+
.git/objects/2b/64656ce2df6259c822733b03f26eb828fe9269,sha256=62hS2mVKecw3uXd8yGs7djzHNeouyhbP6KhR1gGYosg,166
|
36
39
|
.git/objects/2c/fcddd7eebeb4eee0562dc384a79366bc7b04bb,sha256=FHxE2giqoo-1IB9Q8i_XQUypGvQbRlRnTK0sbsNDcJE,96
|
40
|
+
.git/objects/2d/a515dbb88d31400d5b84d41caf270e9309232d,sha256=cP9jUGnu5pVr9ks-YJZSEjsgb7GKD2XEr8XvQosqs2s,122
|
37
41
|
.git/objects/2e/2c1c42f5ac5d665cc672d3792078b756d9ab0e,sha256=5LG3jHGORJeswNw0lz5dc6QSsxztyMstbRDADhZDnZY,166
|
38
42
|
.git/objects/33/181441ab38eded005db356da89b54c7d29f452,sha256=iIM6a2aGs_TGZjxHKnkYYyZj_hA77nAF7r2lMOtN1VA,2021
|
39
43
|
.git/objects/33/52dfa8f5d9eb46cc98ea7ccecf02e4d9df95f7,sha256=KNAvQNdSalt8CxCZVVb8e6KBC4zqVtusT5MriFLPbIQ,4409
|
40
44
|
.git/objects/34/192f0df5f5b694c881d086019eda349608d222,sha256=zcWIY4oDFz6n17MRjbwFrN1o-HEY0--gqK96dohmZfE,4901
|
41
45
|
.git/objects/35/8bace20b731ff1bbb256d2a0158dfc84720978,sha256=hEPGT0bRzT1GlXErWRWJ7ogflTWj3SutlHRKCBH1TII,426
|
46
|
+
.git/objects/38/907894973091f8e9b224a13fe596e1cb309cf5,sha256=XBdeTonV9fezxtk3kzI6DmEPb3WftSPaIWT30MKKw1E,802
|
42
47
|
.git/objects/3c/6f0120229cc2cd8123efbeb7f186eb0a485f29,sha256=iyh7Xt-m7vou3slm58k8xSl3Cn2yYXTuv5WziSWHrW0,802
|
48
|
+
.git/objects/3c/c3ca375694d43e35cdc88d4a5d067e510df427,sha256=A79FHqMtws8sYqMG9CmHWbEPaxF8htYc_E2wVuMi2u4,6570
|
49
|
+
.git/objects/3d/3cc6aab4eefed46c77dda27503bebcce88962c,sha256=6NOdtY3stGMa7_trzPhvb2T21Ng0WqFIJhkPhsW-ACU,420
|
43
50
|
.git/objects/3e/d953d5ed2c66722045f5e39d068696a0853b4f,sha256=GelU4l-EVo8Y5rXSksIEnewIasEr9N54pTJcgrY3VVk,166
|
44
51
|
.git/objects/40/84f4567d983a977c49598b7d886e46b13ff50b,sha256=R3w6EvxpJRcVuJvbCslrGDK07kcOjECGGosj5tO-JBo,426
|
45
52
|
.git/objects/44/4af3a0d68ba81976f67c7b638c9b0db4640709,sha256=s__MvPzT4Ndsip8kgkfMh-Y0oZ28tv2kVqaz_ExQKvU,166
|
46
53
|
.git/objects/48/369b05749e384be9be58e5f943f3a0040d0f37,sha256=KP9dXx-XniZuIEXESlrL_MWWi55zGiFr7xtmp3oD67o,8551
|
47
54
|
.git/objects/4b/43f5f577e1cdc35f8e06d178d8f5c892034061,sha256=eawBjiWutNeKjIzvNonVMMKUVsz_-jn3Uew_NsKQJ-I,1150
|
55
|
+
.git/objects/4b/442fccf86631bf5196ee5b48ab8d58228ab59c,sha256=5LFRUcM6cV7lW29hge4-op6hYtbn5SZ6Ouz_4tW6k8w,4842
|
48
56
|
.git/objects/4c/16984be6ef7b24d01604821e9728cb579acd69,sha256=sy5h3rBsk0JcPlpA7L0WhJESaYjNZnTvrB1F1CRPSJQ,167
|
49
57
|
.git/objects/4d/6d457bfabc4af842e5ddc2d56eb059d5dfdc9d,sha256=HLQ8aGvln8ZuhdINhhbr_aTt2BttkJOY8k6LhciAMLE,672
|
50
58
|
.git/objects/55/6723fdd4f525eed41c52fa80defca3f0c81c47,sha256=vwGNz5lxU_wrrRWVPU64TccYo4Vo4uUGC3-GwVIs1xs,4520
|
@@ -53,16 +61,21 @@
|
|
53
61
|
.git/objects/5a/11f9d70791e06a0570e01d3dcbbae39cde55db,sha256=wjd8hb5D03icknLFsPqMas6xAFfG30_Wg-PJJH03ezg,13722
|
54
62
|
.git/objects/5c/715dcb05e32db7a7a3b030f07524bdd8a56849,sha256=wLXhy_1PP8n3Gd6NsvY1eFlK1pjkIjW35im_BD-0yMU,426
|
55
63
|
.git/objects/5d/e2e9d536c2c0b78e8f9b3b61daa531a55332dc,sha256=Wiyz9xFF5A95FEnxZULmV9TSJf0-erTb_qIhLFIvmag,6558
|
64
|
+
.git/objects/5e/9daac72a48ce60688ab2eeddcc3d9152329e20,sha256=7sVW8qTIBHufxZ3WCnNwmX33RpciuLTPritqr84UmKk,426
|
56
65
|
.git/objects/65/a4f0ada7519f8b1e6a7c7e287541b8effde9fd,sha256=jSGkVjAMcm2nrF6w_0U7lmzoBgwIJaf4P8POOlABxEQ,188
|
57
66
|
.git/objects/66/7291e131d4769e7d028346a0cc7a0c05d500e5,sha256=3D6kzCQW7DkYuwARYA74Tlfzeaiaob9ux4YE6hYohas,4026
|
67
|
+
.git/objects/67/f27f77274917580e687fd00ca18da0660215c1,sha256=dxM9_T9v3VBrSXF3dbH6zsmbGQJn43-_DnHiDYs8108,15542
|
58
68
|
.git/objects/67/f54a4a3ede6749acc7c718ad97a86634215b5e,sha256=n0_tiP-u_DP9uhXCryaz98mNJYcUX8RYiS48FvxIxCA,744
|
69
|
+
.git/objects/6f/90fcf9eacdc794313471f54279011a787c8760,sha256=Id_lE745shxM2OIWcJkH2Y3p9ji3pwxqDId8b2LqgTc,165
|
59
70
|
.git/objects/70/ded03ee69f30850c938a8129be308cb30772d9,sha256=d_DDP1Jj_KnSDtbZRKOomzOvV9ySvlaiapwSEXhO0DE,1012
|
60
71
|
.git/objects/76/311aa8e59d780763e0d66787067cc5d9613a67,sha256=J9Xy8ESXbWUbC_4sA0KumGVKm09tzlqA8C5oJ63a_b4,2167
|
61
72
|
.git/objects/78/3e7e252c20e73e33615c703174766036546ff6,sha256=cQ-PXyvzEYjb2Lr24anO9aGui5IxBxZCYXL6zZRc0xc,810
|
62
73
|
.git/objects/7c/00eec7ae9ef5f94fc337e5c8f9793a2a48810d,sha256=Ju-Yuy5EARcIThU4vkHrZuHQWu3MjXSZYGtBDTWR18c,96
|
74
|
+
.git/objects/7e/5935774ee7a85f2523427c9100f9c578ac172f,sha256=ywEI3w5JgIOgFDJ6cxc6NJnLfEr2Cjynke78KmwJhSE,165
|
63
75
|
.git/objects/8c/809c42c7ae13007fd885ee7bcffae7acf2c520,sha256=HYoU3_cZUGur3rWrgRvzHRAv0JfrXgc34R8UeGbC5Bc,14180
|
64
76
|
.git/objects/8d/44142ae2d6dbb59d4ebed8587bccd051e5766b,sha256=l1G5ZzQBQW8Lxd3WvGLRcY6quM6dBL4zdNT5ovjv3Dc,802
|
65
77
|
.git/objects/8d/4a5767bef0c342f1660526f9671c0944922c40,sha256=kP0nfEnyNmuEJ4wLQabhPPx60OIa5Dxqn7R9Ni89CqY,1900
|
78
|
+
.git/objects/92/c6018b4fb8e3b6c2f3f3054a56f2bfaca27470,sha256=Oox2busLjPpkXw6To9NfgDMXHuknlICbhyhyTWUT1lU,96
|
66
79
|
.git/objects/94/ce01b61b90d1fb21d2d339fbeb22e821b6f413,sha256=oSSA97T7TGnstzHDjUrdwzwZO4d1qIUyjo6lz_EbNbM,122
|
67
80
|
.git/objects/95/295a15779ebefd563ec777c3d3cced7e8d0209,sha256=IIN8_K0K-3LAkUI4Ra3DS8yUsfpsqteSDGhgvRpSfZ4,426
|
68
81
|
.git/objects/97/56fe0931216a7c40cbf250e1ab8a6dfd589f13,sha256=Su7Q-bXO0K9QKEGC249NVuUS62xmQs5TgWfEmdbauaI,97
|
@@ -70,12 +83,17 @@
|
|
70
83
|
.git/objects/9a/e313cdf64cd82416c1238eb493e6396f799f12,sha256=9bPRhebwMVqtGqJUxfVq-TEUxceuOdSvicWe1H8F7Ks,876
|
71
84
|
.git/objects/9e/9978522bc8ca79133d7c11ef8ca3fe3c7eed0a,sha256=FkHx7Pp6DCZ5e4bRo2RjRU875YBgl9tEw7Z_9Rii8cE,13109
|
72
85
|
.git/objects/9f/b57064e0c53ed80af8507acaab718a1e80184e,sha256=DGx0Ie-bppvghrmiV5w7mn24c6YlvHvYLIQsm-_jzsQ,635
|
86
|
+
.git/objects/a0/d630c3f6024b196d4ee933ab13a32905efdaaa,sha256=nNyB1T2FVU2vm3f-aAjEl-vBLbxYsKHibRIPhqCX9jQ,426
|
73
87
|
.git/objects/a3/cedc28e563a1845a7860161b39b0fe58d5f0d3,sha256=Vee0H8dhSj4ERNDSAnRU6vebs0tbY1-lgYr1Nz5X7bc,122
|
74
88
|
.git/objects/a5/b7e4e1b63bfb65288f6553687aaabcfb4d51b1,sha256=9tl9xb48EdvQk9GIg6mEzXSwqUgD6yEVZx-sVxaQVKw,1064
|
89
|
+
.git/objects/ae/046e08176523e8a98dc7294436319f724db13c,sha256=9hdXV7BKRhfFTOz3FSuoYwGrcjvk2uTPo3CD1czuKcU,803
|
90
|
+
.git/objects/b0/7a43f0462bf25a8b1f4c0ca60c1b533dae1dde,sha256=JWzlC7nXy3RXBUxEcge1_ciMw6q3C5phffVck9MVlJk,404
|
75
91
|
.git/objects/b3/28dc445ee33220db9359370fc0089a77174101,sha256=cipG_34_tKM5VPfYW2wRCmBYOqlmTBIUjakeph9sfl4,3652
|
76
92
|
.git/objects/b3/d2b3037bede44e7e4d18dc99419f8c712c9c62,sha256=OIWo7wvTTKYZkYkxcZrOtnvfqgGlPezaE6sglITaF_Y,1156
|
77
93
|
.git/objects/c3/93db4841dbbb8acf54e9af12b6705c9f5ecde9,sha256=g36XyKIObniMsMBcIzsoG7f82SzOgn_Bdx-V9Rezjbg,3864
|
78
94
|
.git/objects/c3/c8594874dd9ff9c21662fd06cac9b5baadbba0,sha256=5YUWDZ-BMZvyOJksaoiKeZC0N-eRcOJemLb_jNUHcC4,14309
|
95
|
+
.git/objects/c8/2a656fe6b5d479b327cdf5fe3bf60db987a2a2,sha256=YNf8mWKTqJHeBDQCTfOU8b0ZDDSfbAb1fBGGDsySrHk,426
|
96
|
+
.git/objects/c8/cb3bb9552dcf6a368a1418996c4b925db2d8ab,sha256=3AlcdjxamfHKOBmAuectuKNLwOYa1BovnOmVElfwPb4,13097
|
79
97
|
.git/objects/c9/a6ca8f8efee4a5632e9a655ced29f1b708f35e,sha256=IOmxZbePi1cWHt2HzdDNtWy0SYR2XvigDkGK2fyNbWU,4957
|
80
98
|
.git/objects/c9/cdef9ab627b874ffe6455a47583a75bf16496d,sha256=7y908SUa7dmWJyNXDKS_tOdrcfmI6OjZc7zvtL38M5Y,428
|
81
99
|
.git/objects/cd/2d6c229438c6b1c694b9392a85888d89ef49c1,sha256=IW9iGk3Eb-i_Ht64HQcltVp27ziQHz5IP6k5p57YFtY,122
|
@@ -83,6 +101,8 @@
|
|
83
101
|
.git/objects/d9/6d7456245232b3e159dcf691f11e51224c557a,sha256=3w45hxiT2rn6ljSdgo36fHMMWZt30r5C1FPvbnjq9tc,597
|
84
102
|
.git/objects/db/beedb30613f79ae3ff67df1428cf8ade223711,sha256=tTGayiwSvdy-uBiXQKRhNnToZ_dc1BmeXZ2mltuRfxY,3812
|
85
103
|
.git/objects/df/f8f64cee2b97df7d86f73207c5e690f98f0208,sha256=eRT2hUSKxaIPfQVnE9NaRGxbAvBVCSreSOGzVGtd7As,213
|
104
|
+
.git/objects/e2/b7433fbfbfac5bc800a962be2f4adbed145b42,sha256=eqX17kz7wSegBgSYS8q4oMPsZVvNWoDbpCRw7oI5PmE,15527
|
105
|
+
.git/objects/e4/1e5aa2bc3074c2014d01ab1f603f69c327a83f,sha256=5daI7Vb9ehvOwoqgaBAKilm6Z6YdA4Rk4MFjJChbWpA,379
|
86
106
|
.git/objects/e8/1433b6ad92206cdadbee1f474b4f99383314cb,sha256=mRMdmx6wCs6b-63QL72Iutm2AUVCOIYs7J5XbAsLluc,426
|
87
107
|
.git/objects/e8/2f42ea26b8bf4f0bc92c0648ac8f190f14226d,sha256=xtbEwloZnqXdNdViAevzyprosfPQ1P--xAu6URGlaYI,155
|
88
108
|
.git/objects/e9/a15996cb55ac72aeb6611d26e8d22246589943,sha256=sTn6X3xMp3_WYpj1CmP2hDqviX86aJHTCzzi_ZTpBKw,4643
|
@@ -92,33 +112,34 @@
|
|
92
112
|
.git/objects/f2/2bfffda9fb6a7f37bed04b7c40c9466ef09454,sha256=goQNyEV3NqzS28mMXuus1SWzwb8yXnvEPef14Ugzh5Q,750
|
93
113
|
.git/objects/f5/18c69a6e1bf3052b79da01502b2837ea58f0f4,sha256=r98SFbCvw7yeAYTjzkw-2VMhOVbpm79FLZQiC5A1-pw,123
|
94
114
|
.git/objects/f7/25a430eb3364460ba854dbc8809edc21dc6c70,sha256=LdyMmAWGLWbn5G5fC7eAPi4NFOboKcJ6iJJdxENSUCk,2505
|
115
|
+
.git/objects/fa/fc981b0d80d8d0323c04365785f66996ed5211,sha256=t9N37kVA7j_i4nz0dDMHOQpvziBu5MUpDlG06Hdj77c,4395
|
95
116
|
.git/objects/fc/e15b9dbffd9f37b1f2d46944ee2d0394df6565,sha256=81qdzKkVZ5C_1oej2Mm0q2RLifilVFolIs95mrUfpg4,163
|
96
117
|
.git/objects/fd/267d9de63212db235135fa6834f62572224fc6,sha256=vzhjdZvcXQ8Fgja_XwvbBkuLuRhzSYf_3mckDyZEoso,426
|
97
118
|
.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.idx,sha256=KRv1SBEe9bYL9d5V301LwPOBqFs3tMnB0dl4PriMMIw,2416
|
98
119
|
.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.pack,sha256=R4oMXhr-NcPAUBXStCbAaUvGUDW_SBECmPIbiB9Gy48,42003
|
99
120
|
.git/objects/pack/pack-289f7bb06603881c49190e6036de6390223baf77.rev,sha256=22_3sqyTNB5IbwAK5oCqNz0UxDDqoZ5jcF7p_44Lalo,244
|
100
121
|
.git/packed-refs,sha256=4H0m4wd6q98wZkBk7WfvVeTBuuxQdTE65XxsswYP-oQ,112
|
101
|
-
.git/refs/heads/iyue,sha256=
|
102
|
-
.git/refs/remotes/gitlab/iyue,sha256=
|
122
|
+
.git/refs/heads/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
|
123
|
+
.git/refs/remotes/gitlab/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
|
103
124
|
.git/refs/remotes/origin/HEAD,sha256=G8pFPTbCqnJ2IkCzz9J-STqOXWU6TrlXfpt1wx5bUWE,30
|
104
|
-
.git/refs/remotes/origin/iyue,sha256=
|
125
|
+
.git/refs/remotes/origin/iyue,sha256=R9_PlsRLn-c1Boht7Ouun-MAQQj_9PDIfKr5H-8LOmc,41
|
105
126
|
.gitignore,sha256=7KBWk3hOUkvfJh1A-RNk5jHepGKp71qPlktu8nyEptI,2085
|
106
127
|
.python-version,sha256=NxOs_9lT1XG8y-FjlRru-YinX5RcBJt_ulPwgDESZ_o,7
|
107
128
|
ARCHITECTURE.md,sha256=HiUhP4wGzy4lD01MpHjOgAhuAUwpNsEac3tZaE65kos,12047
|
108
129
|
README.md,sha256=khO65a7VGeyjyUxxXpu1W_EosoPLzJyWCol6jDVzw9k,8484
|
109
130
|
core/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
110
131
|
core/bytecode_parser.py,sha256=bv01quLoLeKHjswLU86g4w3MeZR9uh7WIJsnV2sGE2g,11399
|
111
|
-
core/info_decoder.py,sha256=
|
112
|
-
core/reconstructor.py,sha256=
|
132
|
+
core/info_decoder.py,sha256=n4A6U9jxzRLdzP48QBxBpJ6AKsccR2PWfbG8wKKqwl0,49802
|
133
|
+
core/reconstructor.py,sha256=_Kym2_gqDi76MgOK7E7DiQX447Dm8fwnPtHKpN631dM,55500
|
113
134
|
generation/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
114
|
-
generation/proto_generator.py,sha256=
|
135
|
+
generation/proto_generator.py,sha256=8Pfgr8gFw6-UodVX5JBQk6OrRbGUEQHCZ120euqN8Pg,19715
|
115
136
|
main.py,sha256=3G649-aTByEjMS4tb1A9wcO9NVUxXVSvdwGTq9hXxBI,7081
|
116
137
|
models/__init__.py,sha256=WScv63rvEl65y5CWjpb6__hvjNvjpCkl6lz1Z2u0IYc,811
|
117
138
|
models/message_definition.py,sha256=AszUZnNPSBn9SMXne5ORDBiGZz1W2pcYmU8ftGC3Mks,4873
|
118
139
|
parsing/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
119
140
|
parsing/enum_parser.py,sha256=4BjMk1NIYgt2FDZUjTZyOvFfC1uJp_MBZipVdk1tqes,6175
|
120
|
-
parsing/java_parser.py,sha256=
|
121
|
-
pyproject.toml,sha256=
|
141
|
+
parsing/java_parser.py,sha256=lFdnTzG0OeMlpzUkFDy4_mhOfW0B6gDEKO-3GfAvlVQ,21786
|
142
|
+
pyproject.toml,sha256=7pAFQe6zD5eqAkTInATLVoUlGjhfjsTtdrTJYZO1c0E,1378
|
122
143
|
requirements.txt,sha256=cQGj3IS6Kj88jbwj_jeKkokMnG-fEezWve91mfW4CJs,96
|
123
144
|
utils/__init__.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
|
124
145
|
utils/file_cache.py,sha256=eOBkfrumWg0EU1EfLESnRN1kcidi_MocxV_EWP8lEhQ,5207
|
@@ -126,7 +147,7 @@ utils/file_utils.py,sha256=N1Ei7hmyeOkIyZJFEXyNbtTrfeVF2hP-U8evXAVW2MA,4085
|
|
126
147
|
utils/logger.py,sha256=473DfzFVXzdGpiRTJGY6bBd-V5G80_P07gQqcvDChpQ,2447
|
127
148
|
utils/type_index.py,sha256=So8FYyGtR0ff-ZhVHjXUdhXiXQEujlcCEJlj7OPQMsg,12128
|
128
149
|
utils/type_utils.py,sha256=M3eB7GavxQYAVFOf3E1pO1vK9VD6_lKrutnSH1tx_Gs,14695
|
129
|
-
reproto-0.
|
130
|
-
reproto-0.
|
131
|
-
reproto-0.
|
132
|
-
reproto-0.
|
150
|
+
reproto-0.1.1.dist-info/METADATA,sha256=pIVlOz9VFGwSkENYwX2B2VdzHHvhkxotl1SL9iI1Rpw,9433
|
151
|
+
reproto-0.1.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
152
|
+
reproto-0.1.1.dist-info/entry_points.txt,sha256=6Oro9lK_2DXDgHiB3andNuIE78wxfooqacqp8yY1C-g,37
|
153
|
+
reproto-0.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|