Repository: incubator-juneau Updated Branches: refs/heads/master ef3ffc4ea -> eb90dd512
Improvements to ClassMeta class. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/eb90dd51 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/eb90dd51 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/eb90dd51 Branch: refs/heads/master Commit: eb90dd51257c4e02a1bc4987ef008167aae087b7 Parents: ef3ffc4 Author: JamesBognar <[email protected]> Authored: Sun Feb 5 10:50:32 2017 -0500 Committer: JamesBognar <[email protected]> Committed: Sun Feb 5 10:50:32 2017 -0500 ---------------------------------------------------------------------- .../main/java/org/apache/juneau/ClassMeta.java | 27 - .../java/org/apache/juneau/ClassMetaSimple.java | 1172 ------------------ 2 files changed, 1199 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/eb90dd51/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java index b71c4d5..fe22629 100644 --- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java @@ -1565,31 +1565,4 @@ public final class ClassMeta<T> implements Type { public int hashCode() { return super.hashCode(); } -// -// public abstract static class CreateSession { -// LinkedList<ClassMeta<?>> stack; -// -// public CreateSession push(ClassMeta<?> cm) { -// if (stack == null) -// stack = new LinkedList<ClassMeta<?>>(); -// stack.add(cm); -// return this; -// } -// -// public CreateSession pop(ClassMeta<?> expected) { -// if (stack == null || stack.removeLast() != expected) -// throw new BeanRuntimeException("ClassMetaSession creation stack corruption!"); -// return this; -// } -// -// public <T> ClassMeta<T> getClassMeta(Class<T> c) { -// if (stack != null) -// for (ClassMeta<?> cm : stack) -// if (cm.innerClass == c) -// return (ClassMeta<T>)cm; -// return createClassMeta(c); -// } -// -// public abstract <T> ClassMeta<T> createClassMeta(Class<T> c); -// } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/eb90dd51/juneau-core/src/main/java/org/apache/juneau/ClassMetaSimple.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMetaSimple.java b/juneau-core/src/main/java/org/apache/juneau/ClassMetaSimple.java deleted file mode 100644 index 185af98..0000000 --- a/juneau-core/src/main/java/org/apache/juneau/ClassMetaSimple.java +++ /dev/null @@ -1,1172 +0,0 @@ -// *************************************************************************************************************************** -// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * -// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * -// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * -// * with the License. You may obtain a copy of the License at * -// * * -// * http://www.apache.org/licenses/LICENSE-2.0 * -// * * -// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * -// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * -// * specific language governing permissions and limitations under the License. * -// *************************************************************************************************************************** -package org.apache.juneau; - - -import java.lang.reflect.*; - -/** - * Information about a class that can be gathered through reflection alone. - * - * @param <T> The class type of the wrapped class. - */ -public class ClassMetaSimple<T> implements Type { - -// private static final ConcurrentHashMap<Class<?>,ClassMetaSimple<?>> cache = new ConcurrentHashMap<Class<?>,ClassMetaSimple<?>>(); -// -// /** Class categories. */ -// enum ClassCategory { -// MAP, COLLECTION, CLASS, NUMBER, DECIMAL, BOOLEAN, CHAR, DATE, ARRAY, ENUM, OTHER, CHARSEQ, STR, OBJ, URI, BEANMAP, READER, INPUTSTREAM -// } -// -// final Class<T> innerClass; // The class being wrapped. -// final ClassCategory cc; // The class category. -// final Method fromStringMethod; // The static valueOf(String) or fromString(String) or forString(String) method (if it has one). -// Constructor<T> -// noArgConstructor; // The no-arg constructor for this class (if it has one). -// final Constructor<T> -// stringConstructor, // The X(String) constructor (if it has one). -// numberConstructor, // The X(Number) constructor (if it has one). -// swapConstructor, // The X(Swappable) constructor (if it has one). -// objectMapConstructor; // The X(ObjectMap) constructor (if it has one). -// final ClassMetaSimple<?> -// numberConstructorType; // The class type of the object in the number constructor. -// final Class<?> swapMethodType; // The class type of the object in the number constructor. -// final Method -// toObjectMapMethod, // The toObjectMap() method (if it has one). -// swapMethod, // The swap() method (if it has one). -// namePropertyMethod, // The method to set the name on an object (if it has one). -// parentPropertyMethod; // The method to set the parent on an object (if it has one). -// final boolean -// isDelegate, // True if this class extends Delegate. -// isAbstract, // True if this class is abstract. -// isMemberClass; // True if this is a non-static member class. -// final Object primitiveDefault; // Default value for primitive type classes. -// final Map<String,Method> -// remoteableMethods, // Methods annotated with @Remoteable. Contains all public methods if class is annotated with @Remotable. -// publicMethods; // All public methods, including static methods. -// -// ClassMetaSimple<?> -// keyType, -// valueType, -// elementType; -// -// private static final Boolean BOOLEAN_DEFAULT = false; -// private static final Character CHARACTER_DEFAULT = (char)0; -// private static final Short SHORT_DEFAULT = (short)0; -// private static final Integer INTEGER_DEFAULT = 0; -// private static final Long LONG_DEFAULT = 0l; -// private static final Float FLOAT_DEFAULT = 0f; -// private static final Double DOUBLE_DEFAULT = 0d; -// private static final Byte BYTE_DEFAULT = (byte)0; -// -// -// /** -// * Constructor. -// * -// * @param innerClass The class we're gathering information about. -// */ -// @SuppressWarnings({"unchecked","rawtypes"}) -// public ClassMetaSimple(Class<T> innerClass) { -// this.innerClass = innerClass; -// -// Class<T> c = innerClass; -// ClassCategory _cc = ClassCategory.OTHER; -// boolean _isDelegate = false; -// Method -// _fromStringMethod = null, -// _toObjectMapMethod = null, -// _swapMethod = null, -// _parentPropertyMethod = null, -// _namePropertyMethod = null; -// Constructor<T> -// _noArgConstructor = null, -// _stringConstructor = null, -// _objectMapConstructor = null, -// _swapConstructor = null, -// _numberConstructor = null; -// ClassMetaSimple -// _numberConstructorType = null, -// _keyType = null, -// _valueType = null, -// _elementType = null; -// Class<?> -// _swapMethodType = null; -// Object _primitiveDefault = null; -// Map<String,Method> -// _publicMethods = new LinkedHashMap<String,Method>(), -// _remoteableMethods = null; -// -// if (c.isPrimitive()) { -// if (c == Boolean.TYPE) -// _cc = BOOLEAN; -// else if (c == Byte.TYPE || c == Short.TYPE || c == Integer.TYPE || c == Long.TYPE || c == Float.TYPE || c == Double.TYPE) { -// if (c == Float.TYPE || c == Double.TYPE) -// _cc = DECIMAL; -// else -// _cc = NUMBER; -// } -// else if (c == Character.TYPE) -// _cc = CHAR; -// } else { -// if (isParentClass(Delegate.class, c)) -// _isDelegate = true; -// if (c == Object.class) -// _cc = OBJ; -// else if (c.isEnum()) -// _cc = ENUM; -// else if (c.equals(Class.class)) -// _cc = CLASS; -// else if (isParentClass(CharSequence.class, c)) { -// if (c.equals(String.class)) -// _cc = STR; -// else -// _cc = CHARSEQ; -// } -// else if (isParentClass(Number.class, c)) { -// if (isParentClass(Float.class, c) || isParentClass(Double.class, c)) -// _cc = DECIMAL; -// else -// _cc = NUMBER; -// } -// else if (isParentClass(Collection.class, c)) -// _cc = COLLECTION; -// else if (isParentClass(Map.class, c)) { -// if (isParentClass(BeanMap.class, c)) -// _cc = BEANMAP; -// else -// _cc = MAP; -// } -// else if (c == Character.class) -// _cc = CHAR; -// else if (c == Boolean.class) -// _cc = BOOLEAN; -// else if (isParentClass(Date.class, c) || isParentClass(Calendar.class, c)) -// _cc = DATE; -// else if (c.isArray()) -// _cc = ARRAY; -// else if (isParentClass(URL.class, c) || isParentClass(URI.class, c) || c.isAnnotationPresent(org.apache.juneau.annotation.URI.class)) -// _cc = URI; -// else if (isParentClass(Reader.class, c)) -// _cc = READER; -// else if (isParentClass(InputStream.class, c)) -// _cc = INPUTSTREAM; -// } -// -// isMemberClass = c.isMemberClass() && ! isStatic(c); -// -// // Find static fromString(String) or equivalent method. -// // fromString() must be checked before valueOf() so that Enum classes can create their own -// // specialized fromString() methods to override the behavior of Enum.valueOf(String). -// // valueOf() is used by enums. -// // parse() is used by the java logging Level class. -// // forName() is used by Class and Charset -// for (String methodName : new String[]{"fromString","valueOf","parse","parseString","forName","forString"}) { -// if (_fromStringMethod == null) { -// for (Method m : c.getMethods()) { -// if (isStatic(m) && isPublic(m) && isNotDeprecated(m)) { -// String mName = m.getName(); -// if (mName.equals(methodName) && m.getReturnType() == c) { -// Class<?>[] args = m.getParameterTypes(); -// if (args.length == 1 && args[0] == String.class) { -// _fromStringMethod = m; -// break; -// } -// } -// } -// } -// } -// } -// -// // Special cases -// try { -// if (c == TimeZone.class) -// _fromStringMethod = c.getMethod("getTimeZone", String.class); -// else if (c == Locale.class) -// _fromStringMethod = LocaleAsString.class.getMethod("fromString", String.class); -// } catch (NoSuchMethodException e1) {} -// -// // Find toObjectMap() method if present. -// for (Method m : c.getMethods()) { -// if (isPublic(m) && isNotDeprecated(m) && ! isStatic(m)) { -// String mName = m.getName(); -// if (mName.equals("toObjectMap")) { -// if (m.getParameterTypes().length == 0 && m.getReturnType() == ObjectMap.class) { -// _toObjectMapMethod = m; -// break; -// } -// } else if (mName.equals("swap")) { -// if (m.getParameterTypes().length == 1 && m.getParameterTypes()[0] == BeanSession.class) { -// _swapMethod = m; -// _swapMethodType = m.getReturnType(); -// break; -// } -// } -// } -// } -// -// // Find @NameProperty and @ParentProperty methods if present. -// for (Method m : c.getDeclaredMethods()) { -// if (m.isAnnotationPresent(ParentProperty.class) && m.getParameterTypes().length == 1) { -// m.setAccessible(true); -// _parentPropertyMethod = m; -// } -// if (m.isAnnotationPresent(NameProperty.class) && m.getParameterTypes().length == 1) { -// m.setAccessible(true); -// _namePropertyMethod = m; -// } -// } -// -// // Note: Primitive types are normally abstract. -// isAbstract = Modifier.isAbstract(c.getModifiers()) && ! c.isPrimitive(); -// -// // Find constructor(String) method if present. -// for (Constructor cs : c.getConstructors()) { -// if (isPublic(cs) && isNotDeprecated(cs)) { -// Class<?>[] args = cs.getParameterTypes(); -// if (args.length == (isMemberClass ? 1 : 0) && c != Object.class && ! isAbstract) { -// _noArgConstructor = cs; -// } else if (args.length == (isMemberClass ? 2 : 1)) { -// Class<?> arg = args[(isMemberClass ? 1 : 0)]; -// if (arg == String.class) -// _stringConstructor = cs; -// else if (ObjectMap.class.isAssignableFrom(arg)) -// _objectMapConstructor = cs; -// else if (_swapMethodType != null && _swapMethodType.isAssignableFrom(arg)) -// _swapConstructor = cs; -// else if (_cc != NUMBER && (Number.class.isAssignableFrom(arg) || (arg.isPrimitive() && (arg == int.class || arg == short.class || arg == long.class || arg == float.class || arg == double.class)))) { -// _numberConstructor = cs; -// _numberConstructorType = fromCache(ClassUtils.getWrapperIfPrimitive(arg)); -// } -// } -// } -// } -// -// if (c.isPrimitive()) { -// if (c == Boolean.TYPE) -// _primitiveDefault = BOOLEAN_DEFAULT; -// else if (c == Character.TYPE) -// _primitiveDefault = CHARACTER_DEFAULT; -// else if (c == Short.TYPE) -// _primitiveDefault = SHORT_DEFAULT; -// else if (c == Integer.TYPE) -// _primitiveDefault = INTEGER_DEFAULT; -// else if (c == Long.TYPE) -// _primitiveDefault = LONG_DEFAULT; -// else if (c == Float.TYPE) -// _primitiveDefault = FLOAT_DEFAULT; -// else if (c == Double.TYPE) -// _primitiveDefault = DOUBLE_DEFAULT; -// else if (c == Byte.TYPE) -// _primitiveDefault = BYTE_DEFAULT; -// } else { -// if (c == Boolean.class) -// _primitiveDefault = BOOLEAN_DEFAULT; -// else if (c == Character.class) -// _primitiveDefault = CHARACTER_DEFAULT; -// else if (c == Short.class) -// _primitiveDefault = SHORT_DEFAULT; -// else if (c == Integer.class) -// _primitiveDefault = INTEGER_DEFAULT; -// else if (c == Long.class) -// _primitiveDefault = LONG_DEFAULT; -// else if (c == Float.class) -// _primitiveDefault = FLOAT_DEFAULT; -// else if (c == Double.class) -// _primitiveDefault = DOUBLE_DEFAULT; -// else if (c == Byte.class) -// _primitiveDefault = BYTE_DEFAULT; -// } -// -// for (Method m : c.getMethods()) -// if (isPublic(m) && isNotDeprecated(m)) -// _publicMethods.put(ClassUtils.getMethodSignature(m), m); -// -// if (c.getAnnotation(Remoteable.class) != null) { -// _remoteableMethods = _publicMethods; -// } else { -// for (Method m : c.getMethods()) { -// if (m.getAnnotation(Remoteable.class) != null) { -// if (_remoteableMethods == null) -// _remoteableMethods = new LinkedHashMap<String,Method>(); -// _remoteableMethods.put(ClassUtils.getMethodSignature(m), m); -// } -// } -// } -// -// if (cc == ARRAY) -// elementType = fromCache(innerClass.getComponentType()); -// -// // If this is a MAP, see if it's parameterized (e.g. AddressBook extends HashMap<String,Person>) -// else if (cc == MAP) { -// ClassMeta[] parameters = beanContext.findParameters(innerClass, innerClass); -// if (parameters != null && parameters.length == 2) { -// keyType = parameters[0]; -// valueType = parameters[1]; -// } else { -// keyType = beanContext.getClassMeta(Object.class); -// valueType = beanContext.getClassMeta(Object.class); -// } -// } -// -// // If this is a COLLECTION, see if it's parameterized (e.g. AddressBook extends LinkedList<Person>) -// else if (cc == COLLECTION) { -// ClassMeta[] parameters = beanContext.findParameters(innerClass, innerClass); -// if (parameters != null && parameters.length == 1) { -// elementType = parameters[0]; -// } else { -// elementType = beanContext.getClassMeta(Object.class); -// } -// } -// -// -// -// this.cc = _cc; -// this.isDelegate = _isDelegate; -// this.fromStringMethod = _fromStringMethod; -// this.toObjectMapMethod = _toObjectMapMethod; -// this.swapMethod = _swapMethod; -// this.swapMethodType = _swapMethodType; -// this.parentPropertyMethod = _parentPropertyMethod; -// this.namePropertyMethod =_namePropertyMethod; -// this.noArgConstructor = _noArgConstructor; -// this.stringConstructor = _stringConstructor; -// this.objectMapConstructor =_objectMapConstructor; -// this.swapConstructor = _swapConstructor; -// this.numberConstructor = _numberConstructor; -// this.numberConstructorType = _numberConstructorType; -// this.primitiveDefault = _primitiveDefault; -// this.publicMethods = _publicMethods; -// this.remoteableMethods = _remoteableMethods; -// } -// -//// public ClassMetaSimple(ClassMetaSimple<?> collectionClassMeta, ClassMetaSimple<?> elementType) { -//// -//// -//// } -// -// -// -// private static ClassMetaSimple<?> fromCache(Class<?> c) { -// ClassMetaSimple<?> cm = cache.get(c); -// if (cm == null) { -// cm = new ClassMetaSimple(c); -// cache.putIfAbsent(c, cm); -// cm = cache.get(c); -// } -// return cm; -// } -// -// /** -// * Returns the category of this class. -// * -// * @return The category of this class. -// */ -// public final ClassCategory getClassCategory() { -// return cc; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a superclass of or the same as the specified class. -// * -// * @param child The comparison class. -// * @return <jk>true</jk> if this class is a superclass of or the same as the specified class. -// */ -// public final boolean isAssignableFrom(Class<?> child) { -// return isParentClass(this.innerClass, child); -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of or the same as the specified class. -// * -// * @param parent The comparison class. -// * @return <jk>true</jk> if this class is a subclass of or the same as the specified class. -// */ -// public final boolean isInstanceOf(Class<?> parent) { -// return isParentClass(parent, this.innerClass); -// } -// -// /** -// * Returns the {@link Class} object that this class type wraps. -// * -// * @return The wrapped class object. -// */ -// public final Class<T> getInnerClass() { -// return innerClass; -// } -// -// /** -// * Returns <jk>true</jk> if this class implements {@link Delegate}, meaning -// * it's a representation of some other object. -// * -// * @return <jk>true</jk> if this class implements {@link Delegate}. -// */ -// public final boolean isDelegate() { -// return isDelegate; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link Map}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link Map}. -// */ -// public final boolean isMap() { -// return cc == MAP || cc == BEANMAP; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link BeanMap}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link BeanMap}. -// */ -// public boolean isBeanMap() { -// return cc == BEANMAP; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link Collection}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link Collection}. -// */ -// public boolean isCollection() { -// return cc == COLLECTION; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link Collection} or is an array. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link Collection} or is an array. -// */ -// public boolean isCollectionOrArray() { -// return cc == COLLECTION || cc == ARRAY; -// } -// -// /** -// * Returns <jk>true</jk> if this class is {@link Class}. -// * -// * @return <jk>true</jk> if this class is {@link Class}. -// */ -// public boolean isClass() { -// return cc == CLASS; -// } -// -// /** -// * Returns <jk>true</jk> if this class is an {@link Enum}. -// * -// * @return <jk>true</jk> if this class is an {@link Enum}. -// */ -// public boolean isEnum() { -// return cc == ENUM; -// } -// -// /** -// * Returns <jk>true</jk> if this class is an array. -// * -// * @return <jk>true</jk> if this class is an array. -// */ -// public boolean isArray() { -// return cc == ARRAY; -// } -// -// /** -// * Returns <jk>true</jk> if this class is {@link Object}. -// * -// * @return <jk>true</jk> if this class is {@link Object}. -// */ -// public boolean isObject() { -// return cc == OBJ; -// } -// -// /** -// * Returns <jk>true</jk> if this class is not {@link Object}. -// * -// * @return <jk>true</jk> if this class is not {@link Object}. -// */ -// public boolean isNotObject() { -// return cc != OBJ; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link Number}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link Number}. -// */ -// public boolean isNumber() { -// return cc == NUMBER || cc == DECIMAL; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link Float} or {@link Double}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link Float} or {@link Double}. -// */ -// public boolean isDecimal() { -// return cc == DECIMAL; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link Boolean}. -// * -// * @return <jk>true</jk> if this class is a {@link Boolean}. -// */ -// public boolean isBoolean() { -// return cc == BOOLEAN; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a subclass of {@link CharSequence}. -// * -// * @return <jk>true</jk> if this class is a subclass of {@link CharSequence}. -// */ -// public boolean isCharSequence() { -// return cc == STR || cc == CHARSEQ; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link String}. -// * -// * @return <jk>true</jk> if this class is a {@link String}. -// */ -// public boolean isString() { -// return cc == STR; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link Character}. -// * -// * @return <jk>true</jk> if this class is a {@link Character}. -// */ -// public boolean isChar() { -// return cc == CHAR; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a primitive. -// * -// * @return <jk>true</jk> if this class is a primitive. -// */ -// public boolean isPrimitive() { -// return innerClass.isPrimitive(); -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link Date} or {@link Calendar}. -// * -// * @return <jk>true</jk> if this class is a {@link Date} or {@link Calendar}. -// */ -// public boolean isDate() { -// return cc == DATE; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link URI} or {@link URL}. -// * -// * @return <jk>true</jk> if this class is a {@link URI} or {@link URL}. -// */ -// public boolean isUri() { -// return cc == URI; -// } -// -// /** -// * Returns <jk>true</jk> if this class is a {@link Reader}. -// * -// * @return <jk>true</jk> if this class is a {@link Reader}. -// */ -// public boolean isReader() { -// return cc == READER; -// } -// -// /** -// * Returns <jk>true</jk> if this class is an {@link InputStream}. -// * -// * @return <jk>true</jk> if this class is an {@link InputStream}. -// */ -// public boolean isInputStream() { -// return cc == INPUTSTREAM; -// } -// -// /** -// * Returns <jk>true</jk> if instance of this object can be <jk>null</jk>. -// * <p> -// * Objects can be <jk>null</jk>, but primitives cannot, except for chars which can be represented -// * by <code>(<jk>char</jk>)0</code>. -// * -// * @return <jk>true</jk> if instance of this class can be null. -// */ -// public boolean isNullable() { -// if (innerClass.isPrimitive()) -// return cc == CHAR; -// return true; -// } -// -// /** -// * Returns <jk>true</jk> if this class or one of it's methods are annotated with {@link Remoteable @Remotable}. -// * -// * @return <jk>true</jk> if this class is remoteable. -// */ -// public boolean isRemoteable() { -// return remoteableMethods != null; -// } -// -// /** -// * All methods on this class annotated with {@link Remoteable @Remotable}, or all public methods if class is annotated. -// * Keys are method signatures. -// * -// * @return All remoteable methods on this class. -// */ -// public Map<String,Method> getRemoteableMethods() { -// return remoteableMethods; -// } -// -// /** -// * All public methods on this class including static methods. -// * Keys are method signatures. -// * -// * @return The public methods on this class. -// */ -// public Map<String,Method> getPublicMethods() { -// return publicMethods; -// } -// -// /** -// * Returns <jk>true</jk> if this class has an <code>ObjectMap toObjectMap()</code> method. -// * -// * @return <jk>true</jk> if class has a <code>toObjectMap()</code> method. -// */ -// public boolean hasToObjectMapMethod() { -// return toObjectMapMethod != null; -// } -// -// /** -// * Returns the method annotated with {@link NameProperty @NameProperty}. -// * -// * @return The method annotated with {@link NameProperty @NameProperty} or <jk>null</jk> if method does not exist. -// */ -// public Method getNameProperty() { -// return namePropertyMethod; -// } -// -// /** -// * Returns the method annotated with {@link ParentProperty @ParentProperty}. -// * -// * @return The method annotated with {@link ParentProperty @ParentProperty} or <jk>null</jk> if method does not exist. -// */ -// public Method getParentProperty() { -// return parentPropertyMethod; -// } -// -// /** -// * Converts an instance of this class to an {@link ObjectMap}. -// * -// * @param t The object to convert to a map. -// * @return The converted object, or <jk>null</jk> if method does not have a <code>toObjectMap()</code> method. -// * @throws BeanRuntimeException Thrown by <code>toObjectMap()</code> method invocation. -// */ -// public ObjectMap toObjectMap(Object t) throws BeanRuntimeException { -// try { -// if (toObjectMapMethod != null) -// return (ObjectMap)toObjectMapMethod.invoke(t); -// return null; -// } catch (Exception e) { -// throw new BeanRuntimeException(e); -// } -// } -// -// /** -// * Returns the default value for primitives such as <jk>int</jk> or <jk>Integer</jk>. -// * -// * @return The default value, or <jk>null</jk> if this class type is not a primitive. -// */ -// @SuppressWarnings("unchecked") -// public T getPrimitiveDefault() { -// return (T)primitiveDefault; -// } -// -// /** -// * Returns <jk>true</jk> if the specified object is an instance of this class. -// * This is a simple comparison on the base class itself and not on -// * any generic parameters. -// * -// * @param o The object to check. -// * @return <jk>true</jk> if the specified object is an instance of this class. -// */ -// public boolean isInstance(Object o) { -// if (o != null) -// return ClassUtils.isParentClass(this.innerClass, o.getClass()); -// return false; -// } -// -// /** -// * Returns a readable name for this class (e.g. <js>"java.lang.String"</js>, <js>"boolean[]"</js>). -// * -// * @return The readable name for this class. -// */ -// public String getReadableName() { -// return ClassUtils.getReadableClassName(this.innerClass); -// } -// -// /** -// * Returns <jk>true</jk> if this class has a no-arg constructor or invocation handler. -// * -// * @return <jk>true</jk> if a new instance of this class can be constructed. -// */ -// public boolean canCreateNewInstance() { -// if (isMemberClass) -// return false; -// if (noArgConstructor != null) -// return true; -// if (isArray() && elementType.canCreateNewInstance()) -// return true; -// return false; -// } -// -// /** -// * Create a new instance of the main class of this declared type. -// * -// * @return A new instance of the object, or <jk>null</jk> if there is no no-arg constructor on the object. -// * @throws IllegalAccessException If the <code>Constructor</code> object enforces Java language access control and the underlying constructor is inaccessible. -// * @throws IllegalArgumentException If one of the following occurs: -// * <ul class='spaced-list'> -// * <li>The number of actual and formal parameters differ. -// * <li>An unwrapping conversion for primitive arguments fails. -// * <li>A parameter value cannot be converted to the corresponding formal parameter type by a method invocation conversion. -// * <li>The constructor pertains to an enum type. -// * </ul> -// * @throws InstantiationException If the class that declares the underlying constructor represents an abstract class. -// * @throws InvocationTargetException If the underlying constructor throws an exception. -// */ -// @SuppressWarnings("unchecked") -// public T newInstance() throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { -// if (isArray()) -// return (T)Array.newInstance(getInnerClass().getComponentType(), 0); -// Constructor<? extends T> con = noArgConstructor; -// if (con != null) -// return con.newInstance((Object[])null); -// if (isArray()) -// return (T)Array.newInstance(this.elementType.innerClass,0); -// return null; -// } -// -// /** -// * Same as {@link #newInstance()} except for instantiating non-static member classes. -// * -// * @param outer The instance of the owning object of the member class instance. Can be <jk>null</jk> if instantiating a non-member or static class. -// * @return A new instance of the object, or <jk>null</jk> if there is no no-arg constructor on the object. -// * @throws IllegalAccessException If the <code>Constructor</code> object enforces Java language access control and the underlying constructor is inaccessible. -// * @throws IllegalArgumentException If one of the following occurs: -// * <ul class='spaced-list'> -// * <li>The number of actual and formal parameters differ. -// * <li>An unwrapping conversion for primitive arguments fails. -// * <li>A parameter value cannot be converted to the corresponding formal parameter type by a method invocation conversion. -// * <li>The constructor pertains to an enum type. -// * </ul> -// * @throws InstantiationException If the class that declares the underlying constructor represents an abstract class. -// * @throws InvocationTargetException If the underlying constructor throws an exception. -// */ -// public T newInstance(Object outer) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { -// if (isMemberClass) -// return noArgConstructor.newInstance(outer); -// return newInstance(); -// } -// -// /** -// * Returns <jk>true</jk> if this class has a no-arg constructor or invocation handler. -// * Returns <jk>false</jk> if this is a non-static member class and the outer object does not match -// * the class type of the defining class. -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @return <jk>true</jk> if a new instance of this class can be created within the context of the specified outer object. -// */ -// public boolean canCreateNewInstance(Object outer) { -// if (isMemberClass) -// return outer != null && noArgConstructor != null && noArgConstructor.getParameterTypes()[0] == outer.getClass(); -// return canCreateNewInstance(); -// } -// -// -// /** -// * Returns <jk>true</jk> if this class can call the {@link #newInstanceFromString(Object, String)} method. -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @return <jk>true</jk> if this class has a no-arg constructor or invocation handler. -// */ -// public boolean canCreateNewInstanceFromString(Object outer) { -// if (fromStringMethod != null) -// return true; -// if (stringConstructor != null) { -// if (isMemberClass) -// return outer != null && stringConstructor.getParameterTypes()[0] == outer.getClass(); -// return true; -// } -// return false; -// } -// -// /** -// * Create a new instance of the main class of this declared type from a <code>String</code> input. -// * <p> -// * In order to use this method, the class must have one of the following methods: -// * <ul> -// * <li><code><jk>public static</jk> T valueOf(String in);</code> -// * <li><code><jk>public static</jk> T fromString(String in);</code> -// * <li><code><jk>public</jk> T(String in);</code> -// * </ul> -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @param arg The input argument value. -// * @return A new instance of the object, or <jk>null</jk> if there is no string constructor on the object. -// * @throws IllegalAccessException If the <code>Constructor</code> object enforces Java language access control and the underlying constructor is inaccessible. -// * @throws IllegalArgumentException If the parameter type on the method was invalid. -// * @throws InstantiationException If the class that declares the underlying constructor represents an abstract class, or -// * does not have one of the methods described above. -// * @throws InvocationTargetException If the underlying constructor throws an exception. -// */ -// @SuppressWarnings("unchecked") -// public T newInstanceFromString(Object outer, String arg) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { -// Method m = fromStringMethod; -// if (m != null) -// return (T)m.invoke(null, arg); -// Constructor<T> con = stringConstructor; -// if (con != null) { -// if (isMemberClass) -// return con.newInstance(outer, arg); -// return con.newInstance(arg); -// } -// throw new InstantiationError("No string constructor or valueOf(String) method found for class '"+getInnerClass().getName()+"'"); -// } -// -// /** -// * Returns <jk>true</jk> if this class can call the {@link #newInstanceFromString(Object, String)} method. -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @return <jk>true</jk> if this class has a no-arg constructor or invocation handler. -// */ -// public boolean canCreateNewInstanceFromNumber(Object outer) { -// if (numberConstructor != null) { -// if (isMemberClass) -// return outer != null && numberConstructor.getParameterTypes()[0] == outer.getClass(); -// return true; -// } -// return false; -// } -// -// /** -// * Returns the class type of the parameter of the numeric constructor. -// * -// * @return The class type of the numeric constructor, or <jk>null</jk> if no such constructor exists. -// */ -// public Class<? extends Number> getNewInstanceFromNumberClass() { -// return (Class<? extends Number>) numberConstructorType.innerClass; -// } -// -// /** -// * Create a new instance of the main class of this declared type from a <code>Number</code> input. -// * <p> -// * In order to use this method, the class must have one of the following methods: -// * <ul> -// * <li><code><jk>public</jk> T(Number in);</code> -// * </ul> -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @param arg The input argument value. -// * @return A new instance of the object, or <jk>null</jk> if there is no numeric constructor on the object. -// * @throws IllegalAccessException If the <code>Constructor</code> object enforces Java language access control and the underlying constructor is inaccessible. -// * @throws IllegalArgumentException If the parameter type on the method was invalid. -// * @throws InstantiationException If the class that declares the underlying constructor represents an abstract class, or -// * does not have one of the methods described above. -// * @throws InvocationTargetException If the underlying constructor throws an exception. -// */ -// public T newInstanceFromNumber(Object outer, Number arg) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { -// Constructor<T> con = numberConstructor; -// if (con != null) { -// if (isMemberClass) -// return con.newInstance(outer, arg); -// return con.newInstance(arg); -// } -// throw new InstantiationError("No string constructor or valueOf(Number) method found for class '"+getInnerClass().getName()+"'"); -// } -// -// /** -// * Returns <jk>true</jk> if this class can call the {@link #newInstanceFromString(Object, String)} method. -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @return <jk>true</jk> if this class has a no-arg constructor or invocation handler. -// */ -// public boolean canCreateNewInstanceFromObjectMap(Object outer) { -// if (objectMapConstructor != null) { -// if (isMemberClass) -// return outer != null && objectMapConstructor.getParameterTypes()[0] == outer.getClass(); -// return true; -// } -// return false; -// } -// -// /** -// * Create a new instance of the main class of this declared type from an <code>ObjectMap</code> input. -// * <p> -// * In order to use this method, the class must have one of the following methods: -// * <ul> -// * <li><code><jk>public</jk> T(ObjectMap in);</code> -// * </ul> -// * -// * @param outer The outer class object for non-static member classes. Can be <jk>null</jk> for non-member or static classes. -// * @param arg The input argument value. -// * @return A new instance of the object. -// * @throws IllegalAccessException If the <code>Constructor</code> object enforces Java language access control and the underlying constructor is inaccessible. -// * @throws IllegalArgumentException If the parameter type on the method was invalid. -// * @throws InstantiationException If the class that declares the underlying constructor represents an abstract class, or -// * does not have one of the methods described above. -// * @throws InvocationTargetException If the underlying constructor throws an exception. -// */ -// public T newInstanceFromObjectMap(Object outer, ObjectMap arg) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, InstantiationException { -// Constructor<T> con = objectMapConstructor; -// if (con != null) { -// if (isMemberClass) -// return con.newInstance(outer, arg); -// return con.newInstance(arg); -// } -// throw new InstantiationError("No map constructor method found for class '"+getInnerClass().getName()+"'"); -// } -// -// -// @SuppressWarnings("unchecked") -// public T convert(Object outer, Object value, ClassMetaSimple vcm) { -// -// try { -// // Handle the case of a null value. -// if (value == null) { -// -// // If it's a primitive, then use the converters to get the default value for the primitive type. -// if (isPrimitive()) -// return getPrimitiveDefault(); -// -// // Otherwise, just return null. -// return null; -// } -// -// Class<T> tc = getInnerClass(); -// -// // If no conversion needed, then just return the value. -// // Don't include maps or collections, because child elements may need conversion. -// if (tc.isInstance(value)) -// return (T)value; -// -// if (isPrimitive() && value.toString().isEmpty()) -// return getPrimitiveDefault(); -// -// if (isNumber()) { -// if (value instanceof Number) { -// Number n = (Number)value; -// if (tc == Integer.class) -// return (T)Integer.valueOf(n.intValue()); -// if (tc == Short.class) -// return (T)Short.valueOf(n.shortValue()); -// if (tc == Long.class) -// return (T)Long.valueOf(n.longValue()); -// if (tc == Float.class) -// return (T)Float.valueOf(n.floatValue()); -// if (tc == Double.class) -// return (T)Double.valueOf(n.doubleValue()); -// if (tc == Byte.class) -// return (T)Byte.valueOf(n.byteValue()); -// if (tc == Byte.class) -// return (T)Byte.valueOf(n.byteValue()); -// if (tc == AtomicInteger.class) -// return (T)new AtomicInteger(n.intValue()); -// if (tc == AtomicLong.class) -// return (T)new AtomicLong(n.intValue()); -// } else { -// if (value.toString().isEmpty()) -// return null; -// String n = null; -// if (value instanceof Boolean) -// n = ((Boolean)value).booleanValue() ? "1" : "0"; -// else -// n = value.toString(); -// if (tc == Integer.class) -// return (T)Integer.valueOf(n); -// if (tc == Short.class) -// return (T)Short.valueOf(n); -// if (tc == Long.class) -// return (T)Long.valueOf(n); -// if (tc == Float.class) -// return (T)new Float(n); -// if (tc == Double.class) -// return (T)new Double(n); -// if (tc == Byte.class) -// return (T)Byte.valueOf(n); -// if (tc == AtomicInteger.class) -// return (T)new AtomicInteger(Integer.valueOf(n)); -// if (tc == AtomicLong.class) -// return (T)new AtomicLong(Long.valueOf(n)); -// } -// } -// -// if (vcm.isNumber() && canCreateNewInstanceFromNumber(outer)) { -// return newInstanceFromNumber(outer, (Number)numberConstructorType.convert(value, outer, null)); -// } -// -// if (isBoolean()) { -// if (value instanceof Number) -// return (T)(Boolean.valueOf(((Number)value).intValue() != 0)); -// return (T)Boolean.valueOf(value.toString()); -// } -// -// if (isChar()) { -// String s = value.toString(); -// return (T)Character.valueOf(s.length() == 0 ? 0 : s.charAt(0)); -// } -// -// if (isString()) { -// if (vcm.isMap() || vcm.isCollectionOrArray()) { -// if (JsonSerializer.DEFAULT_LAX != null) -// return (T)JsonSerializer.DEFAULT_LAX.serialize(value); -// } else if (vcm.isClass()) { -// return (T)ClassUtils.getReadableClassName((Class<?>)value); -// } else { -// return (T)value.toString(); -// } -// } -// -// if (vcm.isString() && canCreateNewInstanceFromString(outer)) { -// return newInstanceFromString(outer, value.toString()); -// } -// -// if (isEnum()) { -// if (canCreateNewInstanceFromString(outer)) -// return (T)newInstanceFromString(outer, value.toString()); -// return (T)Enum.valueOf((Class<? extends Enum>)tc, value.toString()); -// } -// -// if (isCharSequence()) { -// Class<?> c = value.getClass(); -// if (c.isArray()) { -// if (c.getComponentType().isPrimitive()) { -// ObjectList l = new ObjectList(this); -// int size = Array.getLength(value); -// for (int i = 0; i < size; i++) -// l.add(Array.get(value, i)); -// value = l; -// } -// value = new ObjectList((Object[])value); -// } -// -// return newInstanceFromString(outer, value.toString()); -// } -// -// // Handle setting of array properties -// if (isArray()) { -// if (vcm.isCollection()) -// return (T)toArray(this, outer, (Collection)value); -// else if (vcm.isArray()) -// return (T)toArray(this, outer, Arrays.asList((Object[])value)); -// else if (StringUtils.startsWith(value.toString(), '[')) -// return (T)toArray(this, outer, new ObjectList(value.toString())); -// } -// -// if (swapConstructor != null && swapMethodType.isInstance(value)) -// return swapConstructor.newInstance(value); -// -// if (vcm.swapMethodType == innerClass) -// return (T)vcm.swapMethod.invoke(value, (Object[])null); -// -// if (innerClass == ObjectMap.class && vcm.toObjectMapMethod != null) -// return (T)vcm.toObjectMapMethod.invoke(value); -// -// if (vcm.innerClass == ObjectMap.class && objectMapConstructor != null) -// return objectMapConstructor.newInstance(value); -// -// // Target type is some sort of Map that needs to be converted. -// if (isMap()) { -// try { -// if (vcm.isMap()) { -// Map m = canCreateNewInstance(outer) ? (Map)newInstance(outer) : new ObjectMap(); -// for (Map.Entry e : (Set<Map.Entry>)((Map)value).entrySet()) { -// Object k = e.getKey(); -// if (keyType.isNotObject()) { -// if (keyType.isString() && k.getClass() != Class.class) -// k = k.toString(); -// else -// k = keyType.convert(k, m, null); -// } -// Object v = e.getValue(); -// if (valueType.isNotObject()) -// v = valueType.convert(k, m, null); -// m.put(k, v); -// } -// return (T)m; -// } else if (! canCreateNewInstanceFromString(outer)) { -// ObjectMap m = new ObjectMap(value.toString()); -// return convert(m, outer, null); -// } -// } catch (Exception e) { -// throw new InvalidDataConversionException(value.getClass(), innerClass, e); -// } -// } -// -// // Target type is some sort of Collection -// if (isCollection()) { -// try { -// Collection l = canCreateNewInstance(outer) ? (Collection)newInstance(outer) : new ObjectList(); -// -// if (value.getClass().isArray()) -// for (Object o : (Object[])value) -// l.add(elementType.isObject() ? o : elementType.convert(o, l, null)); -// else if (value instanceof Collection) -// for (Object o : (Collection)value) -// l.add(elementType.isObject() ? o : elementType.convert(l, o, null)); -// else if (value instanceof Map) -// l.add(elementType.isObject() ? value : elementType.convert(l, value, null)); -// else if (! value.toString().isEmpty()) -// throw new InvalidDataConversionException(value.getClass(), innerClass, null); -// return (T)l; -// } catch (InvalidDataConversionException e) { -// throw e; -// } catch (Exception e) { -// throw new InvalidDataConversionException(value.getClass(), innerClass, e); -// } -// } -// -// } catch (Exception e) { -// throw new InvalidDataConversionException(value, this.innerClass, e); -// } -// -// throw new InvalidDataConversionException(value, this.innerClass, null); -// -// } -// -// public final Object toArray(ClassMetaSimple<?> type, Object outer, Collection<?> list) { -// if (list == null) -// return null; -// ClassMetaSimple<?> componentType = type.elementType; -// Object array = Array.newInstance(componentType.getInnerClass(), list.size()); -// int i = 0; -// for (Object o : list) { -// if (! type.getInnerClass().isInstance(o)) { -// if (componentType.isArray() && o instanceof Collection) -// o = toArray(componentType, outer, (Collection<?>)o); -// else if (o == null && componentType.isPrimitive()) -// o = componentType.getPrimitiveDefault(); -// else -// o = componentType.convert(o, outer, elementType); -// } -// try { -// Array.set(array, i++, o); -// } catch (IllegalArgumentException e) { -// e.printStackTrace(); -// throw e; -// } -// } -// return array; -// } - -}
