Top Level Namespace

Includes:
JavaClass

Defined Under Namespace

Modules: JavaClass Classes: String

Constant Summary collapse

JDK_PACKAGES =
%w| java javax.accessibility javax.activity javax.crypto javax.imageio javax.jnlp javax.management 
javax.naming javax.net javax.print javax.rmi javax.script javax.security.auth javax.security.cert
javax.security.sasl javax.sound.midi javax.sound.sampled javax.sql javax.swing javax.transaction
javax.xml org.ietf.jgss org.w3c.dom org.xml.sax|.collect { |pkg| /^#{pkg}\./ }

Instance Method Summary collapse

Methods included from JavaClass

classpath, disassemble, environment_classpath, full_classpath, load_cp, load_fs, parse

Instance Method Details

#imported_types(classes) ⇒ Object



18
19
20
21
22
23
24
25
26
27
# File 'lib/javaclass/metric/class_usage.rb', line 18

def imported_types(classes)
  own_classes = classes.names.collect { |name| name.gsub('/', '.').sub(/\.class$/, '')}.sort 
  
  imported = classes.names.collect do |name|
    clazz = JavaClassHeader.new(classes.load_binary(name))
    clazz.references.used_classes.collect { |c| c.to_s.gsub('/', '.') }  
  end.flatten.uniq.sort
  
  imported.reject { |name| in_jdk?(name) } - own_classes
end

#in_jdk?(name) ⇒ Boolean

Returns:

  • (Boolean)


14
15
16
# File 'lib/javaclass/metric/class_usage.rb', line 14

def in_jdk?(name)
  JDK_PACKAGES.find { |regex| name =~ regex } != nil
end

#process_class(name, already = [], intend = 0) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/javaclass/metric/ccd.rb', line 9

def process_class(name, already=[], intend=0)
  file_name = 'C:\JavaDev\classes\\' + name.gsub(/\./,'\\') + '.class'
  return if !FileTest.exist? file_name
  # p file_name
  clazz = JavaClass.parse(file_name)
  # p clazz
  puts " "*intend + clazz.this_class
  
  imported = clazz.references.used_classes.collect { |c| c.to_s }.sort
  new_used = imported - already
  already << new_used
  already.flatten!
  new_used.find_all { |c| c =~ /at\/spardat\// }.each do |c|
    process_class(c, already, intend+1)
  end
end

#process_package(folder, already = [], intend = 0) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/javaclass/metric/ccd.rb', line 26

def process_package(folder, already=[], intend=0)
  file_name = 'C:\JavaDev\classes\\' + folder.gsub(/\./,'\\')
  cwd = Dir.getwd
  Dir.chdir file_name
  files = Dir['*']
  files.each do |c|
    if c =~ /\.class$/
      process_class(folder + '.' + c[/^[^.]+/], already, intend)
    elsif FileTest.directory? c
      puts " "*intend+ '-----'
      process_package(folder + '.' + c, already, intend)
    end
  end
  Dir.chdir cwd
end