Revision 46056

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/InstanceUtils.java
29 29
            }
30 30
        }
31 31
        Class<?> theClass = instance.getClass();
32
        Method method = theClass.getMethod(methodName, parameterTypes);
32
        Method method;
33
        try {
34
            method = theClass.getMethod(methodName, parameterTypes);
35
        } catch(NoSuchMethodException ex) {
36
            // Esto es para esquivar casos como tener un ArrayList de objects y 
37
            // hacer algo como  arr.add(10). Dice que no hay ningun metodo add
38
            // que reciba un Integer, por que realmente el add esta declarado como
39
            // que recibe un object.
40
            // Ver TestInterpreter metodo testListAppend.
41
            for (Method m : theClass.getMethods()) {
42
                if( StringUtils.equals(m.getName(), methodName) && parameterTypes.length == m.getParameterTypes().length) {
43
                    parameterTypes = m.getParameterTypes();
44
                }
45
            }
46
            method = theClass.getMethod(methodName, parameterTypes);
47
        }
33 48
        Object value = method.invoke(instance, parameters);
34 49
        return value;
35 50
    }
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestInterpreter.java
668 668
        assertEquals("SQL", v);
669 669
    }
670 670

  
671
    public void testListAppend() {
672
        String source =  "list().add(10)";
673

  
674
        SymbolTable symbolTable = createSymbolTable();
675
        Compiler compiler = createCompiler();
676
        Interpreter interpreter = createInterpreter(symbolTable);
677
        
678
        Code code = compiler.compileExpression(source);
679
        Object v = interpreter.run(code);
680
        assertEquals( true, v);
681
    }
671 682
    
683
    public void testListSet() {
684
        String source =  "list(1,2,3).set(1,20)";
685

  
686
        SymbolTable symbolTable = createSymbolTable();
687
        Compiler compiler = createCompiler();
688
        Interpreter interpreter = createInterpreter(symbolTable);
689
        
690
        Code code = compiler.compileExpression(source);
691
        Object v = interpreter.run(code);
692
        assertEquals( 2, v);
693
    }    
694
    
672 695
}
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestCompiler.java
555 555
        assertEquals( "ARRAY[ ARRAY[ 2, 'Val', '2018' ], ARRAY[ 3, 'ali', '2018' ], ARRAY[ 5, 'Val', '2020' ], ARRAY[ 7, 'ali', '2020' ] ]", code.toString());
556 556
    }
557 557

  
558
    public void testListAdd() {
559
        String source =  "list().add(10)";
560

  
561
        Compiler compiler = createCompiler();
562
        
563
        Code code = compiler.compileExpression(source);
564
        code.link(this.createSymbolTable());
565
        assertEquals( "list().add(10)", code.toString());
566
    }
567
    
568
    public void testListSet() {
569
        String source =  "list(1,2,3).set(1,20)";
570

  
571
        Compiler compiler = createCompiler();
572
        
573
        Code code = compiler.compileExpression(source);
574
        code.link(this.createSymbolTable());
575
        assertEquals( "list(1, 2, 3).set(1, 20)", code.toString());
576
    }    
577
    
558 578
}

Also available in: Unified diff