blob: 01a39ac37a2b24f2fd88759bdfe8f9a69a8a25b8 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2001, 2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Jens Lukowski/Innoopract - initial renaming/restructuring
*
*******************************************************************************/
import java.util.Hashtable;
import java.io.FileWriter;
class MakeJavaReflectFCRecs {
static Hashtable htClassNames = new Hashtable();
private static String getShortClassName(Class cls) {
String retval = cls.toString();
if (cls.isArray()) retval = cls.getComponentType().toString();
int i = retval.lastIndexOf('.');
if (i>0) retval = retval.substring(i+1);
if (cls.isArray()) retval += "[]";
return retval;
}
static void doClass( Class cls ) throws java.io.IOException {
String strClassName = cls.getName();
if (htClassNames.get(strClassName)!=null) return;
htClassNames.put(strClassName,"8");
FileWriter fw = new FileWriter( "fc/javaclassreflect."+strClassName+".fcrec" );
java.lang.reflect.Field fields[] = cls.getFields();
for (int i=0; i<fields.length; i++) {
java.lang.reflect.Field field = fields[i];
int mods = field.getModifiers();
if (java.lang.reflect.Modifier.isPublic(mods)) {
fw.write( "#/------------------------------------------\n" );
fw.write( "#!"+field.getName()+"\n" );
fw.write( "#@type=field\n" );
fw.write( "#@wasjspsupport=y\n" );
String dt = field.getName()+" ";
Class fcls = field.getType();
dt += getShortClassName(fcls);
// todo: we could designate if it's static
fw.write( "#@displaytext="+dt+"\n");
fw.write( "#@fc=javaclassreflect."+field.getType().getName()+"\n" );
doClass(field.getType());
}
}
java.lang.reflect.Method methods[] = cls.getMethods();
for (int i=0; i<methods.length; i++) {
java.lang.reflect.Method method = methods[i];
int mods = method.getModifiers();
if (java.lang.reflect.Modifier.isPublic(mods)) {
fw.write( "#/------------------------------------------\n" );
fw.write( "#!"+method.getName()+"()\n" );
fw.write( "#@type=method\n" );
fw.write( "#@wasjspsupport=y\n");
String dt = method.getName()+"(";
Class pclasses[] = method.getParameterTypes();
if (pclasses.length>0) {
for (int j=0; j<pclasses.length;j++) {
dt += getShortClassName(pclasses[j])+",";
}
dt = dt.substring(0,dt.length()-1);
}
dt += ") ";
// todo: we could designate if it's static
Class fcls = method.getReturnType();
dt += getShortClassName(fcls);
fw.write( "#@displaytext="+dt+"\n" );
// todo: bug? "getDeclaringClass" ?
fw.write( "#@fc=javaclassreflect."+method.getReturnType().getName()+"\n");
doClass(method.getReturnType());
}
}
if (cls.isInterface()) {
Class interfaces[] = cls.getInterfaces();
for (int i=interfaces.length; i>0;) {
Class iface = interfaces[--i];
fw.write( "#/------------------------------------------\n" );
fw.write( "#!#isa\n" );
fw.write( "#@wasjspsupport=y\n" );
fw.write( "#@fc=javaclassreflect."+iface.getName()+"\n" );
doClass(iface);
}
} else {
if (cls.isArray()) {
fw.write( "#/------------------------------------------\n" );
fw.write( "#!length\n" );
fw.write( "#@type=field\n" );
fw.write( "#@wasjspsupport=y\n" );
fw.write( "#@displaytext=length int\n");
fw.write( "#@fc=javaclassreflect.int\n" );
fw.write( "#/------------------------------------------\n" );
fw.write( "#!/number/\n" );
fw.write( "#@type=arrayindex\n" );
fw.write( "#@wasjspsupport=y\n" );
//fw.write( "#@displaytext=length int\n");
fw.write( "#@fc=javaclassreflect."+cls.getComponentType().getName()+"\n" );
doClass(cls.getComponentType());
} else {
Class clsUp = cls.getSuperclass();
if (clsUp!=null) {
fw.write( "#/------------------------------------------\n" );
fw.write( "#!#isa\n" );
fw.write( "#@wasjspsupport=y\n" );
fw.write( "#@fc=javaclassreflect."+clsUp.getName()+"\n" );
doClass(clsUp);
}
}
}
// todo: check exceptions
fw.close();
}
public static void main (String args[]) {
try {
doClass( javax.servlet.http.HttpServletRequest.class );
doClass( javax.servlet.http.HttpServletResponse.class );
doClass( javax.servlet.jsp.JspWriter.class );
doClass( javax.servlet.http.HttpServletRequest.class );
doClass( java.lang.Throwable.class );
doClass( javax.servlet.jsp.PageContext.class );
doClass( javax.servlet.ServletConfig.class );
doClass( javax.servlet.ServletContext.class );
doClass( javax.servlet.http.HttpSession.class );
} catch (java.io.IOException exc) {
System.out.println( "exception encountered" );
exc.printStackTrace();
}
}
}