JavaParser如何追踪源码修改后的行号变更并构建新旧行号映射?
JavaParser 源码修改场景下的行号映射实现需求
- 日常开发中,我正使用 JavaParser 对现有Java源码做小幅修改,当前需要解决的核心问题是精准追踪修改操作带来的行号位置变化。
- 典型场景示例:自定义
ModifierVisitor逻辑,为代码中每个while循环的方法体新增一行输出语句(待处理的源码可能包含多个循环结构)。
待处理的原始源码内容如下:
public class X { public static void main(String[] args) { int a = 1; while(a < 100) { a *= 2; } } }
- 经过访问器修改后,生成的新版本源码如下:
public class X { public static void main(String[] args) { int a = 1; while(a < 100) { a *= 2; System.out.println("Hello, I am the new line"); } } }
核心待确认问题
JavaParser是否提供简便的实现方式或内置特性,可在上述修改前后的两个源码版本之间建立准确的行号映射?
我需要实现新行号到旧行号的映射关系(单向或双向均可),以上述示例场景,预期的映射规则如下:
新行号 -> 旧行号 1 -> 1 2 -> 2 3 -> 3 4 -> 4 5 -> 5 6 -> -1(原始版本中不存在该行内容) 7 -> 6 8 -> 7 9 -> 8
映射值为-1时,代表对应行是修改后新增的内容,原始版本无匹配行。
内容的提问来源于stack exchange,提问作者Markus Weninger
相关产品推荐
相关产品推荐

