Mercurial Hosting > nabble
view 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 source
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(); } }