void () { myProperties = new ArrayList<>(); int size = myContainers.size(); if (size > 0) { List<Property> rootProperties = new ArrayList<>(); for (Property each : getProperties(myContainers.get(0))) { addIfNeeded(getCurrentComponent(), each, rootProperties); } sortPropertiesAndCreateGroups(rootProperties); for (Property property : rootProperties) { myProperties.add(property); addExpandedChildren(getCurrentComponent(), property, myProperties); } if (size > 1) { for (Iterator<Property> I = myProperties.iterator(); I.hasNext(); ) { if (!I.next().availableFor(myContainers)) { I.remove(); } } for (int i = 1; i < size; i++) { List<Property> otherProperties = new ArrayList<>(); fillProperties(myContainers.get(i), otherProperties); for (Iterator<Property> I = myProperties.iterator(); I.hasNext(); ) { Property addedProperty = I.next(); int index = findFullPathProperty(otherProperties, addedProperty); if (index == -1) { I.remove(); continue; } Property testProperty = otherProperties.get(index); if (!addedProperty.getClass().equals(testProperty.getClass())) { I.remove(); continue; } List<Property> addedChildren = getChildren(addedProperty); List<Property> testChildren = getChildren(testProperty); int addedChildrenSize = addedChildren.size(); if (addedChildrenSize != testChildren.size()) { I.remove(); continue; } for (int j = 0; j < addedChildrenSize; j++) { if (!addedChildren.get(j).getName().equals(testChildren.get(j).getName())) { I.remove(); break; } } } } } } }