module CxfFormatter
Just one module with one method
Constants
- VERSION
Public Class Methods
clean(path)
click to toggle source
# File lib/cxf_formatter.rb, line 5 def clean(path) path = '.' if path.nil? path = path.tr('\\', '/') if Gem.win_platform? path = File.expand_path(path) puts "Cleaning sources in path #{path}" Dir.chdir(path) do Dir.glob('./**/*.java') do |p| src = File.read p basename = File.basename(p) # remove all doc new_src = src.gsub(/\/\*\*.*? \*\/$/m, '') new_src = clean_xml_elem_refs(new_src) new_src = clean_objectfactory_java(basename, new_src) unless src == new_src puts "cleaned #{p}" File.open(p, 'w') { |f| f.write(new_src) } end end end end
clean_objectfactory_java(basename, new_src)
click to toggle source
# File lib/cxf_formatter.rb, line 51 def clean_objectfactory_java(basename, new_src) return new_src unless basename == 'ObjectFactory.java' # Sort private declarations in ObjectFactory.java puts 'ObjectFactory.java' match = /^$.(\s{4}private.*?)^$/m.match(new_src) if match elems = match[1].split("\n") puts " Sorting #{elems.count} private declarations" new_src = new_src.sub(match[1], elems.sort.join("\n") + "\n") # extra newline, not sure why, it seems to work end # Sort @XmlElementDecl in ObjectFactory.java matches = new_src.scan(/(^$^\s{4,}@XmlElementDecl(?:.*?)}$)/m) snippets = [] matches.each do |match2| snippet = "\n" + match2.first # don't know how but newline seems to be disappearing snippets << snippet if !new_src.include? :placeholder1.to_s new_src = new_src.sub(snippet, :placeholder1.to_s) else new_src = new_src.sub(snippet, '') end end puts " Sorting #{snippets.count} @XmlElementDecl" new_src = new_src.sub(:placeholder1.to_s, snippets.sort.join) # Sort public methods matches = new_src.scan(/(^$^\s{4,}public(?:.*?)}$)/m) snippets2 = [] matches.each do |match2| snippet = "\n" + match2.first # here two, newline gone snippets2 << snippet if !new_src.include? :placeholder2.to_s new_src = new_src.sub(snippet, :placeholder2.to_s) else new_src = new_src.sub(snippet, '') end end puts " Sorting #{snippets2.count} public methods" new_src.sub(:placeholder2.to_s, snippets2.sort.join) end
clean_xml_elem_refs(new_src)
click to toggle source
Sort @XmlElementRefs in a consistent way
# File lib/cxf_formatter.rb, line 30 def clean_xml_elem_refs(new_src) matches = new_src.scan(/(@XmlElementRefs\({$(.*?)$\s*}\))/m) # two capture groups - inner and outer matches.each do |match| if match[1] # remove first newline, not clear how to capture in outer group match[1] = match[1].sub("\n", '') if match[1].index("\n") == 0 elem_refs = match[1].split(",\n") # array of elements like # "@XmlElementRef(name = \"Thoroughfare\", namespace = \"http://hum$ # new_src = new_src.gsub(match[1],newline + elem_refs.sort.join(",\n")) new_src = new_src.gsub(match[1], elem_refs.sort.join(",\n")) # here we add newline again else puts "no match[1] for #{p}" end end new_src end
Private Instance Methods
clean(path)
click to toggle source
# File lib/cxf_formatter.rb, line 5 def clean(path) path = '.' if path.nil? path = path.tr('\\', '/') if Gem.win_platform? path = File.expand_path(path) puts "Cleaning sources in path #{path}" Dir.chdir(path) do Dir.glob('./**/*.java') do |p| src = File.read p basename = File.basename(p) # remove all doc new_src = src.gsub(/\/\*\*.*? \*\/$/m, '') new_src = clean_xml_elem_refs(new_src) new_src = clean_objectfactory_java(basename, new_src) unless src == new_src puts "cleaned #{p}" File.open(p, 'w') { |f| f.write(new_src) } end end end end
clean_objectfactory_java(basename, new_src)
click to toggle source
# File lib/cxf_formatter.rb, line 51 def clean_objectfactory_java(basename, new_src) return new_src unless basename == 'ObjectFactory.java' # Sort private declarations in ObjectFactory.java puts 'ObjectFactory.java' match = /^$.(\s{4}private.*?)^$/m.match(new_src) if match elems = match[1].split("\n") puts " Sorting #{elems.count} private declarations" new_src = new_src.sub(match[1], elems.sort.join("\n") + "\n") # extra newline, not sure why, it seems to work end # Sort @XmlElementDecl in ObjectFactory.java matches = new_src.scan(/(^$^\s{4,}@XmlElementDecl(?:.*?)}$)/m) snippets = [] matches.each do |match2| snippet = "\n" + match2.first # don't know how but newline seems to be disappearing snippets << snippet if !new_src.include? :placeholder1.to_s new_src = new_src.sub(snippet, :placeholder1.to_s) else new_src = new_src.sub(snippet, '') end end puts " Sorting #{snippets.count} @XmlElementDecl" new_src = new_src.sub(:placeholder1.to_s, snippets.sort.join) # Sort public methods matches = new_src.scan(/(^$^\s{4,}public(?:.*?)}$)/m) snippets2 = [] matches.each do |match2| snippet = "\n" + match2.first # here two, newline gone snippets2 << snippet if !new_src.include? :placeholder2.to_s new_src = new_src.sub(snippet, :placeholder2.to_s) else new_src = new_src.sub(snippet, '') end end puts " Sorting #{snippets2.count} public methods" new_src.sub(:placeholder2.to_s, snippets2.sort.join) end
clean_xml_elem_refs(new_src)
click to toggle source
Sort @XmlElementRefs in a consistent way
# File lib/cxf_formatter.rb, line 30 def clean_xml_elem_refs(new_src) matches = new_src.scan(/(@XmlElementRefs\({$(.*?)$\s*}\))/m) # two capture groups - inner and outer matches.each do |match| if match[1] # remove first newline, not clear how to capture in outer group match[1] = match[1].sub("\n", '') if match[1].index("\n") == 0 elem_refs = match[1].split(",\n") # array of elements like # "@XmlElementRef(name = \"Thoroughfare\", namespace = \"http://hum$ # new_src = new_src.gsub(match[1],newline + elem_refs.sort.join(",\n")) new_src = new_src.gsub(match[1], elem_refs.sort.join(",\n")) # here we add newline again else puts "no match[1] for #{p}" end end new_src end