private static void checkJamDuplicatedComponents()

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:" : ""));
            }
          }
        }

      }

    }
  }