# Generate a JavaClass::ClassList, which contains all class # names with version numbers when introduced. The list is created # iterating all JDKs, opening the RT.jars and loading all classes.

# Author

Peter Kofler

# Copyright

Copyright © 2009, Peter Kofler.

# License

BSD License

# # === Usage #

# require 'javaclass/classlist/jar_searcher' # require 'javaclass/classpath/jar_classpath' # require 'javaclass/classlist/list' #

# Struct to keep configuration what kind of JDK classes should be searched and added. # JDK_CONFIG = Struct.new(:version, :label, :paths) #

# configuration for some JDKs # JDKS = [ JDK_CONFIG.new(…), … ] #

# 1) create a JavaClass::ClassList::JarSearcher # JavaClass.unpack_jars!(:unpack) # searcher = JavaClass::ClassList::JarSearcher.new # searcher.skip_inner_classes = false # searcher.skip_package_classes = true #

# 2) filter out unwanted classes, e.g. vendor classes # searcher.filters = %w[sun/ sunw/ com/oracle/ com/sun/ netscape/ com/rsa/ # quicktime/ com/apple/mrj/macos/carbon/ org/jcp/xml/dsig/internal/ # oracle/jrockit/ jdk/internal/ jdk/nashorn/internal/ # jdk/dynalink/internal/ jdk/incubator/http.internal/ jdk/javadoc/internal/ jdk/tools/jlink/internal/ ] #

# 3) create a new JavaClass::ClassList::List to contain the classes # list = JavaClass::ClassList::List.new #

#

# Work on all lists defined in JDKS, add to the list and write list files. # JDKS.each do |conf| # # 4) iterate JARs and compile a list # conf.paths.each { |p| list = searcher.compile_list(conf.version, p, list) } #

# # 5) save various kind of lists # basename = “./ClassLists/jdk#{conf.label.gsub(/./, '')}” # # File.open(“#{basename}_new_package_classes.txt”, “w”) { |f| f.print list.old_access_list.collect{|m| m.sub(/s.*$/, '')} } # # File.open(“#{basename}_all_classes.txt”, “w”) { |f| f.print list.plain_class_list } # File.open(“#{basename}_all_packages.txt”, “w”) { |f| f.print list.to_s } # File.open(“#{basename}_all_public_classes.txt”, “w”) { |f| f.print list.plain_class_list { |c| c.public? }.join() } # File.open(“#{basename}_new_public_classes.txt”, “w”) { |f| f.print list.plain_class_list { |c| c.public? and c.version.first == conf.version }.join() } #

# baseversion = conf.label.gsub(/.|-.+$/, '') # File.open(“./fullClassList#{baseversion}.txt”, “w”) { |f| f.print list.full_class_list.join() } #

# puts “processed #{conf.label}” # end