EOS 2  1.1.0
Einfache Objektbasierte Sprache
SystemMethodType.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.baseparser;
2 
3 import java.lang.reflect.Method;
4 import java.util.ArrayList;
5 
6 import de.lathanda.eos.vm.Command;
7 import de.lathanda.eos.vm.MType;
8 
15 public class SystemMethodType implements MethodType {
16  protected final Type[] parameters;
17  protected final Type ret;
18  protected final String label;
19  protected final Method method;
20  protected final String id;
21 
31  public SystemMethodType(String id, SystemType target, SystemType[] parameters, Type ret, String javaname, String label)
32  throws NoSuchMethodException {
33  this.parameters = parameters;
34  Class<?>[] parametersClass = new Class<?>[parameters.length];
35  for (int i = 0; i < parameters.length; i++) {
36  parametersClass[i] = parameters[i].convertToClass();
37  }
38  this.method = target.convertToClass().getMethod(javaname, parametersClass);
39  this.ret = ret;
40  this.label = label;
41  this.id = id;
42  }
43 
44  public boolean checkType(Type[] args) {
45  if (parameters.length != args.length) {
46  return false;
47  }
48  for (int i = 0; i < args.length; i++) {
49  if (!parameters[i].checkType(args[i])) {
50  return false;
51  }
52  }
53  return true;
54  }
55 
56  @Override
57  public Type getReturnType() {
58  return ret;
59  }
60 
61  @Override
62  public Type getParameterType(int i) {
63  return parameters[i];
64  }
65 
66  @Override
67  public String toString() {
68  StringBuilder res = new StringBuilder();
69  boolean first = true;
70  res.append(label).append("(");
71  for (AutoCompleteType t : parameters) {
72  if (first) {
73  res.append(t.toString());
74  } else {
75  res.append(",").append(t.toString());
76  first = false;
77  }
78  }
79  res.append(")");
80  if (ret != null && !ret.isVoid()) {
81  res.append(":").append(ret);
82  }
83  return res.toString();
84  }
85 
86  @Override
87  public MType[] getParameters() {
88  MType[] para = new MType[parameters.length];
89  for (int i = 0; i < para.length; i++) {
90  para[i] = parameters[i].getMType();
91  }
92  return para;
93  }
94 
95  @Override
96  public String getName() {
97  return label;
98  }
99 
100  public void compile(ArrayList<Command> ops, Expression target, boolean autowindow) throws Exception {
101  if (target != null) {
102  target.compile(ops, autowindow);
103  }
104  ops.add(new de.lathanda.eos.vm.commands.Method(getParameters(), method));
105  }
106 
107 }
SystemMethodType(String id, SystemType target, SystemType[] parameters, Type ret, String javaname, String label)
void compile(ArrayList< Command > ops, Expression target, boolean autowindow)
Impressum