EOS 2  1.1.0
Einfache Objektbasierte Sprache
MJavaClass.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.vm;
2 
3 import java.util.TreeMap;
4 
5 import de.lathanda.eos.vm.exceptions.TypeMissMatchException;
6 
12 public class MJavaClass implements MType {
13  public final static MType BASE = new MJavaClass("base", Object.class, () -> {
14  return null;
15  });
16  private final Class<?> cls;
17  private final ObjectSource objSrc;
18  private final String id;
19 
20  public MJavaClass(String id, Class<?> cls, ObjectSource objSrc) {
21  this.cls = cls;
22  this.objSrc = objSrc;
23  this.id = id;
24  }
25 
26  @Override
27  public Object checkAndCast(Object obj) {
28  return checkAndCast(cls, obj);
29  }
30 
31  private Object checkAndCast(Class<?> c, Object obj) {
32  if (obj instanceof Integer && c == double.class) {
33  return ((Integer) obj).doubleValue();
34  } else if (obj instanceof Double && c == int.class) {
35  return ((Double) obj).intValue();
36  } else if (obj instanceof Integer && c == int.class) {
37  return obj;
38  } else if (obj instanceof Boolean && c == boolean.class) {
39  return obj;
40  } else if (obj instanceof Double && c == double.class) {
41  return obj;
42  } else if (obj instanceof MObject) {
43  return checkAndCast(c, ((MObject) obj).getJavaObject());
44  } else if (c.isInstance(obj)) {
45  return obj;
46  } else if (obj instanceof Variable) {
47  return checkAndCast(c, ((Variable) obj).get());
48  } else if (c == String.class) {
49  return obj.toString();
50  }
51  // wrong type that cannot be converted to fit
52  throw new TypeMissMatchException(c.toString(), obj.getClass().toString());
53  }
54 
55  @Override
56  public String getID() {
57  return id;
58  }
59 
60  @Override
61  public boolean isAbstract() {
62  return objSrc == null;
63  }
64 
65  @Override
66  public Object newInstance(Machine m) throws InstantiationException, IllegalAccessException {
67  if (objSrc != null) {
68  return objSrc.createObject();
69  } else {
70  return null;
71  }
72  }
73 
74  @Override
75  public Object createJavaObject(Machine m) throws Exception {
76  return newInstance(m);
77  }
78 
79  @Override
80  public TreeMap<String, Variable> createProperties(Machine m) {
81  return new TreeMap<>();
82  }
83 
84 }
MJavaClass(String id, Class<?> cls, ObjectSource objSrc)
Definition: MJavaClass.java:20
Object checkAndCast(Object obj)
Definition: MJavaClass.java:27
static final MType BASE
Definition: MJavaClass.java:13
Object newInstance(Machine m)
Definition: MJavaClass.java:66
Object createJavaObject(Machine m)
Definition: MJavaClass.java:75
TreeMap< String, Variable > createProperties(Machine m)
Definition: MJavaClass.java:80
Impressum