Mercurial Hosting > luan
annotate core/src/luan/LuanPropertyMeta.java @ 407:7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 29 Apr 2015 13:01:00 -0600 |
parents | |
children | 1b38de2b1845 |
rev | line source |
---|---|
407
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
1 package luan; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
2 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
3 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
4 public class LuanPropertyMeta extends LuanMeta implements DeepCloneable<LuanPropertyMeta> { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
5 private LuanTable getters; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
6 private LuanTable setters; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
7 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
8 private LuanPropertyMeta() {} |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
9 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
10 public static LuanPropertyMeta newInstance() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
11 LuanPropertyMeta meta = new LuanPropertyMeta(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
12 meta.getters = new LuanTableImpl(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
13 meta.setters = new LuanTableImpl(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
14 return meta; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
15 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
16 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
17 public LuanTable getters() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
18 return getters; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
19 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
20 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
21 public LuanTable setters() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
22 return setters; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
23 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
24 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
25 @Override public LuanPropertyMeta shallowClone() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
26 return new LuanPropertyMeta(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
27 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
28 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
29 @Override public void deepenClone(LuanPropertyMeta clone,DeepCloner cloner) { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
30 clone.getters = cloner.get(getters); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
31 clone.setters = cloner.get(setters); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
32 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
33 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
34 @Override public Object __index(LuanState luan,LuanTable tbl,Object key) throws LuanException { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
35 Object obj = getters.get(key); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
36 if( obj == null ) |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
37 return null; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
38 if( !(obj instanceof LuanFunction) ) |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
39 throw luan.exception("get for '"+key+"' isn't a function"); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
40 LuanFunction fn = (LuanFunction)obj; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
41 return luan.call(fn); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
42 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
43 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
44 @Override public boolean canNewindex() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
45 return true; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
46 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
47 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
48 @Override public void __newindex(LuanState luan,LuanTable tbl,Object key,Object value) throws LuanException { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
49 Object obj = setters.get(key); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
50 if( obj == null ) |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
51 throw luan.exception("can't set property '"+key+"'"); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
52 if( !(obj instanceof LuanFunction) ) |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
53 throw luan.exception("set for '"+key+"' isn't a function"); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
54 LuanFunction fn = (LuanFunction)obj; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
55 luan.call(fn,new Object[]{value}); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
56 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
57 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
58 @Override public LuanTable newMetatable() { |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
59 LuanTable mt = super.newMetatable(); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
60 mt.put( "get", getters ); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
61 mt.put( "set", setters ); |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
62 return mt; |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
63 } |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
64 |
7fd9f1b7b878
replace LuanPropertyTable with LuanPropertyMeta
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff
changeset
|
65 } |