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