64 lines
1.7 KiB
Fish
64 lines
1.7 KiB
Fish
function class_version --argument-name 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
|