Package railo.runtime.reflection.storage

Source Code of railo.runtime.reflection.storage.WeakConstructorStorage

package railo.runtime.reflection.storage;

import java.lang.reflect.Constructor;
import java.util.WeakHashMap;

import org.apache.commons.collections.map.ReferenceMap;

import railo.runtime.type.Array;
import railo.runtime.type.ArrayImpl;

/**
* Constructor Storage Class
*/
public final class WeakConstructorStorage {
  private WeakHashMap map=new WeakHashMap(ReferenceMap.SOFT,ReferenceMap.SOFT);
 
  /**
   * returns a constructor matching given criteria or null if Constructor doesn't exist
   * @param clazz Class to get Constructor for
   * @param count count of arguments for the constructor
   * @return returns the constructors
   */
  public synchronized Constructor[] getConstructors(Class clazz,int count) {
    Object o=map.get(clazz);
    Array con;
    if(o==null) {
      con=store(clazz);
    }
    else con=(Array) o;

    o=con.get(count+1,null);
    if(o==null) return null;
    return (Constructor[]) o;
  }

  /**
   * stores the constructors for a Class
   * @param clazz
   * @return stored structure
   */
  private Array store(Class clazz) {
      Constructor[] conArr=clazz.getConstructors();
      Array args=new ArrayImpl();
      for(int i=0;i<conArr.length;i++) {
        storeArgs(conArr[i],args);
      }
      map.put(clazz,args);
      return args;
   
  }

  /**
   * seperate and store the different arguments of one constructor
   * @param constructor
   * @param conArgs
   */
  private void storeArgs(Constructor constructor, Array conArgs) {
    Class[] pmt = constructor.getParameterTypes();
    Object o=conArgs.get(pmt.length+1,null);
    Constructor[] args;
    if(o==null) {
      args=new Constructor[1];
      conArgs.setEL(pmt.length+1,args);
    }
    else {
      Constructor[] cs=(Constructor[]) o;
      args = new Constructor[cs.length+1];
      for(int i=0;i<cs.length;i++) {
        args[i]=cs[i];
      }
      conArgs.setEL(pmt.length+1,args);
    }
    args[args.length-1]=constructor;
   
  }
}
TOP

Related Classes of railo.runtime.reflection.storage.WeakConstructorStorage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.