Hello, I am using a closure inside an annotation over an interface method. I then decompile the class in intellij (open the .class file essentially) and I see that the closure class was created, but I dont see the class definition anywhere. I am however able to access it in code. Is this a limitation of intellij's decompiler or am I doing something wrong?
interface InterfaceTest { @DataBinding(input = {"Something fishy"}) void myFunction() } @Test fun test() { val clazz = javaClass.classLoader.loadClass("com.process.InterfaceTest") val method = clazz.getMethod("myFunction") val annotationMethod = method.getAnnotation(DataBinding::class.java).input val result : Closure<Any> = annotationMethod.java.constructors.single().newInstance(null, null) as Closure<Any> val resultVa = result.call() // This returns Something fishy } When I decompile the class in intellij, I see this public interface InterfaceTest { @com.annotations.DataBinding(input = com.process.InterfaceTest._myFunction_closure1.class) void myFunction(); } But I dont see myFunction_closure1 defined anywhere. I am however able to see the definition if I change the interface to be a regular class. (this was inside the myFunction definition). Is this because intellij assumed that myFunction will not have a body and so didnt bother displaying the closure class? class _myFunction_closure1 extends Closure implements GeneratedClosure { public _myFunction_closure1(Object _outerInstance, Object _thisObject) { super(_outerInstance, _thisObject); } public Object doCall(Object it) { return "Something fishy"; } public Object call(Object args) { return this.doCall(args); } public Object call() { return this.doCall((Object)null); } @Generated public Object doCall() { return this.doCall((Object)null); } }