/** * Returns the classes for the specified argument. * * @param args the comma separated arguments. * @return the classes or <code>null</code> if one of the class is not found. */ private Class[] classesFor(String args) { args = args.trim(); if (args.length() == 0) { return new Class[0]; } // Counts commas. int commas = 0; for (int i=0;;) { i = args.indexOf(',', i); if (i++ < 0) break; commas++; } Class[] classes = new Class[commas + 1]; int index = 0; for (int i = 0; i < commas; i++) { int sep = args.indexOf(',', index); classes[i] = classFor(args.substring(index, sep).trim()); if (classes[i] == null) return null; index = sep + 1; } classes[commas] = classFor(args.substring(index).trim()); if (classes[commas] == null) return null; return classes; }
public Constructor getConstructor(String signature) { int argStart = signature.indexOf('(') + 1; if (argStart < 0) { throw new IllegalArgumentException("Parenthesis '(' not found"); } int argEnd = signature.indexOf(')'); if (argEnd < 0) { throw new IllegalArgumentException("Parenthesis ')' not found"); } String className = signature.substring(0, argStart - 1); Class theClass = getClass(className); if (theClass == null) { return null; } String args = signature.substring(argStart, argEnd); if (args.length() == 0) { return new DefaultConstructor(theClass); } /**/ Class[] argsTypes = classesFor(args); if (argsTypes == null) return null; try { return new ReflectConstructor(theClass.getConstructor(argsTypes), signature); } catch (NoSuchMethodException e) { } /**/ LogContext.warning("Reflection not supported (Reflection.getConstructor(String)"); return null; }
"The maximum array dimension is 3"); } else { // Dimension three. return getClass("[[[" + descriptorFor(className.substring(0, arrayIndex))); return getClass("[[" + descriptorFor(className.substring(0, arrayIndex))); return getClass("[" + descriptorFor(className.substring(0, arrayIndex))); return double.class; } else { return getClass(className);
public Method getMethod(String signature) { /**/ int argStart = signature.indexOf('(') + 1; if (argStart < 0) { throw new IllegalArgumentException("Parenthesis '(' not found"); } int argEnd = signature.indexOf(')'); if (argEnd < 0) { throw new IllegalArgumentException("Parenthesis ')' not found"); } int nameStart = signature.substring(0, argStart).lastIndexOf('.') + 1; try { String className = signature.substring(0, nameStart - 1); Class theClass = getClass(className); if (theClass == null) return null; String methodName = signature.substring(nameStart, argStart - 1); String args = signature.substring(argStart, argEnd); Class[] argsTypes = classesFor(args); if (argsTypes == null) return null; return new ReflectMethod(theClass.getMethod(methodName, argsTypes), signature); } catch (Throwable t) { } /**/ LogContext.warning("Reflection not supported (Reflection.getMethod(String)"); return null; }
private Object getField2(Class forClass, Class type, boolean inherited) { FastMap typeToField = (FastMap) _fields.get(forClass); if (typeToField != null) { Object field = typeToField.get(type); if (field != null) return field; } if (!inherited) return null; // Search direct interfaces. Class[] interfaces = getInterfaces(forClass); for (int i = 0; i < interfaces.length; i++) { Object field = getField2(interfaces[i], type, false); if (field != null) return field; } // Recursion with the parent class. Class parentClass = getSuperclass(forClass); return (parentClass != null) ? getField2(parentClass, type, inherited) : null; }
@Override public Object getField(Class forClass, Class type, boolean inherited) { ClassInitializer.initialize(forClass); return getField2(forClass, type, inherited); } private Object getField2(Class forClass, Class type, boolean inherited) {
public Class getClass(CharSequence name) { Class cls = (Class) _nameToClass.get(name); // First search cache. return (cls != null) ? cls : searchClass(name.toString()); }