- setup_java(): replace dpkg -l with dpkg-query to avoid column truncation
that caused version detection to fail and trigger unnecessary reinstalls
- get_cached_version(): return 1 when cache file not found (was always 0)
- setup_uv(): use trap RETURN instead of EXIT to avoid overwriting global
traps and ensure cleanup runs on function return, not shell exit
- setup_docker(): declare DOCKER_CURRENT_VERSION and DOCKER_LATEST_VERSION
as local to prevent global namespace pollution