question: public static Number parseInteger ( AST reportNode , String text ) { text = text . replace ( "_" , "" ) ; char c = ' ' ; int length = text . length ( ) ; boolean negative = false ; if ( ( c = text . charAt ( 0 ) ) == '-' || c == '+' ) { negative = ( c == '-' ) ; text = text . substring ( 1 , length ) ; length -= 1 ; } int radix = 10 ; if ( text . charAt ( 0 ) == '0' && length > 1 ) { c = text . charAt ( 1 ) ; if ( c == 'X' || c == 'x' ) { radix = 16 ; text = text . substring ( 2 , length ) ; length -= 2 ; } else if ( c == 'B' || c == 'b' ) { radix = 2 ; text = text . substring ( 2 , length ) ; length -= 2 ; } else { radix = 8 ; } } char type = 'x' ; if ( isNumericTypeSpecifier ( text . charAt ( length - 1 ) , false ) ) { type = Character . toLowerCase ( text . charAt ( length - 1 ) ) ; text = text . substring ( 0 , length - 1 ) ; length -= 1 ; } if ( negative ) { text = "-" + text ; } BigInteger value = new BigInteger ( text , radix ) ; switch ( type ) { case 'i' : if ( radix == 10 && reportNode != null && ( value . compareTo ( MAX_INTEGER ) > 0 || value . compareTo ( MIN_INTEGER ) < 0 ) ) { throw new ASTRuntimeException ( reportNode , "Number of value " + value + " does not fit in the range of int, but int was enforced." ) ; } else { return Integer . valueOf ( value . intValue ( ) ) ; } case 'l' : if ( radix == 10 && reportNode != null && ( value . compareTo ( MAX_LONG ) > 0 || value . compareTo ( MIN_LONG ) < 0 ) ) { throw new ASTRuntimeException ( reportNode , "Number of value " + value + " does not fit in the range of long, but long was enforced." ) ; } else { return new Long ( value . longValue ( ) ) ; } case 'g' : return value ; default : if ( value . compareTo ( MAX_INTEGER ) <= 0 && value . compareTo ( MIN_INTEGER ) >= 0 ) { return Integer . valueOf ( value . intValue ( ) ) ; } else if ( value . compareTo ( MAX_LONG ) <= 0 && value . compareTo ( MIN_LONG ) >= 0 ) { return new Long ( value . longValue ( ) ) ; } return value ; } }
target:  Builds a Number from the given integer descriptor.  Creates the narrowest type possible, or a specific type, if specified.