Program: 11028
Project: 11028
Buggy source:
public CurtainLevel(AVList params){
  if (params == null) {
    String message=Logging.getMessage("String_Node_Str");
    Logging.logger().severe(message);
    throw new IllegalArgumentException(message);
  }
  this.params=params.copy();
  String message=this.validate(params);
  if (message != null) {
    Logging.logger().severe(message);
    throw new IllegalArgumentException(message);
  }
  String ln=this.params.getStringValue(AVKey.LEVEL_NAME);
  this.levelName=ln != null ? ln : "String_Node_Str";
  this.levelNumber=(Integer)this.params.getValue(AVKey.LEVEL_NUMBER);
  this.levelWidth=(Integer)this.params.getValue(AVKeyMore.LEVEL_WIDTH);
  this.levelHeight=(Integer)this.params.getValue(AVKeyMore.LEVEL_HEIGHT);
  int tileWidth=(Integer)this.params.getValue(AVKey.TILE_WIDTH);
  int tileHeight=(Integer)this.params.getValue(AVKey.TILE_HEIGHT);
  this.cacheName=this.params.getStringValue(AVKey.DATA_CACHE_NAME);
  this.service=this.params.getStringValue(AVKey.SERVICE);
  this.dataset=this.params.getStringValue(AVKey.DATASET_NAME);
  this.formatSuffix=this.params.getStringValue(AVKey.FORMAT_SUFFIX);
  this.urlBuilder=(CurtainTileUrlBuilder)this.params.getValue(AVKey.TILE_URL_BUILDER);
  this.expiryTime=AVListImpl.getLongValue(params,AVKey.EXPIRY_TIME,0L);
  Angle curtainLength=((Path)this.params.getValue(AVKeyMore.PATH)).getLength();
  this.texelSize=curtainLength.radians / this.levelWidth;
  int widthsPerTile=tileWidth / this.levelWidth;
  int heightsPerTile=tileHeight / this.levelHeight;
  if (widthsPerTile > 1) {
    tileWidth/=widthsPerTile;
    tileHeight*=widthsPerTile;
  }
  if (heightsPerTile > 1) {
    tileWidth*=heightsPerTile;
    tileHeight/=heightsPerTile;
  }
  this.tileWidth=tileWidth;
  this.tileHeight=tileHeight;
  this.columnCount=(levelWidth - 1) / tileWidth + 1;
  this.rowCount=(levelHeight - 1) / tileHeight + 1;
  this.path=this.cacheName + "String_Node_Str" + this.levelName;
  Integer maxAbsentTileAttempts=(Integer)this.params.getValue(AVKey.MAX_ABSENT_TILE_ATTEMPTS);
  if (maxAbsentTileAttempts == null)   maxAbsentTileAttempts=DEFAULT_MAX_ABSENT_TILE_ATTEMPTS;
  Integer minAbsentTileCheckInterval=(Integer)this.params.getValue(AVKey.MIN_ABSENT_TILE_CHECK_INTERVAL);
  if (minAbsentTileCheckInterval == null)   minAbsentTileCheckInterval=DEFAULT_MIN_ABSENT_TILE_CHECK_INTERVAL;
  this.absentTiles=new AbsentResourceList(maxAbsentTileAttempts,minAbsentTileCheckInterval);
}

Fixed version (ground truth):
public CurtainLevel(AVList params){
  if (params == null) {
    String message=Logging.getMessage("String_Node_Str");
    Logging.logger().severe(message);
    throw new IllegalArgumentException(message);
  }
  this.params=params.copy();
  String message=this.validate(params);
  if (message != null) {
    Logging.logger().severe(message);
    throw new IllegalArgumentException(message);
  }
  String ln=this.params.getStringValue(AVKey.LEVEL_NAME);
  this.levelName=ln != null ? ln : "String_Node_Str";
  this.levelNumber=(Integer)this.params.getValue(AVKey.LEVEL_NUMBER);
  this.levelWidth=(Integer)this.params.getValue(AVKeyMore.LEVEL_WIDTH);
  this.levelHeight=(Integer)this.params.getValue(AVKeyMore.LEVEL_HEIGHT);
  int tileWidth=(Integer)this.params.getValue(AVKey.TILE_WIDTH);
  int tileHeight=(Integer)this.params.getValue(AVKey.TILE_HEIGHT);
  this.cacheName=this.params.getStringValue(AVKey.DATA_CACHE_NAME);
  this.service=this.params.getStringValue(AVKey.SERVICE);
  this.dataset=this.params.getStringValue(AVKey.DATASET_NAME);
  this.formatSuffix=this.params.getStringValue(AVKey.FORMAT_SUFFIX);
  this.urlBuilder=(CurtainTileUrlBuilder)this.params.getValue(AVKey.TILE_URL_BUILDER);
  this.expiryTime=AVListImpl.getLongValue(params,AVKey.EXPIRY_TIME,0L);
  Angle curtainLength=((Path)this.params.getValue(AVKeyMore.PATH)).getLength();
  this.texelSize=curtainLength.radians / this.levelWidth;
  int widthsPerTile=Util.previousPowerOfTwo(tileWidth / this.levelWidth);
  int heightsPerTile=Util.previousPowerOfTwo(tileHeight / this.levelHeight);
  if (widthsPerTile > 1) {
    tileWidth/=widthsPerTile;
    tileHeight*=widthsPerTile;
  }
  if (heightsPerTile > 1) {
    tileWidth*=heightsPerTile;
    tileHeight/=heightsPerTile;
  }
  this.tileWidth=tileWidth;
  this.tileHeight=tileHeight;
  this.columnCount=(levelWidth - 1) / tileWidth + 1;
  this.rowCount=(levelHeight - 1) / tileHeight + 1;
  this.path=this.cacheName + "String_Node_Str" + this.levelName;
  Integer maxAbsentTileAttempts=(Integer)this.params.getValue(AVKey.MAX_ABSENT_TILE_ATTEMPTS);
  if (maxAbsentTileAttempts == null)   maxAbsentTileAttempts=DEFAULT_MAX_ABSENT_TILE_ATTEMPTS;
  Integer minAbsentTileCheckInterval=(Integer)this.params.getValue(AVKey.MIN_ABSENT_TILE_CHECK_INTERVAL);
  if (minAbsentTileCheckInterval == null)   minAbsentTileCheckInterval=DEFAULT_MIN_ABSENT_TILE_CHECK_INTERVAL;
  this.absentTiles=new AbsentResourceList(maxAbsentTileAttempts,minAbsentTileCheckInterval);
}