commons-file/src/main/java/info/monitorenter/cpdetector/reflect/SingletonLoader.java
public Object newInstance(Class c) throws InstantiationException, IllegalAccessException {
        Object ret = null;
        Method[] methods = c.getDeclaredMethods();
        Method m;
        int modifiers;
        // searching for static methods:
        for (int i = 0; i < methods.length; i++) {
            m = methods[i];
            modifiers = m.getModifiers();
            if ((modifiers & Modifier.STATIC) != 0) {
                // searching for public access:
                if ((modifiers & Modifier.PUBLIC) != 0) {
                    // searching for no parameters:
                    if (m.getParameterTypes().length == 0) {
                        // searching for return type:
                        if (m.getReturnType() == c) {
                            // searching for substring "instance" in method name:
                            if (m.getName().toLowerCase().indexOf("instance") != -1) {
                                try {
                                    // Finally we found a singleton method:
                                    // we are static and don't need an instance.
                                    ret = m.invoke(null, dummyParameters);
                                } catch (IllegalArgumentException e) {
                                    // This will not happen:
                                    // we ensured that no arguments are needed.
                                    e.printStackTrace();
                                } catch (IllegalAccessException e) {
                                    // This will not happen (only in applet context perhaps or with some
                                    // SecurityManager):
                                    // we ensured public access.
                                    e.printStackTrace();
                                } catch (InvocationTargetException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                }
            }
        }
        // check, if we found a singleton:
        if (ret == null) {
            // try to invoke the default constructor:
            Constructor[] constructors = c.getConstructors();
            Constructor con = null;
            // search for a parameterless constructor:
            for (int i = 0; i < constructors.length; i++) {
                con = constructors[i];
                if (con.getParameterTypes().length == 0) {
                    // see, if public:
                    modifiers = con.getModifiers();
                    try {
                        if ((modifiers & Modifier.PUBLIC) == 0) {
                            // try to set accessible:
                            con.setAccessible(true);
                        }
                        // invokes the default constructor
                        ret = c.newInstance();
                    } catch (SecurityException se) {
                        // damn
                    }
                }
            }
        }
        if (ret == null) {
            System.err.println("Unable to instantiate: " + c.getName()
                    + ": no singleton method, no public default constructor.");
        }
        return ret;
    }
public Object newInstance(Class c) throws InstantiationException, IllegalAccessException {
        Object ret = null;
        Method[] methods = c.getDeclaredMethods();
        Method m;
        int modifiers;
        // searching for static methods:
        for (int i = 0; i < methods.length; i++) {
            m = methods[i];
            modifiers = m.getModifiers();
            if ((modifiers & Modifier.STATIC) != 0) {
                // searching for public access:
                if ((modifiers & Modifier.PUBLIC) != 0) {
                    // searching for no parameters:
                    if (m.getParameterTypes().length == 0) {
                        // searching for return type:
                        if (m.getReturnType() == c) {
                            // searching for substring "instance" in method name:
                            if (m.getName().toLowerCase().indexOf("instance") != -1) {
                                try {
                                    // Finally we found a singleton method:
                                    // we are static and don't need an instance.
                                    ret = m.invoke(null, dummyParameters);
                                } catch (IllegalArgumentException e) {
                                    // This will not happen:
                                    // we ensured that no arguments are needed.
                                    e.printStackTrace();
                                } catch (IllegalAccessException e) {
                                    // This will not happen (only in applet context perhaps or with some
                                    // SecurityManager):
                                    // we ensured public access.
                                    e.printStackTrace();
                                } catch (InvocationTargetException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    }
                }
            }
        }
        // check, if we found a singleton:
        if (ret == null) {
            // try to invoke the default constructor:
            Constructor[] constructors = c.getConstructors();
            Constructor con = null;
            // search for a parameterless constructor:
            for (int i = 0; i < constructors.length; i++) {
                con = constructors[i];
                if (con.getParameterTypes().length == 0) {
                    // see, if public:
                    modifiers = con.getModifiers();
                    try {
                        if ((modifiers & Modifier.PUBLIC) == 0) {
                            // try to set accessible:
                            con.setAccessible(true);
                        }
                        // invokes the default constructor
                        ret = c.newInstance();
                    } catch (SecurityException se) {
                        // damn
                    }
                }
            }
        }
        if (ret == null) {
            System.err.println("Unable to instantiate: " + c.getName()
                    + ": no singleton method, no public default constructor.");
        }
        return ret;
    }
public Object newInstance ( Class c ) throws InstantiationException , IllegalAccessException { Object ret = null ; Method [ ] methods = c . getDeclaredMethods ( ) ; Method m ; int modifiers ; // searching for static methods: for ( int i = 0 ; i < methods . length ; i ++ ) { m = methods [ i ] ; modifiers = m . getModifiers ( ) ; if ( ( modifiers & Modifier . STATIC ) != 0 ) { // searching for public access: if ( ( modifiers & Modifier . PUBLIC ) != 0 ) { // searching for no parameters: if ( m . getParameterTypes ( ) . length == 0 ) { // searching for return type: if ( m . getReturnType ( ) == c ) { // searching for substring "instance" in method name: if ( m . getName ( ) . toLowerCase ( ) . indexOf ( "instance" ) != - 1 ) { try { // Finally we found a singleton method: // we are static and don't need an instance. ret = m . invoke ( null , dummyParameters ) ; } catch ( IllegalArgumentException e ) { // This will not happen: // we ensured that no arguments are needed. e . printStackTrace ( ) ; } catch ( IllegalAccessException e ) { // This will not happen (only in applet context perhaps or with some // SecurityManager): // we ensured public access. e . printStackTrace ( ) ; } catch ( InvocationTargetException e ) { e . printStackTrace ( ) ; } } } } } } } // check, if we found a singleton: if ( ret == null ) { // try to invoke the default constructor: Constructor [ ] constructors = c . getConstructors ( ) ; Constructor con = null ; // search for a parameterless constructor: for ( int i = 0 ; i < constructors . length ; i ++ ) { con = constructors [ i ] ; if ( con . getParameterTypes ( ) . length == 0 ) { // see, if public: modifiers = con . getModifiers ( ) ; try { if ( ( modifiers & Modifier . PUBLIC ) == 0 ) { // try to set accessible: con . setAccessible ( true ) ; } // invokes the default constructor ret = c . newInstance ( ) ; } catch ( SecurityException se ) { // damn } } } } if ( ret == null ) { System . err . println ( "Unable to instantiate: " + c . getName ( ) + ": no singleton method, no public default constructor." ) ; } return ret ; }
Dynamic instantiation of the given type with singleton retrieval support as described in this class description.
Dynamic instantiation of the given type with singleton retrieval support as described in this class description .