package groovy.runtime.metaclass.java.lang; import groovy.lang.DelegatingMetaClass; import groovy.lang.MetaClass; import org.freeplane.plugin.script.proxy.Convertible; /** Make Convertible known to class String and let String handle Convertibles as if they were Strings * (via Convertible.getText(). */ public class StringMetaClass extends DelegatingMetaClass { public StringMetaClass(MetaClass delegate) { super(delegate); } @Override public Object invokeMethod(Object object, String methodName, Object[] arguments) { replaceConvertibleByText(arguments); return super.invokeMethod(object, methodName, arguments); } @Override public Object invokeStaticMethod(Object object, String methodName, Object[] arguments) { replaceConvertibleByText(arguments); return super.invokeStaticMethod(object, methodName, arguments); } @Override public Object invokeConstructor(Object[] arguments) { replaceConvertibleByText(arguments); return super.invokeConstructor(arguments); } private void replaceConvertibleByText(Object[] arguments) { for (int i = 0; i < arguments.length; i++) { if (arguments[i] instanceof Convertible) arguments[i] = ((Convertible) arguments[i]).getText(); } } }