Skip to content

Commit 375db75

Browse files
Improve copy to only iterate the public methods set/get
1 parent 870c20f commit 375db75

File tree

1 file changed

+30
-8
lines changed

1 file changed

+30
-8
lines changed

common/src/main/java/com/genexus/GxSilentTrnSdt.java

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,18 @@
77
import com.genexus.util.GXProperties;
88

99
import java.io.InputStream;
10-
import java.io.StringWriter;
10+
import java.io.StringWriter;
11+
import java.lang.reflect.Method;
12+
import java.util.HashMap;
13+
import java.util.HashSet;
14+
1115
import com.genexus.xml.GXXMLSerializer;
1216

1317
public class GxSilentTrnSdt extends com.genexus.xml.GXXMLSerializable
1418
{
15-
public static final ILogger logger = LogManager.getLogger(GxSilentTrnSdt.class);
19+
static final ILogger logger = LogManager.getLogger(GxSilentTrnSdt.class);
20+
static final String SET_METHOD_PREFIX = "setgxTv_";
21+
static final String GET_METHOD_PREFIX = "getgxTv_";
1622
IPendingEventHelper pendingHelper;
1723
GXProperties dirties = new GXProperties();
1824

@@ -264,7 +270,7 @@ public void setvalue(String name, String value)
264270
try
265271
{
266272
Class<?> me = getClass();
267-
String methodName = "setgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
273+
String methodName = SET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
268274
for(java.lang.reflect.Method method : me.getMethods())
269275
{
270276
if(method.getName().equals(methodName))
@@ -274,7 +280,7 @@ public void setvalue(String name, String value)
274280
{
275281
if(GXSimpleCollection.class.isAssignableFrom(parmTypes[0]))
276282
{
277-
String methodNameGet = "getgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
283+
String methodNameGet = GET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
278284
GXSimpleCollection col = (GXSimpleCollection)me.getMethod(methodNameGet, new Class[]{}).invoke(this, (Object[])null);
279285
col.removeAllItems();
280286
col.fromJSonString(value);
@@ -294,11 +300,27 @@ public void copy(GxSilentTrnSdt source)
294300
{
295301
try
296302
{
297-
Class<?> superClass = source.getClass();
298-
for(java.lang.reflect.Field field : superClass.getDeclaredFields())
303+
Class<?> me = getClass();
304+
HashMap<String, Method> setMethods = new HashMap<>();
305+
HashMap<String, Method> getMethods = new HashMap<>();
306+
for(java.lang.reflect.Method method : me.getDeclaredMethods())
299307
{
300-
field.set(this, field.get(source));
308+
String methodName = method.getName();
309+
if(methodName.startsWith(SET_METHOD_PREFIX))
310+
{
311+
setMethods.put(methodName, method);
312+
}else if (methodName.startsWith(GET_METHOD_PREFIX)){
313+
getMethods.put(methodName, method);
314+
}
301315
}
316+
for(java.lang.reflect.Method setMethod : setMethods.values()) {
317+
String getMethod = setMethod.getName().replace(SET_METHOD_PREFIX, GET_METHOD_PREFIX);
318+
if (getMethods.containsKey(getMethod)) {
319+
Object value = getMethods.get(getMethod).invoke(source, (Object[]) null);
320+
setMethod.invoke(this, new Object[]{value});
321+
}
322+
}
323+
302324
}catch(Exception e)
303325
{
304326
logger.fatal(e.getMessage(), e);
@@ -310,7 +332,7 @@ public String getvalue(String name)
310332
try
311333
{
312334
Class<?> me = getClass();
313-
String methodName = "getgxTv_" + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
335+
String methodName = GET_METHOD_PREFIX + me.getSimpleName() + "_" + name.substring(0, 1).toUpperCase() + name.substring(1).toLowerCase();
314336

315337
Object obj = me.getMethod(methodName, new Class[]{}).invoke(this, (Object[])null);
316338
if(obj instanceof GXSimpleCollection)

0 commit comments

Comments
 (0)