0

我想对我的 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));
4

0 回答 0