Mercurial Hosting > nabble
diff src/fschmidt/tools/Packages.java @ 68:00520880ad02
add fschmidt source
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 05 Oct 2025 17:24:15 -0600 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/fschmidt/tools/Packages.java Sun Oct 05 17:24:15 2025 -0600 @@ -0,0 +1,92 @@ +/* +Copyright (c) 2008 Franklin Schmidt <fschmidt@gmail.com> + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +package fschmidt.tools; + +import java.io.File; +import java.util.Set; +import java.util.HashSet; +import java.util.Arrays; +import java.util.regex.Pattern; +import fschmidt.util.java.ObjectUtils; + + +/** + * Lists nextag packages. Written for javadoc and used like: + * <pre> + * javadoc `java fschmidt.tools.Packages` + * </pre> + * + * @author frank + */ +public final class Packages { + + public static void main (String args[]) { + Set<String> list = new HashSet<String>(); + for( int i=0; i<args.length; i++ ) { + pkgs(list,args[i]); + } + String[] a = (String[])list.toArray(new String[0]); + for( int i=0; i<a.length; i++ ) { + System.out.println(a[i]); + } + } + + static void pkgs(Set<String> list,String pkg) { + String[] dirs = toDirs(pkg); + boolean hasFiles = false; + for( int j=0; j<dirs.length; j++ ) { + String dir = dirs[j]; + String[] ls = new File(dir).list(); + if( ls == null ) + continue; + String[] subs = new String[ls.length]; + for( int i=0; i<ls.length; i++ ) { + File f = new File(dir + File.separator + ls[i]); + if( f.isDirectory() ) { + pkgs( list, pkg + "." + ls[i] ); + } + if( f.getName().endsWith(".java") ) + hasFiles = true; + } + } + if( hasFiles ) + list.add(pkg); + } + + static String[] paths = System.getProperty("java.class.path").split(Pattern.quote(File.pathSeparator),-1); + + static String[] toDirs(String pkg) { + String relPath = ObjectUtils.join( + Arrays.asList(pkg.split("\\.",-1)), File.separator + ); + Set<String> list = new HashSet<String>(); + for( int i=0; i<paths.length; i++ ) { + String path = paths[i]; + if( !path.endsWith(File.separator) ) + path += File.separator; + if( new File(path+relPath).exists() ) + list.add(path+relPath); + } + return (String[])list.toArray(new String[0]); + } +}