diff options
Diffstat (limited to 'src/main/java/io/devnulllabs/openjava/ptree/util/ClassLiteralReplacer.java')
-rw-r--r-- | src/main/java/io/devnulllabs/openjava/ptree/util/ClassLiteralReplacer.java | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/main/java/io/devnulllabs/openjava/ptree/util/ClassLiteralReplacer.java b/src/main/java/io/devnulllabs/openjava/ptree/util/ClassLiteralReplacer.java new file mode 100644 index 0000000..372343d --- /dev/null +++ b/src/main/java/io/devnulllabs/openjava/ptree/util/ClassLiteralReplacer.java @@ -0,0 +1,57 @@ +/* + * ClassLiteralReplacer.java + * + * Make typenames qualified. + * <p> + * + * @author Michiaki Tatsubori + * @version %VERSION% %DATE% + * @see java.lang.Object + * + * COPYRIGHT 1998 by Michiaki Tatsubori, ALL RIGHTS RESERVED. + */ +package io.devnulllabs.openjava.ptree.util; + +import io.devnulllabs.openjava.mop.Environment; +import io.devnulllabs.openjava.mop.OJClass; +import io.devnulllabs.openjava.ptree.ClassLiteral; +import io.devnulllabs.openjava.ptree.Expression; +import io.devnulllabs.openjava.ptree.ExpressionList; +import io.devnulllabs.openjava.ptree.MethodCall; +import io.devnulllabs.openjava.ptree.ParseTreeException; +import io.devnulllabs.openjava.ptree.TypeName; + +/** + * The class <code>ClassLiteralReplacer</code> + * <p> + * + * @author Michiaki Tatsubori + * @version 1.0 + * @since $Id: ClassLiteralReplacer.java,v 1.2 2003/02/19 02:55:00 tatsubori Exp $ + * @see java.lang.Object + */ +public class ClassLiteralReplacer extends EvaluationShuttle { + public static final String OLDCLASS_PREFIX = "oldjavaclass."; + + public ClassLiteralReplacer(Environment env) { + super(env); + } + + public Expression evaluateDown(ClassLiteral ptree) + throws ParseTreeException { + TypeName type = ptree.getTypeName(); + + if (type.toString().startsWith(OLDCLASS_PREFIX)) { + String name = type.getName(); + name = name.substring(OLDCLASS_PREFIX.length()); + int dim = type.getDimension(); + return new ClassLiteral(new TypeName(name, dim)); + } + + ExpressionList args = new ExpressionList(new ClassLiteral(type)); + Expression result = + new MethodCall(OJClass.forClass(OJClass.class), "forClass", args); + return result; + } + +} |