001    /*
002      Copyright (C) 2004 Laurent Martelli <laurent@aopsys.com>
003    
004      This program is free software; you can redistribute it and/or modify
005      it under the terms of the GNU Lesser General Public License as
006      published by the Free Software Foundation; either version 2 of the
007      License, or (at your option) any later version.
008    
009      This program is distributed in the hope that it will be useful,
010      but WITHOUT ANY WARRANTY; without even the implied warranty of
011      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
012      GNU Lesser General Public License for more details.
013    
014      You should have received a copy of the GNU Lesser General Public
015      License along with this program; if not, write to the Free Software
016      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
017      USA */
018    
019    package org.objectweb.jac.core;
020    
021    import java.util.Iterator;
022    import java.util.Vector;
023    import org.apache.log4j.Logger;
024    import org.objectweb.jac.core.rtti.ClassItem;
025    import org.objectweb.jac.core.rtti.ClassRepository;
026    import org.objectweb.jac.core.rtti.NoSuchClassException;
027    
028    public class Imports {
029        Logger logger = Logger.getLogger("imports");
030        Vector imports = new Vector();
031        public void add(String imp) {
032            imports.add(imp);
033        }
034        public ClassItem getClass(String className) {
035            logger.debug("Searching for "+className);
036            Iterator i = imports.iterator();
037            ClassRepository cr = ClassRepository.get();
038            ClassItem cli = null;
039            try {
040                cli = cr.getNonPrimitiveClass(className);
041                logger.debug("  Found "+className+": "+cli.getName());
042            } catch (NoSuchClassException e) {
043                while (i.hasNext()) {
044                    String imp = (String)i.next();
045                    try {
046                        if (imp.endsWith("*")) {
047                            cli = cr.getClass(
048                                imp.substring(0,imp.length()-1)+className);
049                        } else {
050                            int index = imp.lastIndexOf('.');
051                            if (imp.substring(index+1).equals(className)) {
052                                cli = cr.getClass(imp);
053                            }
054                        }
055                        if (cli!=null) {
056                            logger.debug("  Found "+cli.getName());
057                            break;
058                        }
059                    } catch(NoSuchClassException e2) {
060                    }
061                }
062            }
063            if (cli==null) {
064                logger.debug("  Not found in "+imports);
065                throw new NoSuchClassException(className);
066            }
067            return cli;
068        }
069    }