config/fish/functions/class_version.fish

64 lines
1.7 KiB
Fish

function class_version --argument-names class_file
if not string match -q '*.class' "$class_file"
echo "Expected a Java class file but got: $class_file"
return 1
end
# Use the `file` command if available
if command -q file
command file "$class_file"
return 0
end
javap -verbose "$class_file" | string match -rq 'major version: (?<major_version>\d+)'
set -l version_name
# https://en.wikipedia.org/wiki/Java_class_file#General_layout
switch "$major_version"
case 63
set version_name 'Java SE 19'
case 62
set version_name 'Java SE 18'
case 61
set version_name 'Java SE 17'
case 60
set version_name 'Java SE 16'
case 59
set version_name 'Java SE 15'
case 58
set version_name 'Java SE 14'
case 57
set version_name 'Java SE 13'
case 56
set version_name 'Java SE 12'
case 55
set version_name 'Java SE 11'
case 54
set version_name 'Java SE 10'
case 53
set version_name 'Java SE 9'
case 52
set version_name 'Java SE 8'
case 51
set version_name 'Java SE 7'
case 50
set version_name 'Java SE 6.0'
case 49
set version_name 'Java SE 5.0'
case 48
set version_name 'JDK 1.4'
case 47
set version_name 'JDK 1.3'
case 46
set version_name 'JDK 1.2'
case 45
set version_name 'JDK 1.1'
case '*'
set version_name 'Unknown Java version'
end
echo "$version_name (major version $major_version)"
end