class JavaClass::Classpath::TrackingClasspath
A delegator classpath that tracks which classes have been accessed. For an example see how to find (un)referenced JARs.
- Author
-
Peter Kofler
Public Class Methods
new(classpath)
click to toggle source
Create a tracked instance of the classpath .
Calls superclass method
# File lib/javaclass/classpath/tracking_classpath.rb, line 13 def initialize(classpath) unless classpath.respond_to?(:load_binary) || classpath.respond_to?(:load) raise ArgumentError, "wrong type of delegatee #{classpath.class}" end @classpath = classpath reset_access super(classpath) end
Public Instance Methods
accessed(classname=nil)
click to toggle source
Was the classname accessed then return the count? If classname is nil
then check if any class was accessed.
# File lib/javaclass/classpath/tracking_classpath.rb, line 69 def accessed(classname=nil) if classname key = to_key(classname) @accessed[key] else @accessed.values.inject(0) {|s,e| s + e } end end
all_accessed()
click to toggle source
Return the classnames of all accessed classes. This is a list of frozen JavaClassFileName
.
# File lib/javaclass/classpath/tracking_classpath.rb, line 79 def all_accessed @accessed.keys.sort end
elements()
click to toggle source
Returns the wrapped classpath element (self
) of this decorated classpath.
# File lib/javaclass/classpath/tracking_classpath.rb, line 23 def elements if [FolderClasspath, JarClasspath].include?(@classpath.class) # TODO check for any subclass of FileClasspath instead [self] else @classpath.elements end end
load(classname)
click to toggle source
Read and disassemble the given class classname and mark as accessed.
# File lib/javaclass/classpath/tracking_classpath.rb, line 45 def load(classname) key = to_key(classname) mark_accessed(key) @classpath.load(key) end
load_binary(classname)
click to toggle source
Load the binary and mark the classname as accessed.
# File lib/javaclass/classpath/tracking_classpath.rb, line 38 def load_binary(classname) key = to_key(classname) mark_accessed(key) @classpath.load_binary(key) end
mark_accessed(classname)
click to toggle source
Mark the classname as accessed. Return the number of accesses so far.
# File lib/javaclass/classpath/tracking_classpath.rb, line 52 def mark_accessed(classname) key = to_key(classname) if @classpath.includes?(key) # hash keys need to be frozen to keep state if !@accessed.include?(key) key = key.freeze end @accessed[key] += 1 else nil end end
reset_access()
click to toggle source
Reset all prior marked access.
# File lib/javaclass/classpath/tracking_classpath.rb, line 33 def reset_access @accessed = Hash.new(0) # class_file (JavaClassFileName) => cnt end
Private Instance Methods
to_key(classname)
click to toggle source
# File lib/javaclass/classpath/tracking_classpath.rb, line 85 def to_key(classname) classname.to_javaname.to_class_file end