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) ⇒ 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)
  scan_config_for_class_names(path).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) ⇒ Object

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



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

def scan_config_for_class_names(path)
  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=~/^\./ }.map { |n| scan_config_for_class_names(File.join(path, n)) }.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.



52
53
54
# File 'lib/javaclass/java_name_scanner.rb', line 52

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