Module: JavaClass::Analyse::TransitiveDependencies

Included in:
Dsl::ClasspathAnalysers
Defined in:
lib/javaclass/analyse/transitive_dependencies.rb

Overview

Transitive dependency analysis to be mixed into Dsl::LoadingClasspath. For an example see how to get cumulative dependencies of a class. For plain dependencies of a Classpath see Dependencies.

Author

Peter Kofler

Instance Method Summary collapse

Instance Method Details

#transitive_dependencies_package(package, &filter) ⇒ Object

Creates the tree of all transitive dependencies of the Java package where every dependency is only listed once at its first occurence. It returns an AdderTree containing all found dependencies. An additional block is used as filter on class names to work with, e.g. the main classes. Requires a method names in the base class.



39
40
41
42
43
44
45
46
47
# File 'lib/javaclass/analyse/transitive_dependencies.rb', line 39

def transitive_dependencies_package(package, &filter)
  tree = AdderTree.new(package)

  names { |classname| classname.same_or_subpackage_of?(package) }.each do |classname| 
    transitive_dependency_tree(classname, tree, &filter)
  end
  
  tree
end

#transitive_dependency_tree(classname, tree = nil, &filter) ⇒ Object

Creates the tree of all transitive dependencies of classname where every dependency is only listed once at its first occurence. It returns an AdderTree containing all found dependencies. An additional block is used as filter on class names to work with, e.g. the main classes. Requires methods includes? and load in the base class.



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/javaclass/analyse/transitive_dependencies.rb', line 16

def transitive_dependency_tree(classname, tree=nil, &filter)
  return if block_given? && !filter.call(classname) 
  return if tree && tree.root.contain?(classname)
  
  if tree
    tree = tree.add(classname.to_classname)
  else
    tree = AdderTree.new(classname.to_classname)
  end

  if includes?(classname)
    load(classname).imported_3rd_party_types.each do |classname|
      transitive_dependency_tree(classname, tree, &filter)
    end
  end
  
  tree
end