Module: JavaClass::JavaNameScanner

Included in:
Dsl::Mixin
Defined in:
lib/javaclass/java_name_scanner.rb

Overview

Mixin with logic to scan for hard coded class names.

Author

Peter Kofler

Constant Summary collapse

TEXT_REGEX =
/
  (?:^|>|"|'|=|:|!)
  \s*
  (   (?:#{JavaLanguage::IDENTIFIER_REGEX}#{JavaLanguage::SEPARATOR_REGEX})+#{JavaLanguage::TYPE_REGEX}   )
  \s*
  (?:$|<|"|'|:)
/x

Instance Method Summary collapse

Instance Method Details

#scan_config_for_3rd_party_class_names(path, ignorepattern = /^\./) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/javaclass/java_name_scanner.rb', line 20

def scan_config_for_3rd_party_class_names(path, ignorepattern=/^\./)
  scan_config_for_class_names(path, ignorepattern).reject { |name| name.in_jdk? }
  # need abstraction for - .reject { |name| name.in_jdk? } - have it three times
  # maybe a mixin for enumerables containing JavaTypes
  #JavaNameEnumerable with - .reject { |name| name.in_jdk? } - und anderen? reject_in_jdk = 3rd Party
  # and find_all { |n| n.same_or_subpackage_of?(x) } -- also very often  = in_package()
end

#scan_config_for_class_names(path, ignorepattern = /^\./) ⇒ Object

Find all possible class names in all XML and property files under path and optionally ignore ignorepattern



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/javaclass/java_name_scanner.rb', line 29

def scan_config_for_class_names(path, ignorepattern=/^\./)
  return [] unless File.exist? path
  if File.file?(path) 
    if path =~ /\.xml$|\.properties$|MANIFEST.MF$/
      scan_text_for_class_names(IO.readlines(path).join)
    else
      []
    end
  else
    Dir.entries(path).reject { |n| n =~ /^\./ or n=~ ignorepattern }.
                      map { |n| scan_config_for_class_names(File.join(path, n), ignorepattern) }.
                      flatten.sort
  end
end

#scan_text_for_class_names(string) ⇒ Object

Extract the list of possible class names from the given string . This will only find names with at least one package name.



54
55
56
# File 'lib/javaclass/java_name_scanner.rb', line 54

def scan_text_for_class_names(string)
  string.scan(TEXT_REGEX).flatten.map { |match| JavaQualifiedName.new(match) }
end