class JavaClass::Dsl::CachingClasspath

A delegator classpath that caches loaded class files in a map by full qualified class names.

Author

Peter Kofler

Public Class Methods

new(classpath) click to toggle source

Create a cached instance of the classpath (a LoadingClasspath).

Calls superclass method
# File lib/javaclass/dsl/caching_classpath.rb, line 11
def initialize(classpath)
  unless classpath.respond_to? :load 
    raise ArgumentError, "wrong type of delegatee #{classpath.class}"
  end
  @classpath = classpath
  @cache = Hash.new # full_name (String) => ClassEntryHeader
  super(classpath)
end

Public Instance Methods

load(classname) click to toggle source

Ask the cache for the classname and return it. Else delegate loading.

# File lib/javaclass/dsl/caching_classpath.rb, line 21
def load(classname)
  key = classname.to_javaname.full_name
  if !@cache.include?(key)
    @cache[key] = @classpath.load(classname)
  end
  @cache[key]
end
values(listed=nil, &filter) click to toggle source

Load listed or all classes. Duplicate method to use the cache of decorator.

# File lib/javaclass/dsl/caching_classpath.rb, line 30
def values(listed=nil, &filter)
  listed ||= names(&filter)
  listed.collect { |name| load(name) }
end