如何通过在kotlin中以编程方式编译类文件来查找源文件路径



在kotlin中,包可以随机声明,这与源文件路径无关,然后编译器会在包文件夹中生成类文件。如何通过编程方式编译类文件来查找源文件路径?

示例:

package kt.notsamepackage_another
class NotSamePackageKotlin {
fun call() {
}
}

NotSamePackageKotlin.class将在文件夹中生成:/kt/notsamepackage_anort,但源文件可能在/kt/notsamepackage。

我尝试了以下方法:

  1. 反编译类文件。但是在字节码中找不到源文件路径
  2. 调整kotlin编译器参数。我想找到一个参数来输出一个包含路径关系的映射,但什么都没找到
  3. 递归遍历源文件夹。这种方法效率不高,是最后的选择

有什么方法更有效吗?

我认为这是不可能的。如果完整的源路径没有编译到字节码中,那么就无法通过编程找到它。我不知道有任何编译器参数会这样做。(当然,简单的文件名通常是在中编译的;这就是堆栈跟踪显示抛出异常的文件名和行号的方式。但不是完整路径。(

即使你的第三种方法一般也不起作用;程序通常不是在编译它们的同一台机器上运行的,所以你的代码必须做出一些非常危险的假设。

但我很好奇你为什么想知道这些。你想解决什么问题?

相关内容

  • 没有找到相关文章