# Example usage of classpath and class files: Scan all classes of an workspace. # Find all interfaces, print their names and find all which are prefixed with 'I'.

# Author

Peter Kofler

# Copyright

Copyright © 2009, Peter Kofler.

# License

BSD License

# # === Steps #

# require 'javaclass/dsl/mixin' #

# 1) define the location of the project and a package you are interrested # location = 'C:Eclipseworkspace' # package = 'com.biz.app' #

# e.g. add an Eclipse classpath variable to find external dependencies. # Eclipse.add_variable('KOR_HOME', location) #

# 2) create the classpath of the given workspace # cp = workspace(location) # puts “#{cp.elements.size} classpaths found under the workspace #{location}:” # puts “ #{cp.elements.join(”n “)}” # puts “#{cp.count} classes found on classpath” #

# 3) filter the classes to analyse, using JavaClass::JavaQualifiedName methods # to_analyse = cp.names { |classname| classname.same_or_subpackage_of?(package) } # puts “#{to_analyse.size} classes matched #{package}” #

# 4) load all selected classes, parse into JavaClass::ClassFile, find all interfaces and collect their qualified names # names = cp.values(to_analyse). # find_all { |clazz| clazz.interface? }. # collect { |clazz| clazz.to_classname } # puts “#{names.size} interfaces found:n #{names.sort.join(”n “)}” #

# 5) print all qualified names have a simple namee staring with an I # inames = names.find_all { |classname| classname.simple_name =~ /^I[a-z]/ } # puts “#{inames.size} interfaces start with I:n #{inames.join(”n “)}”