Mercurial Hosting > nabble
diff src/nabble/naml/compiler/JavaCall.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/nabble/naml/compiler/JavaCall.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,76 @@ +package nabble.naml.compiler; + +import java.lang.reflect.Method; +import java.lang.reflect.InvocationTargetException; + +import java.util.Collection; + + +final class JavaCall implements Call { + final JavaCommand javaCommand; + final int iStack; + + JavaCall(JavaCommand javaCommand,int iStack) { + this.javaCommand = javaCommand; + this.iStack = iStack; + } + + @Override public Collection<String> getRequiredNamespaces() { + return javaCommand.getRequiredNamespaces(); + } + + Object invoke(RunState runState, Object... args) + throws IllegalAccessException, InvocationTargetException + { + Object obj = javaCommand.isStatic ? null : runState.getFromStack(iStack); + return javaCommand.method.invoke(obj,args); + } + + Method getMethod() { + return javaCommand.method; + } + + boolean isScoped() { + return javaCommand.scopedType != null; + } + + boolean isScoped(String param) { + return isScoped() && javaCommand.cmdSpec.hasScopedParam(param); + } + + Class scopedType() { + return javaCommand.scopedType; + } + + String getJavaName() { + return javaCommand.method.getName(); + } + + public String toString() { + return javaCommand.method.toString() + " - stack index "+iStack; + } + + String name() { + return javaCommand.name; + } + + CommandSpec cmdSpec() { + return javaCommand.cmdSpec; + } + + Method method() { + return javaCommand.method; + } + + @Override public boolean equals(Object obj) { + if( !(obj instanceof JavaCall) ) + return false; + JavaCall jc = (JavaCall)obj; + return jc.javaCommand==javaCommand && jc.iStack==iStack; + } + + @Override public int hashCode() { + return iStack*31 + javaCommand.hashCode(); + } + +}