// Path: src/main/java/org/azeckoski/reflectutils/ClassFields.java
// public static enum FieldFindMode { 
//     /**
//      * (default) finds fields by matched public getters and setters first and then public fields
//      */
//     HYBRID, 
//     /**
//      * finds all fields which are accessible (public, protected, or private), ignores getters and setters
//      */
//     FIELD, 
//     /**
//      * find all matched getters and setters only, ignores fields
//      */
//     PROPERTY,
//     /**
//      * finds all possible fields including matched getter/setter
//      */
//     ALL
// }


import org.azeckoski.reflectutils.ClassFields.FieldFindMode;
import org.azeckoski.reflectutils.refmap.ReferenceMap;
import org.azeckoski.reflectutils.refmap.ReferenceType;
import java.lang.ref.SoftReference;
import java.util.Map;
/**
 * $Id: ClassDataCacher.java 129 2014-03-18 23:25:36Z azeckoski $
 * $URL: http://reflectutils.googlecode.com/svn/trunk/src/main/java/org/azeckoski/reflectutils/ClassDataCacher.java $
 * FieldUtils.java - genericdao - May 19, 2008 10:10:15 PM - azeckoski
 **************************************************************************
 * Copyright (c) 2008 Aaron Zeckoski
 * Licensed under the Apache License, Version 2.0
 * 
 * A copy of the Apache License has been included in this 
 * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 * Aaron Zeckoski (azeckoski @ gmail.com) (aaronz @ vt.edu) (aaron @ caret.cam.ac.uk)
 */

package org.azeckoski.reflectutils;



/**
 * Class which provides access to the analysis objects and the cached reflection data
 * 
 * @author Aaron Zeckoski (azeckoski @ gmail.com)
 */
public class ClassDataCacher {

    // CONSTRUCTORS

    /**
     * default constructor - protected
     */
    protected ClassDataCacher() {
        this( null, null );
    }

    /**
     * Construct and specify a mode for looking up fields which does not match the default: {@link FieldFindMode#HYBRID}
     * @param fieldFindMode the mode when looking up fields in classes
     * <br/>
     * <b>WARNING:</b> if you don't need this control then just use the {@link #getInstance()} method to get this
     */
// Path: src/main/java/org/azeckoski/reflectutils/ClassFields.java
// public static enum FieldFindMode { 
//     /**
//      * (default) finds fields by matched public getters and setters first and then public fields
//      */
//     HYBRID, 
//     /**
//      * finds all fields which are accessible (public, protected, or private), ignores getters and setters
//      */
//     FIELD, 
//     /**
//      * find all matched getters and setters only, ignores fields
//      */
//     PROPERTY,
//     /**
//      * finds all possible fields including matched getter/setter
//      */
//     ALL
// }


// Path: src/main/java/org/azeckoski/reflectutils/ClassDataCacher.java
import org.azeckoski.reflectutils.ClassFields.FieldFindMode;
import org.azeckoski.reflectutils.refmap.ReferenceMap;
import org.azeckoski.reflectutils.refmap.ReferenceType;
import java.lang.ref.SoftReference;
import java.util.Map;

/**
 * $Id: ClassDataCacher.java 129 2014-03-18 23:25:36Z azeckoski $
 * $URL: http://reflectutils.googlecode.com/svn/trunk/src/main/java/org/azeckoski/reflectutils/ClassDataCacher.java $
 * FieldUtils.java - genericdao - May 19, 2008 10:10:15 PM - azeckoski
 **************************************************************************
 * Copyright (c) 2008 Aaron Zeckoski
 * Licensed under the Apache License, Version 2.0
 * 
 * A copy of the Apache License has been included in this 
 * distribution and is available at: http://www.apache.org/licenses/LICENSE-2.0.txt
 *
 * Aaron Zeckoski (azeckoski @ gmail.com) (aaronz @ vt.edu) (aaron @ caret.cam.ac.uk)
 */

package org.azeckoski.reflectutils;



/**
 * Class which provides access to the analysis objects and the cached reflection data
 * 
 * @author Aaron Zeckoski (azeckoski @ gmail.com)
 */
public class ClassDataCacher {

    // CONSTRUCTORS

    /**
     * default constructor - protected
     */
    protected ClassDataCacher() {
        this( null, null );
    }

    /**
     * Construct and specify a mode for looking up fields which does not match the default: {@link FieldFindMode#HYBRID}
     * @param fieldFindMode the mode when looking up fields in classes
     * <br/>
     * <b>WARNING:</b> if you don't need this control then just use the {@link #getInstance()} method to get this
     */
    public ClassDataCacher(FieldFindMode fieldFindMode) {