in seam/src/main/java/com/intellij/seam/highlighting/xml/SeamDomModelInspection.java [43:87]
private static void checkJamDuplicatedComponents(final DomFileElement<SeamComponents> seamComponents,
final DomElementAnnotationHolder holder) {
final XmlFile xmlFile = seamComponents.getFile();
final Module module = ModuleUtilCore.findModuleForPsiElement(xmlFile);
final @Nullable SeamComponents model = SeamDomModelManager.getInstance(xmlFile.getProject()).getSeamModel(xmlFile);
if (model != null && module != null) {
final Map<String, List<SeamJamComponent>> map = getJamComponentNames(module);
for (SeamDomComponent domComponent : DomUtil.getDefinedChildrenOfType(model, SeamDomComponent.class)) {
final String name = domComponent.getComponentName();
final PsiType type = domComponent.getComponentType();
if (name != null && type != null && map.containsKey(name)) {
final List<SeamJamComponent> components = map.get(name);
if (components != null) {
List<String> duplicatedInFiles = new ArrayList<>();
for (SeamJamComponent component : components) {
if(component instanceof MergedSeamComponent) continue;
final PsiType psiType = component.getComponentType();
if (psiType != null && !type.isAssignableFrom(psiType)) {
final SeamJamComponent pair = SeamCommonUtils.getPair(domComponent);
if ((pair == null && SeamCommonUtils.comparelInstalls(component, domComponent)) || (pair != null && SeamCommonUtils.comparelInstalls(pair, component))) {
final PsiFile containingFile = component.getContainingFile();
if (containingFile != null) {
duplicatedInFiles.add(containingFile.getName());
}
}
}
}
if (duplicatedInFiles.size() > 0) {
final GenericAttributeValue<String> value = domComponent.getName();
holder.createProblem(value.getXmlAttribute() == null ? domComponent : value, SeamInspectionBundle.message(
"jam.duplicated.component.annotation", duplicatedInFiles, duplicatedInFiles.size() > 1 ? "s:" : ""));
}
}
}
}
}
}