/* * VariableBinder.java * * comments here. * * @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.mop.OJClassNotFoundException; import io.devnulllabs.openjava.ptree.ForStatement; import io.devnulllabs.openjava.ptree.Parameter; import io.devnulllabs.openjava.ptree.ParseTreeException; import io.devnulllabs.openjava.ptree.Statement; import io.devnulllabs.openjava.ptree.TypeName; import io.devnulllabs.openjava.ptree.VariableDeclaration; import io.devnulllabs.openjava.ptree.VariableDeclarator; import io.devnulllabs.openjava.tools.DebugOut; /** * The class VariableBinder *

* For example *

 * 
*

* * @author Michiaki Tatsubori * @version 1.0 * @since $Id: VariableBinder.java,v 1.2 2003/02/19 02:55:00 tatsubori Exp $ * @see java.lang.Object */ public class VariableBinder extends ScopeHandler { public VariableBinder(Environment env) { super(env); } public Statement evaluateDown(VariableDeclaration ptree) throws ParseTreeException { super.evaluateDown(ptree); bindLocalVariable(ptree, getEnvironment()); return ptree; } public Statement evaluateDown(ForStatement ptree) throws ParseTreeException { super.evaluateDown(ptree); TypeName tspec = ptree.getInitDeclType(); if (tspec == null) return ptree; VariableDeclarator[] vdecls = ptree.getInitDecls(); bindForInit(tspec, vdecls, getEnvironment()); return ptree; } public Parameter evaluateDown(Parameter ptree) throws ParseTreeException { super.evaluateDown(ptree); bindParameter(ptree, getEnvironment()); return ptree; } private static void bindLocalVariable( VariableDeclaration var_decl, Environment env) { String type = var_decl.getTypeSpecifier().toString(); String name = var_decl.getVariable(); bindName(env, type, name); } private static void bindForInit( TypeName tspec, VariableDeclarator[] vdecls, Environment env) { for (int i = 0; i < vdecls.length; ++i) { String type = tspec.toString() + vdecls[i].dimensionString(); String name = vdecls[i].getVariable(); bindName(env, type, name); } } private static void bindParameter(Parameter param, Environment env) { String type = param.getTypeSpecifier().toString(); String name = param.getVariable(); bindName(env, type, name); } private static void bindName(Environment env, String type, String name) { String qtypename = env.toQualifiedName(type); try { OJClass clazz = env.lookupClass(qtypename); if (clazz == null) clazz = OJClass.forName(qtypename); env.bindVariable(name, clazz); DebugOut.println("binds variable\t" + name + "\t: " + qtypename); } catch (OJClassNotFoundException e) { System.err.println( "VariableBinder.bindName() " + e.toString() + " : " + qtypename); System.err.println(env); } } }