01: package spoon.jdiet;
02:
03: import java.util.ArrayList;
04: import java.util.Collection;
05: import java.util.List;
06: import java.util.Map;
07: import java.util.Vector;
08:
09: 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
21: AbstractProcessor<CtExpression> {
22:
23: public void process(CtExpression expr) {
24:
25: TypeFactory tf = getFactory().Type();
26:
27: List<CtTypeReference<?>> casts = expr.getTypeCasts();
28: List<CtTypeReference<?>> newcasts = new ArrayList<CtTypeReference<?>>();
29: for (CtTypeReference<?> cast : casts) {
30:
31: if (cast.isPrimitif()) {
32: newcasts.add(cast);
33: continue;
34: }
35:
36: // Transform cast to Collection into cast to Vector
37: if (cast.isSubtypeOf(tf.createReference(Collection.class))) {
38: newcasts.add(tf.createReference(Vector.class));
39: }
40:
41: // Transform cast to Map.Entry into cast to MapEntryImpl
42: else if (cast.isSubtypeOf(tf
43: .createReference(Map.Entry.class))) {
44: newcasts.add(tf.createReference(MapEntryImpl.class));
45: }
46:
47: else {
48: newcasts.add(cast);
49: }
50:
51: expr.setTypeCasts(newcasts);
52: }
53: }
54:
55: }
|