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;
}
}

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 ; } }
builds a number from the given integer descriptor . creates the narrowest type possible , or a specific type , if specified .
