]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/src/org/simantics/g3d/property/MethodWithMapValueProvider.java
Reflection-based handling of Enum property editing.
[simantics/3d.git] / org.simantics.g3d / src / org / simantics / g3d / property / MethodWithMapValueProvider.java
index eeae0dc89499dab28966d6083af0b74f977cfb5d..8fad88979690dbf266f796982b52c314bd4d1221 100644 (file)
@@ -12,6 +12,8 @@
 package org.simantics.g3d.property;\r
 \r
 import java.lang.reflect.Method;\r
+import java.lang.reflect.ParameterizedType;\r
+import java.lang.reflect.Type;\r
 import java.util.HashMap;\r
 import java.util.Map;\r
 \r
@@ -33,6 +35,7 @@ public class MethodWithMapValueProvider implements ValueProvider {
                Map<String,Object> map = (Map<String, Object>)getter.invoke(obj);\r
                return map.get(key);\r
        }\r
+       \r
        @SuppressWarnings("unchecked")\r
        @Override\r
        public void setValue(Object obj, Object value) throws Exception {\r
@@ -41,4 +44,11 @@ public class MethodWithMapValueProvider implements ValueProvider {
                map.put(key, value);\r
                setter.invoke(obj,map);\r
        }\r
+       \r
+       @Override\r
+       public Class<?> getValueType() {\r
+               // The return type of the getter should be a java.util.Map.\r
+               Type[] typeArguments = ((ParameterizedType)getter.getGenericReturnType()).getActualTypeArguments();\r
+               return (Class<?>) typeArguments[1];\r
+       }\r
 }\r