/** * Find the declaring class that implements or extends an interface. * * @param concrete the concrete class than directly or indirectly implements or extends an interface class. * @param iface the interface class. * @return the tuple of the declaring class and the generic interface type. */ public static DeclaringClassInterfacePair getClass(Class concrete, Class iface) { return getClass(concrete, iface, concrete); }
/** * Find the declaring class that implements or extends an interface. * * @param concrete the concrete class than directly or indirectly implements or extends an interface class. * @param iface the interface class. * @return the tuple of the declaring class and the generic interface type. */ public static DeclaringClassInterfacePair getClass(Class concrete, Class iface) { return getClass(concrete, iface, concrete); }
private static DeclaringClassInterfacePair getClass(Class concrete, Class iface, Class c) { Type[] gis = c.getGenericInterfaces(); DeclaringClassInterfacePair p = getType(concrete, iface, c, gis); if (p != null) { return p; } c = c.getSuperclass(); if (c == null || c == Object.class) { return null; } return getClass(concrete, iface, c); }
private static DeclaringClassInterfacePair getClass(Class concrete, Class iface, Class c) { Type[] gis = c.getGenericInterfaces(); DeclaringClassInterfacePair p = getType(concrete, iface, c, gis); if (p != null) { return p; } c = c.getSuperclass(); if (c == null || c == Object.class) { return null; } return getClass(concrete, iface, c); }
static Class<?> getDecoderClassType(Class<? extends Decoder> decoder) { Class<?> rootClass = null; if (Decoder.Text.class.isAssignableFrom(decoder)) { rootClass = Decoder.Text.class; } else if (Decoder.Binary.class.isAssignableFrom(decoder)) { rootClass = Decoder.Binary.class; } else if (Decoder.TextStream.class.isAssignableFrom(decoder)) { rootClass = Decoder.TextStream.class; } else if (Decoder.BinaryStream.class.isAssignableFrom(decoder)) { rootClass = Decoder.BinaryStream.class; } ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(decoder, rootClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); return as == null ? Object.class : (as[0] == null ? Object.class : as[0]); }
static Class<?> getEncoderClassType(Class<? extends Encoder> encoder) { Class<?> rootClass = null; if (Encoder.Text.class.isAssignableFrom(encoder)) { rootClass = Encoder.Text.class; } else if (Encoder.Binary.class.isAssignableFrom(encoder)) { rootClass = Encoder.Binary.class; } else if (Encoder.TextStream.class.isAssignableFrom(encoder)) { rootClass = Encoder.TextStream.class; } else if (Encoder.BinaryStream.class.isAssignableFrom(encoder)) { rootClass = Encoder.BinaryStream.class; } ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(encoder, rootClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); return as == null ? Object.class : (as[0] == null ? Object.class : as[0]); }
static Class<?> getDecoderClassType(Class<? extends Decoder> decoder) { Class<?> rootClass = null; if (Decoder.Text.class.isAssignableFrom(decoder)) { rootClass = Decoder.Text.class; } else if (Decoder.Binary.class.isAssignableFrom(decoder)) { rootClass = Decoder.Binary.class; } else if (Decoder.TextStream.class.isAssignableFrom(decoder)) { rootClass = Decoder.TextStream.class; } else if (Decoder.BinaryStream.class.isAssignableFrom(decoder)) { rootClass = Decoder.BinaryStream.class; } ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(decoder, rootClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); return as == null ? Object.class : (as[0] == null ? Object.class : as[0]); }
/** * Find a type of the class given it's Superclass. * * @param inspectedClass Class whose type is searched for. * @param superClass Class relatively to which the search is performed. * @return type of the class. */ public static Class<?> getClassType(Class<?> inspectedClass, Class<?> superClass) { ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(inspectedClass, superClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); if (as == null) { return null; } else { return as[0]; } }
static Class<?> getEncoderClassType(Class<? extends Encoder> encoder) { Class<?> rootClass = null; if (Encoder.Text.class.isAssignableFrom(encoder)) { rootClass = Encoder.Text.class; } else if (Encoder.Binary.class.isAssignableFrom(encoder)) { rootClass = Encoder.Binary.class; } else if (Encoder.TextStream.class.isAssignableFrom(encoder)) { rootClass = Encoder.TextStream.class; } else if (Encoder.BinaryStream.class.isAssignableFrom(encoder)) { rootClass = Encoder.BinaryStream.class; } ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(encoder, rootClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); return as == null ? Object.class : (as[0] == null ? Object.class : as[0]); }
/** * Find a type of the class given it's Superclass. * * @param inspectedClass Class whose type is searched for. * @param superClass Class relatively to which the search is performed. * @return type of the class. */ public static Class<?> getClassType(Class<?> inspectedClass, Class<?> superClass) { ReflectionHelper.DeclaringClassInterfacePair p = ReflectionHelper.getClass(inspectedClass, superClass); Class[] as = ReflectionHelper.getParameterizedClassArguments(p); if (as == null) { return null; } else { return as[0]; } }
private static DeclaringClassInterfacePair getType(Class concrete, Class iface, Class c, Type t) { if (t instanceof Class) { if (t == iface) { return new DeclaringClassInterfacePair(concrete, c, t); } else { return getClass(concrete, iface, (Class) t); } } else if (t instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) t; if (pt.getRawType() == iface) { return new DeclaringClassInterfacePair(concrete, c, t); } else { return getClass(concrete, iface, (Class) pt.getRawType()); } } return null; }
private static DeclaringClassInterfacePair getType(Class concrete, Class iface, Class c, Type t) { if (t instanceof Class) { if (t == iface) { return new DeclaringClassInterfacePair(concrete, c, t); } else { return getClass(concrete, iface, (Class) t); } } else if (t instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) t; if (pt.getRawType() == iface) { return new DeclaringClassInterfacePair(concrete, c, t); } else { return getClass(concrete, iface, (Class) pt.getRawType()); } } return null; }