generate_class_lists.txt

Path: lib/generated/examples/generate_class_lists.txt
Last Update: Sat May 30 00:44:04 +0200 2015

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 (c) 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

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/]

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? } }
   File.open("#{basename}_new_public_classes.txt", "w") { |f| f.print list.plain_class_list { |c| c.public? and c.version.first == conf.version } }

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

   puts "processed #{conf.label}"
 end

[Validate]