in src/main/java/org/apache/commons/ognl/ASTAdd.java [67:139]
boolean isWider( NodeType type, NodeType lastType )
{
if ( lastType == null )
{
return true;
}
// System.out.println("checking isWider(" + type.getGetterClass() + " , " + lastType.getGetterClass() + ")");
if ( String.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return false;
}
if ( String.class.isAssignableFrom( type.getGetterClass() ) )
{
return true;
}
if ( parent != null && String.class.isAssignableFrom( type.getGetterClass() ) )
{
return true;
}
if ( String.class.isAssignableFrom( lastType.getGetterClass() ) && Object.class == type.getGetterClass() )
{
return false;
}
if ( parent != null && String.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return false;
}
if ( parent == null && String.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return true;
}
if ( parent == null && String.class.isAssignableFrom( type.getGetterClass() ) )
{
return false;
}
if ( BigDecimal.class.isAssignableFrom( type.getGetterClass() )
|| BigInteger.class.isAssignableFrom( type.getGetterClass() ) )
{
return true;
}
if ( BigDecimal.class.isAssignableFrom( lastType.getGetterClass() )
|| BigInteger.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return false;
}
if ( Double.class.isAssignableFrom( type.getGetterClass() ) )
{
return true;
}
if ( Integer.class.isAssignableFrom( type.getGetterClass() )
&& Double.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return false;
}
if ( Float.class.isAssignableFrom( type.getGetterClass() )
&& Integer.class.isAssignableFrom( lastType.getGetterClass() ) )
{
return true;
}
return true;
}