Package org.drools.objenesis.strategy

Source Code of org.drools.objenesis.strategy.StdInstantiatorStrategy

package org.drools.objenesis.strategy;

import org.drools.objenesis.instantiator.ObjectInstantiator;
import org.drools.objenesis.instantiator.gcj.GCJInstantiator;
import org.drools.objenesis.instantiator.jrockit.JRockit131Instantiator;
import org.drools.objenesis.instantiator.jrockit.JRockitLegacyInstantiator;
import org.drools.objenesis.instantiator.sun.Sun13Instantiator;
import org.drools.objenesis.instantiator.sun.SunReflectionFactoryInstantiator;

/**
* Guess the best instantiator for a given class. The instantiator will instantiate the class
* without calling any constructor. Currently, the selection doesn't depend on the class. It relies
* on the
* <ul>
* <li>JVM version</li>
* <li>JVM vendor</li>
* <li>JVM vendor version</li>
* </ul>
* However, instantiators are stateful and so dedicated to their class.
*
* @see ObjectInstantiator
*/
public class StdInstantiatorStrategy extends BaseInstantiatorStrategy {

    /**
     * Return an {@link ObjectInstantiator} allowing to create instance without any constructor being
     * called.
     *
     * @param type Class to instantiate
     * @return The ObjectInstantiator for the class
     */
    public ObjectInstantiator newInstantiatorOf(final Class type) {

        if ( JVM_NAME.startsWith( SUN ) ) {
            if ( VM_VERSION.startsWith( "1.3" ) ) {
                return new Sun13Instantiator( type );
            }
        } else if ( JVM_NAME.startsWith( JROCKIT ) ) {
            if ( VM_VERSION.startsWith( "1.3" ) ) {
                return new JRockit131Instantiator( type );
            } else if ( VM_VERSION.startsWith( "1.4" ) ) {
                // JRockit vendor version will be RXX where XX is the version
                // Versions prior to 26 need special handling
                // From R26 on, java.vm.version starts with R
                if ( !VENDOR_VERSION.startsWith( "R" ) ) {
                    // On R25.1 and R25.2, ReflectionFactory should work. Otherwise, we must use the
                    // Legacy instantiator.
                    if ( VM_INFO == null || !VM_INFO.startsWith( "R25.1" ) || !VM_INFO.startsWith( "R25.2" ) ) {
                        return new JRockitLegacyInstantiator( type );
                    }
                }
            }
        } else if ( JVM_NAME.startsWith( GNU ) ) {
            return new GCJInstantiator( type );
        }

        // Fallback instantiator, should work with:
        // - Java Hotspot version 1.4 and higher
        // - JRockit 1.4-R26 and higher
        // - IBM and Hitachi JVMs
        // ... might works for others so we just give it a try
        return new SunReflectionFactoryInstantiator( type );
    }
}
TOP

Related Classes of org.drools.objenesis.strategy.StdInstantiatorStrategy

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.