From: <jbo...@li...> - 2006-01-17 08:42:06
|
Author: mla...@jb... Date: 2006-01-17 03:41:54 -0500 (Tue, 17 Jan 2006) New Revision: 2117 Added: trunk/labs/jbosswebnp/src/windows/generators/bin/servlet-api.jar trunk/labs/jbosswebnp/src/windows/generators/j2x/ trunk/labs/jbosswebnp/src/windows/generators/j2x/J2X.java trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.javax.servlet.bat trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.rt.bat Log: Initial checkin. Added: trunk/labs/jbosswebnp/src/windows/generators/bin/servlet-api.jar =================================================================== (Binary files differ) Property changes on: trunk/labs/jbosswebnp/src/windows/generators/bin/servlet-api.jar ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/labs/jbosswebnp/src/windows/generators/j2x/J2X.java =================================================================== --- trunk/labs/jbosswebnp/src/windows/generators/j2x/J2X.java 2006-01-17 08:35:48 UTC (rev 2116) +++ trunk/labs/jbosswebnp/src/windows/generators/j2x/J2X.java 2006-01-17 08:41:54 UTC (rev 2117) @@ -0,0 +1,333 @@ +/* + * JBoss, the OpenSource J2EE webOS + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ + +import java.io.*; +import java.lang.reflect.*; +import java.lang.annotation.*; +import java.net.URL; +import java.util.*; + +public class J2X +{ + + public static String toJniType(String t) + { + if (t.charAt(0) == '[') + return t.replace('.', '/'); + if (t.equals("boolean")) + return "Z"; + else if (t.equals("int")) + return "I"; + else if (t.equals("long")) + return "J"; + else if (t.equals("byte")) + return "B"; + else if (t.equals("void")) + return "V"; + else if (t.equals("short")) + return "S"; + else if (t.equals("char")) + return "C"; + else if (t.equals("float")) + return "F"; + else if (t.equals("double")) + return "D"; + else + return ("L" + t + ";").replace('.', '/'); + } + + public static void dumpModifiers(int mod, String p) + { + if (Modifier.isPublic(mod)) + System.out.println(p + "<modifier>public</modifier>"); + if (Modifier.isProtected(mod)) + System.out.println(p + "<modifier>protected</modifier>"); + if (Modifier.isPrivate(mod)) + System.out.println(p + "<modifier>private</modifier>"); + if (Modifier.isFinal(mod)) + System.out.println(p + "<modifier>final</modifier>"); + if (Modifier.isAbstract(mod)) + System.out.println(p + "<modifier>abstract</modifier>"); + if (Modifier.isStatic(mod)) + System.out.println(p + "<modifier>static</modifier>"); + if (Modifier.isSynchronized(mod)) + System.out.println(p + "<modifier>synchronized</modifier>"); + if (Modifier.isNative(mod)) + System.out.println(p + "<modifier>native</modifier>"); + if (Modifier.isInterface(mod)) + System.out.println(p + "<modifier>interface</modifier>"); + } + + public static void dumpParams(Class [] params, String rt) + { + try { + if (params != null) { + int i; + StringBuilder sig = new StringBuilder("("); + for (i = 0; i < params.length; i++) { + String pt = toJniType(params[i].getName()); + String pn = "arg" + i; + System.out.print(" <param name=\"" + pn); + System.out.print("\" type=\"" + pt); + System.out.println("\"></param>"); + sig.append(pt); + } + sig.append(")"); + sig.append(rt); + System.out.println(" <signature>" + sig.toString() + "</signature>"); + } + } + catch(Exception e) {} + } + + public static void dumpThrows(Class [] ex) + { + try { + if (ex != null) { + int i; + for (i = 0; i < ex.length; i++) { + String pt = toJniType(ex[i].getName()); + System.out.print(" <throws type=\"" + pt); + System.out.println("\"></throws>"); + } + } + } + catch(Exception e) {} + } + + public static void dumpCtor(Constructor c) + { + try { + int mod = c.getModifiers(); + if (Modifier.isPrivate(mod)) + return; + if (c.isSynthetic()) + return; + if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) + return; + String rt = "V"; + System.out.println(" <init>"); + dumpModifiers(mod, " "); + System.out.println(" <summary>" + c.toString() + "</summary>"); + dumpParams(c.getParameterTypes(), rt); + dumpThrows(c.getExceptionTypes()); + dumpAnnotations(c.getAnnotations()); + System.out.println(" </init>"); + } + catch(Exception e) {} + } + + public static void dumpMethod(Method m) + { + try { + int mod = m.getModifiers(); + if (Modifier.isPrivate(mod)) + return; + if (m.isSynthetic()) + return; + if (m.isBridge()) + return; + if (m.isVarArgs()) + return; + if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) + return; + String rt = toJniType(m.getReturnType().getName()); + System.out.println(" <method name=\"" + m.getName() + "\">"); + dumpModifiers(mod, " "); + System.out.println(" <summary>" + m.toString() + "</summary>"); + dumpParams(m.getParameterTypes(), rt); + if (!rt.equals("V")) + System.out.println(" <returns type=\"" + rt + "\"></returns>"); + dumpThrows(m.getExceptionTypes()); + dumpAnnotations(m.getAnnotations()); + System.out.println(" </method>"); + } + catch(Exception e) {} + } + + public static void dumpField(Field f) + { + try { + int mod = f.getModifiers(); + if (Modifier.isNative(mod)) + return; + if (Modifier.isPrivate(mod)) + return; + if (f.isSynthetic()) + return; + if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) + return; + String rt = toJniType(f.getType().getName()); + System.out.println(" <field name=\"" + f.getName() + "\">"); + dumpModifiers(mod, " "); + System.out.println(" <summary>" + f.toString() + "</summary>"); + System.out.println(" <signature>" + rt + "</signature>"); + Object val = null; + try { + val = f.get(f); + } + catch(Exception e) { + val = null; + } + if (val != null) { + String v = val.toString(); + if (rt.equals("D") || rt.equals("F")) { + // Skip; + } + else if (rt.equals("C")) { + v = Integer.toString((int)v.charAt(0)); + System.out.println(" <value>" + v + "</value>"); + } + else { + if (!v.startsWith("java.") || rt.equals("Ljava/lang/String;")) + System.out.println(" <value>" + v + "</value>"); + } + } + dumpAnnotations(f.getAnnotations()); + System.out.println(" </field>"); + } + catch(Exception e) {} + } + + public static void dumpAnnotations(Annotation [] ann) + { + try { + if (ann != null) { + int i; + for (i = 0; i < ann.length; i++) { + System.out.print(" <annotation>"); + System.out.print(ann[i].toString()); + System.out.println("</annotation>"); + } + } + } + catch(Exception e) {} + } + + public J2X(String className) + { + try { + int i; + + Class clazz = ClassLoader.getSystemClassLoader().loadClass(className); + System.out.println(" <class>"); + System.out.println(" <name>" + clazz.getName() + "</name>"); + if (clazz.getSuperclass() != null) { + int mod = clazz.getSuperclass().getModifiers(); + if (!Modifier.isPublic(mod) && !Modifier.isProtected(mod)) + System.out.println(" <extends>java.lang.Object</extends>"); + else + System.out.println(" <extends>" + clazz.getSuperclass().getName() + "</extends>"); + } + else + System.out.println(" <extends>java.lang.Object</extends>"); + + dumpModifiers(clazz.getModifiers(), " "); + System.out.println(" <summary>" + clazz.toString() + "</summary>"); + Constructor[] ctors = clazz.getDeclaredConstructors(); + if (ctors != null) { + for (i = 0; i < ctors.length; i++) { + dumpCtor(ctors[i]); + } + } + Method[] methods = clazz.getDeclaredMethods(); + if (methods != null) { + for (i = 0; i < methods.length; i++) { + dumpMethod(methods[i]); + } + } + Field[] fields = clazz.getDeclaredFields(); + if (fields != null) { + for (i = 0; i < fields.length; i++) { + dumpField(fields[i]); + } + } + System.out.println(" </class>"); + } + catch(Exception e) { + System.err.println("Failed " + className); + e.printStackTrace(); + } + } + + public static Class[] getClasses(String packageName) + throws ClassNotFoundException + { + ArrayList<Class> classes = new ArrayList<Class>(); + File directory = null; + try { + ClassLoader cld = ClassLoader.getSystemClassLoader(); + if (cld == null) + throw new ClassNotFoundException("Can't get System class loader."); + String path = packageName.replace('.', '/'); + URL resource = cld.getResource(path); + if (resource == null) + throw new ClassNotFoundException("No resource for " + path); + directory = new File(resource.getFile()); + } + catch(NullPointerException e) { + throw new ClassNotFoundException(packageName + " (" + directory + + ") does not appear to be a valid package"); + } + if (directory.exists()) { + String[] files = directory.list(); + for (int i = 0; i < files.length; i++) { + if (files[i].endsWith(".class")) { + String cn = packageName + '.' + + files[i].substring(0, files[i].length() - 6); + if (cn.indexOf('$') == -1) + classes.add(Class.forName(cn)); + } + } + } + else { + throw new ClassNotFoundException(packageName + + " does not appear to be a valid package"); + } + Class[] classesA = new Class[classes.size()]; + classes.toArray(classesA); + return classesA; + } + + public static void main(String[] args) + { + try { + if (args.length < 1) { + System.err.println("Usage: DumpJavaClass <Class Name>"); + return; + } + if (args[0].equals("head")) { + System.out.println("<?xml version=\"1.0\"?>"); + System.out.println("<classes>"); + } + else if (args[0].equals("tail")) { + System.out.println("</classes>"); + } + else if (args[0].equals("package")) { + if (args.length < 2) { + System.err.println("Usage: DumpJavaClass package <Package Name>"); + return; + } + Class[] classes = getClasses(args[1]); + int c = 0; + for (int i = 0; i < classes.length; i++) { + int m = classes[i].getModifiers(); + if (Modifier.isPublic(m) || Modifier.isProtected(m)) { + J2X generator = new J2X(classes[i].getName()); + c++; + } + } + } + else { + J2X generator = new J2X(args[0]); + } + } + catch(Exception e) { + e.printStackTrace(); + } + } +} Added: trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.javax.servlet.bat =================================================================== --- trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.javax.servlet.bat 2006-01-17 08:35:48 UTC (rev 2116) +++ trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.javax.servlet.bat 2006-01-17 08:41:54 UTC (rev 2117) @@ -0,0 +1,13 @@ +@echo off +REM +REM Unpack servlet-api.jar to this directory +REM and then run this file. +REM +setlocal +set CLASSPATH=.;./servlet-api.jar +java J2X head >javax.servlet.xml + +java J2X package javax.servlet >>javax.servlet.xml +java J2X package javax.servlet.http >>javax.servlet.xml + +java J2X tail >>javax.servlet.xml Added: trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.rt.bat =================================================================== --- trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.rt.bat 2006-01-17 08:35:48 UTC (rev 2116) +++ trunk/labs/jbosswebnp/src/windows/generators/j2x/gen.rt.bat 2006-01-17 08:41:54 UTC (rev 2117) @@ -0,0 +1,50 @@ +@echo off +REM +REM Unpack rt.jar to this directory +REM and then run this file. +REM +java J2X head >java.rt.xml +java J2X package java.lang >>java.rt.xml +java J2X package java.lang.annotation >>java.rt.xml +java J2X package java.lang.instrument >>java.rt.xml +java J2X package java.lang.management >>java.rt.xml +java J2X package java.lang.ref >>java.rt.xml +java J2X package java.lang.reflect >>java.rt.xml + +java J2X package java.io >>java.rt.xml +java J2X package java.math >>java.rt.xml +java J2X package java.net >>java.rt.xml + +java J2X package java.nio >>java.rt.xml +java J2X package java.nio.channels >>java.rt.xml +java J2X package java.nio.channels.spi >>java.rt.xml +java J2X package java.nio.charset >>java.rt.xml +java J2X package java.nio.charset.spi >>java.rt.xml + +java J2X package java.rmi >>java.rt.xml +java J2X package java.rmi.activation >>java.rt.xml +java J2X package java.rmi.dgc >>java.rt.xml +java J2X package java.rmi.registry >>java.rt.xml +java J2X package java.rmi.server >>java.rt.xml + +java J2X package java.security >>java.rt.xml +java J2X package java.security.acl >>java.rt.xml +java J2X package java.security.cert >>java.rt.xml +java J2X package java.security.interfaces >>java.rt.xml +java J2X package java.security.spec >>java.rt.xml + +java J2X package java.sql >>java.rt.xml +java J2X package java.text >>java.rt.xml + +java J2X package java.util >>java.rt.xml +java J2X package java.util.concurrent >>java.rt.xml +java J2X package java.util.concurrent.atomic >>java.rt.xml +java J2X package java.util.concurrent.locks >>java.rt.xml +java J2X package java.util.jar >>java.rt.xml +java J2X package java.util.logging >>java.rt.xml +java J2X package java.util.prefs >>java.rt.xml +java J2X package java.util.regex >>java.rt.xml +java J2X package java.util.zip >>java.rt.xml + +java J2X tail >>java.rt.xml + |