|  | #!/usr/bin/ruby | 
|  | # | 
|  | # Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved. | 
|  | # | 
|  | # This program and the accompanying materials are made available under the | 
|  | # terms of the Eclipse Public License v. 2.0, which is available at | 
|  | # http://www.eclipse.org/legal/epl-2.0. | 
|  | # | 
|  | # This Source Code may also be made available under the following Secondary | 
|  | # Licenses when the conditions for such availability set forth in the | 
|  | # Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | 
|  | # version 2 with the GNU Classpath Exception, which is available at | 
|  | # https://www.gnu.org/software/classpath/license.html. | 
|  | # | 
|  | # SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | 
|  | # | 
|  |  | 
|  |  | 
|  | # Author: Dies Koper (dkoper@dev.java.net) | 
|  | # This script reads a list of message keys from an input file and | 
|  | # checks all Java source files for the usage of these keys. | 
|  | # Message logged for debugging (level FINE, etc.) are omitted from the results. | 
|  | require 'find' | 
|  |  | 
|  | keys_found = [] | 
|  | # load message keys (or "msg.key=msg text" pairs) | 
|  | keys = IO.readlines("msgs-with-no-ids.txt") | 
|  | keys.collect! { |item| | 
|  | # only interested in message keys (so remove msg text) | 
|  | if item =~ /^([\w._\-]+\s*[^\\])[=:].*/ | 
|  | $1 | 
|  | else | 
|  | item | 
|  | end | 
|  | } | 
|  |  | 
|  | # return regex pattern from given array in .*"(a|b|c)".* format, i.e. | 
|  | # a, b or c is enclosed in double quotes | 
|  | def build_regex(keys) | 
|  | #puts keys | 
|  | regex=".*\"(" | 
|  | keys.each { |key| | 
|  | regex += key.to_s + '|' | 
|  | } | 
|  | regex = regex.chomp!('|') + ')".*' | 
|  | #puts regex | 
|  | end | 
|  |  | 
|  | #puts keys | 
|  | # build regex pattern from array elements | 
|  | regex = build_regex(keys) | 
|  | #puts regex | 
|  |  | 
|  | keys_total = keys.size | 
|  | matches = 0 | 
|  | no_id = 0 | 
|  | prev_line = "" | 
|  |  | 
|  | puts "GlassFish Home Is: "+ARGV[0] | 
|  |  | 
|  | # traverse all files under the following root dir | 
|  | Find.find(ARGV[0] ) do |f| | 
|  |  | 
|  | case File.dirname(f) | 
|  | # skip directories that store copies of property files | 
|  | when /.*\/.svn/ then Find.prune # skip .svn dirs | 
|  | when /.*\/target/ then Find.prune # skip build dirs | 
|  | when /.*\/tests/ then Find.prune # skip test dirs | 
|  | end | 
|  |  | 
|  | case File.extname(f) | 
|  | when '.java' then | 
|  | IO.foreach(f) {|line| | 
|  | # if line contains a message key | 
|  | unless (line.match(regex).nil?) | 
|  | key = $1 | 
|  | keys_found << key | 
|  |  | 
|  | case line | 
|  | # if a line starts with a double quote or opening bracket '(' it is | 
|  | # probably a continuance of the previous line | 
|  | when /^\s*["\(].*/ | 
|  | line = prev_line.chomp + line.lstrip | 
|  | #puts "double line: #{line}" | 
|  | end | 
|  |  | 
|  | case line | 
|  | # do not report if message logged as debug message | 
|  | when /.*log\(Level\.(FINE|FINER|FINEST|CONFIG).*/ then | 
|  | #          puts "debug msg found: #{key} in #{f.gsub(File::SEPARATOR, | 
|  | #          File::ALT_SEPARATOR || File::SEPARATOR)}\n#{line}" | 
|  | when /.*\.(fine|finer|finest|config)\(.*/ then | 
|  | #          puts "debug msg found: #{key} in #{f.gsub(File::SEPARATOR, | 
|  | #          File::ALT_SEPARATOR || File::SEPARATOR)}\n#{line}" | 
|  | else | 
|  | # Message key found. (Could be in code that is commented out, | 
|  | # not used, logged as info/warn/severe message, etc.) | 
|  | puts "- Found key '#{key}' used in #{f.gsub(File::SEPARATOR, | 
|  | File::ALT_SEPARATOR || File::SEPARATOR)}\n#{line}" | 
|  | no_id += 1 | 
|  | end | 
|  | end | 
|  | prev_line = line | 
|  | } | 
|  | end | 
|  |  | 
|  | end | 
|  |  | 
|  | keys_not_found = keys - keys_found | 
|  | puts "#{no_id} messages may need an Id." | 
|  | puts "#{keys_not_found.size} of provided #{keys_total} message keys were not found:\n" + | 
|  | keys_not_found.inspect |