public AccessPath dropFirstField(){
  if (fields == null || fields.length == 0)   return this;
  final SootField[] newFields;
  final Type[] newTypes;
  if (fields.length > 1) {
    newFields=new SootField[fields.length - 1];
    System.arraycopy(fields,1,newFields,0,fields.length - 1);
    newTypes=new Type[fields.length - 1];
    System.arraycopy(fieldTypes,1,newTypes,0,fields.length - 1);
  }
 else {
    newFields=null;
    newTypes=null;
  }
  return new AccessPath(value,newFields,fieldTypes[0],newTypes,taintSubFields);
}

public AccessPath dropFirstField ( ) { if ( fields == null || fields . length == 0 ) return this ; final SootField [ ] newFields ; final Type [ ] newTypes ; if ( fields . length > 1 ) { newFields = new SootField [ fields . length - 1 ] ; System . arraycopy ( fields , 1 , newFields , 0 , fields . length - 1 ) ; newTypes = new Type [ fields . length - 1 ] ; System . arraycopy ( fieldTypes , 1 , newTypes , 0 , fields . length - 1 ) ; } else { newFields = null ; newTypes = null ; } return new AccessPath ( value , newFields , fieldTypes [ 0 ] , newTypes , taintSubFields ) ; }
gets a copy of this access path , but drops the first field . if this access path has no fields , the identity is returned .
