Search code examples
reflectiongroovyintrospection

Find out a method's name in Groovy


Is there a way in Groovy to find out the name of the called method?

def myMethod() {
    println "This method is called method " + methodName
}

This, in combination with duck typing would allow for quite concise (and probably hard to read) code.


Solution

  • No, as with Java there's no native way of doing this.

    You could write an AST transform so that you could annotate the method and this could set a local variable inside the method.

    Or you can do it the good old Java way of generating a stackTrace, and finding the correct StackTraceElement with something like:

    import static org.codehaus.groovy.runtime.StackTraceUtils.sanitize
    
    def myMethod() {
      def name = sanitize( new Exception().fillInStackTrace() ).stackTrace.find {
        !( it.className ==~ /^java_.*|^org.codehaus.*/ )
      }?.methodName
    
      println "In method $name"
    }
    
    myMethod()