1 package org.apache.commons.ognl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 class ASTUnsignedShiftRight
28 extends NumericExpression
29 {
30 public ASTUnsignedShiftRight( int id )
31 {
32 super( id );
33 }
34
35 public ASTUnsignedShiftRight( OgnlParser p, int id )
36 {
37 super( p, id );
38 }
39
40 protected Object getValueBody( OgnlContext context, Object source )
41 throws OgnlException
42 {
43 Object v1 = children[0].getValue( context, source );
44 Object v2 = children[1].getValue( context, source );
45 return OgnlOps.unsignedShiftRight( v1, v2 );
46 }
47
48 public String getExpressionOperator( int index )
49 {
50 return ">>>";
51 }
52
53 public String toGetSourceString( OgnlContext context, Object target )
54 {
55 String result = "";
56
57 try
58 {
59
60 String child1 = OgnlRuntime.getChildSource( context, target, children[0] );
61 child1 = coerceToNumeric( child1, context, children[0] );
62
63 String child2 = OgnlRuntime.getChildSource( context, target, children[1] );
64 child2 = coerceToNumeric( child2, context, children[1] );
65
66 Object v1 = children[0].getValue( context, target );
67 int type = OgnlOps.getNumericType( v1 );
68
69 if ( type <= OgnlOps.INT )
70 {
71 child1 = "(int)" + child1;
72 child2 = "(int)" + child2;
73 }
74
75 result = child1 + " >>> " + child2;
76
77 context.setCurrentType( Integer.TYPE );
78 context.setCurrentObject( getValueBody( context, target ) );
79
80 }
81 catch ( Throwable t )
82 {
83 throw OgnlOps.castToRuntime( t );
84 }
85
86 return result;
87 }
88
89 public <R, P> R accept( NodeVisitor<? extends R, ? super P> visitor, P data )
90 throws OgnlException
91 {
92 return visitor.visit( this, data );
93 }
94 }