private final Map<ModuleIdentifier, ModuleIdentifier> replacements = newHashMap();
public ComponentModuleMetadataDetails module(final Object sourceModule) {
final NotationParser<Object, ModuleIdentifier> parser = parser();
final ModuleIdentifier source = parser.parseNotation(sourceModule);
return new ComponentModuleMetadataDetails() {
public void replacedBy(final Object targetModule) {
ModuleIdentifier target = parser.parseNotation(targetModule);
detectCycles(replacements, source, target);
replacements.put(source, target);
}