comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:7ecd1a4ef557
1 package nabble.naml.compiler;
2
3 import java.lang.reflect.Method;
4 import java.lang.reflect.InvocationTargetException;
5
6 import java.util.Collection;
7
8
9 final class JavaCall implements Call {
10 final JavaCommand javaCommand;
11 final int iStack;
12
13 JavaCall(JavaCommand javaCommand,int iStack) {
14 this.javaCommand = javaCommand;
15 this.iStack = iStack;
16 }
17
18 @Override public Collection<String> getRequiredNamespaces() {
19 return javaCommand.getRequiredNamespaces();
20 }
21
22 Object invoke(RunState runState, Object... args)
23 throws IllegalAccessException, InvocationTargetException
24 {
25 Object obj = javaCommand.isStatic ? null : runState.getFromStack(iStack);
26 return javaCommand.method.invoke(obj,args);
27 }
28
29 Method getMethod() {
30 return javaCommand.method;
31 }
32
33 boolean isScoped() {
34 return javaCommand.scopedType != null;
35 }
36
37 boolean isScoped(String param) {
38 return isScoped() && javaCommand.cmdSpec.hasScopedParam(param);
39 }
40
41 Class scopedType() {
42 return javaCommand.scopedType;
43 }
44
45 String getJavaName() {
46 return javaCommand.method.getName();
47 }
48
49 public String toString() {
50 return javaCommand.method.toString() + " - stack index "+iStack;
51 }
52
53 String name() {
54 return javaCommand.name;
55 }
56
57 CommandSpec cmdSpec() {
58 return javaCommand.cmdSpec;
59 }
60
61 Method method() {
62 return javaCommand.method;
63 }
64
65 @Override public boolean equals(Object obj) {
66 if( !(obj instanceof JavaCall) )
67 return false;
68 JavaCall jc = (JavaCall)obj;
69 return jc.javaCommand==javaCommand && jc.iStack==iStack;
70 }
71
72 @Override public int hashCode() {
73 return iStack*31 + javaCommand.hashCode();
74 }
75
76 }