public static int internFields()

in tcbot-common/src/main/java/org/apache/ignite/tcbot/common/util/ObjectInterner.java [69:133]


    public static int internFields(Object obj) {
        if (obj == null)
            return 0;

        Field[] fields = obj.getClass().getDeclaredFields();
        AtomicInteger compressed = new AtomicInteger();

        for (Field field : fields) {
            if(Modifier.isStatic(field.getModifiers()))
                continue;

            field.setAccessible(true);


            try {
                Object fldVal = field.get(obj);
                if (fldVal == null)
                    continue;

                if(!Modifier.isFinal(field.getModifiers())) {
                    if (fldVal instanceof String) {
                        String exist = (String)fldVal;
                        String intern = internString(exist);

                        //noinspection StringEquality
                        if (intern != exist) {
                            compressed.incrementAndGet();

                            field.set(obj, intern);
                        }

                        continue;
                    }
                }

                if (fldVal.getClass().getPackage().getName().startsWith("org.apache.ignite.ci"))
                    compressed.addAndGet(internFields(fldVal));
                else if (fldVal instanceof Collection) {
                    Collection collection = (Collection)fldVal;

                    for (Object next : collection) {
                        if (next.getClass().getPackage().getName().startsWith("org.apache.ignite.ci"))
                            compressed.addAndGet(internFields(next));
                    }
                }
                else if(fldVal instanceof Map) {
                    Map map = (Map)fldVal;

                    Set<Map.Entry> set = map.entrySet();

                    for (Map.Entry  nextEntry : set) {
                        Object val = nextEntry.getValue();

                        if (val.getClass().getPackage().getName().startsWith("org.apache.ignite.ci"))
                            compressed.addAndGet(internFields(val));
                    }
                }
            }
            catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return compressed.get();
    }