semoro
09/21/2016, 10:44 PM**
* unwrap companion class to enclosing class given a Java Class
*/
inline private fun <T : Any> unwrapCompanionClass(clazz: Class<T>): Class<*> {
if (clazz.enclosingClass != null) {
try {
val field = clazz.enclosingClass.getField(clazz.simpleName)
if (Modifier.isStatic(field.modifiers) && field.type == clazz ) {
// && field.get(null) === obj
// the above might be safer but problematic with initialization order
return clazz.enclosingClass
}
} catch(e: Exception) {
//ok, it is not a companion object
}
}
return clazz
}