public static FunctionblockModel convertToFlatHierarchy(FunctionblockModel fbm) { FunctionBlock fb = fbm.getFunctionblock(); // Consolidate all properties List<Property> properties = getFlatProperties(fbm); // remove super type reference if (fbm.getSuperType() != null) { removeSuperTypeModelReference(fbm); } properties.stream().filter(p -> p.getType() instanceof ObjectPropertyType) .forEach(p -> createReference(fbm, (ObjectPropertyType) p.getType())); Status status = FunctionblockFactory.eINSTANCE.createStatus(); status.getProperties().addAll(properties.stream().filter(p -> p.eContainer() instanceof Status) .collect(Collectors.toList())); fb.setStatus(status); Configuration configuration = FunctionblockFactory.eINSTANCE.createConfiguration(); configuration.getProperties().addAll(properties.stream() .filter(p -> p.eContainer() instanceof Configuration).collect(Collectors.toList())); fb.setConfiguration(configuration); // Consolidate all operations List<Operation> operations = getFlatOperations(fbm); fb.getOperations().clear(); fb.getOperations().addAll(operations); return fbm; }