public PathImpl lookupImpl(String userPath,Map<String,Object> newAttributes,boolean isAllowRoot){
  if (userPath == null) {
    return lookupImpl(getPath(),newAttributes,isAllowRoot);
  }
  if (!isAllowRoot) {
    return schemeWalk(userPath,newAttributes,userPath,0);
  }
  String scheme=scanScheme(userPath);
  if (scheme == null) {
    return schemeWalk(userPath,newAttributes,userPath,0);
  }
  PathImpl path;
  SchemeMap schemeMap=_schemeMap;
  if (isWindows()) {
    int length=scheme.length();
    char ch;
    if (length == 1 && ('a' <= (ch=scheme.charAt(0)) && ch <= 'z' || 'A' <= ch && ch <= 'Z')) {
      userPath=Character.toLowerCase(ch) + userPath.substring(1);
      if (_isTestWindows)       return schemeWalk(userPath,newAttributes,"/" + userPath,0);
      path=schemeMap.get("file");
      if (path != null)       return path.schemeWalk(userPath,newAttributes,"/" + userPath,0);
 else       return schemeWalk(userPath,newAttributes,"/" + userPath,0);
    }
  }
  path=schemeMap.get(scheme);
  if (path == null) {
    return schemeWalk(userPath,newAttributes,userPath,0);
  }
 else {
    return path.schemeWalk(userPath,newAttributes,userPath,scheme.length() + 1);
  }
}

public PathImpl lookupImpl ( String userPath , Map < String , Object > newAttributes , boolean isAllowRoot ) { if ( userPath == null ) { return lookupImpl ( getPath ( ) , newAttributes , isAllowRoot ) ; } if ( ! isAllowRoot ) { return schemeWalk ( userPath , newAttributes , userPath , 0 ) ; } String scheme = scanScheme ( userPath ) ; if ( scheme == null ) { return schemeWalk ( userPath , newAttributes , userPath , 0 ) ; } PathImpl path ; SchemeMap schemeMap = _schemeMap ; if ( isWindows ( ) ) { int length = scheme . length ( ) ; char ch ; if ( length == 1 && ( 'a' <= ( ch = scheme . charAt ( 0 ) ) && ch <= 'z' || 'A' <= ch && ch <= 'Z' ) ) { userPath = Character . toLowerCase ( ch ) + userPath . substring ( 1 ) ; if ( _isTestWindows ) return schemeWalk ( userPath , newAttributes , "/" + userPath , 0 ) ; path = schemeMap . get ( "file" ) ; if ( path != null ) return path . schemeWalk ( userPath , newAttributes , "/" + userPath , 0 ) ; else return schemeWalk ( userPath , newAttributes , "/" + userPath , 0 ) ; } } path = schemeMap . get ( scheme ) ; if ( path == null ) { return schemeWalk ( userPath , newAttributes , userPath , 0 ) ; } else { return path . schemeWalk ( userPath , newAttributes , userPath , scheme . length ( ) + 1 ) ; } }
returns a new path relative to the current one . < p > path only handles scheme : xxx . subclasses of path will specialize the xxx .
