/**
   * Creates a new {@link ClassElement} object.
   *
   * @param clazz class information.
   * @return a new {@link ClassElement} object.
   */
  public static ClassElement newClassElement(PsiClass clazz) {
    ClassElement ce = new ClassElement();

    // name
    ce.setName(clazz.getName());
    ce.setQualifiedName(clazz.getQualifiedName());

    // super
    PsiClass superClass = clazz.getSuperClass();
    if (superClass != null
        && !CommonClassNames.JAVA_LANG_OBJECT.equals(superClass.getQualifiedName())) {
      ce.setSuperName(superClass.getName());
    }

    // interfaces
    ce.setImplementNames(PsiAdapter.getImplementsClassnames(clazz));

    // other
    ce.setEnum(clazz.isEnum());
    ce.setDeprecated(clazz.isDeprecated());
    ce.setException(PsiAdapter.isExceptionClass(clazz));
    ce.setAbstract(clazz.hasModifierProperty(PsiModifier.ABSTRACT));
    ce.setTypeParams(clazz.getTypeParameters().length);

    return ce;
  }
        private void annotateExtension(Extension extension, DomElementAnnotationHolder holder) {
          final ExtensionPoint extensionPoint = extension.getExtensionPoint();
          if (extensionPoint == null) {
            return;
          }
          final GenericAttributeValue<PsiClass> interfaceAttribute = extensionPoint.getInterface();
          if (!DomUtil.hasXml(interfaceAttribute)) {
            return;
          }

          final PsiClass value = interfaceAttribute.getValue();
          if (value != null && value.isDeprecated()) {
            final Annotation annotation =
                holder.createAnnotation(extension, HighlightSeverity.WARNING, "Deprecated EP");
            annotation.setHighlightType(ProblemHighlightType.LIKE_DEPRECATED);
          }
        }