1 package spoon.jdiet;2 3 import java.util.ArrayList ;4 import java.util.Collection ;5 import java.util.List ;6 import java.util.Map ;7 import java.util.Vector ;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 <CtTypeReference<?>> casts = expr.getTypeCasts();27 List <CtTypeReference<?>> newcasts = new ArrayList <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 Vector36 if( cast.isSubtypeOf(tf.createReference(Collection .class)) ) {37 newcasts.add(tf.createReference(Vector .class));38 }39 40 // Transform cast to Map.Entry into cast to MapEntryImpl41 else if( cast.isSubtypeOf(tf.createReference(Map.Entry .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