示例#1
0
  private static void verifyTypeOrder(TypeSystemData typeSystem) {
    Map<String, List<String>> invalidTypes = new HashMap<>();

    for (int i = typeSystem.getLegacyTypes().size() - 1; i >= 0; i--) {
      TypeMirror typeData = typeSystem.getLegacyTypes().get(i);
      TypeMirror type = typeSystem.boxType(typeData);
      if (invalidTypes.containsKey(ElementUtils.getQualifiedName(type))) {
        typeSystem.addError(
            "Invalid type order. The type(s) %s are inherited from a earlier defined type %s.",
            invalidTypes.get(ElementUtils.getQualifiedName(type)),
            ElementUtils.getQualifiedName(type));
      }
      TypeElement element = ElementUtils.fromTypeMirror(type);
      List<String> nextInvalidTypes = new ArrayList<>();
      if (element != null) {
        nextInvalidTypes.addAll(ElementUtils.getQualifiedSuperTypeNames(element));
      }
      nextInvalidTypes.add(ElementUtils.getQualifiedName(type));

      for (String qualifiedName : nextInvalidTypes) {
        List<String> inheritedTypes = invalidTypes.get(qualifiedName);
        if (inheritedTypes == null) {
          inheritedTypes = new ArrayList<>();
          invalidTypes.put(qualifiedName, inheritedTypes);
        }
        inheritedTypes.add(ElementUtils.getQualifiedName(typeSystem.boxType(typeData)));
      }
    }
  }