public static Class<?> getLiteral(String className, String literal) {
        LiteralAnalyzer analyzer = ANALYZERS.get( className );
        Class result = null;
        if ( analyzer != null ) {
            analyzer.validate( literal );
            result = analyzer.getLiteral();
        }
        return result;
    }
@Test
    public void testFloatingPoingLiteralFromJLS() {

        // The largest positive finite literal of type float is 3.4028235e38f.
        assertThat( getLiteral( float.class.getCanonicalName(), "3.4028235e38f" ) ).isNotNull();
        // The smallest positive finite non-zero literal of type float is 1.40e-45f.
        assertThat( getLiteral( float.class.getCanonicalName(), "1.40e-45f" ) ).isNotNull();
        // The largest positive finite literal of type double is 1.7976931348623157e308.
        assertThat( getLiteral( double.class.getCanonicalName(), "1.7976931348623157e308" ) ).isNotNull();
        // The smallest positive finite non-zero literal of type double is 4.9e-324
        assertThat( getLiteral( double.class.getCanonicalName(), "4.9e-324" ) ).isNotNull();

        // some floats
        assertThat( getLiteral( float.class.getCanonicalName(), "3.1e1F" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "2.f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), ".3f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "0f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "3.14f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "6.022137e+23f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "-3.14f" ) ).isNotNull();

        // some doubles
        assertThat( getLiteral( double.class.getCanonicalName(), "1e1" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "1e+1" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "2." ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), ".3" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "0.0" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "3.14" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "-3.14" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "1e-9D" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "1e137" ) ).isNotNull();

        // too large (infinitve)
        assertThat( getLiteral( float.class.getCanonicalName(), "3.4028235e38f" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "1.7976931348623157e308" ) ).isNotNull();

        // too large (infinitve)
        assertThat( getLiteral( float.class.getCanonicalName(), "3.4028235e39f" ) ).isNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "1.7976931348623159e308" ) ).isNull();

        // small
        assertThat( getLiteral( float.class.getCanonicalName(), "1.40e-45f" ) ).isNotNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "0x1.0p-149" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "4.9e-324" ) ).isNotNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "0x0.001P-1062d" ) ).isNotNull();

        // too small
        assertThat( getLiteral( float.class.getCanonicalName(), "1.40e-46f" ) ).isNull();
        assertThat( getLiteral( float.class.getCanonicalName(), "0x1.0p-150" ) ).isNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "4.9e-325" ) ).isNull();
        assertThat( getLiteral( double.class.getCanonicalName(), "0x0.001p-1063d" ) ).isNull();
    }