private String createMessage(Map<Pair<Unit, Set<String>>, Set<Unit>> createProvidesConfigMap) { StringBuilder stringBuilder = new StringBuilder(); boolean appendedConfiguration = false; for (Entry<Pair<Unit, Set<String>>, Set<Unit>> provideEntry : createProvidesConfigMap.entrySet()) { Pair<Unit, Set<String>> key = provideEntry.getKey(); Unit definition = key.getFirst(); FeatureTag definitionTag = (FeatureTag) definition.getTag("FeatureTag"); Set<String> configuration = key.getSecond(); Set<Unit> reachedUses = provideEntry.getValue(); for (Unit reachedUnit : reachedUses) { FeatureTag reachedUnitTag = (FeatureTag) reachedUnit.getTag("FeatureTag"); Set<String> difference = new HashSet<String>(reachedUnitTag); difference.removeAll(definitionTag); if (difference.size() == 0) { continue; } if (!appendedConfiguration) { stringBuilder.append("\n\n"); stringBuilder.append(configuration); stringBuilder.append('\n'); appendedConfiguration = true; } stringBuilder.append("Provides " + definition + " to\n"); for (String feature : difference) { stringBuilder.append("line " + ASTNodeUnitBridge.getLineFromUnit(reachedUnit)); stringBuilder.append(" [feature " + feature + "]\n"); } } appendedConfiguration = false; } return stringBuilder.toString(); }