KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > spoon > jdiet > ExpressionProcessor


1 package spoon.jdiet;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Collection JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.Map JavaDoc;
7 import java.util.Vector JavaDoc;
8
9 import spoon.jdiet.rt.MapEntryImpl;
10 import spoon.processing.AbstractProcessor;
11 import spoon.reflect.code.CtExpression;
12 import spoon.reflect.factory.TypeFactory;
13 import spoon.reflect.reference.CtTypeReference;
14
15 /**
16  * This processor replaces casts with a J2ME compliant equivalent type.
17  *
18  * @author Lionel Seinturier <Lionel.Seinturier@lifl.fr>
19  */

20 public class ExpressionProcessor extends AbstractProcessor<CtExpression> {
21     
22     public void process(CtExpression expr) {
23         
24         TypeFactory tf = getFactory().Type();
25         
26         List JavaDoc<CtTypeReference<?>> casts = expr.getTypeCasts();
27         List JavaDoc<CtTypeReference<?>> newcasts = new ArrayList JavaDoc<CtTypeReference<?>>();
28         for (CtTypeReference<?> cast : casts) {
29             
30             if( cast.isPrimitif() ) {
31                 newcasts.add(cast);
32                 continue;
33             }
34             
35             // Transform cast to Collection into cast to Vector
36
if( cast.isSubtypeOf(tf.createReference(Collection JavaDoc.class)) ) {
37                 newcasts.add(tf.createReference(Vector JavaDoc.class));
38             }
39
40             // Transform cast to Map.Entry into cast to MapEntryImpl
41
else if( cast.isSubtypeOf(tf.createReference(Map.Entry JavaDoc.class)) ) {
42                 newcasts.add(tf.createReference(MapEntryImpl.class));
43             }
44             
45             else {
46                 newcasts.add(cast);
47             }
48             
49             expr.setTypeCasts(newcasts);
50         }
51     }
52
53 }
54
Popular Tags