我想对我的 java 代码生成器进行单元测试,因此我已将一个 janino 库导入到我的build.gradle.kts
文件中:
testImplementation("org.codehaus.janino:janino:3.1.6")
我的测试代码在 kotlin (jvm) 中,但它说:
File 'pkg1/A.java', Line 15, Column 23: Compilation of lambda expression NYI
org.codehaus.commons.compiler.CompileException: File 'pkg1/A.java', Line 15, Column 23: Compilation of lambda expression NYI
重现我的问题的源代码:
val factory = CompilerFactory()
val compiler: ICompiler = factory.newCompiler();
val classes: Map<String, ByteArray> = HashMap();
compiler.setClassFileCreator(MapResourceCreator(classes));
compiler.compile(
arrayOf<Resource>(
StringResource(
"pkg1/A.java",
"""
package pkg1;
@FunctionalInterface
interface Function<T, R> {
R apply(T var1);
}
public class A {
public static Object call(Function<Object, Object> fn, Object value)
{
return fn.apply(value);
}
public static Object test() {
return A.call(p -> p, 1L);
}
}
""".trimIndent()
)
)
)
val cl: ClassLoader = ResourceFinderClassLoader(
MapResourceFinder(classes), // resourceFinder
ClassLoader.getSystemClassLoader() // parent
);
assertEquals(1L,
cl.loadClass("pkg1.A").getDeclaredMethod("test").invoke(null));