private static MetaData newMetaData(MBeanContainer container, Class<?> klass) { if (klass == null) return null; if (klass == Object.class) return new MetaData(klass, null, null, Collections.emptyList()); List<MetaData> interfaces = Arrays.stream(klass.getInterfaces()) .map(intf -> findMetaData(container, intf)) .collect(Collectors.toList()); MetaData metaData = new MetaData(klass, findConstructor(klass), findMetaData(container, klass.getSuperclass()), interfaces); if (container != null) { if (container.isUseCacheForOtherClassLoaders() || klass.getClassLoader() == container.getClass().getClassLoader()) { MetaData existing = container._metaData.putIfAbsent(klass, metaData); if (existing != null) metaData = existing; if (LOG.isDebugEnabled()) LOG.debug("Cached {}", metaData); } } return metaData; }