0
|
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 }
|