最近,我一直在为JVM编程语言编写编译器,但我已经意识到了一个问题。
我想从我的编程语言访问Java方法,并且还希望Java方法可以以我的语言访问方法。问题是我需要知道Java方法签名才能在生成的字节码中调用它,反之亦然。
我一直在尝试考虑Scala如何做到这一点的任何方法。这是我的想法。
.java
文件并解析它们,然后从那里提取方法签名。 .java
文件被编译为.class
文件。然后,使用Java ASM库访问.class
文件并获取方法签名。此方法的问题在于必须首先编译.java
文件。 .java
文件是使用反射动态加载的。问题是我相信JVM不允许加载编译器类路径之外的类。 研究Scala可以与其他JVM语言一起很好地工作,但是我找不到确切的信息来实现它。
Scala如何获取其他JVM语言方法的方法签名?
答案 0 :(得分:5)
我认为您在混淆类路径和源路径:类路径上没有payment_method_view
或.java
文件,有.scala
个文件(可能在.class
内部s)。因此,对于依赖关系(在类路径上),您不需要执行任何特殊操作。它们可以对您的语言有自己的依赖性,包括项目的早期版本,但是它们已经按照定义进行了编译。
现在,对于混合项目,您在源路径上有Java和语言 ,scalac does parse Java with its own parser (i.e. your option 1)。
选项3的问题不在于“ JVM不允许加载编译器类路径之外的类”,而是反映也仅适用于类,而不适用于源文件。